Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: test/mjsunit/wasm/asm-wasm.js

Issue 2251433002: [wasm] asm.js - Check stdlib.NaN is valid, prepare for the rest. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/regress/regress-608630.js ('k') | test/mjsunit/wasm/asm-wasm-deopt.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --expose-wasm 5 // Flags: --expose-wasm
6 6
7 var stdlib = this;
8
7 function assertWasm(expected, func, ffi) { 9 function assertWasm(expected, func, ffi) {
8 print("Testing " + func.name + "..."); 10 print("Testing " + func.name + "...");
9 assertEquals(expected, Wasm.instantiateModuleFromAsm( 11 assertEquals(expected, Wasm.instantiateModuleFromAsm(
10 func.toString(), ffi).caller()); 12 func.toString(), stdlib, ffi).caller());
11 } 13 }
12 14
13 function EmptyTest() { 15 function EmptyTest() {
14 "use asm"; 16 "use asm";
15 function caller() { 17 function caller() {
16 empty(); 18 empty();
17 return 11; 19 return 11;
18 } 20 }
19 function empty() { 21 function empty() {
20 } 22 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 } 100 }
99 101
100 function caller() { 102 function caller() {
101 return call(1, 2)|0; 103 return call(1, 2)|0;
102 } 104 }
103 105
104 return {caller: caller}; 106 return {caller: caller};
105 } 107 }
106 108
107 assertThrows(function() { 109 assertThrows(function() {
108 Wasm.instantiateModuleFromAsm(BadModule.toString()).caller(); 110 Wasm.instantiateModuleFromAsm(BadModule.toString(), stdlib).caller();
109 }); 111 });
110 112
111 113
112 function TestReturnInBlock() { 114 function TestReturnInBlock() {
113 "use asm"; 115 "use asm";
114 116
115 function caller() { 117 function caller() {
116 if(1) { 118 if(1) {
117 { 119 {
118 { 120 {
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 return {caller: caller}; 494 return {caller: caller};
493 } 495 }
494 496
495 assertWasm(7, TestInt32HeapAccess); 497 assertWasm(7, TestInt32HeapAccess);
496 498
497 499
498 function TestInt32HeapAccessExternal() { 500 function TestInt32HeapAccessExternal() {
499 var memory = new ArrayBuffer(1024); 501 var memory = new ArrayBuffer(1024);
500 var memory_int32 = new Int32Array(memory); 502 var memory_int32 = new Int32Array(memory);
501 var module = Wasm.instantiateModuleFromAsm( 503 var module = Wasm.instantiateModuleFromAsm(
502 TestInt32HeapAccess.toString(), null, memory); 504 TestInt32HeapAccess.toString(), stdlib, null, memory);
503 assertEquals(7, module.caller()); 505 assertEquals(7, module.caller());
504 assertEquals(7, memory_int32[2]); 506 assertEquals(7, memory_int32[2]);
505 } 507 }
506 508
507 TestInt32HeapAccessExternal(); 509 TestInt32HeapAccessExternal();
508 510
509 511
510 function TestHeapAccessIntTypes() { 512 function TestHeapAccessIntTypes() {
511 var types = [ 513 var types = [
512 [Int8Array, 'Int8Array', '>> 0'], 514 [Int8Array, 'Int8Array', '>> 0'],
513 [Uint8Array, 'Uint8Array', '>> 0'], 515 [Uint8Array, 'Uint8Array', '>> 0'],
514 [Int16Array, 'Int16Array', '>> 1'], 516 [Int16Array, 'Int16Array', '>> 1'],
515 [Uint16Array, 'Uint16Array', '>> 1'], 517 [Uint16Array, 'Uint16Array', '>> 1'],
516 [Int32Array, 'Int32Array', '>> 2'], 518 [Int32Array, 'Int32Array', '>> 2'],
517 [Uint32Array, 'Uint32Array', '>> 2'], 519 [Uint32Array, 'Uint32Array', '>> 2'],
518 ]; 520 ];
519 for (var i = 0; i < types.length; i++) { 521 for (var i = 0; i < types.length; i++) {
520 var code = TestInt32HeapAccess.toString(); 522 var code = TestInt32HeapAccess.toString();
521 code = code.replace('Int32Array', types[i][1]); 523 code = code.replace('Int32Array', types[i][1]);
522 code = code.replace(/>> 2/g, types[i][2]); 524 code = code.replace(/>> 2/g, types[i][2]);
523 var memory = new ArrayBuffer(1024); 525 var memory = new ArrayBuffer(1024);
524 var memory_view = new types[i][0](memory); 526 var memory_view = new types[i][0](memory);
525 var module = Wasm.instantiateModuleFromAsm(code, null, memory); 527 var module = Wasm.instantiateModuleFromAsm(code, stdlib, null, memory);
526 assertEquals(7, module.caller()); 528 assertEquals(7, module.caller());
527 assertEquals(7, memory_view[2]); 529 assertEquals(7, memory_view[2]);
528 assertEquals(7, Wasm.instantiateModuleFromAsm(code).caller()); 530 assertEquals(7, Wasm.instantiateModuleFromAsm(code, stdlib).caller());
529 } 531 }
530 } 532 }
531 533
532 TestHeapAccessIntTypes(); 534 TestHeapAccessIntTypes();
533 535
534 536
535 function TestFloatHeapAccess(stdlib, foreign, buffer) { 537 function TestFloatHeapAccess(stdlib, foreign, buffer) {
536 "use asm"; 538 "use asm";
537 539
538 var f32 = new stdlib.Float32Array(buffer); 540 var f32 = new stdlib.Float32Array(buffer);
539 var f64 = new stdlib.Float64Array(buffer); 541 var f64 = new stdlib.Float64Array(buffer);
540 var fround = stdlib.Math.fround; 542 var fround = stdlib.Math.fround;
541 function caller() { 543 function caller() {
542 var i = 8; 544 var i = 8;
543 var j = 8; 545 var j = 8;
544 var v = 6.0; 546 var v = 6.0;
545 547
546 f64[2] = v + 1.0; 548 f64[2] = v + 1.0;
547 f64[i >> 3] = +f64[2] + 1.0; 549 f64[i >> 3] = +f64[2] + 1.0;
548 f64[j >> 3] = +f64[j >> 3] + 1.0; 550 f64[j >> 3] = +f64[j >> 3] + 1.0;
549 i = +f64[i >> 3] == 9.0; 551 i = +f64[i >> 3] == 9.0;
550 return i|0; 552 return i|0;
551 } 553 }
552 554
553 return {caller: caller}; 555 return {caller: caller};
554 } 556 }
555 557
556 assertEquals(1, Wasm.instantiateModuleFromAsm( 558 assertEquals(1, Wasm.instantiateModuleFromAsm(
557 TestFloatHeapAccess.toString()).caller()); 559 TestFloatHeapAccess.toString(), stdlib).caller());
558 560
559 561
560 function TestFloatHeapAccessExternal() { 562 function TestFloatHeapAccessExternal() {
561 var memory = new ArrayBuffer(1024); 563 var memory = new ArrayBuffer(1024);
562 var memory_float64 = new Float64Array(memory); 564 var memory_float64 = new Float64Array(memory);
563 var module = Wasm.instantiateModuleFromAsm( 565 var module = Wasm.instantiateModuleFromAsm(
564 TestFloatHeapAccess.toString(), null, memory); 566 TestFloatHeapAccess.toString(), stdlib, null, memory);
565 assertEquals(1, module.caller()); 567 assertEquals(1, module.caller());
566 assertEquals(9.0, memory_float64[1]); 568 assertEquals(9.0, memory_float64[1]);
567 } 569 }
568 570
569 TestFloatHeapAccessExternal(); 571 TestFloatHeapAccessExternal();
570 572
571 573
572 function TestConvertI32() { 574 function TestConvertI32() {
573 "use asm"; 575 "use asm";
574 576
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 703
702 function init() { 704 function init() {
703 a = 43.25; 705 a = 43.25;
704 b = 34.25; 706 b = 34.25;
705 } 707 }
706 708
707 return {init:init, 709 return {init:init,
708 add:add}; 710 add:add};
709 } 711 }
710 712
711 var module = Wasm.instantiateModuleFromAsm(TestNamedFunctions.toString()); 713 var module = Wasm.instantiateModuleFromAsm(
714 TestNamedFunctions.toString(), stdlib);
712 module.init(); 715 module.init();
713 assertEquals(77.5, module.add()); 716 assertEquals(77.5, module.add());
714 })(); 717 })();
715 718
716 719
717 (function () { 720 (function () {
718 function TestGlobalsWithInit() { 721 function TestGlobalsWithInit() {
719 "use asm"; 722 "use asm";
720 723
721 var a = 43.25; 724 var a = 43.25;
722 var b = 34.25; 725 var b = 34.25;
723 726
724 function add() { 727 function add() {
725 return +(a + b); 728 return +(a + b);
726 } 729 }
727 730
728 return {add:add}; 731 return {add:add};
729 } 732 }
730 733
731 var module = Wasm.instantiateModuleFromAsm(TestGlobalsWithInit.toString()); 734 var module = Wasm.instantiateModuleFromAsm(
735 TestGlobalsWithInit.toString(), stdlib);
732 assertEquals(77.5, module.add()); 736 assertEquals(77.5, module.add());
733 })(); 737 })();
734 738
735 function TestForLoop() { 739 function TestForLoop() {
736 "use asm" 740 "use asm"
737 741
738 function caller() { 742 function caller() {
739 var ret = 0; 743 var ret = 0;
740 var i = 0; 744 var i = 0;
741 for (i = 2; (i|0) <= 10; i = (i+1)|0) { 745 for (i = 2; (i|0) <= 10; i = (i+1)|0) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 (function () { 862 (function () {
859 function TestInitFunctionWithNoGlobals() { 863 function TestInitFunctionWithNoGlobals() {
860 "use asm"; 864 "use asm";
861 function caller() { 865 function caller() {
862 return 51; 866 return 51;
863 } 867 }
864 return {caller}; 868 return {caller};
865 } 869 }
866 870
867 var module = Wasm.instantiateModuleFromAsm( 871 var module = Wasm.instantiateModuleFromAsm(
868 TestInitFunctionWithNoGlobals.toString()); 872 TestInitFunctionWithNoGlobals.toString(), stdlib);
869 assertEquals(51, module.caller()); 873 assertEquals(51, module.caller());
870 })(); 874 })();
871 875
872 (function () { 876 (function () {
873 function TestExportNameDifferentFromFunctionName() { 877 function TestExportNameDifferentFromFunctionName() {
874 "use asm"; 878 "use asm";
875 function caller() { 879 function caller() {
876 return 55; 880 return 55;
877 } 881 }
878 return {alt_caller:caller}; 882 return {alt_caller:caller};
879 } 883 }
880 884
881 var module = Wasm.instantiateModuleFromAsm( 885 var module = Wasm.instantiateModuleFromAsm(
882 TestExportNameDifferentFromFunctionName.toString()); 886 TestExportNameDifferentFromFunctionName.toString(), stdlib);
883 assertEquals(55, module.alt_caller()); 887 assertEquals(55, module.alt_caller());
884 })(); 888 })();
885 889
886 function TestFunctionTableSingleFunction() { 890 function TestFunctionTableSingleFunction() {
887 "use asm"; 891 "use asm";
888 892
889 function dummy() { 893 function dummy() {
890 return 71; 894 return 71;
891 } 895 }
892 896
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 } 972 }
969 return 0; 973 return 0;
970 } 974 }
971 975
972 var funBin = [add, sub, sub, add]; 976 var funBin = [add, sub, sub, add];
973 var fun = [inc]; 977 var fun = [inc];
974 978
975 return {caller:caller}; 979 return {caller:caller};
976 } 980 }
977 981
978 var module = Wasm.instantiateModuleFromAsm(TestFunctionTable.toString()); 982 var module = Wasm.instantiateModuleFromAsm(
983 TestFunctionTable.toString(), stdlib);
979 assertEquals(55, module.caller(0, 0, 33, 22)); 984 assertEquals(55, module.caller(0, 0, 33, 22));
980 assertEquals(11, module.caller(0, 1, 33, 22)); 985 assertEquals(11, module.caller(0, 1, 33, 22));
981 assertEquals(9, module.caller(0, 2, 54, 45)); 986 assertEquals(9, module.caller(0, 2, 54, 45));
982 assertEquals(99, module.caller(0, 3, 54, 45)); 987 assertEquals(99, module.caller(0, 3, 54, 45));
983 assertEquals(23, module.caller(0, 4, 12, 11)); 988 assertEquals(23, module.caller(0, 4, 12, 11));
984 assertEquals(31, module.caller(1, 0, 30, 11)); 989 assertEquals(31, module.caller(1, 0, 30, 11));
985 })(); 990 })();
986 991
987 992
988 function TestForeignFunctions() { 993 function TestForeignFunctions() {
(...skipping 25 matching lines...) Expand all
1014 1019
1015 function setVal(new_val) { 1020 function setVal(new_val) {
1016 val = new_val; 1021 val = new_val;
1017 } 1022 }
1018 1023
1019 return {getVal:getVal, setVal:setVal}; 1024 return {getVal:getVal, setVal:setVal};
1020 } 1025 }
1021 1026
1022 var foreign = new ffi(23); 1027 var foreign = new ffi(23);
1023 1028
1024 var module = Wasm.instantiateModuleFromAsm(AsmModule.toString(), 1029 var module = Wasm.instantiateModuleFromAsm(
1025 foreign, null); 1030 AsmModule.toString(), stdlib, foreign, null);
1026 1031
1027 assertEquals(103, module.caller(23, 103)); 1032 assertEquals(103, module.caller(23, 103));
1028 } 1033 }
1029 1034
1030 TestForeignFunctions(); 1035 TestForeignFunctions();
1031 1036
1032 1037
1033 function TestForeignFunctionMultipleUse() { 1038 function TestForeignFunctionMultipleUse() {
1034 function AsmModule(stdlib, foreign, buffer) { 1039 function AsmModule(stdlib, foreign, buffer) {
1035 "use asm"; 1040 "use asm";
(...skipping 17 matching lines...) Expand all
1053 function ffi() { 1058 function ffi() {
1054 function getVal() { 1059 function getVal() {
1055 return 83.25; 1060 return 83.25;
1056 } 1061 }
1057 1062
1058 return {getVal:getVal}; 1063 return {getVal:getVal};
1059 } 1064 }
1060 1065
1061 var foreign = new ffi(); 1066 var foreign = new ffi();
1062 1067
1063 var module = Wasm.instantiateModuleFromAsm(AsmModule.toString(), 1068 var module = Wasm.instantiateModuleFromAsm(
1064 foreign, null); 1069 AsmModule.toString(), stdlib, foreign, null);
1065 1070
1066 assertEquals(89, module.caller(83, 83.25)); 1071 assertEquals(89, module.caller(83, 83.25));
1067 } 1072 }
1068 1073
1069 TestForeignFunctionMultipleUse(); 1074 TestForeignFunctionMultipleUse();
1070 1075
1071 1076
1072 function TestForeignVariables() { 1077 function TestForeignVariables() {
1073 function AsmModule(stdlib, foreign, buffer) { 1078 function AsmModule(stdlib, foreign, buffer) {
1074 "use asm"; 1079 "use asm";
(...skipping 18 matching lines...) Expand all
1093 function getf2() { 1098 function getf2() {
1094 return +f2; 1099 return +f2;
1095 } 1100 }
1096 1101
1097 return {geti1:geti1, getf1:getf1, geti2:geti2, getf2:getf2}; 1102 return {geti1:geti1, getf1:getf1, geti2:geti2, getf2:getf2};
1098 } 1103 }
1099 1104
1100 function TestCase(env, i1, f1, i2, f2) { 1105 function TestCase(env, i1, f1, i2, f2) {
1101 print("Testing foreign variables..."); 1106 print("Testing foreign variables...");
1102 var module = Wasm.instantiateModuleFromAsm( 1107 var module = Wasm.instantiateModuleFromAsm(
1103 AsmModule.toString(), env); 1108 AsmModule.toString(), stdlib, env);
1104 assertEquals(i1, module.geti1()); 1109 assertEquals(i1, module.geti1());
1105 assertEquals(f1, module.getf1()); 1110 assertEquals(f1, module.getf1());
1106 assertEquals(i2, module.geti2()); 1111 assertEquals(i2, module.geti2());
1107 assertEquals(f2, module.getf2()); 1112 assertEquals(f2, module.getf2());
1108 } 1113 }
1109 1114
1110 // Check normal operation. 1115 // Check normal operation.
1111 TestCase({foo: 123, bar: 234.5, baz: 345.7}, 123, 234.5, 345, 345.7); 1116 TestCase({foo: 123, bar: 234.5, baz: 345.7}, 123, 234.5, 345, 345.7);
1112 // Check partial operation. 1117 // Check partial operation.
1113 TestCase({baz: 345.7}, 0, NaN, 345, 345.7); 1118 TestCase({baz: 345.7}, 0, NaN, 345, 345.7);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 1190
1186 function iload(i) { 1191 function iload(i) {
1187 i = i | 0; 1192 i = i | 0;
1188 return HEAP8[HEAP32[i >> 2] | 0] | 0; 1193 return HEAP8[HEAP32[i >> 2] | 0] | 0;
1189 } 1194 }
1190 1195
1191 return {load: load, iload: iload, store: store, storeb: storeb}; 1196 return {load: load, iload: iload, store: store, storeb: storeb};
1192 } 1197 }
1193 1198
1194 var m = Wasm.instantiateModuleFromAsm( 1199 var m = Wasm.instantiateModuleFromAsm(
1195 TestByteHeapAccessCompat.toString()); 1200 TestByteHeapAccessCompat.toString(), stdlib);
1196 m.store(0, 20); 1201 m.store(0, 20);
1197 m.store(4, 21); 1202 m.store(4, 21);
1198 m.store(8, 22); 1203 m.store(8, 22);
1199 m.storeb(20, 123); 1204 m.storeb(20, 123);
1200 m.storeb(21, 42); 1205 m.storeb(21, 42);
1201 m.storeb(22, 77); 1206 m.storeb(22, 77);
1202 assertEquals(123, m.load(20)); 1207 assertEquals(123, m.load(20));
1203 assertEquals(42, m.load(21)); 1208 assertEquals(42, m.load(21));
1204 assertEquals(77, m.load(22)); 1209 assertEquals(77, m.load(22));
1205 assertEquals(123, m.iload(0)); 1210 assertEquals(123, m.iload(0));
(...skipping 28 matching lines...) Expand all
1234 1239
1235 function dfunc(a, b) { 1240 function dfunc(a, b) {
1236 a = a | 0; 1241 a = a | 0;
1237 b = +b; 1242 b = +b;
1238 return +(a, b); 1243 return +(a, b);
1239 } 1244 }
1240 1245
1241 return {ifunc: ifunc, dfunc: dfunc}; 1246 return {ifunc: ifunc, dfunc: dfunc};
1242 } 1247 }
1243 1248
1244 var m = Wasm.instantiateModuleFromAsm(CommaModule.toString()); 1249 var m = Wasm.instantiateModuleFromAsm(
1250 CommaModule.toString(), stdlib);
1245 assertEquals(123, m.ifunc(456.7, 123)); 1251 assertEquals(123, m.ifunc(456.7, 123));
1246 assertEquals(123.4, m.dfunc(456, 123.4)); 1252 assertEquals(123.4, m.dfunc(456, 123.4));
1247 })(); 1253 })();
1248 1254
1249 1255
1250 function TestFloatAsDouble(stdlib) { 1256 function TestFloatAsDouble(stdlib) {
1251 "use asm"; 1257 "use asm";
1252 var fround = stdlib.Math.fround; 1258 var fround = stdlib.Math.fround;
1253 function func() { 1259 function func() {
1254 var x = fround(1.0); 1260 var x = fround(1.0);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 var HEAP32 = new stdlib.Int32Array(heap); 1310 var HEAP32 = new stdlib.Int32Array(heap);
1305 function func() { 1311 function func() {
1306 var a = 1; 1312 var a = 1;
1307 var b = 2; 1313 var b = 2;
1308 HEAP32[0] = a + b; 1314 HEAP32[0] = a + b;
1309 return HEAP32[0] | 0; 1315 return HEAP32[0] | 0;
1310 } 1316 }
1311 return {func: func}; 1317 return {func: func};
1312 } 1318 }
1313 1319
1314 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1320 var m = Wasm.instantiateModuleFromAsm(
1321 Module.toString(), stdlib);
1315 assertEquals(3, m.func()); 1322 assertEquals(3, m.func());
1316 })(); 1323 })();
1317 1324
1318 1325
1319 (function TestFloatishAssignment() { 1326 (function TestFloatishAssignment() {
1320 function Module(stdlib, foreign, heap) { 1327 function Module(stdlib, foreign, heap) {
1321 "use asm"; 1328 "use asm";
1322 var HEAPF32 = new stdlib.Float32Array(heap); 1329 var HEAPF32 = new stdlib.Float32Array(heap);
1323 var fround = stdlib.Math.fround; 1330 var fround = stdlib.Math.fround;
1324 function func() { 1331 function func() {
1325 var a = fround(1.0); 1332 var a = fround(1.0);
1326 var b = fround(2.0); 1333 var b = fround(2.0);
1327 HEAPF32[0] = a + b; 1334 HEAPF32[0] = a + b;
1328 return +HEAPF32[0]; 1335 return +HEAPF32[0];
1329 } 1336 }
1330 return {func: func}; 1337 return {func: func};
1331 } 1338 }
1332 1339
1333 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1340 var m = Wasm.instantiateModuleFromAsm(
1341 Module.toString(), stdlib);
1334 assertEquals(3, m.func()); 1342 assertEquals(3, m.func());
1335 })(); 1343 })();
1336 1344
1337 1345
1338 (function TestDoubleToFloatAssignment() { 1346 (function TestDoubleToFloatAssignment() {
1339 function Module(stdlib, foreign, heap) { 1347 function Module(stdlib, foreign, heap) {
1340 "use asm"; 1348 "use asm";
1341 var HEAPF32 = new stdlib.Float32Array(heap); 1349 var HEAPF32 = new stdlib.Float32Array(heap);
1342 var fround = stdlib.Math.fround; 1350 var fround = stdlib.Math.fround;
1343 function func() { 1351 function func() {
1344 var a = 1.23; 1352 var a = 1.23;
1345 HEAPF32[0] = a; 1353 HEAPF32[0] = a;
1346 return +HEAPF32[0]; 1354 return +HEAPF32[0];
1347 } 1355 }
1348 return {func: func}; 1356 return {func: func};
1349 } 1357 }
1350 1358
1351 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1359 var m = Wasm.instantiateModuleFromAsm(
1360 Module.toString(), stdlib);
1352 assertEquals(1.23, m.func()); 1361 assertEquals(1.23, m.func());
1353 }); 1362 });
1354 1363
1355 1364
1356 (function TestIntegerMultiplyBothWays() { 1365 (function TestIntegerMultiplyBothWays() {
1357 function Module(stdlib, foreign, heap) { 1366 function Module(stdlib, foreign, heap) {
1358 "use asm"; 1367 "use asm";
1359 function func() { 1368 function func() {
1360 var a = 1; 1369 var a = 1;
1361 return (((a * 3)|0) + ((4 * a)|0)) | 0; 1370 return (((a * 3)|0) + ((4 * a)|0)) | 0;
1362 } 1371 }
1363 return {func: func}; 1372 return {func: func};
1364 } 1373 }
1365 1374
1366 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1375 var m = Wasm.instantiateModuleFromAsm(
1376 Module.toString(), stdlib);
1367 assertEquals(7, m.func()); 1377 assertEquals(7, m.func());
1368 })(); 1378 })();
1369 1379
1370 1380
1371 (function TestBadAssignDoubleFromIntish() { 1381 (function TestBadAssignDoubleFromIntish() {
1372 function Module(stdlib, foreign, heap) { 1382 function Module(stdlib, foreign, heap) {
1373 "use asm"; 1383 "use asm";
1374 function func() { 1384 function func() {
1375 var a = 1; 1385 var a = 1;
1376 var b = 3.0; 1386 var b = 3.0;
1377 b = a; 1387 b = a;
1378 } 1388 }
1379 return {func: func}; 1389 return {func: func};
1380 } 1390 }
1381 assertThrows(function() { 1391 assertThrows(function() {
1382 Wasm.instantiateModuleFromAsm(Module.toString()); 1392 Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1383 }); 1393 });
1384 })(); 1394 })();
1385 1395
1386 1396
1387 (function TestBadAssignIntFromDouble() { 1397 (function TestBadAssignIntFromDouble() {
1388 function Module(stdlib, foreign, heap) { 1398 function Module(stdlib, foreign, heap) {
1389 "use asm"; 1399 "use asm";
1390 function func() { 1400 function func() {
1391 var a = 1; 1401 var a = 1;
1392 var b = 3.0; 1402 var b = 3.0;
1393 a = b; 1403 a = b;
1394 } 1404 }
1395 return {func: func}; 1405 return {func: func};
1396 } 1406 }
1397 assertThrows(function() { 1407 assertThrows(function() {
1398 Wasm.instantiateModuleFromAsm(Module.toString()); 1408 Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1399 }); 1409 });
1400 })(); 1410 })();
1401 1411
1402 1412
1403 (function TestBadMultiplyIntish() { 1413 (function TestBadMultiplyIntish() {
1404 function Module(stdlib, foreign, heap) { 1414 function Module(stdlib, foreign, heap) {
1405 "use asm"; 1415 "use asm";
1406 function func() { 1416 function func() {
1407 var a = 1; 1417 var a = 1;
1408 return ((a + a) * 4) | 0; 1418 return ((a + a) * 4) | 0;
1409 } 1419 }
1410 return {func: func}; 1420 return {func: func};
1411 } 1421 }
1412 assertThrows(function() { 1422 assertThrows(function() {
1413 Wasm.instantiateModuleFromAsm(Module.toString()); 1423 Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1414 }); 1424 });
1415 })(); 1425 })();
1416 1426
1417 1427
1418 (function TestBadCastFromInt() { 1428 (function TestBadCastFromInt() {
1419 function Module(stdlib, foreign, heap) { 1429 function Module(stdlib, foreign, heap) {
1420 "use asm"; 1430 "use asm";
1421 function func() { 1431 function func() {
1422 var a = 1; 1432 var a = 1;
1423 return +a; 1433 return +a;
1424 } 1434 }
1425 return {func: func}; 1435 return {func: func};
1426 } 1436 }
1427 assertThrows(function() { 1437 assertThrows(function() {
1428 Wasm.instantiateModuleFromAsm(Module.toString()); 1438 Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1429 }); 1439 });
1430 })(); 1440 })();
1431 1441
1432 1442
1433 (function TestAndNegative() { 1443 (function TestAndNegative() {
1434 function Module() { 1444 function Module() {
1435 "use asm"; 1445 "use asm";
1436 function func() { 1446 function func() {
1437 var x = 1; 1447 var x = 1;
1438 var y = 2; 1448 var y = 2;
1439 var z = 0; 1449 var z = 0;
1440 z = x + y & -1; 1450 z = x + y & -1;
1441 return z | 0; 1451 return z | 0;
1442 } 1452 }
1443 return {func: func}; 1453 return {func: func};
1444 } 1454 }
1445 1455
1446 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1456 var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1447 assertEquals(3, m.func()); 1457 assertEquals(3, m.func());
1448 })(); 1458 })();
1449 1459
1450 1460
1451 (function TestNegativeDouble() { 1461 (function TestNegativeDouble() {
1452 function Module() { 1462 function Module() {
1453 "use asm"; 1463 "use asm";
1454 function func() { 1464 function func() {
1455 var x = -(34359738368.25); 1465 var x = -(34359738368.25);
1456 var y = -2.5; 1466 var y = -2.5;
1457 return +(x + y); 1467 return +(x + y);
1458 } 1468 }
1459 return {func: func}; 1469 return {func: func};
1460 } 1470 }
1461 1471
1462 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1472 var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1463 assertEquals(-34359738370.75, m.func()); 1473 assertEquals(-34359738370.75, m.func());
1464 })(); 1474 })();
1465 1475
1466 1476
1467 (function TestBadAndDouble() { 1477 (function TestBadAndDouble() {
1468 function Module() { 1478 function Module() {
1469 "use asm"; 1479 "use asm";
1470 function func() { 1480 function func() {
1471 var x = 1.0; 1481 var x = 1.0;
1472 var y = 2.0; 1482 var y = 2.0;
1473 return (x & y) | 0; 1483 return (x & y) | 0;
1474 } 1484 }
1475 return {func: func}; 1485 return {func: func};
1476 } 1486 }
1477 1487
1478 assertThrows(function() { 1488 assertThrows(function() {
1479 Wasm.instantiateModuleFromAsm(Module.toString()); 1489 Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1480 }); 1490 });
1481 })(); 1491 })();
1482 1492
1483 1493
1484 (function TestAndIntAndHeapValue() { 1494 (function TestAndIntAndHeapValue() {
1485 function Module(stdlib, foreign, buffer) { 1495 function Module(stdlib, foreign, buffer) {
1486 "use asm"; 1496 "use asm";
1487 var HEAP32 = new stdlib.Int32Array(buffer); 1497 var HEAP32 = new stdlib.Int32Array(buffer);
1488 function func() { 1498 function func() {
1489 var x = 0; 1499 var x = 0;
1490 x = HEAP32[0] & -1; 1500 x = HEAP32[0] & -1;
1491 return x | 0; 1501 return x | 0;
1492 } 1502 }
1493 return {func: func}; 1503 return {func: func};
1494 } 1504 }
1495 1505
1496 var m = Wasm.instantiateModuleFromAsm(Module.toString()); 1506 var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
1497 assertEquals(0, m.func()); 1507 assertEquals(0, m.func());
1498 })(); 1508 })();
1499 1509
1500 (function TestOutOfBoundsConversion() { 1510 (function TestOutOfBoundsConversion() {
1501 function asmModule($a,$b,$c){'use asm'; 1511 function asmModule($a,$b,$c){'use asm';
1502 function aaa() { 1512 function aaa() {
1503 var f = 0.0; 1513 var f = 0.0;
1504 var a = 0; 1514 var a = 0;
1505 f = 5616315000.000001; 1515 f = 5616315000.000001;
1506 a = ~~f >>>0; 1516 a = ~~f >>>0;
1507 return a | 0; 1517 return a | 0;
1508 } 1518 }
1509 return { main : aaa }; 1519 return { main : aaa };
1510 } 1520 }
1511 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 1521 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
1512 assertEquals(1321347704, wasm.main()); 1522 assertEquals(1321347704, wasm.main());
1513 })(); 1523 })();
1514 1524
1515 (function TestUnsignedLiterals() { 1525 (function TestUnsignedLiterals() {
1516 function asmModule() { 1526 function asmModule() {
1517 "use asm"; 1527 "use asm";
1518 function u0xffffffff() { 1528 function u0xffffffff() {
1519 var f = 0xffffffff; 1529 var f = 0xffffffff;
1520 return +(f >>> 0); 1530 return +(f >>> 0);
1521 } 1531 }
1522 function u0x80000000() { 1532 function u0x80000000() {
1523 var f = 0x80000000; 1533 var f = 0x80000000;
1524 return +(f >>> 0); 1534 return +(f >>> 0);
1525 } 1535 }
1526 function u0x87654321() { 1536 function u0x87654321() {
1527 var f = 0x87654321; 1537 var f = 0x87654321;
1528 return +(f >>> 0); 1538 return +(f >>> 0);
1529 } 1539 }
1530 return { 1540 return {
1531 u0xffffffff: u0xffffffff, 1541 u0xffffffff: u0xffffffff,
1532 u0x80000000: u0x80000000, 1542 u0x80000000: u0x80000000,
1533 u0x87654321: u0x87654321, 1543 u0x87654321: u0x87654321,
1534 }; 1544 };
1535 } 1545 }
1536 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 1546 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
1537 assertEquals(0xffffffff, wasm.u0xffffffff()); 1547 assertEquals(0xffffffff, wasm.u0xffffffff());
1538 assertEquals(0x80000000, wasm.u0x80000000()); 1548 assertEquals(0x80000000, wasm.u0x80000000());
1539 assertEquals(0x87654321, wasm.u0x87654321()); 1549 assertEquals(0x87654321, wasm.u0x87654321());
1540 })(); 1550 })();
1541 1551
1542 (function TestBadNoDeclaration() { 1552 (function TestBadNoDeclaration() {
1543 assertThrows(function() { 1553 assertThrows(function() {
1544 Wasm.instantiateModuleFromAsm('33;'); 1554 Wasm.instantiateModuleFromAsm('33;', stdlib);
1545 }); 1555 });
1546 })(); 1556 })();
1547 1557
1548 (function TestBadVarDeclaration() { 1558 (function TestBadVarDeclaration() {
1549 assertThrows(function() { 1559 assertThrows(function() {
1550 Wasm.instantiateModuleFromAsm('var x = 3;'); 1560 Wasm.instantiateModuleFromAsm('var x = 3;', stdlib);
1551 }); 1561 });
1552 })(); 1562 })();
1553 1563
1554 (function TestIfWithUnsigned() { 1564 (function TestIfWithUnsigned() {
1555 function asmModule() { 1565 function asmModule() {
1556 "use asm"; 1566 "use asm";
1557 function main() { 1567 function main() {
1558 if (2147483658) { // 2^31 + 10 1568 if (2147483658) { // 2^31 + 10
1559 return 231; 1569 return 231;
1560 } 1570 }
1561 return 0; 1571 return 0;
1562 } 1572 }
1563 return {main:main}; 1573 return {main:main};
1564 } 1574 }
1565 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 1575 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
1566 assertEquals(231, wasm.main()); 1576 assertEquals(231, wasm.main());
1567 })(); 1577 })();
1568 1578
1569 (function TestLoopsWithUnsigned() { 1579 (function TestLoopsWithUnsigned() {
1570 function asmModule() { 1580 function asmModule() {
1571 "use asm"; 1581 "use asm";
1572 function main() { 1582 function main() {
1573 var val = 1; 1583 var val = 1;
1574 var count = 0; 1584 var count = 0;
1575 for (val = 2147483648; 2147483648;) { 1585 for (val = 2147483648; 2147483648;) {
(...skipping 15 matching lines...) Expand all
1591 break; 1601 break;
1592 } 1602 }
1593 } while (0xffffffff); 1603 } while (0xffffffff);
1594 if ((val>>>0) == 2147483668) { 1604 if ((val>>>0) == 2147483668) {
1595 return 323; 1605 return 323;
1596 } 1606 }
1597 return 0; 1607 return 0;
1598 } 1608 }
1599 return {main:main}; 1609 return {main:main};
1600 } 1610 }
1601 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 1611 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
1602 assertEquals(323, wasm.main()); 1612 assertEquals(323, wasm.main());
1603 })(); 1613 })();
OLDNEW
« no previous file with comments | « test/mjsunit/regress/regress-608630.js ('k') | test/mjsunit/wasm/asm-wasm-deopt.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698