| Index: test/mjsunit/wasm/asm-wasm.js
|
| diff --git a/test/mjsunit/wasm/asm-wasm.js b/test/mjsunit/wasm/asm-wasm.js
|
| index 5f80d6a4246cf224c3268980712664c035e6df21..a580c5c7e94a2f0ef804c6477857e9333aaa86f2 100644
|
| --- a/test/mjsunit/wasm/asm-wasm.js
|
| +++ b/test/mjsunit/wasm/asm-wasm.js
|
| @@ -2,17 +2,22 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -// Flags: --expose-wasm
|
| +// Flags: --validate-asm --allow-natives-syntax
|
|
|
| var stdlib = this;
|
|
|
| +function assertValidAsm(func) {
|
| + assertTrue(%IsAsmWasmCode(func));
|
| +}
|
| +
|
| function assertWasm(expected, func, ffi) {
|
| print("Testing " + func.name + "...");
|
| - assertEquals(expected, Wasm.instantiateModuleFromAsm(
|
| - func.toString(), stdlib, ffi).caller());
|
| + assertEquals(
|
| + expected, func(stdlib, ffi, new ArrayBuffer(1024)).caller());
|
| + assertValidAsm(func);
|
| }
|
|
|
| -function EmptyTest() {
|
| +function EmptyTest(a, b, c) {
|
| "use asm";
|
| function caller() {
|
| empty();
|
| @@ -25,7 +30,7 @@ function EmptyTest() {
|
|
|
| assertWasm(11, EmptyTest);
|
|
|
| -function VoidReturnTest() {
|
| +function VoidReturnTest(a, b, c) {
|
| "use asm";
|
| function caller() {
|
| empty();
|
| @@ -40,7 +45,7 @@ function VoidReturnTest() {
|
|
|
| assertWasm(19, VoidReturnTest);
|
|
|
| -function IntTest() {
|
| +function IntTest(a, b, c) {
|
| "use asm";
|
| function sum(a, b) {
|
| a = a|0;
|
| @@ -106,9 +111,7 @@ function BadModule() {
|
| return {caller: caller};
|
| }
|
|
|
| -assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm(BadModule.toString(), stdlib).caller();
|
| -});
|
| +assertTrue(%IsNotAsmWasmCode(BadModule));
|
|
|
|
|
| function TestReturnInBlock() {
|
| @@ -500,8 +503,9 @@ assertWasm(7, TestInt32HeapAccess);
|
| function TestInt32HeapAccessExternal() {
|
| var memory = new ArrayBuffer(1024);
|
| var memory_int32 = new Int32Array(memory);
|
| - var module = Wasm.instantiateModuleFromAsm(
|
| - TestInt32HeapAccess.toString(), stdlib, null, memory);
|
| + var module_decl = eval('(' + TestInt32HeapAccess.toString() + ')');
|
| + var module = module_decl(stdlib, null, memory);
|
| + assertValidAsm(module_decl);
|
| assertEquals(7, module.caller());
|
| assertEquals(7, memory_int32[2]);
|
| }
|
| @@ -524,10 +528,13 @@ function TestHeapAccessIntTypes() {
|
| code = code.replace(/>> 2/g, types[i][2]);
|
| var memory = new ArrayBuffer(1024);
|
| var memory_view = new types[i][0](memory);
|
| - var module = Wasm.instantiateModuleFromAsm(code, stdlib, null, memory);
|
| + var module_decl = eval('(' + code + ')');
|
| + var module = module_decl(stdlib, null, memory);
|
| + assertValidAsm(module_decl);
|
| assertEquals(7, module.caller());
|
| assertEquals(7, memory_view[2]);
|
| - assertEquals(7, Wasm.instantiateModuleFromAsm(code, stdlib).caller());
|
| + assertEquals(7, module_decl(stdlib).caller());
|
| + assertValidAsm(module_decl);
|
| }
|
| }
|
|
|
| @@ -555,15 +562,15 @@ function TestFloatHeapAccess(stdlib, foreign, buffer) {
|
| return {caller: caller};
|
| }
|
|
|
| -assertEquals(1, Wasm.instantiateModuleFromAsm(
|
| - TestFloatHeapAccess.toString(), stdlib).caller());
|
| +assertWasm(1, TestFloatHeapAccess);
|
|
|
|
|
| function TestFloatHeapAccessExternal() {
|
| var memory = new ArrayBuffer(1024);
|
| var memory_float64 = new Float64Array(memory);
|
| - var module = Wasm.instantiateModuleFromAsm(
|
| - TestFloatHeapAccess.toString(), stdlib, null, memory);
|
| + var module_decl = eval('(' + TestFloatHeapAccess.toString() + ')');
|
| + var module = module_decl(stdlib, null, memory);
|
| + assertValidAsm(module_decl);
|
| assertEquals(1, module.caller());
|
| assertEquals(9.0, memory_float64[1]);
|
| }
|
| @@ -710,8 +717,9 @@ function TestNamedFunctions() {
|
| add:add};
|
| }
|
|
|
| -var module = Wasm.instantiateModuleFromAsm(
|
| - TestNamedFunctions.toString(), stdlib);
|
| +var module_decl = eval('(' + TestNamedFunctions.toString() + ')');
|
| +var module = module_decl(stdlib);
|
| +assertValidAsm(module_decl);
|
| module.init();
|
| assertEquals(77.5, module.add());
|
| })();
|
| @@ -731,8 +739,9 @@ function TestGlobalsWithInit() {
|
| return {add:add};
|
| }
|
|
|
| -var module = Wasm.instantiateModuleFromAsm(
|
| - TestGlobalsWithInit.toString(), stdlib);
|
| +var module_decl = eval('(' + TestGlobalsWithInit.toString() + ')');
|
| +var module = module_decl(stdlib);
|
| +assertValidAsm(module_decl);
|
| assertEquals(77.5, module.add());
|
| })();
|
|
|
| @@ -859,7 +868,6 @@ function TestConditional() {
|
| assertWasm(41, TestConditional);
|
|
|
|
|
| -(function () {
|
| function TestInitFunctionWithNoGlobals() {
|
| "use asm";
|
| function caller() {
|
| @@ -868,10 +876,8 @@ function TestInitFunctionWithNoGlobals() {
|
| return {caller};
|
| }
|
|
|
| -var module = Wasm.instantiateModuleFromAsm(
|
| - TestInitFunctionWithNoGlobals.toString(), stdlib);
|
| -assertEquals(51, module.caller());
|
| -})();
|
| +assertWasm(51, TestInitFunctionWithNoGlobals);
|
| +
|
|
|
| (function () {
|
| function TestExportNameDifferentFromFunctionName() {
|
| @@ -882,11 +888,14 @@ function TestExportNameDifferentFromFunctionName() {
|
| return {alt_caller:caller};
|
| }
|
|
|
| -var module = Wasm.instantiateModuleFromAsm(
|
| - TestExportNameDifferentFromFunctionName.toString(), stdlib);
|
| +var module_decl = eval(
|
| + '(' + TestExportNameDifferentFromFunctionName.toString() + ')');
|
| +var module = module_decl(stdlib);
|
| +assertValidAsm(module_decl);
|
| assertEquals(55, module.alt_caller());
|
| })();
|
|
|
| +
|
| function TestFunctionTableSingleFunction() {
|
| "use asm";
|
|
|
| @@ -940,7 +949,7 @@ assertWasm(73, TestFunctionTableMultipleFunctions);
|
|
|
|
|
| (function () {
|
| -function TestFunctionTable() {
|
| +function TestFunctionTable(stdlib, foreign, buffer) {
|
| "use asm";
|
|
|
| function add(a, b) {
|
| @@ -979,8 +988,7 @@ function TestFunctionTable() {
|
| return {caller:caller};
|
| }
|
|
|
| -var module = Wasm.instantiateModuleFromAsm(
|
| - TestFunctionTable.toString(), stdlib);
|
| +var module = TestFunctionTable(stdlib);
|
| assertEquals(55, module.caller(0, 0, 33, 22));
|
| assertEquals(11, module.caller(0, 1, 33, 22));
|
| assertEquals(9, module.caller(0, 2, 54, 45));
|
| @@ -1026,8 +1034,8 @@ function TestForeignFunctions() {
|
|
|
| var foreign = new ffi(23);
|
|
|
| - var module = Wasm.instantiateModuleFromAsm(
|
| - AsmModule.toString(), stdlib, foreign, null);
|
| + var module = AsmModule({Math: Math}, foreign, null);
|
| + assertValidAsm(AsmModule);
|
|
|
| assertEquals(103, module.caller(23, 103));
|
| }
|
| @@ -1065,8 +1073,9 @@ function TestForeignFunctionMultipleUse() {
|
|
|
| var foreign = new ffi();
|
|
|
| - var module = Wasm.instantiateModuleFromAsm(
|
| - AsmModule.toString(), stdlib, foreign, null);
|
| + var module_decl = eval('(' + AsmModule.toString() + ')');
|
| + var module = module_decl(stdlib, foreign, null);
|
| + assertValidAsm(module_decl);
|
|
|
| assertEquals(89, module.caller(83, 83.25));
|
| }
|
| @@ -1104,8 +1113,9 @@ function TestForeignVariables() {
|
|
|
| function TestCase(env, i1, f1, i2, f2) {
|
| print("Testing foreign variables...");
|
| - var module = Wasm.instantiateModuleFromAsm(
|
| - AsmModule.toString(), stdlib, env);
|
| + var module_decl = eval('(' + AsmModule.toString() + ')');
|
| + var module = module_decl(stdlib, env);
|
| + assertValidAsm(module_decl);
|
| assertEquals(i1, module.geti1());
|
| assertEquals(f1, module.getf1());
|
| assertEquals(i2, module.geti2());
|
| @@ -1196,8 +1206,9 @@ TestForeignVariables();
|
| return {load: load, iload: iload, store: store, storeb: storeb};
|
| }
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(
|
| - TestByteHeapAccessCompat.toString(), stdlib);
|
| + var module_decl = eval('(' + TestByteHeapAccessCompat.toString() + ')');
|
| + var m = module_decl(stdlib);
|
| + assertValidAsm(module_decl);
|
| m.store(0, 20);
|
| m.store(4, 21);
|
| m.store(8, 22);
|
| @@ -1246,8 +1257,9 @@ assertWasm(15, TestGlobalBlock, { x: 4, y: 11 });
|
| return {ifunc: ifunc, dfunc: dfunc};
|
| }
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(
|
| - CommaModule.toString(), stdlib);
|
| + var module_decl = eval('(' + CommaModule.toString() + ')');
|
| + var m = module_decl(stdlib);
|
| + assertValidAsm(module_decl);
|
| assertEquals(123, m.ifunc(456.7, 123));
|
| assertEquals(123.4, m.dfunc(456, 123.4));
|
| })();
|
| @@ -1304,78 +1316,62 @@ function TestXor() {
|
| assertWasm(1, TestXor);
|
|
|
|
|
| -(function TestIntishAssignment() {
|
| - function Module(stdlib, foreign, heap) {
|
| - "use asm";
|
| - var HEAP32 = new stdlib.Int32Array(heap);
|
| - function func() {
|
| - var a = 1;
|
| - var b = 2;
|
| - HEAP32[0] = a + b;
|
| - return HEAP32[0] | 0;
|
| - }
|
| - return {func: func};
|
| +function TestIntishAssignment(stdlib, foreign, heap) {
|
| + "use asm";
|
| + var HEAP32 = new stdlib.Int32Array(heap);
|
| + function func() {
|
| + var a = 1;
|
| + var b = 2;
|
| + HEAP32[0] = a + b;
|
| + return HEAP32[0] | 0;
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(
|
| - Module.toString(), stdlib);
|
| - assertEquals(3, m.func());
|
| -})();
|
| +assertWasm(3, TestIntishAssignment);
|
|
|
|
|
| -(function TestFloatishAssignment() {
|
| - function Module(stdlib, foreign, heap) {
|
| - "use asm";
|
| - var HEAPF32 = new stdlib.Float32Array(heap);
|
| - var fround = stdlib.Math.fround;
|
| - function func() {
|
| - var a = fround(1.0);
|
| - var b = fround(2.0);
|
| - HEAPF32[0] = a + b;
|
| - return +HEAPF32[0];
|
| - }
|
| - return {func: func};
|
| +function TestFloatishAssignment(stdlib, foreign, heap) {
|
| + "use asm";
|
| + var HEAPF32 = new stdlib.Float32Array(heap);
|
| + var fround = stdlib.Math.fround;
|
| + function func() {
|
| + var a = fround(1.0);
|
| + var b = fround(2.0);
|
| + HEAPF32[0] = a + b;
|
| + return +HEAPF32[0];
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(
|
| - Module.toString(), stdlib);
|
| - assertEquals(3, m.func());
|
| -})();
|
| +assertWasm(3, TestFloatishAssignment);
|
|
|
|
|
| -(function TestDoubleToFloatAssignment() {
|
| - function Module(stdlib, foreign, heap) {
|
| - "use asm";
|
| - var HEAPF32 = new stdlib.Float32Array(heap);
|
| - var fround = stdlib.Math.fround;
|
| - function func() {
|
| - var a = 1.23;
|
| - HEAPF32[0] = a;
|
| - return +HEAPF32[0];
|
| - }
|
| - return {func: func};
|
| +function TestDoubleToFloatAssignment(stdlib, foreign, heap) {
|
| + "use asm";
|
| + var HEAPF32 = new stdlib.Float32Array(heap);
|
| + var fround = stdlib.Math.fround;
|
| + function func() {
|
| + var a = 1.23;
|
| + HEAPF32[0] = a;
|
| + return +HEAPF32[0];
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(
|
| - Module.toString(), stdlib);
|
| - assertEquals(1.23, m.func());
|
| -});
|
| +assertWasm(Math.fround(1.23), TestDoubleToFloatAssignment);
|
|
|
|
|
| -(function TestIntegerMultiplyBothWays() {
|
| - function Module(stdlib, foreign, heap) {
|
| - "use asm";
|
| - function func() {
|
| - var a = 1;
|
| - return (((a * 3)|0) + ((4 * a)|0)) | 0;
|
| - }
|
| - return {func: func};
|
| +function TestIntegerMultiplyBothWays(stdlib, foreign, heap) {
|
| + "use asm";
|
| + function func() {
|
| + var a = 1;
|
| + return (((a * 3)|0) + ((4 * a)|0)) | 0;
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(
|
| - Module.toString(), stdlib);
|
| - assertEquals(7, m.func());
|
| -})();
|
| +assertWasm(7, TestIntegerMultiplyBothWays);
|
|
|
|
|
| (function TestBadAssignDoubleFromIntish() {
|
| @@ -1388,9 +1384,8 @@ assertWasm(1, TestXor);
|
| }
|
| return {func: func};
|
| }
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - });
|
| + Module(stdlib);
|
| + assertTrue(%IsNotAsmWasmCode(Module));
|
| })();
|
|
|
|
|
| @@ -1404,9 +1399,8 @@ assertWasm(1, TestXor);
|
| }
|
| return {func: func};
|
| }
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - });
|
| + Module(stdlib);
|
| + assertTrue(%IsNotAsmWasmCode(Module));
|
| })();
|
|
|
|
|
| @@ -1419,9 +1413,8 @@ assertWasm(1, TestXor);
|
| }
|
| return {func: func};
|
| }
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - });
|
| + Module(stdlib);
|
| + assertTrue(%IsNotAsmWasmCode(Module));
|
| })();
|
|
|
|
|
| @@ -1434,44 +1427,37 @@ assertWasm(1, TestXor);
|
| }
|
| return {func: func};
|
| }
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - });
|
| + Module(stdlib);
|
| + assertTrue(%IsNotAsmWasmCode(Module));
|
| })();
|
|
|
|
|
| -(function TestAndNegative() {
|
| - function Module() {
|
| - "use asm";
|
| - function func() {
|
| - var x = 1;
|
| - var y = 2;
|
| - var z = 0;
|
| - z = x + y & -1;
|
| - return z | 0;
|
| - }
|
| - return {func: func};
|
| +function TestAndNegative() {
|
| + "use asm";
|
| + function func() {
|
| + var x = 1;
|
| + var y = 2;
|
| + var z = 0;
|
| + z = x + y & -1;
|
| + return z | 0;
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - assertEquals(3, m.func());
|
| -})();
|
| +assertWasm(3, TestAndNegative);
|
|
|
|
|
| -(function TestNegativeDouble() {
|
| - function Module() {
|
| - "use asm";
|
| - function func() {
|
| - var x = -(34359738368.25);
|
| - var y = -2.5;
|
| - return +(x + y);
|
| - }
|
| - return {func: func};
|
| +function TestNegativeDouble() {
|
| + "use asm";
|
| + function func() {
|
| + var x = -(34359738368.25);
|
| + var y = -2.5;
|
| + return +(x + y);
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - assertEquals(-34359738370.75, m.func());
|
| -})();
|
| +assertWasm(-34359738370.75, TestNegativeDouble);
|
|
|
|
|
| (function TestBadAndDouble() {
|
| @@ -1485,42 +1471,38 @@ assertWasm(1, TestXor);
|
| return {func: func};
|
| }
|
|
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - });
|
| + Module(stdlib);
|
| + assertTrue(%IsNotAsmWasmCode(Module));
|
| })();
|
|
|
|
|
| -(function TestAndIntAndHeapValue() {
|
| - function Module(stdlib, foreign, buffer) {
|
| - "use asm";
|
| - var HEAP32 = new stdlib.Int32Array(buffer);
|
| - function func() {
|
| - var x = 0;
|
| - x = HEAP32[0] & -1;
|
| - return x | 0;
|
| - }
|
| - return {func: func};
|
| +function TestAndIntAndHeapValue(stdlib, foreign, buffer) {
|
| + "use asm";
|
| + var HEAP32 = new stdlib.Int32Array(buffer);
|
| + function func() {
|
| + var x = 0;
|
| + x = HEAP32[0] & -1;
|
| + return x | 0;
|
| }
|
| + return {caller: func};
|
| +}
|
|
|
| - var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib);
|
| - assertEquals(0, m.func());
|
| -})();
|
| +assertWasm(0, TestAndIntAndHeapValue);
|
|
|
| -(function TestOutOfBoundsConversion() {
|
| - function asmModule($a,$b,$c){'use asm';
|
| - function aaa() {
|
| - var f = 0.0;
|
| - var a = 0;
|
| - f = 5616315000.000001;
|
| - a = ~~f >>>0;
|
| - return a | 0;
|
| - }
|
| - return { main : aaa };
|
| +
|
| +function TestOutOfBoundsConversion($a,$b,$c){'use asm';
|
| + function aaa() {
|
| + var f = 0.0;
|
| + var a = 0;
|
| + f = 5616315000.000001;
|
| + a = ~~f >>>0;
|
| + return a | 0;
|
| }
|
| - var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
|
| - assertEquals(1321347704, wasm.main());
|
| -})();
|
| + return { caller : aaa };
|
| +}
|
| +
|
| +assertWasm(1321347704, TestOutOfBoundsConversion);
|
| +
|
|
|
| (function TestUnsignedLiterals() {
|
| function asmModule() {
|
| @@ -1543,71 +1525,59 @@ assertWasm(1, TestXor);
|
| u0x87654321: u0x87654321,
|
| };
|
| }
|
| - var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
|
| + var decl = eval('(' + asmModule.toString() + ')');
|
| + var wasm = decl(stdlib);
|
| + assertValidAsm(decl);
|
| assertEquals(0xffffffff, wasm.u0xffffffff());
|
| assertEquals(0x80000000, wasm.u0x80000000());
|
| assertEquals(0x87654321, wasm.u0x87654321());
|
| })();
|
|
|
| -(function TestBadNoDeclaration() {
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm('33;', stdlib);
|
| - });
|
| -})();
|
| -
|
| -(function TestBadVarDeclaration() {
|
| - assertThrows(function() {
|
| - Wasm.instantiateModuleFromAsm('var x = 3;', stdlib);
|
| - });
|
| -})();
|
|
|
| -(function TestIfWithUnsigned() {
|
| - function asmModule() {
|
| - "use asm";
|
| - function main() {
|
| - if (2147483658) { // 2^31 + 10
|
| - return 231;
|
| - }
|
| - return 0;
|
| +function TestIfWithUnsigned() {
|
| + "use asm";
|
| + function main() {
|
| + if (2147483658) { // 2^31 + 10
|
| + return 231;
|
| }
|
| - return {main:main};
|
| + return 0;
|
| }
|
| - var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
|
| - assertEquals(231, wasm.main());
|
| -})();
|
| + return {caller:main};
|
| +}
|
|
|
| -(function TestLoopsWithUnsigned() {
|
| - function asmModule() {
|
| - "use asm";
|
| - function main() {
|
| - var val = 1;
|
| - var count = 0;
|
| - for (val = 2147483648; 2147483648;) {
|
| - val = 2147483649;
|
| +assertWasm(231, TestIfWithUnsigned);
|
| +
|
| +
|
| +function TestLoopsWithUnsigned() {
|
| + "use asm";
|
| + function main() {
|
| + var val = 1;
|
| + var count = 0;
|
| + for (val = 2147483648; 2147483648;) {
|
| + val = 2147483649;
|
| + break;
|
| + }
|
| + while (val>>>0) {
|
| + val = (val + 1) | 0;
|
| + count = (count + 1)|0;
|
| + if ((count|0) == 9) {
|
| break;
|
| }
|
| - while (val>>>0) {
|
| - val = (val + 1) | 0;
|
| - count = (count + 1)|0;
|
| - if ((count|0) == 9) {
|
| - break;
|
| - }
|
| - }
|
| - count = 0;
|
| - do {
|
| - val = (val + 2) | 0;
|
| - count = (count + 1)|0;
|
| - if ((count|0) == 5) {
|
| - break;
|
| - }
|
| - } while (0xffffffff);
|
| - if ((val>>>0) == 2147483668) {
|
| - return 323;
|
| + }
|
| + count = 0;
|
| + do {
|
| + val = (val + 2) | 0;
|
| + count = (count + 1)|0;
|
| + if ((count|0) == 5) {
|
| + break;
|
| }
|
| - return 0;
|
| + } while (0xffffffff);
|
| + if ((val>>>0) == 2147483668) {
|
| + return 323;
|
| }
|
| - return {main:main};
|
| + return 0;
|
| }
|
| - var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString(), stdlib);
|
| - assertEquals(323, wasm.main());
|
| -})();
|
| + return {caller:main};
|
| +}
|
| +
|
| +assertWasm(323, TestLoopsWithUnsigned);
|
|
|