diff options
author | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-03-01 08:58:05 -0800 |
---|---|---|
committer | Ali Sheikh <ofrobots@lemonhope.roam.corp.google.com> | 2016-03-03 20:35:20 -0800 |
commit | 069e02ab47656b3efd1b6829c65856b2e1c2d1db (patch) | |
tree | eb643e0a2e88fd64bb9fc927423458d2ae96c2db /deps/v8/test/mjsunit/wasm/asm-wasm.js | |
parent | 8938355398c79f583a468284b768652d12ba9bc9 (diff) | |
download | node-new-069e02ab47656b3efd1b6829c65856b2e1c2d1db.tar.gz |
deps: upgrade to V8 4.9.385.18
Pick up the current branch head for V8 4.9
https://github.com/v8/v8/commit/1ecba0f
PR-URL: https://github.com/nodejs/node/pull/4722
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michaƫl Zasso <mic.besace@gmail.com>
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/asm-wasm.js')
-rw-r--r-- | deps/v8/test/mjsunit/wasm/asm-wasm.js | 785 |
1 files changed, 785 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/wasm/asm-wasm.js b/deps/v8/test/mjsunit/wasm/asm-wasm.js new file mode 100644 index 0000000000..8dfe85aee1 --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/asm-wasm.js @@ -0,0 +1,785 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --expose-wasm + +function EmptyTest() { + "use asm"; + function caller() { + empty(); + return 11; + } + function empty() { + } + return {caller: caller}; +} + +assertEquals(11, _WASMEXP_.asmCompileRun(EmptyTest.toString())); + +function IntTest() { + "use asm"; + function sum(a, b) { + a = a|0; + b = b|0; + var c = (b + 1)|0 + var d = 3.0; + var e = d | 0; // double conversion + return (a + c + 1)|0; + } + + function caller() { + return sum(77,22) | 0; + } + + return {caller: caller}; +} + +assertEquals(101, _WASMEXP_.asmCompileRun(IntTest.toString())); + +function Float64Test() { + "use asm"; + function sum(a, b) { + a = +a; + b = +b; + return +(a + b); + } + + function caller() { + var a = +sum(70.1,10.2); + var ret = 0|0; + if (a == 80.3) { + ret = 1|0; + } else { + ret = 0|0; + } + return ret|0; + } + + return {caller: caller}; +} + +assertEquals(1, _WASMEXP_.asmCompileRun(Float64Test.toString())); + +function BadModule() { + "use asm"; + function caller(a, b) { + a = a|0; + b = b+0; + var c = (b + 1)|0 + return (a + c + 1)|0; + } + + function caller() { + return call(1, 2)|0; + } + + return {caller: caller}; +} + +assertThrows(function() { + _WASMEXP_.asmCompileRun(BadModule.toString()) +}); + +function TestReturnInBlock() { + "use asm"; + + function caller() { + if(1) { + { + { + return 1; + } + } + } + return 0; + } + + return {caller: caller}; +} + +assertEquals(1, _WASMEXP_.asmCompileRun(TestReturnInBlock.toString())); + +function TestWhileSimple() { + "use asm"; + + function caller() { + var x = 0; + while(x < 5) { + x = (x + 1)|0; + } + return x|0; + } + + return {caller: caller}; +} + +assertEquals(5, _WASMEXP_.asmCompileRun(TestWhileSimple.toString())); + +function TestWhileWithoutBraces() { + "use asm"; + + function caller() { + var x = 0; + while(x <= 3) + x = (x + 1)|0; + return x|0; + } + + return {caller: caller}; +} + +assertEquals(4, _WASMEXP_.asmCompileRun(TestWhileWithoutBraces.toString())); + +function TestReturnInWhile() { + "use asm"; + + function caller() { + var x = 0; + while(x < 10) { + x = (x + 6)|0; + return x|0; + } + return x|0; + } + + return {caller: caller}; +} + +assertEquals(6, _WASMEXP_.asmCompileRun(TestReturnInWhile.toString())); + +function TestReturnInWhileWithoutBraces() { + "use asm"; + + function caller() { + var x = 0; + while(x < 5) + return 7; + return x|0; + } + + return {caller: caller}; +} + +assertEquals(7, _WASMEXP_.asmCompileRun(TestReturnInWhileWithoutBraces.toString())); + +function TestBreakInWhile() { + "use asm"; + + function caller() { + while(1) { + break; + } + return 8; + } + + return {caller: caller}; +} + +assertEquals(8, _WASMEXP_.asmCompileRun(TestBreakInWhile.toString())); + +function TestBreakInNestedWhile() { + "use asm"; + + function caller() { + var x = 1.0; + while(x < 1.5) { + while(1) + break; + x = +(x + 0.25); + } + var ret = 0; + if (x == 1.5) { + ret = 9; + } + return ret|0; + } + + return {caller: caller}; +} + +assertEquals(9, _WASMEXP_.asmCompileRun(TestBreakInNestedWhile.toString())); + +function TestBreakInBlock() { + "use asm"; + + function caller() { + var x = 0; + abc: { + x = 10; + if (x == 10) { + break abc; + } + x = 20; + } + return x|0; + } + + return {caller: caller}; +} + +assertEquals(10, _WASMEXP_.asmCompileRun(TestBreakInBlock.toString())); + +function TestBreakInNamedWhile() { + "use asm"; + + function caller() { + var x = 0; + outer: while (1) { + x = (x + 1)|0; + while (x == 11) { + break outer; + } + } + return x|0; + } + + return {caller: caller}; +} + +assertEquals(11, _WASMEXP_.asmCompileRun(TestBreakInNamedWhile.toString())); + +function TestContinue() { + "use asm"; + + function caller() { + var x = 5; + var ret = 0; + while (x >= 0) { + x = (x - 1)|0; + if (x == 2) { + continue; + } + ret = (ret - 1)|0; + } + return ret|0; + } + + return {caller: caller}; +} + +assertEquals(-5, _WASMEXP_.asmCompileRun(TestContinue.toString())); + +function TestContinueInNamedWhile() { + "use asm"; + + function caller() { + var x = 5; + var y = 0; + var ret = 0; + outer: while (x > 0) { + x = (x - 1)|0; + y = 0; + while (y < 5) { + if (x == 3) { + continue outer; + } + ret = (ret + 1)|0; + y = (y + 1)|0; + } + } + return ret|0; + } + + return {caller: caller}; +} + +assertEquals(20, _WASMEXP_.asmCompileRun(TestContinueInNamedWhile.toString())); + +function TestNot() { + "use asm"; + + function caller() { + var a = !(2 > 3); + return a | 0; + } + + return {caller:caller}; +} + +assertEquals(1, _WASMEXP_.asmCompileRun(TestNot.toString())); + +function TestNotEquals() { + "use asm"; + + function caller() { + var a = 3; + if (a != 2) { + return 21; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(21, _WASMEXP_.asmCompileRun(TestNotEquals.toString())); + +function TestUnsignedComparison() { + "use asm"; + + function caller() { + var a = 0xffffffff; + if ((a>>>0) > (0>>>0)) { + return 22; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(22, _WASMEXP_.asmCompileRun(TestUnsignedComparison.toString())); + +function TestMixedAdd() { + "use asm"; + + function caller() { + var a = 0x80000000; + var b = 0x7fffffff; + var c = 0; + c = ((a>>>0) + b)|0; + if ((c >>> 0) > (0>>>0)) { + if (c < 0) { + return 23; + } + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(23, _WASMEXP_.asmCompileRun(TestMixedAdd.toString())); + +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}; +} + +assertEquals(7, _WASMEXP_.asmCompileRun(TestInt32HeapAccess.toString())); + +function TestHeapAccessIntTypes() { + var types = [ + ['Int8Array', '>> 0'], + ['Uint8Array', '>> 0'], + ['Int16Array', '>> 1'], + ['Uint16Array', '>> 1'], + ['Int32Array', '>> 2'], + ['Uint32Array', '>> 2'], + ]; + for (var i = 0; i < types.length; i++) { + var code = TestInt32HeapAccess.toString(); + code = code.replace('Int32Array', types[i][0]); + code = code.replace(/>> 2/g, types[i][1]); + assertEquals(7, _WASMEXP_.asmCompileRun(code)); + } +} + +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; + + // TODO(bradnelson): Add float32 when asm-wasm supports it. + 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}; +} + +assertEquals(1, _WASMEXP_.asmCompileRun(TestFloatHeapAccess.toString())); + +function TestConvertI32() { + "use asm"; + + function caller() { + var a = 1.5; + if ((~~(a + a)) == 3) { + return 24; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(24, _WASMEXP_.asmCompileRun(TestConvertI32.toString())); + +function TestConvertF64FromInt() { + "use asm"; + + function caller() { + var a = 1; + if ((+(a + a)) > 1.5) { + return 25; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(25, _WASMEXP_.asmCompileRun(TestConvertF64FromInt.toString())); + +function TestConvertF64FromUnsigned() { + "use asm"; + + function caller() { + var a = 0xffffffff; + if ((+(a>>>0)) > 0.0) { + if((+a) < 0.0) { + return 26; + } + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(26, _WASMEXP_.asmCompileRun(TestConvertF64FromUnsigned.toString())); + +function TestModInt() { + "use asm"; + + function caller() { + var a = -83; + var b = 28; + return ((a|0)%(b|0))|0; + } + + return {caller:caller}; +} + +assertEquals(-27, _WASMEXP_.asmCompileRun(TestModInt.toString())); + +function TestModUnsignedInt() { + "use asm"; + + function caller() { + var a = 0x80000000; //2147483648 + var b = 10; + return ((a>>>0)%(b>>>0))|0; + } + + return {caller:caller}; +} + +assertEquals(8, _WASMEXP_.asmCompileRun(TestModUnsignedInt.toString())); + +function TestModDouble() { + "use asm"; + + function caller() { + var a = 5.25; + var b = 2.5; + if (a%b == 0.25) { + return 28; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(28, _WASMEXP_.asmCompileRun(TestModDouble.toString())); + +/* +TODO: Fix parsing of negative doubles + Fix code to use trunc instead of casts +function TestModDoubleNegative() { + "use asm"; + + function caller() { + var a = -34359738368.25; + var b = 2.5; + if (a%b == -0.75) { + return 28; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(28, _WASMEXP_.asmCompileRun(TestModDoubleNegative.toString())); +*/ + +function TestNamedFunctions() { + "use asm"; + + var a = 0.0; + var b = 0.0; + + function add() { + return +(a + b); + } + + function init() { + a = 43.25; + b = 34.25; + } + + return {init:init, + add:add}; +} + +var module = _WASMEXP_.instantiateModuleFromAsm(TestNamedFunctions.toString()); +module.init(); +assertEquals(77.5, module.add()); + +function TestGlobalsWithInit() { + "use asm"; + + var a = 43.25; + var b = 34.25; + + function add() { + return +(a + b); + } + + return {add:add}; +} + +var module = _WASMEXP_.instantiateModuleFromAsm(TestGlobalsWithInit.toString()); +module.__init__(); +assertEquals(77.5, module.add()); + +function TestForLoop() { + "use asm" + + function caller() { + var ret = 0; + var i = 0; + for (i = 2; i <= 10; i = (i+1)|0) { + ret = (ret + i) | 0; + } + return ret|0; + } + + return {caller:caller}; +} + +assertEquals(54, _WASMEXP_.asmCompileRun(TestForLoop.toString())); + +function TestForLoopWithoutInit() { + "use asm" + + function caller() { + var ret = 0; + var i = 0; + for (; i < 10; i = (i+1)|0) { + ret = (ret + 10) | 0; + } + return ret|0; + } + + return {caller:caller}; +} + +assertEquals(100, _WASMEXP_.asmCompileRun(TestForLoopWithoutInit.toString())); + +function TestForLoopWithoutCondition() { + "use asm" + + function caller() { + var ret = 0; + var i = 0; + for (i=1;; i = (i+1)|0) { + ret = (ret + i) | 0; + if (i == 11) { + break; + } + } + return ret|0; + } + + return {caller:caller}; +} + +assertEquals(66, _WASMEXP_.asmCompileRun(TestForLoopWithoutCondition.toString())); + +function TestForLoopWithoutNext() { + "use asm" + + function caller() { + var i = 0; + for (i=1; i < 41;) { + i = (i + 1) | 0; + } + return i|0; + } + + return {caller:caller}; +} + +assertEquals(41, _WASMEXP_.asmCompileRun(TestForLoopWithoutNext.toString())); + +function TestForLoopWithoutBody() { + "use asm" + + function caller() { + var i = 0; + for (i=1; i < 45 ; i = (i+1)|0) { + } + return i|0; + } + + return {caller:caller}; +} + +assertEquals(45, _WASMEXP_.asmCompileRun(TestForLoopWithoutBody.toString())); + +function TestDoWhile() { + "use asm" + + function caller() { + var i = 0; + var ret = 21; + do { + ret = (ret + ret)|0; + i = (i + 1)|0; + } while (i < 2); + return ret|0; + } + + return {caller:caller}; +} + +assertEquals(84, _WASMEXP_.asmCompileRun(TestDoWhile.toString())); + +function TestConditional() { + "use asm" + + function caller() { + var x = 1; + return ((x > 0) ? 41 : 71)|0; + } + + return {caller:caller}; +} + +assertEquals(41, _WASMEXP_.asmCompileRun(TestConditional.toString())); + +function TestSwitch() { + "use asm" + + function caller() { + var ret = 0; + var x = 7; + switch (x) { + case 1: return 0; + case 7: { + ret = 12; + break; + } + default: return 0; + } + switch (x) { + case 1: return 0; + case 8: return 0; + default: ret = (ret + 11)|0; + } + return ret|0; + } + + return {caller:caller}; +} + +assertEquals(23, _WASMEXP_.asmCompileRun(TestSwitch.toString())); + +function TestSwitchFallthrough() { + "use asm" + + function caller() { + var x = 17; + var ret = 0; + switch (x) { + case 17: + case 14: ret = 39; + case 1: ret = (ret + 3)|0; + case 4: break; + default: ret = (ret + 1)|0; + } + return ret|0; + } + + return {caller:caller}; +} + +assertEquals(42, _WASMEXP_.asmCompileRun(TestSwitchFallthrough.toString())); + +function TestNestedSwitch() { + "use asm" + + function caller() { + var x = 3; + var y = -13; + switch (x) { + case 1: return 0; + case 3: { + switch (y) { + case 2: return 0; + case -13: return 43; + default: return 0; + } + } + default: return 0; + } + return 0; + } + + return {caller:caller}; +} + +assertEquals(43, _WASMEXP_.asmCompileRun(TestNestedSwitch.toString())); + +function TestInitFunctionWithNoGlobals() { + "use asm"; + function caller() { + return 51; + } + return {caller}; +} + +var module = _WASMEXP_.instantiateModuleFromAsm( + TestInitFunctionWithNoGlobals.toString()); +module.__init__(); +assertEquals(51, module.caller()); + +function TestExportNameDifferentFromFunctionName() { + "use asm"; + function caller() { + return 55; + } + return {alt_caller:caller}; +} + +var module = _WASMEXP_.instantiateModuleFromAsm( + TestExportNameDifferentFromFunctionName.toString()); +module.__init__(); +assertEquals(55, module.alt_caller()); |