Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 function f1() { "use asm"; function g() {} return g }
2 if (this.jsFuns) {
3 ok(jsFuns.isAsmJSModule(f1), "f1 is an asm.js module");
4 ok(jsFuns.isAsmJSFunction(f1()), "f1.g is an asm.js function");
5 }
7 function f2(stdlib, foreign, buffer) {
8 "use asm";
9 var i32 = new stdlib.Int32Array(buffer);
10 function main(n) {
11 n = n|0;
12 var i = 0, sum = 0;
13 for (; (i|0) < (n|0); i=(i+1)|0)
14 sum = (sum + (i32[(i<<2)>>2]|0))|0;
15 return sum|0;
16 }
17 return main;
18 }
19 if (this.jsFuns)
20 ok(jsFuns.isAsmJSModule(f2), "f2 is an asm.js module");
21 var i32 = new Int32Array(1024);
22 for (var i = 0; i < i32.length; i++)
23 i32[i] = i;
24 var f2Main = f2(this, null, i32.buffer);
25 if (this.jsFuns)
26 ok(jsFuns.isAsmJSFunction(f2Main), "f2.main is an asm.js function");
27 if (f2Main(4) !== 6)
28 throw "f2Main(4)";
29 if (f2Main(100) !== 4950)
30 throw "f2.main(100)";
31 var sum = (((i32.length - 1) * i32.length) / 2);
32 if (f2Main(i32.length) !== sum)
33 throw "f2.main(" + i32.length + ")";
34 if (f2Main(i32.length + 100) !== sum)
35 throw "f2.main(" + i32.length + ")";
37 function f3(stdlib, foreign, buffer) {
38 "use asm";
39 var done = foreign.done;
40 var i32 = new stdlib.Int32Array(buffer);
41 function main() {
42 var i = 0, sum = 0;
43 while (1) {
44 for (i = 0; (i|0) < 1000; i=(i+1)|0)
45 sum = (sum + i)|0;
46 if (done(sum|0)|0)
47 break;
48 }
49 return sum|0;
50 }
51 return main;
52 }
53 var begin;
54 var lastSum;
55 function done(sum) {
56 if (sum !== ((lastSum + 499500)|0))
57 throw "bad sum: " + sum + ", " + lastSum + ", " + ((lastSum + 499500)|0);
58 lastSum = sum;
59 return (Date.now() - begin) > 3000;
60 }
61 var f3Main = f3(this, {done:done}, i32.buffer);
62 if (this.jsFuns)
63 ok(jsFuns.isAsmJSFunction(f3Main), "f3.main is an asm.js function");
65 begin = Date.now();
66 lastSum = 0;
67 if (f3Main() !== lastSum)
68 throw "f3.main()";
70 if (!this.jsFuns)
71 postMessage("ok");