|
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 } |
|
6 |
|
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 + ")"; |
|
36 |
|
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"); |
|
64 |
|
65 begin = Date.now(); |
|
66 lastSum = 0; |
|
67 if (f3Main() !== lastSum) |
|
68 throw "f3.main()"; |
|
69 |
|
70 if (!this.jsFuns) |
|
71 postMessage("ok"); |