blob: 54d7d7af31b47dd7c9a59adc363a19412c9246eb [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --expose-wasm
6
Ben Murdochda12d292016-06-02 14:46:10 +01007function assertWasm(expected, func, ffi) {
8 print("Testing " + func.name + "...");
9 assertEquals(expected, Wasm.instantiateModuleFromAsm(
10 func.toString(), ffi).caller());
11}
12
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000013function EmptyTest() {
14 "use asm";
15 function caller() {
16 empty();
17 return 11;
18 }
19 function empty() {
20 }
21 return {caller: caller};
22}
23
Ben Murdochda12d292016-06-02 14:46:10 +010024assertWasm(11, EmptyTest);
Ben Murdoch097c5b22016-05-18 11:27:45 +010025
Ben Murdochc5610432016-08-08 18:44:38 +010026function VoidReturnTest() {
27 "use asm";
28 function caller() {
29 empty();
30 return 19;
31 }
32 function empty() {
33 var x = 0;
34 if (x) return;
35 }
36 return {caller: caller};
37}
38
39assertWasm(19, VoidReturnTest);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000040
41function IntTest() {
42 "use asm";
43 function sum(a, b) {
44 a = a|0;
45 b = b|0;
46 var c = (b + 1)|0
47 var d = 3.0;
Ben Murdoch097c5b22016-05-18 11:27:45 +010048 var e = ~~d; // double conversion
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000049 return (a + c + 1)|0;
50 }
51
52 function caller() {
53 return sum(77,22) | 0;
54 }
55
56 return {caller: caller};
57}
58
Ben Murdochda12d292016-06-02 14:46:10 +010059assertWasm(101,IntTest);
Ben Murdoch097c5b22016-05-18 11:27:45 +010060
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000061
62function Float64Test() {
63 "use asm";
64 function sum(a, b) {
65 a = +a;
66 b = +b;
67 return +(a + b);
68 }
69
70 function caller() {
71 var a = +sum(70.1,10.2);
72 var ret = 0|0;
73 if (a == 80.3) {
74 ret = 1|0;
75 } else {
76 ret = 0|0;
77 }
78 return ret|0;
79 }
80
81 return {caller: caller};
82}
83
Ben Murdochda12d292016-06-02 14:46:10 +010084assertWasm(1, Float64Test);
Ben Murdoch097c5b22016-05-18 11:27:45 +010085
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000086
87function BadModule() {
88 "use asm";
89 function caller(a, b) {
90 a = a|0;
91 b = b+0;
92 var c = (b + 1)|0
93 return (a + c + 1)|0;
94 }
95
96 function caller() {
97 return call(1, 2)|0;
98 }
99
100 return {caller: caller};
101}
102
103assertThrows(function() {
Ben Murdochda12d292016-06-02 14:46:10 +0100104 Wasm.instantiateModuleFromAsm(BadModule.toString()).caller();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000105});
106
Ben Murdoch097c5b22016-05-18 11:27:45 +0100107
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000108function TestReturnInBlock() {
109 "use asm";
110
111 function caller() {
112 if(1) {
113 {
114 {
115 return 1;
116 }
117 }
118 }
119 return 0;
120 }
121
122 return {caller: caller};
123}
124
Ben Murdochda12d292016-06-02 14:46:10 +0100125assertWasm(1, TestReturnInBlock);
126
127
128function TestAddSimple() {
129 "use asm";
130
131 function caller() {
132 var x = 0;
133 x = (x + 1)|0;
134 return x|0;
135 }
136
137 return {caller: caller};
138}
139
140assertWasm(1, TestAddSimple);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100141
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000142
143function TestWhileSimple() {
144 "use asm";
145
146 function caller() {
147 var x = 0;
148 while(x < 5) {
149 x = (x + 1)|0;
150 }
151 return x|0;
152 }
153
154 return {caller: caller};
155}
156
Ben Murdochda12d292016-06-02 14:46:10 +0100157assertWasm(5, TestWhileSimple);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100158
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000159
160function TestWhileWithoutBraces() {
161 "use asm";
162
163 function caller() {
164 var x = 0;
165 while(x <= 3)
166 x = (x + 1)|0;
167 return x|0;
168 }
169
170 return {caller: caller};
171}
172
Ben Murdochda12d292016-06-02 14:46:10 +0100173assertWasm(4, TestWhileWithoutBraces);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100174
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000175
176function TestReturnInWhile() {
177 "use asm";
178
179 function caller() {
180 var x = 0;
181 while(x < 10) {
182 x = (x + 6)|0;
183 return x|0;
184 }
185 return x|0;
186 }
187
188 return {caller: caller};
189}
190
Ben Murdochda12d292016-06-02 14:46:10 +0100191assertWasm(6, TestReturnInWhile);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100192
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000193
194function TestReturnInWhileWithoutBraces() {
195 "use asm";
196
197 function caller() {
198 var x = 0;
199 while(x < 5)
200 return 7;
201 return x|0;
202 }
203
204 return {caller: caller};
205}
206
Ben Murdochda12d292016-06-02 14:46:10 +0100207assertWasm(7, TestReturnInWhileWithoutBraces);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100208
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000209
Ben Murdochc5610432016-08-08 18:44:38 +0100210function TestBreakInIf() {
211 "use asm";
212
213 function caller() {
214 label: {
215 if(1) break label;
216 return 11;
217 }
218 return 12;
219 }
220
221 return {caller: caller};
222}
223
224assertWasm(12, TestBreakInIf);
225
226function TestBreakInIfInDoWhileFalse() {
227 "use asm";
228
229 function caller() {
230 do {
231 if(1) break;
232 return 11;
233 } while(0);
234 return 12;
235 }
236
237 return {caller: caller};
238}
239
240assertWasm(12, TestBreakInIfInDoWhileFalse);
241
242function TestBreakInElse() {
243 "use asm";
244
245 function caller() {
246 do {
247 if(0) ;
248 else break;
249 return 14;
250 } while(0);
251 return 15;
252 }
253
254 return {caller: caller};
255}
256
257assertWasm(15, TestBreakInElse);
258
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000259function TestBreakInWhile() {
260 "use asm";
261
262 function caller() {
263 while(1) {
264 break;
265 }
266 return 8;
267 }
268
269 return {caller: caller};
270}
271
Ben Murdochda12d292016-06-02 14:46:10 +0100272assertWasm(8, TestBreakInWhile);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100273
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000274
Ben Murdochc5610432016-08-08 18:44:38 +0100275function TestBreakInIfInWhile() {
276 "use asm";
277
278 function caller() {
279 while(1) {
280 if (1) break;
281 else break;
282 }
283 return 8;
284 }
285
286 return {caller: caller};
287}
288
289assertWasm(8, TestBreakInIfInWhile);
290
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000291function TestBreakInNestedWhile() {
292 "use asm";
293
294 function caller() {
295 var x = 1.0;
296 while(x < 1.5) {
297 while(1)
298 break;
299 x = +(x + 0.25);
300 }
301 var ret = 0;
302 if (x == 1.5) {
303 ret = 9;
304 }
305 return ret|0;
306 }
307
308 return {caller: caller};
309}
310
Ben Murdochda12d292016-06-02 14:46:10 +0100311assertWasm(9, TestBreakInNestedWhile);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100312
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000313
314function TestBreakInBlock() {
315 "use asm";
316
317 function caller() {
318 var x = 0;
319 abc: {
320 x = 10;
321 if (x == 10) {
322 break abc;
323 }
324 x = 20;
325 }
326 return x|0;
327 }
328
329 return {caller: caller};
330}
331
Ben Murdochda12d292016-06-02 14:46:10 +0100332assertWasm(10, TestBreakInBlock);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100333
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000334
335function TestBreakInNamedWhile() {
336 "use asm";
337
338 function caller() {
339 var x = 0;
340 outer: while (1) {
341 x = (x + 1)|0;
342 while (x == 11) {
343 break outer;
344 }
345 }
346 return x|0;
347 }
348
349 return {caller: caller};
350}
351
Ben Murdochda12d292016-06-02 14:46:10 +0100352assertWasm(11, TestBreakInNamedWhile);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100353
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000354
355function TestContinue() {
356 "use asm";
357
358 function caller() {
359 var x = 5;
360 var ret = 0;
361 while (x >= 0) {
362 x = (x - 1)|0;
363 if (x == 2) {
364 continue;
365 }
366 ret = (ret - 1)|0;
367 }
368 return ret|0;
369 }
370
371 return {caller: caller};
372}
373
Ben Murdochda12d292016-06-02 14:46:10 +0100374assertWasm(-5, TestContinue);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100375
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000376
377function TestContinueInNamedWhile() {
378 "use asm";
379
380 function caller() {
381 var x = 5;
382 var y = 0;
383 var ret = 0;
384 outer: while (x > 0) {
385 x = (x - 1)|0;
386 y = 0;
387 while (y < 5) {
388 if (x == 3) {
389 continue outer;
390 }
391 ret = (ret + 1)|0;
392 y = (y + 1)|0;
393 }
394 }
395 return ret|0;
396 }
397
398 return {caller: caller};
399}
400
Ben Murdochda12d292016-06-02 14:46:10 +0100401assertWasm(20, TestContinueInNamedWhile);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100402
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000403
404function TestNot() {
405 "use asm";
406
407 function caller() {
408 var a = !(2 > 3);
409 return a | 0;
410 }
411
412 return {caller:caller};
413}
414
Ben Murdochda12d292016-06-02 14:46:10 +0100415assertWasm(1, TestNot);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100416
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000417
418function TestNotEquals() {
419 "use asm";
420
421 function caller() {
422 var a = 3;
423 if (a != 2) {
424 return 21;
425 }
426 return 0;
427 }
428
429 return {caller:caller};
430}
431
Ben Murdochda12d292016-06-02 14:46:10 +0100432assertWasm(21, TestNotEquals);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100433
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000434
435function TestUnsignedComparison() {
436 "use asm";
437
438 function caller() {
439 var a = 0xffffffff;
440 if ((a>>>0) > (0>>>0)) {
441 return 22;
442 }
443 return 0;
444 }
445
446 return {caller:caller};
447}
448
Ben Murdochda12d292016-06-02 14:46:10 +0100449assertWasm(22, TestUnsignedComparison);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100450
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000451
452function TestMixedAdd() {
453 "use asm";
454
455 function caller() {
456 var a = 0x80000000;
457 var b = 0x7fffffff;
458 var c = 0;
459 c = ((a>>>0) + b)|0;
460 if ((c >>> 0) > (0>>>0)) {
461 if (c < 0) {
462 return 23;
463 }
464 }
465 return 0;
466 }
467
468 return {caller:caller};
469}
470
Ben Murdochda12d292016-06-02 14:46:10 +0100471assertWasm(23, TestMixedAdd);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100472
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000473
474function TestInt32HeapAccess(stdlib, foreign, buffer) {
475 "use asm";
476
477 var m = new stdlib.Int32Array(buffer);
478 function caller() {
479 var i = 4;
480
481 m[0] = (i + 1) | 0;
482 m[i >> 2] = ((m[0]|0) + 1) | 0;
483 m[2] = ((m[i >> 2]|0) + 1) | 0;
484 return m[2] | 0;
485 }
486
487 return {caller: caller};
488}
489
Ben Murdochda12d292016-06-02 14:46:10 +0100490assertWasm(7, TestInt32HeapAccess);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100491
492
493function TestInt32HeapAccessExternal() {
494 var memory = new ArrayBuffer(1024);
495 var memory_int32 = new Int32Array(memory);
Ben Murdochda12d292016-06-02 14:46:10 +0100496 var module = Wasm.instantiateModuleFromAsm(
Ben Murdoch097c5b22016-05-18 11:27:45 +0100497 TestInt32HeapAccess.toString(), null, memory);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100498 assertEquals(7, module.caller());
499 assertEquals(7, memory_int32[2]);
500}
501
502TestInt32HeapAccessExternal();
503
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000504
505function TestHeapAccessIntTypes() {
506 var types = [
Ben Murdoch097c5b22016-05-18 11:27:45 +0100507 [Int8Array, 'Int8Array', '>> 0'],
508 [Uint8Array, 'Uint8Array', '>> 0'],
509 [Int16Array, 'Int16Array', '>> 1'],
510 [Uint16Array, 'Uint16Array', '>> 1'],
511 [Int32Array, 'Int32Array', '>> 2'],
512 [Uint32Array, 'Uint32Array', '>> 2'],
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000513 ];
514 for (var i = 0; i < types.length; i++) {
515 var code = TestInt32HeapAccess.toString();
Ben Murdoch097c5b22016-05-18 11:27:45 +0100516 code = code.replace('Int32Array', types[i][1]);
517 code = code.replace(/>> 2/g, types[i][2]);
518 var memory = new ArrayBuffer(1024);
519 var memory_view = new types[i][0](memory);
Ben Murdochda12d292016-06-02 14:46:10 +0100520 var module = Wasm.instantiateModuleFromAsm(code, null, memory);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100521 assertEquals(7, module.caller());
522 assertEquals(7, memory_view[2]);
Ben Murdochda12d292016-06-02 14:46:10 +0100523 assertEquals(7, Wasm.instantiateModuleFromAsm(code).caller());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000524 }
525}
526
527TestHeapAccessIntTypes();
528
Ben Murdoch097c5b22016-05-18 11:27:45 +0100529
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000530function TestFloatHeapAccess(stdlib, foreign, buffer) {
531 "use asm";
532
533 var f32 = new stdlib.Float32Array(buffer);
534 var f64 = new stdlib.Float64Array(buffer);
535 var fround = stdlib.Math.fround;
536 function caller() {
537 var i = 8;
538 var j = 8;
539 var v = 6.0;
540
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000541 f64[2] = v + 1.0;
542 f64[i >> 3] = +f64[2] + 1.0;
543 f64[j >> 3] = +f64[j >> 3] + 1.0;
544 i = +f64[i >> 3] == 9.0;
545 return i|0;
546 }
547
548 return {caller: caller};
549}
550
Ben Murdochda12d292016-06-02 14:46:10 +0100551assertEquals(1, Wasm.instantiateModuleFromAsm(
Ben Murdoch097c5b22016-05-18 11:27:45 +0100552 TestFloatHeapAccess.toString()).caller());
553
554
555function TestFloatHeapAccessExternal() {
556 var memory = new ArrayBuffer(1024);
557 var memory_float64 = new Float64Array(memory);
Ben Murdochda12d292016-06-02 14:46:10 +0100558 var module = Wasm.instantiateModuleFromAsm(
Ben Murdoch097c5b22016-05-18 11:27:45 +0100559 TestFloatHeapAccess.toString(), null, memory);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100560 assertEquals(1, module.caller());
561 assertEquals(9.0, memory_float64[1]);
562}
563
564TestFloatHeapAccessExternal();
565
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000566
567function TestConvertI32() {
568 "use asm";
569
570 function caller() {
571 var a = 1.5;
572 if ((~~(a + a)) == 3) {
573 return 24;
574 }
575 return 0;
576 }
577
578 return {caller:caller};
579}
580
Ben Murdochda12d292016-06-02 14:46:10 +0100581assertWasm(24, TestConvertI32);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100582
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000583
584function TestConvertF64FromInt() {
585 "use asm";
586
587 function caller() {
588 var a = 1;
Ben Murdochda12d292016-06-02 14:46:10 +0100589 if ((+((a + a)|0)) > 1.5) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000590 return 25;
591 }
592 return 0;
593 }
594
595 return {caller:caller};
596}
597
Ben Murdochda12d292016-06-02 14:46:10 +0100598assertWasm(25, TestConvertF64FromInt);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100599
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000600
601function TestConvertF64FromUnsigned() {
602 "use asm";
603
604 function caller() {
605 var a = 0xffffffff;
606 if ((+(a>>>0)) > 0.0) {
Ben Murdochda12d292016-06-02 14:46:10 +0100607 if((+(a|0)) < 0.0) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000608 return 26;
609 }
610 }
611 return 0;
612 }
613
614 return {caller:caller};
615}
616
Ben Murdochda12d292016-06-02 14:46:10 +0100617assertWasm(26, TestConvertF64FromUnsigned);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100618
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000619
620function TestModInt() {
621 "use asm";
622
623 function caller() {
624 var a = -83;
625 var b = 28;
626 return ((a|0)%(b|0))|0;
627 }
628
629 return {caller:caller};
630}
631
Ben Murdochda12d292016-06-02 14:46:10 +0100632assertWasm(-27,TestModInt);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100633
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000634
635function TestModUnsignedInt() {
636 "use asm";
637
638 function caller() {
639 var a = 0x80000000; //2147483648
640 var b = 10;
641 return ((a>>>0)%(b>>>0))|0;
642 }
643
644 return {caller:caller};
645}
646
Ben Murdochda12d292016-06-02 14:46:10 +0100647assertWasm(8, TestModUnsignedInt);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100648
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000649
650function TestModDouble() {
651 "use asm";
652
653 function caller() {
654 var a = 5.25;
655 var b = 2.5;
656 if (a%b == 0.25) {
657 return 28;
658 }
659 return 0;
660 }
661
662 return {caller:caller};
663}
664
Ben Murdochda12d292016-06-02 14:46:10 +0100665assertWasm(28, TestModDouble);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100666
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000667
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000668function TestModDoubleNegative() {
669 "use asm";
670
671 function caller() {
672 var a = -34359738368.25;
673 var b = 2.5;
674 if (a%b == -0.75) {
675 return 28;
676 }
677 return 0;
678 }
679
680 return {caller:caller};
681}
682
Ben Murdochda12d292016-06-02 14:46:10 +0100683assertWasm(28, TestModDoubleNegative);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000684
Ben Murdochda12d292016-06-02 14:46:10 +0100685(function () {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000686function TestNamedFunctions() {
687 "use asm";
688
689 var a = 0.0;
690 var b = 0.0;
691
692 function add() {
693 return +(a + b);
694 }
695
696 function init() {
697 a = 43.25;
698 b = 34.25;
699 }
700
701 return {init:init,
702 add:add};
703}
704
Ben Murdochda12d292016-06-02 14:46:10 +0100705var module = Wasm.instantiateModuleFromAsm(TestNamedFunctions.toString());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000706module.init();
707assertEquals(77.5, module.add());
Ben Murdochda12d292016-06-02 14:46:10 +0100708})();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000709
Ben Murdochda12d292016-06-02 14:46:10 +0100710(function () {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000711function TestGlobalsWithInit() {
712 "use asm";
713
714 var a = 43.25;
715 var b = 34.25;
716
717 function add() {
718 return +(a + b);
719 }
720
721 return {add:add};
722}
723
Ben Murdochda12d292016-06-02 14:46:10 +0100724var module = Wasm.instantiateModuleFromAsm(TestGlobalsWithInit.toString());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000725assertEquals(77.5, module.add());
Ben Murdochda12d292016-06-02 14:46:10 +0100726})();
Ben Murdoch097c5b22016-05-18 11:27:45 +0100727
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000728function TestForLoop() {
729 "use asm"
730
731 function caller() {
732 var ret = 0;
733 var i = 0;
734 for (i = 2; i <= 10; i = (i+1)|0) {
735 ret = (ret + i) | 0;
736 }
737 return ret|0;
738 }
739
740 return {caller:caller};
741}
742
Ben Murdochda12d292016-06-02 14:46:10 +0100743assertWasm(54, TestForLoop);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100744
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000745
746function TestForLoopWithoutInit() {
747 "use asm"
748
749 function caller() {
750 var ret = 0;
751 var i = 0;
752 for (; i < 10; i = (i+1)|0) {
753 ret = (ret + 10) | 0;
754 }
755 return ret|0;
756 }
757
758 return {caller:caller};
759}
760
Ben Murdochda12d292016-06-02 14:46:10 +0100761assertWasm(100,TestForLoopWithoutInit);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100762
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000763
764function TestForLoopWithoutCondition() {
765 "use asm"
766
767 function caller() {
768 var ret = 0;
769 var i = 0;
770 for (i=1;; i = (i+1)|0) {
771 ret = (ret + i) | 0;
772 if (i == 11) {
773 break;
774 }
775 }
776 return ret|0;
777 }
778
779 return {caller:caller};
780}
781
Ben Murdochda12d292016-06-02 14:46:10 +0100782assertWasm(66, TestForLoopWithoutCondition);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100783
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000784
785function TestForLoopWithoutNext() {
786 "use asm"
787
788 function caller() {
789 var i = 0;
790 for (i=1; i < 41;) {
791 i = (i + 1) | 0;
792 }
793 return i|0;
794 }
795
796 return {caller:caller};
797}
798
Ben Murdochda12d292016-06-02 14:46:10 +0100799assertWasm(41, TestForLoopWithoutNext);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100800
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000801
802function TestForLoopWithoutBody() {
803 "use asm"
804
805 function caller() {
806 var i = 0;
807 for (i=1; i < 45 ; i = (i+1)|0) {
808 }
809 return i|0;
810 }
811
812 return {caller:caller};
813}
814
Ben Murdochda12d292016-06-02 14:46:10 +0100815assertWasm(45, TestForLoopWithoutBody);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100816
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000817
818function TestDoWhile() {
819 "use asm"
820
821 function caller() {
822 var i = 0;
823 var ret = 21;
824 do {
825 ret = (ret + ret)|0;
826 i = (i + 1)|0;
827 } while (i < 2);
828 return ret|0;
829 }
830
831 return {caller:caller};
832}
833
Ben Murdochda12d292016-06-02 14:46:10 +0100834assertWasm(84, TestDoWhile);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100835
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000836
837function TestConditional() {
838 "use asm"
839
840 function caller() {
841 var x = 1;
842 return ((x > 0) ? 41 : 71)|0;
843 }
844
845 return {caller:caller};
846}
847
Ben Murdochda12d292016-06-02 14:46:10 +0100848assertWasm(41, TestConditional);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100849
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000850
Ben Murdochda12d292016-06-02 14:46:10 +0100851(function () {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000852function TestInitFunctionWithNoGlobals() {
853 "use asm";
854 function caller() {
855 return 51;
856 }
857 return {caller};
858}
859
Ben Murdochda12d292016-06-02 14:46:10 +0100860var module = Wasm.instantiateModuleFromAsm(
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000861 TestInitFunctionWithNoGlobals.toString());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000862assertEquals(51, module.caller());
Ben Murdochda12d292016-06-02 14:46:10 +0100863})();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000864
Ben Murdochda12d292016-06-02 14:46:10 +0100865(function () {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000866function TestExportNameDifferentFromFunctionName() {
867 "use asm";
868 function caller() {
869 return 55;
870 }
871 return {alt_caller:caller};
872}
873
Ben Murdochda12d292016-06-02 14:46:10 +0100874var module = Wasm.instantiateModuleFromAsm(
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000875 TestExportNameDifferentFromFunctionName.toString());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000876assertEquals(55, module.alt_caller());
Ben Murdochda12d292016-06-02 14:46:10 +0100877})();
Ben Murdoch097c5b22016-05-18 11:27:45 +0100878
879function TestFunctionTableSingleFunction() {
880 "use asm";
881
882 function dummy() {
883 return 71;
884 }
885
886 function caller() {
887 return function_table[0&0]() | 0;
888 }
889
890 var function_table = [dummy]
891
892 return {caller:caller};
893}
894
Ben Murdochda12d292016-06-02 14:46:10 +0100895assertWasm(71, TestFunctionTableSingleFunction);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100896
897
898function TestFunctionTableMultipleFunctions() {
899 "use asm";
900
901 function inc1(x) {
902 x = x|0;
903 return (x+1)|0;
904 }
905
906 function inc2(x) {
907 x = x|0;
908 return (x+2)|0;
909 }
910
911 function caller() {
912 if (function_table[0&1](50) == 51) {
913 if (function_table[1&1](60) == 62) {
914 return 73;
915 }
916 }
917 return 0;
918 }
919
920 var function_table = [inc1, inc2]
921
922 return {caller:caller};
923}
924
Ben Murdochda12d292016-06-02 14:46:10 +0100925assertWasm(73, TestFunctionTableMultipleFunctions);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100926
927
Ben Murdochda12d292016-06-02 14:46:10 +0100928(function () {
Ben Murdoch097c5b22016-05-18 11:27:45 +0100929function TestFunctionTable() {
930 "use asm";
931
932 function add(a, b) {
933 a = a|0;
934 b = b|0;
935 return (a+b)|0;
936 }
937
938 function sub(a, b) {
939 a = a|0;
940 b = b|0;
941 return (a-b)|0;
942 }
943
944 function inc(a) {
945 a = a|0;
946 return (a+1)|0;
947 }
948
949 function caller(table_id, fun_id, arg1, arg2) {
950 table_id = table_id|0;
951 fun_id = fun_id|0;
952 arg1 = arg1|0;
953 arg2 = arg2|0;
954 if (table_id == 0) {
955 return funBin[fun_id&3](arg1, arg2)|0;
956 } else if (table_id == 1) {
957 return fun[fun_id&0](arg1)|0;
958 }
959 return 0;
960 }
961
962 var funBin = [add, sub, sub, add];
963 var fun = [inc];
964
965 return {caller:caller};
966}
967
Ben Murdochda12d292016-06-02 14:46:10 +0100968var module = Wasm.instantiateModuleFromAsm(TestFunctionTable.toString());
Ben Murdoch097c5b22016-05-18 11:27:45 +0100969assertEquals(55, module.caller(0, 0, 33, 22));
970assertEquals(11, module.caller(0, 1, 33, 22));
971assertEquals(9, module.caller(0, 2, 54, 45));
972assertEquals(99, module.caller(0, 3, 54, 45));
973assertEquals(23, module.caller(0, 4, 12, 11));
974assertEquals(31, module.caller(1, 0, 30, 11));
Ben Murdochda12d292016-06-02 14:46:10 +0100975})();
Ben Murdoch097c5b22016-05-18 11:27:45 +0100976
977
978function TestForeignFunctions() {
979 function AsmModule(stdlib, foreign, buffer) {
980 "use asm";
981
982 var setVal = foreign.setVal;
983 var getVal = foreign.getVal;
984
985 function caller(initial_value, new_value) {
986 initial_value = initial_value|0;
987 new_value = new_value|0;
988 if ((getVal()|0) == (initial_value|0)) {
989 setVal(new_value|0);
990 return getVal()|0;
991 }
992 return 0;
993 }
994
995 return {caller:caller};
996 }
997
998 function ffi(initial_val) {
999 var val = initial_val;
1000
1001 function getVal() {
1002 return val;
1003 }
1004
1005 function setVal(new_val) {
1006 val = new_val;
1007 }
1008
1009 return {getVal:getVal, setVal:setVal};
1010 }
1011
1012 var foreign = new ffi(23);
1013
Ben Murdochda12d292016-06-02 14:46:10 +01001014 var module = Wasm.instantiateModuleFromAsm(AsmModule.toString(),
Ben Murdoch097c5b22016-05-18 11:27:45 +01001015 foreign, null);
1016
Ben Murdoch097c5b22016-05-18 11:27:45 +01001017 assertEquals(103, module.caller(23, 103));
1018}
1019
1020TestForeignFunctions();
1021
1022
1023function TestForeignFunctionMultipleUse() {
1024 function AsmModule(stdlib, foreign, buffer) {
1025 "use asm";
1026
1027 var getVal = foreign.getVal;
1028
1029 function caller(int_val, double_val) {
1030 int_val = int_val|0;
1031 double_val = +double_val;
1032 if ((getVal()|0) == (int_val|0)) {
1033 if ((+getVal()) == (+double_val)) {
1034 return 89;
1035 }
1036 }
1037 return 0;
1038 }
1039
1040 return {caller:caller};
1041 }
1042
1043 function ffi() {
1044 function getVal() {
1045 return 83.25;
1046 }
1047
1048 return {getVal:getVal};
1049 }
1050
1051 var foreign = new ffi();
1052
Ben Murdochda12d292016-06-02 14:46:10 +01001053 var module = Wasm.instantiateModuleFromAsm(AsmModule.toString(),
Ben Murdoch097c5b22016-05-18 11:27:45 +01001054 foreign, null);
1055
Ben Murdoch097c5b22016-05-18 11:27:45 +01001056 assertEquals(89, module.caller(83, 83.25));
1057}
1058
1059TestForeignFunctionMultipleUse();
1060
1061
1062function TestForeignVariables() {
1063 function AsmModule(stdlib, foreign, buffer) {
1064 "use asm";
1065
1066 var i1 = foreign.foo | 0;
1067 var f1 = +foreign.bar;
1068 var i2 = foreign.baz | 0;
1069 var f2 = +foreign.baz;
1070
1071 function geti1() {
1072 return i1|0;
1073 }
1074
1075 function getf1() {
1076 return +f1;
1077 }
1078
1079 function geti2() {
1080 return i2|0;
1081 }
1082
1083 function getf2() {
1084 return +f2;
1085 }
1086
1087 return {geti1:geti1, getf1:getf1, geti2:geti2, getf2:getf2};
1088 }
1089
1090 function TestCase(env, i1, f1, i2, f2) {
Ben Murdochda12d292016-06-02 14:46:10 +01001091 print("Testing foreign variables...");
1092 var module = Wasm.instantiateModuleFromAsm(
Ben Murdoch097c5b22016-05-18 11:27:45 +01001093 AsmModule.toString(), env);
Ben Murdoch097c5b22016-05-18 11:27:45 +01001094 assertEquals(i1, module.geti1());
1095 assertEquals(f1, module.getf1());
1096 assertEquals(i2, module.geti2());
1097 assertEquals(f2, module.getf2());
1098 }
1099
1100 // Check normal operation.
1101 TestCase({foo: 123, bar: 234.5, baz: 345.7}, 123, 234.5, 345, 345.7);
1102 // Check partial operation.
1103 TestCase({baz: 345.7}, 0, NaN, 345, 345.7);
1104 // Check that undefined values are converted to proper defaults.
1105 TestCase({qux: 999}, 0, NaN, 0, NaN);
1106 // Check that an undefined ffi is ok.
1107 TestCase(undefined, 0, NaN, 0, NaN);
1108 // Check that true values are converted properly.
1109 TestCase({foo: true, bar: true, baz: true}, 1, 1.0, 1, 1.0);
1110 // Check that false values are converted properly.
1111 TestCase({foo: false, bar: false, baz: false}, 0, 0, 0, 0);
1112 // Check that null values are converted properly.
1113 TestCase({foo: null, bar: null, baz: null}, 0, 0, 0, 0);
1114 // Check that string values are converted properly.
1115 TestCase({foo: 'hi', bar: 'there', baz: 'dude'}, 0, NaN, 0, NaN);
1116 TestCase({foo: '0xff', bar: '234', baz: '456.1'}, 255, 234, 456, 456.1, 456);
1117 // Check that Date values are converted properly.
1118 TestCase({foo: new Date(123), bar: new Date(456),
1119 baz: new Date(789)}, 123, 456, 789, 789);
1120 // Check that list values are converted properly.
1121 TestCase({foo: [], bar: [], baz: []}, 0, 0, 0, 0);
1122 // Check that object values are converted properly.
1123 TestCase({foo: {}, bar: {}, baz: {}}, 0, NaN, 0, NaN);
1124 // Check that getter object values are converted properly.
1125 var o = {
1126 get foo() {
1127 return 123.4;
1128 }
1129 };
1130 TestCase({foo: o.foo, bar: o.foo, baz: o.foo}, 123, 123.4, 123, 123.4);
1131 // Check that getter object values are converted properly.
1132 var o = {
1133 get baz() {
1134 return 123.4;
1135 }
1136 };
1137 TestCase(o, 0, NaN, 123, 123.4);
1138 // Check that objects with valueOf are converted properly.
1139 var o = {
1140 valueOf: function() { return 99; }
1141 };
1142 TestCase({foo: o, bar: o, baz: o}, 99, 99, 99, 99);
1143 // Check that function values are converted properly.
1144 TestCase({foo: TestCase, bar: TestCase, qux: TestCase}, 0, NaN, 0, NaN);
1145 // Check that a missing ffi object is safe.
1146 TestCase(undefined, 0, NaN, 0, NaN);
1147}
1148
1149TestForeignVariables();
1150
1151
1152(function() {
1153 function TestByteHeapAccessCompat(stdlib, foreign, buffer) {
1154 "use asm";
1155
1156 var HEAP8 = new stdlib.Uint8Array(buffer);
1157 var HEAP32 = new stdlib.Int32Array(buffer);
1158
1159 function store(i, v) {
1160 i = i | 0;
1161 v = v | 0;
1162 HEAP32[i >> 2] = v;
1163 }
1164
1165 function storeb(i, v) {
1166 i = i | 0;
1167 v = v | 0;
1168 HEAP8[i | 0] = v;
1169 }
1170
1171 function load(i) {
1172 i = i | 0;
1173 return HEAP8[i] | 0;
1174 }
1175
1176 function iload(i) {
1177 i = i | 0;
1178 return HEAP8[HEAP32[i >> 2] | 0] | 0;
1179 }
1180
1181 return {load: load, iload: iload, store: store, storeb: storeb};
1182 }
1183
Ben Murdochda12d292016-06-02 14:46:10 +01001184 var m = Wasm.instantiateModuleFromAsm(
Ben Murdoch097c5b22016-05-18 11:27:45 +01001185 TestByteHeapAccessCompat.toString());
1186 m.store(0, 20);
1187 m.store(4, 21);
1188 m.store(8, 22);
1189 m.storeb(20, 123);
1190 m.storeb(21, 42);
1191 m.storeb(22, 77);
1192 assertEquals(123, m.load(20));
1193 assertEquals(42, m.load(21));
1194 assertEquals(77, m.load(22));
1195 assertEquals(123, m.iload(0));
1196 assertEquals(42, m.iload(4));
1197 assertEquals(77, m.iload(8));
1198})();
1199
1200
Ben Murdochda12d292016-06-02 14:46:10 +01001201function TestGlobalBlock(stdlib, foreign, buffer) {
1202 "use asm";
Ben Murdoch097c5b22016-05-18 11:27:45 +01001203
Ben Murdochda12d292016-06-02 14:46:10 +01001204 var x = foreign.x | 0, y = foreign.y | 0;
Ben Murdoch097c5b22016-05-18 11:27:45 +01001205
Ben Murdochda12d292016-06-02 14:46:10 +01001206 function test() {
1207 return (x + y) | 0;
Ben Murdoch097c5b22016-05-18 11:27:45 +01001208 }
1209
Ben Murdochda12d292016-06-02 14:46:10 +01001210 return {caller: test};
1211}
Ben Murdoch097c5b22016-05-18 11:27:45 +01001212
Ben Murdochda12d292016-06-02 14:46:10 +01001213assertWasm(15, TestGlobalBlock, { x: 4, y: 11 });
Ben Murdoch097c5b22016-05-18 11:27:45 +01001214
1215(function TestComma() {
1216 function CommaModule() {
1217 "use asm";
1218
1219 function ifunc(a, b) {
1220 a = +a;
1221 b = b | 0;
1222 return (a, b) | 0;
1223 }
1224
1225 function dfunc(a, b) {
1226 a = a | 0;
1227 b = +b;
1228 return +(a, b);
1229 }
1230
1231 return {ifunc: ifunc, dfunc: dfunc};
1232 }
1233
Ben Murdochda12d292016-06-02 14:46:10 +01001234 var m = Wasm.instantiateModuleFromAsm(CommaModule.toString());
Ben Murdoch097c5b22016-05-18 11:27:45 +01001235 assertEquals(123, m.ifunc(456.7, 123));
1236 assertEquals(123.4, m.dfunc(456, 123.4));
1237})();
1238
1239
Ben Murdochda12d292016-06-02 14:46:10 +01001240function TestFloatAsDouble(stdlib) {
1241 "use asm";
1242 var fround = stdlib.Math.fround;
1243 function func() {
1244 var x = fround(1.0);
1245 return +fround(x);
Ben Murdoch097c5b22016-05-18 11:27:45 +01001246 }
Ben Murdochda12d292016-06-02 14:46:10 +01001247 return {caller: func};
1248}
1249assertWasm(1, TestFloatAsDouble);
Ben Murdoch097c5b22016-05-18 11:27:45 +01001250
1251
Ben Murdochda12d292016-06-02 14:46:10 +01001252function TestOr() {
1253 "use asm";
1254 function func() {
1255 var x = 1;
1256 var y = 2;
1257 return (x | y) | 0;
Ben Murdoch097c5b22016-05-18 11:27:45 +01001258 }
Ben Murdochda12d292016-06-02 14:46:10 +01001259 return {caller: func};
1260}
Ben Murdoch097c5b22016-05-18 11:27:45 +01001261
Ben Murdochda12d292016-06-02 14:46:10 +01001262assertWasm(3, TestOr);
Ben Murdoch097c5b22016-05-18 11:27:45 +01001263
1264
Ben Murdochda12d292016-06-02 14:46:10 +01001265function TestAnd() {
1266 "use asm";
1267 function func() {
1268 var x = 3;
1269 var y = 2;
1270 return (x & y) | 0;
Ben Murdoch097c5b22016-05-18 11:27:45 +01001271 }
Ben Murdochda12d292016-06-02 14:46:10 +01001272 return {caller: func};
1273}
Ben Murdoch097c5b22016-05-18 11:27:45 +01001274
Ben Murdochda12d292016-06-02 14:46:10 +01001275assertWasm(2, TestAnd);
1276
1277
1278function TestXor() {
1279 "use asm";
1280 function func() {
1281 var x = 3;
1282 var y = 2;
1283 return (x ^ y) | 0;
1284 }
1285 return {caller: func};
1286}
1287
1288assertWasm(1, TestXor);
Ben Murdoch097c5b22016-05-18 11:27:45 +01001289
1290
1291(function TestIntishAssignment() {
1292 function Module(stdlib, foreign, heap) {
1293 "use asm";
1294 var HEAP32 = new stdlib.Int32Array(heap);
1295 function func() {
1296 var a = 1;
1297 var b = 2;
1298 HEAP32[0] = a + b;
1299 return HEAP32[0] | 0;
1300 }
1301 return {func: func};
1302 }
1303
Ben Murdochda12d292016-06-02 14:46:10 +01001304 var m = Wasm.instantiateModuleFromAsm(Module.toString());
Ben Murdoch097c5b22016-05-18 11:27:45 +01001305 assertEquals(3, m.func());
1306})();
1307
1308
1309(function TestFloatishAssignment() {
1310 function Module(stdlib, foreign, heap) {
1311 "use asm";
1312 var HEAPF32 = new stdlib.Float32Array(heap);
1313 var fround = stdlib.Math.fround;
1314 function func() {
1315 var a = fround(1.0);
1316 var b = fround(2.0);
1317 HEAPF32[0] = a + b;
1318 return +HEAPF32[0];
1319 }
1320 return {func: func};
1321 }
1322
Ben Murdochda12d292016-06-02 14:46:10 +01001323 var m = Wasm.instantiateModuleFromAsm(Module.toString());
Ben Murdoch097c5b22016-05-18 11:27:45 +01001324 assertEquals(3, m.func());
Ben Murdochda12d292016-06-02 14:46:10 +01001325})();
1326
1327
1328(function TestDoubleToFloatAssignment() {
1329 function Module(stdlib, foreign, heap) {
1330 "use asm";
1331 var HEAPF32 = new stdlib.Float32Array(heap);
1332 var fround = stdlib.Math.fround;
1333 function func() {
1334 var a = 1.23;
1335 HEAPF32[0] = a;
1336 return +HEAPF32[0];
1337 }
1338 return {func: func};
1339 }
1340
1341 var m = Wasm.instantiateModuleFromAsm(Module.toString());
1342 assertEquals(1.23, m.func());
1343});
1344
1345
1346(function TestIntegerMultiplyBothWays() {
1347 function Module(stdlib, foreign, heap) {
1348 "use asm";
1349 function func() {
1350 var a = 1;
1351 return ((a * 3) + (4 * a)) | 0;
1352 }
1353 return {func: func};
1354 }
1355
1356 var m = Wasm.instantiateModuleFromAsm(Module.toString());
1357 assertEquals(7, m.func());
1358})();
1359
1360
1361(function TestBadMultiplyIntish() {
1362 function Module(stdlib, foreign, heap) {
1363 "use asm";
1364 function func() {
1365 var a = 1;
1366 return ((a + a) * 4) | 0;
1367 }
1368 return {func: func};
1369 }
1370 assertThrows(function() {
1371 Wasm.instantiateModuleFromAsm(Module.toString());
1372 });
1373})();
1374
1375
1376(function TestBadCastFromInt() {
1377 function Module(stdlib, foreign, heap) {
1378 "use asm";
1379 function func() {
1380 var a = 1;
1381 return +a;
1382 }
1383 return {func: func};
1384 }
1385 assertThrows(function() {
1386 Wasm.instantiateModuleFromAsm(Module.toString());
1387 });
1388})();
1389
1390
1391(function TestAndNegative() {
1392 function Module() {
1393 "use asm";
1394 function func() {
1395 var x = 1;
1396 var y = 2;
1397 var z = 0;
1398 z = x + y & -1;
1399 return z | 0;
1400 }
1401 return {func: func};
1402 }
1403
1404 var m = Wasm.instantiateModuleFromAsm(Module.toString());
1405 assertEquals(3, m.func());
1406})();
1407
1408
1409(function TestNegativeDouble() {
1410 function Module() {
1411 "use asm";
1412 function func() {
1413 var x = -(34359738368.25);
1414 var y = -2.5;
1415 return +(x + y);
1416 }
1417 return {func: func};
1418 }
1419
1420 var m = Wasm.instantiateModuleFromAsm(Module.toString());
1421 assertEquals(-34359738370.75, m.func());
1422})();
1423
1424
1425(function TestBadAndDouble() {
1426 function Module() {
1427 "use asm";
1428 function func() {
1429 var x = 1.0;
1430 var y = 2.0;
1431 return (x & y) | 0;
1432 }
1433 return {func: func};
1434 }
1435
1436 assertThrows(function() {
1437 Wasm.instantiateModuleFromAsm(Module.toString());
1438 });
1439})();
1440
1441
1442(function TestAndIntAndHeapValue() {
1443 function Module(stdlib, foreign, buffer) {
1444 "use asm";
1445 var HEAP32 = new stdlib.Int32Array(buffer);
1446 function func() {
1447 var x = 0;
1448 x = HEAP32[0] & -1;
1449 return x | 0;
1450 }
1451 return {func: func};
1452 }
1453
1454 var m = Wasm.instantiateModuleFromAsm(Module.toString());
1455 assertEquals(0, m.func());
1456})();
1457
1458(function TestOutOfBoundsConversion() {
1459 function asmModule($a,$b,$c){'use asm';
1460 function aaa() {
1461 var f = 0.0;
1462 var a = 0;
1463 f = 5616315000.000001;
1464 a = ~~f >>>0;
1465 return a | 0;
1466 }
1467 return { main : aaa };
1468 }
1469 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString());
1470 assertEquals(1321347704, wasm.main());
1471})();
1472
1473(function TestUnsignedLiterals() {
1474 function asmModule() {
1475 "use asm";
1476 function u0xffffffff() {
1477 var f = 0xffffffff;
1478 return +(f >>> 0);
1479 }
1480 function u0x80000000() {
1481 var f = 0x80000000;
1482 return +(f >>> 0);
1483 }
1484 function u0x87654321() {
1485 var f = 0x87654321;
1486 return +(f >>> 0);
1487 }
1488 return {
1489 u0xffffffff: u0xffffffff,
1490 u0x80000000: u0x80000000,
1491 u0x87654321: u0x87654321,
1492 };
1493 }
1494 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString());
1495 assertEquals(0xffffffff, wasm.u0xffffffff());
1496 assertEquals(0x80000000, wasm.u0x80000000());
1497 assertEquals(0x87654321, wasm.u0x87654321());
1498})();