OLD | NEW |
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 function EmptyTest() { | 7 function EmptyTest() { |
8 "use asm"; | 8 "use asm"; |
9 function caller() { | 9 function caller() { |
10 empty(); | 10 empty(); |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 | 408 |
409 assertEquals(7, _WASMEXP_.instantiateModuleFromAsm( | 409 assertEquals(7, _WASMEXP_.instantiateModuleFromAsm( |
410 TestInt32HeapAccess.toString()).caller()); | 410 TestInt32HeapAccess.toString()).caller()); |
411 | 411 |
412 | 412 |
413 function TestInt32HeapAccessExternal() { | 413 function TestInt32HeapAccessExternal() { |
414 var memory = new ArrayBuffer(1024); | 414 var memory = new ArrayBuffer(1024); |
415 var memory_int32 = new Int32Array(memory); | 415 var memory_int32 = new Int32Array(memory); |
416 var module = _WASMEXP_.instantiateModuleFromAsm( | 416 var module = _WASMEXP_.instantiateModuleFromAsm( |
417 TestInt32HeapAccess.toString(), null, memory); | 417 TestInt32HeapAccess.toString(), null, memory); |
418 module.__init__(); | |
419 assertEquals(7, module.caller()); | 418 assertEquals(7, module.caller()); |
420 assertEquals(7, memory_int32[2]); | 419 assertEquals(7, memory_int32[2]); |
421 } | 420 } |
422 | 421 |
423 TestInt32HeapAccessExternal(); | 422 TestInt32HeapAccessExternal(); |
424 | 423 |
425 | 424 |
426 function TestHeapAccessIntTypes() { | 425 function TestHeapAccessIntTypes() { |
427 var types = [ | 426 var types = [ |
428 [Int8Array, 'Int8Array', '>> 0'], | 427 [Int8Array, 'Int8Array', '>> 0'], |
429 [Uint8Array, 'Uint8Array', '>> 0'], | 428 [Uint8Array, 'Uint8Array', '>> 0'], |
430 [Int16Array, 'Int16Array', '>> 1'], | 429 [Int16Array, 'Int16Array', '>> 1'], |
431 [Uint16Array, 'Uint16Array', '>> 1'], | 430 [Uint16Array, 'Uint16Array', '>> 1'], |
432 [Int32Array, 'Int32Array', '>> 2'], | 431 [Int32Array, 'Int32Array', '>> 2'], |
433 [Uint32Array, 'Uint32Array', '>> 2'], | 432 [Uint32Array, 'Uint32Array', '>> 2'], |
434 ]; | 433 ]; |
435 for (var i = 0; i < types.length; i++) { | 434 for (var i = 0; i < types.length; i++) { |
436 var code = TestInt32HeapAccess.toString(); | 435 var code = TestInt32HeapAccess.toString(); |
437 code = code.replace('Int32Array', types[i][1]); | 436 code = code.replace('Int32Array', types[i][1]); |
438 code = code.replace(/>> 2/g, types[i][2]); | 437 code = code.replace(/>> 2/g, types[i][2]); |
439 var memory = new ArrayBuffer(1024); | 438 var memory = new ArrayBuffer(1024); |
440 var memory_view = new types[i][0](memory); | 439 var memory_view = new types[i][0](memory); |
441 var module = _WASMEXP_.instantiateModuleFromAsm(code, null, memory); | 440 var module = _WASMEXP_.instantiateModuleFromAsm(code, null, memory); |
442 module.__init__(); | |
443 assertEquals(7, module.caller()); | 441 assertEquals(7, module.caller()); |
444 assertEquals(7, memory_view[2]); | 442 assertEquals(7, memory_view[2]); |
445 assertEquals(7, _WASMEXP_.instantiateModuleFromAsm(code).caller()); | 443 assertEquals(7, _WASMEXP_.instantiateModuleFromAsm(code).caller()); |
446 } | 444 } |
447 } | 445 } |
448 | 446 |
449 TestHeapAccessIntTypes(); | 447 TestHeapAccessIntTypes(); |
450 | 448 |
451 | 449 |
452 function TestFloatHeapAccess(stdlib, foreign, buffer) { | 450 function TestFloatHeapAccess(stdlib, foreign, buffer) { |
(...skipping 20 matching lines...) Expand all Loading... |
473 | 471 |
474 assertEquals(1, _WASMEXP_.instantiateModuleFromAsm( | 472 assertEquals(1, _WASMEXP_.instantiateModuleFromAsm( |
475 TestFloatHeapAccess.toString()).caller()); | 473 TestFloatHeapAccess.toString()).caller()); |
476 | 474 |
477 | 475 |
478 function TestFloatHeapAccessExternal() { | 476 function TestFloatHeapAccessExternal() { |
479 var memory = new ArrayBuffer(1024); | 477 var memory = new ArrayBuffer(1024); |
480 var memory_float64 = new Float64Array(memory); | 478 var memory_float64 = new Float64Array(memory); |
481 var module = _WASMEXP_.instantiateModuleFromAsm( | 479 var module = _WASMEXP_.instantiateModuleFromAsm( |
482 TestFloatHeapAccess.toString(), null, memory); | 480 TestFloatHeapAccess.toString(), null, memory); |
483 module.__init__(); | |
484 assertEquals(1, module.caller()); | 481 assertEquals(1, module.caller()); |
485 assertEquals(9.0, memory_float64[1]); | 482 assertEquals(9.0, memory_float64[1]); |
486 } | 483 } |
487 | 484 |
488 TestFloatHeapAccessExternal(); | 485 TestFloatHeapAccessExternal(); |
489 | 486 |
490 | 487 |
491 function TestConvertI32() { | 488 function TestConvertI32() { |
492 "use asm"; | 489 "use asm"; |
493 | 490 |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 var b = 34.25; | 646 var b = 34.25; |
650 | 647 |
651 function add() { | 648 function add() { |
652 return +(a + b); | 649 return +(a + b); |
653 } | 650 } |
654 | 651 |
655 return {add:add}; | 652 return {add:add}; |
656 } | 653 } |
657 | 654 |
658 var module = _WASMEXP_.instantiateModuleFromAsm(TestGlobalsWithInit.toString()); | 655 var module = _WASMEXP_.instantiateModuleFromAsm(TestGlobalsWithInit.toString()); |
659 module.__init__(); | |
660 assertEquals(77.5, module.add()); | 656 assertEquals(77.5, module.add()); |
661 | 657 |
662 | 658 |
663 function TestForLoop() { | 659 function TestForLoop() { |
664 "use asm" | 660 "use asm" |
665 | 661 |
666 function caller() { | 662 function caller() { |
667 var ret = 0; | 663 var ret = 0; |
668 var i = 0; | 664 var i = 0; |
669 for (i = 2; i <= 10; i = (i+1)|0) { | 665 for (i = 2; i <= 10; i = (i+1)|0) { |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 function TestInitFunctionWithNoGlobals() { | 868 function TestInitFunctionWithNoGlobals() { |
873 "use asm"; | 869 "use asm"; |
874 function caller() { | 870 function caller() { |
875 return 51; | 871 return 51; |
876 } | 872 } |
877 return {caller}; | 873 return {caller}; |
878 } | 874 } |
879 | 875 |
880 var module = _WASMEXP_.instantiateModuleFromAsm( | 876 var module = _WASMEXP_.instantiateModuleFromAsm( |
881 TestInitFunctionWithNoGlobals.toString()); | 877 TestInitFunctionWithNoGlobals.toString()); |
882 module.__init__(); | |
883 assertEquals(51, module.caller()); | 878 assertEquals(51, module.caller()); |
884 | 879 |
885 | 880 |
886 function TestExportNameDifferentFromFunctionName() { | 881 function TestExportNameDifferentFromFunctionName() { |
887 "use asm"; | 882 "use asm"; |
888 function caller() { | 883 function caller() { |
889 return 55; | 884 return 55; |
890 } | 885 } |
891 return {alt_caller:caller}; | 886 return {alt_caller:caller}; |
892 } | 887 } |
893 | 888 |
894 var module = _WASMEXP_.instantiateModuleFromAsm( | 889 var module = _WASMEXP_.instantiateModuleFromAsm( |
895 TestExportNameDifferentFromFunctionName.toString()); | 890 TestExportNameDifferentFromFunctionName.toString()); |
896 module.__init__(); | |
897 assertEquals(55, module.alt_caller()); | 891 assertEquals(55, module.alt_caller()); |
898 | 892 |
899 | 893 |
900 function TestFunctionTableSingleFunction() { | 894 function TestFunctionTableSingleFunction() { |
901 "use asm"; | 895 "use asm"; |
902 | 896 |
903 function dummy() { | 897 function dummy() { |
904 return 71; | 898 return 71; |
905 } | 899 } |
906 | 900 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 return 0; | 975 return 0; |
982 } | 976 } |
983 | 977 |
984 var funBin = [add, sub, sub, add]; | 978 var funBin = [add, sub, sub, add]; |
985 var fun = [inc]; | 979 var fun = [inc]; |
986 | 980 |
987 return {caller:caller}; | 981 return {caller:caller}; |
988 } | 982 } |
989 | 983 |
990 var module = _WASMEXP_.instantiateModuleFromAsm(TestFunctionTable.toString()); | 984 var module = _WASMEXP_.instantiateModuleFromAsm(TestFunctionTable.toString()); |
991 module.__init__(); | |
992 assertEquals(55, module.caller(0, 0, 33, 22)); | 985 assertEquals(55, module.caller(0, 0, 33, 22)); |
993 assertEquals(11, module.caller(0, 1, 33, 22)); | 986 assertEquals(11, module.caller(0, 1, 33, 22)); |
994 assertEquals(9, module.caller(0, 2, 54, 45)); | 987 assertEquals(9, module.caller(0, 2, 54, 45)); |
995 assertEquals(99, module.caller(0, 3, 54, 45)); | 988 assertEquals(99, module.caller(0, 3, 54, 45)); |
996 assertEquals(23, module.caller(0, 4, 12, 11)); | 989 assertEquals(23, module.caller(0, 4, 12, 11)); |
997 assertEquals(31, module.caller(1, 0, 30, 11)); | 990 assertEquals(31, module.caller(1, 0, 30, 11)); |
998 | 991 |
999 | 992 |
1000 function TestForeignFunctions() { | 993 function TestForeignFunctions() { |
1001 function AsmModule(stdlib, foreign, buffer) { | 994 function AsmModule(stdlib, foreign, buffer) { |
(...skipping 27 matching lines...) Expand all Loading... |
1029 } | 1022 } |
1030 | 1023 |
1031 return {getVal:getVal, setVal:setVal}; | 1024 return {getVal:getVal, setVal:setVal}; |
1032 } | 1025 } |
1033 | 1026 |
1034 var foreign = new ffi(23); | 1027 var foreign = new ffi(23); |
1035 | 1028 |
1036 var module = _WASMEXP_.instantiateModuleFromAsm(AsmModule.toString(), | 1029 var module = _WASMEXP_.instantiateModuleFromAsm(AsmModule.toString(), |
1037 foreign, null); | 1030 foreign, null); |
1038 | 1031 |
1039 module.__init__(); | |
1040 assertEquals(103, module.caller(23, 103)); | 1032 assertEquals(103, module.caller(23, 103)); |
1041 } | 1033 } |
1042 | 1034 |
1043 TestForeignFunctions(); | 1035 TestForeignFunctions(); |
1044 | 1036 |
1045 | 1037 |
1046 function TestForeignFunctionMultipleUse() { | 1038 function TestForeignFunctionMultipleUse() { |
1047 function AsmModule(stdlib, foreign, buffer) { | 1039 function AsmModule(stdlib, foreign, buffer) { |
1048 "use asm"; | 1040 "use asm"; |
1049 | 1041 |
(...skipping 19 matching lines...) Expand all Loading... |
1069 } | 1061 } |
1070 | 1062 |
1071 return {getVal:getVal}; | 1063 return {getVal:getVal}; |
1072 } | 1064 } |
1073 | 1065 |
1074 var foreign = new ffi(); | 1066 var foreign = new ffi(); |
1075 | 1067 |
1076 var module = _WASMEXP_.instantiateModuleFromAsm(AsmModule.toString(), | 1068 var module = _WASMEXP_.instantiateModuleFromAsm(AsmModule.toString(), |
1077 foreign, null); | 1069 foreign, null); |
1078 | 1070 |
1079 module.__init__(); | |
1080 assertEquals(89, module.caller(83, 83.25)); | 1071 assertEquals(89, module.caller(83, 83.25)); |
1081 } | 1072 } |
1082 | 1073 |
1083 TestForeignFunctionMultipleUse(); | 1074 TestForeignFunctionMultipleUse(); |
1084 | 1075 |
1085 | 1076 |
1086 function TestForeignVariables() { | 1077 function TestForeignVariables() { |
1087 function AsmModule(stdlib, foreign, buffer) { | 1078 function AsmModule(stdlib, foreign, buffer) { |
1088 "use asm"; | 1079 "use asm"; |
1089 | 1080 |
(...skipping 17 matching lines...) Expand all Loading... |
1107 function getf2() { | 1098 function getf2() { |
1108 return +f2; | 1099 return +f2; |
1109 } | 1100 } |
1110 | 1101 |
1111 return {geti1:geti1, getf1:getf1, geti2:geti2, getf2:getf2}; | 1102 return {geti1:geti1, getf1:getf1, geti2:geti2, getf2:getf2}; |
1112 } | 1103 } |
1113 | 1104 |
1114 function TestCase(env, i1, f1, i2, f2) { | 1105 function TestCase(env, i1, f1, i2, f2) { |
1115 var module = _WASMEXP_.instantiateModuleFromAsm( | 1106 var module = _WASMEXP_.instantiateModuleFromAsm( |
1116 AsmModule.toString(), env); | 1107 AsmModule.toString(), env); |
1117 module.__init__(); | |
1118 assertEquals(i1, module.geti1()); | 1108 assertEquals(i1, module.geti1()); |
1119 assertEquals(f1, module.getf1()); | 1109 assertEquals(f1, module.getf1()); |
1120 assertEquals(i2, module.geti2()); | 1110 assertEquals(i2, module.geti2()); |
1121 assertEquals(f2, module.getf2()); | 1111 assertEquals(f2, module.getf2()); |
1122 } | 1112 } |
1123 | 1113 |
1124 // Check normal operation. | 1114 // Check normal operation. |
1125 TestCase({foo: 123, bar: 234.5, baz: 345.7}, 123, 234.5, 345, 345.7); | 1115 TestCase({foo: 123, bar: 234.5, baz: 345.7}, 123, 234.5, 345, 345.7); |
1126 // Check partial operation. | 1116 // Check partial operation. |
1127 TestCase({baz: 345.7}, 0, NaN, 345, 345.7); | 1117 TestCase({baz: 345.7}, 0, NaN, 345, 345.7); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 | 1220 |
1231 function test() { | 1221 function test() { |
1232 return (x + y) | 0; | 1222 return (x + y) | 0; |
1233 } | 1223 } |
1234 | 1224 |
1235 return {test: test}; | 1225 return {test: test}; |
1236 } | 1226 } |
1237 | 1227 |
1238 var m = _WASMEXP_.instantiateModuleFromAsm( | 1228 var m = _WASMEXP_.instantiateModuleFromAsm( |
1239 Module.toString(), { x: 4, y: 11 }); | 1229 Module.toString(), { x: 4, y: 11 }); |
1240 m.__init__(); | |
1241 assertEquals(15, m.test()); | 1230 assertEquals(15, m.test()); |
1242 })(); | 1231 })(); |
1243 | 1232 |
1244 | 1233 |
1245 (function TestComma() { | 1234 (function TestComma() { |
1246 function CommaModule() { | 1235 function CommaModule() { |
1247 "use asm"; | 1236 "use asm"; |
1248 | 1237 |
1249 function ifunc(a, b) { | 1238 function ifunc(a, b) { |
1250 a = +a; | 1239 a = +a; |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1548 var a = 0; | 1537 var a = 0; |
1549 f = 5616315000.000001; | 1538 f = 5616315000.000001; |
1550 a = ~~f >>>0; | 1539 a = ~~f >>>0; |
1551 return a | 0; | 1540 return a | 0; |
1552 } | 1541 } |
1553 return { main : aaa }; | 1542 return { main : aaa }; |
1554 } | 1543 } |
1555 var wasm = _WASMEXP_.instantiateModuleFromAsm(asmModule.toString()); | 1544 var wasm = _WASMEXP_.instantiateModuleFromAsm(asmModule.toString()); |
1556 assertEquals(1321347704, wasm.main()); | 1545 assertEquals(1321347704, wasm.main()); |
1557 })(); | 1546 })(); |
OLD | NEW |