summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/wasm/asm-wasm.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/asm-wasm.js')
-rw-r--r--deps/v8/test/mjsunit/wasm/asm-wasm.js356
1 files changed, 2 insertions, 354 deletions
diff --git a/deps/v8/test/mjsunit/wasm/asm-wasm.js b/deps/v8/test/mjsunit/wasm/asm-wasm.js
index 71c6b10490..97219f113b 100644
--- a/deps/v8/test/mjsunit/wasm/asm-wasm.js
+++ b/deps/v8/test/mjsunit/wasm/asm-wasm.js
@@ -5,6 +5,7 @@
// Flags: --validate-asm --allow-natives-syntax
var stdlib = this;
+let kMinHeapSize = 4096;
function assertValidAsm(func) {
assertTrue(%IsAsmWasmCode(func), "must be valid asm code");
@@ -13,7 +14,7 @@ function assertValidAsm(func) {
function assertWasm(expected, func, ffi) {
print("Testing " + func.name + "...");
assertEquals(
- expected, func(stdlib, ffi, new ArrayBuffer(1024)).caller());
+ expected, func(stdlib, ffi, new ArrayBuffer(kMinHeapSize)).caller());
assertValidAsm(func);
}
@@ -514,100 +515,6 @@ function TestMixedAdd() {
assertWasm(23, TestMixedAdd);
-function TestInt32HeapAccess(stdlib, foreign, buffer) {
- "use asm";
-
- var m = new stdlib.Int32Array(buffer);
- function caller() {
- var i = 4;
-
- m[0] = (i + 1) | 0;
- m[i >> 2] = ((m[0]|0) + 1) | 0;
- m[2] = ((m[i >> 2]|0) + 1) | 0;
- return m[2] | 0;
- }
-
- return {caller: caller};
-}
-
-assertWasm(7, TestInt32HeapAccess);
-
-
-function TestInt32HeapAccessExternal() {
- var memory = new ArrayBuffer(1024);
- var memory_int32 = new Int32Array(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]);
-}
-
-TestInt32HeapAccessExternal();
-
-
-function TestHeapAccessIntTypes() {
- var types = [
- [Int8Array, 'Int8Array', '>> 0'],
- [Uint8Array, 'Uint8Array', '>> 0'],
- [Int16Array, 'Int16Array', '>> 1'],
- [Uint16Array, 'Uint16Array', '>> 1'],
- [Int32Array, 'Int32Array', '>> 2'],
- [Uint32Array, 'Uint32Array', '>> 2'],
- ];
- for (var i = 0; i < types.length; i++) {
- var code = TestInt32HeapAccess.toString();
- code = code.replace('Int32Array', types[i][1]);
- code = code.replace(/>> 2/g, types[i][2]);
- var memory = new ArrayBuffer(1024);
- var memory_view = new types[i][0](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]);
- assertValidAsm(module_decl);
- }
-}
-
-TestHeapAccessIntTypes();
-
-
-function TestFloatHeapAccess(stdlib, foreign, buffer) {
- "use asm";
-
- var f32 = new stdlib.Float32Array(buffer);
- var f64 = new stdlib.Float64Array(buffer);
- var fround = stdlib.Math.fround;
- function caller() {
- var i = 8;
- var j = 8;
- var v = 6.0;
-
- f64[2] = v + 1.0;
- f64[i >> 3] = +f64[2] + 1.0;
- f64[j >> 3] = +f64[j >> 3] + 1.0;
- i = +f64[i >> 3] == 9.0;
- return i|0;
- }
-
- return {caller: caller};
-}
-
-assertWasm(1, TestFloatHeapAccess);
-
-
-function TestFloatHeapAccessExternal() {
- var memory = new ArrayBuffer(1024);
- var memory_float64 = new Float64Array(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]);
-}
-
-TestFloatHeapAccessExternal();
function TestConvertI32() {
@@ -1031,219 +938,6 @@ assertEquals(31, module.caller(1, 0, 30, 11));
})();
-function TestForeignFunctions() {
- function AsmModule(stdlib, foreign, buffer) {
- "use asm";
-
- var setVal = foreign.setVal;
- var getVal = foreign.getVal;
-
- function caller(initial_value, new_value) {
- initial_value = initial_value|0;
- new_value = new_value|0;
- if ((getVal()|0) == (initial_value|0)) {
- setVal(new_value|0);
- return getVal()|0;
- }
- return 0;
- }
-
- return {caller:caller};
- }
-
- function ffi(initial_val) {
- var val = initial_val;
-
- function getVal() {
- return val;
- }
-
- function setVal(new_val) {
- val = new_val;
- }
-
- return {getVal:getVal, setVal:setVal};
- }
-
- var foreign = new ffi(23);
-
- var module = AsmModule({Math: Math}, foreign, null);
- assertValidAsm(AsmModule);
-
- assertEquals(103, module.caller(23, 103));
-}
-
-print("TestForeignFunctions...");
-TestForeignFunctions();
-
-
-function TestForeignFunctionMultipleUse() {
- function AsmModule(stdlib, foreign, buffer) {
- "use asm";
-
- var getVal = foreign.getVal;
-
- function caller(int_val, double_val) {
- int_val = int_val|0;
- double_val = +double_val;
- if ((getVal()|0) == (int_val|0)) {
- if ((+getVal()) == (+double_val)) {
- return 89;
- }
- }
- return 0;
- }
-
- return {caller:caller};
- }
-
- function ffi() {
- function getVal() {
- return 83.25;
- }
-
- return {getVal:getVal};
- }
-
- var foreign = new ffi();
-
- var module_decl = eval('(' + AsmModule.toString() + ')');
- var module = module_decl(stdlib, foreign, null);
- assertValidAsm(module_decl);
-
- assertEquals(89, module.caller(83, 83.25));
-}
-
-print("TestForeignFunctionMultipleUse...");
-TestForeignFunctionMultipleUse();
-
-function TestForeignVariables() {
- function AsmModule(stdlib, foreign, buffer) {
- "use asm";
-
- var i1 = foreign.foo | 0;
- var f1 = +foreign.bar;
- var i2 = foreign.baz | 0;
- var f2 = +foreign.baz;
-
- function geti1() {
- return i1|0;
- }
-
- function getf1() {
- return +f1;
- }
-
- function geti2() {
- return i2|0;
- }
-
- function getf2() {
- return +f2;
- }
-
- return {geti1:geti1, getf1:getf1, geti2:geti2, getf2:getf2};
- }
-
- function TestCase(env, i1, f1, i2, f2) {
- print("Testing foreign variables...");
- 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());
- assertEquals(f2, module.getf2());
- }
-
- // Check normal operation.
- TestCase({foo: 123, bar: 234.5, baz: 345.7}, 123, 234.5, 345, 345.7);
- // Check partial operation.
- TestCase({baz: 345.7}, 0, NaN, 345, 345.7);
- // Check that undefined values are converted to proper defaults.
- TestCase({qux: 999}, 0, NaN, 0, NaN);
- // Check that true values are converted properly.
- TestCase({foo: true, bar: true, baz: true}, 1, 1.0, 1, 1.0);
- // Check that false values are converted properly.
- TestCase({foo: false, bar: false, baz: false}, 0, 0, 0, 0);
- // Check that null values are converted properly.
- TestCase({foo: null, bar: null, baz: null}, 0, 0, 0, 0);
- // Check that string values are converted properly.
- TestCase({foo: 'hi', bar: 'there', baz: 'dude'}, 0, NaN, 0, NaN);
- TestCase({foo: '0xff', bar: '234', baz: '456.1'}, 255, 234, 456, 456.1);
- // Check that function values are converted properly.
- TestCase({foo: TestCase, bar: TestCase, qux: TestCase}, 0, NaN, 0, NaN);
-}
-
-print("TestForeignVariables...");
-TestForeignVariables();
-
-
-(function() {
- function TestByteHeapAccessCompat(stdlib, foreign, buffer) {
- "use asm";
-
- var HEAP8 = new stdlib.Uint8Array(buffer);
- var HEAP32 = new stdlib.Int32Array(buffer);
-
- function store(i, v) {
- i = i | 0;
- v = v | 0;
- HEAP32[i >> 2] = v;
- }
-
- function storeb(i, v) {
- i = i | 0;
- v = v | 0;
- HEAP8[i | 0] = v;
- }
-
- function load(i) {
- i = i | 0;
- return HEAP8[i] | 0;
- }
-
- function iload(i) {
- i = i | 0;
- return HEAP8[HEAP32[i >> 2] | 0] | 0;
- }
-
- return {load: load, iload: iload, store: store, storeb: storeb};
- }
-
- var memory = new ArrayBuffer(1024);
- var module_decl = eval('(' + TestByteHeapAccessCompat.toString() + ')');
- var m = module_decl(stdlib, null, memory);
- assertValidAsm(module_decl);
- m.store(0, 20);
- m.store(4, 21);
- m.store(8, 22);
- m.storeb(20, 123);
- m.storeb(21, 42);
- m.storeb(22, 77);
- assertEquals(123, m.load(20));
- assertEquals(42, m.load(21));
- assertEquals(77, m.load(22));
- assertEquals(123, m.iload(0));
- assertEquals(42, m.iload(4));
- assertEquals(77, m.iload(8));
-})();
-
-
-function TestGlobalBlock(stdlib, foreign, buffer) {
- "use asm";
-
- var x = foreign.x | 0, y = foreign.y | 0;
-
- function test() {
- return (x + y) | 0;
- }
-
- return {caller: test};
-}
-
-assertWasm(15, TestGlobalBlock, { x: 4, y: 11 });
-
(function TestComma() {
function CommaModule() {
"use asm";
@@ -1322,52 +1016,6 @@ function TestXor() {
assertWasm(1, TestXor);
-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};
-}
-
-assertWasm(3, TestIntishAssignment);
-
-
-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};
-}
-
-assertWasm(3, TestFloatishAssignment);
-
-
-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};
-}
-
-assertWasm(Math.fround(1.23), TestDoubleToFloatAssignment);
-
-
function TestIntegerMultiplyBothWays(stdlib, foreign, heap) {
"use asm";
function func() {