summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/asm.js/bug941877.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/asm.js/bug941877.js')
-rw-r--r--js/src/jit-test/tests/asm.js/bug941877.js164
1 files changed, 164 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/asm.js/bug941877.js b/js/src/jit-test/tests/asm.js/bug941877.js
new file mode 100644
index 0000000000..c2033cf8d9
--- /dev/null
+++ b/js/src/jit-test/tests/asm.js/bug941877.js
@@ -0,0 +1,164 @@
+load(libdir + "asm.js");
+
+function FunctionBody(f) {
+ var str = f.toString();
+ var firstBrace = str.indexOf('{');
+ var lastBrace = str.lastIndexOf('}');
+ return str.substr(firstBrace + 1, lastBrace - firstBrace - 1);
+}
+
+var F = (function (stdlib, n, heap) {
+ var Int16ArrayView = new stdlib.Int16Array(heap);
+ function f(i0, d1) {
+ i0 = i0 | 0
+ d1 = +d1
+ var d2 = 1.
+ var i3 = 0
+ Int16ArrayView[0] = i0
+ d2 = (.0 / .0)
+ switch ((i0 + i0) | 0) {
+ case 0:
+ d2 = .0
+ break
+ };
+ (((i3 - (0 < 0)) >>> ((.0 < -0) + (.0 > .0))) / 0) >> (0 + (((0 + 0) ^
+(9 > 0)) | 0))
+ }
+ return f;
+});
+
+var compiled = asmCompile('stdlib', 'n', 'heap', USE_ASM + FunctionBody(F));
+asmLink(compiled, this, null, new ArrayBuffer(BUF_MIN))();
+
+var F = (function(stdlib, n, heap) {
+ var Float64ArrayView = new stdlib.Float64Array(heap)
+ function f() {
+ Float64ArrayView[0] = +(0xffffffff / 0xffffffff >> 0)
+ }
+ return f;
+});
+
+var compiled = asmCompile('stdlib', 'n', 'heap', USE_ASM + FunctionBody(F));
+asmLink(compiled, this, null, new ArrayBuffer(BUF_MIN))();
+
+function test0(x)
+{
+ return (x >>> 0) % 10;
+}
+assertEq(test0(25), 5);
+assertEq(test0(24), 4);
+assertEq(test0(23), 3);
+assertEq(test0(0), 0);
+assertEq(test0(4294967295), 5);
+
+function test1(x)
+{
+ return (x >>> 2) % 10;
+}
+assertEq(test1(25), 6);
+assertEq(test1(24), 6);
+assertEq(test1(23), 5);
+assertEq(test1(4294967295), 3);
+
+function test2(x, y)
+{
+ return (x >>> 0) % (y >>> 0);
+}
+assertEq(test2(25, 3), 1);
+assertEq(test2(24, 4), 0);
+assertEq(test2(4294967295, 10), 5);
+assertEq(test2(23, 0), NaN);
+
+function test3()
+{
+ function f(x, y)
+ {
+ x = x|0;
+ y = y|0;
+ var t = 0;
+ t = (((x|0) % (y|0))|0) > -2;
+ return t|0;
+ }
+ return f;
+}
+var compiled = asmCompile(USE_ASM + FunctionBody(test3));
+var linked = asmLink(compiled);
+assertEq(linked(4294967290, 4294967295), 1);
+assertEq(linked(4294967290, 4294967295), 1);
+
+function test4()
+{
+ function f(x, y)
+ {
+ x = x|0;
+ y = y|0;
+ var t = 0;
+ t = (((x>>>0) % (y>>>0)) >>> 0) > 0;
+ return t|0;
+ }
+ return f;
+}
+var compiled = asmCompile(USE_ASM + FunctionBody(test4));
+var linked = asmLink(compiled);
+assertEq(linked(4294967290, 4294967295), 1);
+assertEq(linked(4294967290, 4294967295), 1);
+
+function test5()
+{
+ function f(x, y)
+ {
+ x = x|0;
+ y = y|0;
+ var t = 0.;
+ t = +(((x>>>0) % (y>>>0)) >>> 0) * 1.01;
+ return +t;
+ }
+ return f;
+}
+var compiled = asmCompile(USE_ASM + FunctionBody(test5));
+var linked = asmLink(compiled);
+assertEq(linked(4294967290, 4294967295), 4337916962.9);
+assertEq(linked(4294967290, 4294967295), 4337916962.9);
+
+function test6()
+{
+ function f(x, y)
+ {
+ x = x|0;
+ y = y|0;
+ return ((x>>>1) % (y>>>1))|0;
+ }
+ return f;
+}
+var compiled = asmCompile(USE_ASM + FunctionBody(test6));
+var linked = asmLink(compiled);
+assertEq(linked(23847, 7), 1);
+assertEq(linked(23848, 7), 2);
+
+function test7()
+{
+ function f(x)
+ {
+ x = x|0;
+ return ((x>>>0) / 8)|0;
+ }
+ return f;
+}
+var compiled = asmCompile(USE_ASM + FunctionBody(test7));
+var linked = asmLink(compiled);
+assertEq(linked(23847, 7), 2980);
+assertEq(linked(23848, 7), 2981);
+
+function test8()
+{
+ function f(i,j)
+ {
+ i=i|0;j=j|0;
+ return ((i>>>0)/(j>>>0))|0;
+ }
+ return f;
+}
+var compiled = asmCompile(USE_ASM + FunctionBody(test8));
+var linked = asmLink(compiled);
+assertEq(linked(2147483647, 0), 0);
+assertEq(linked(2147483646, 0), 0);