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

Unified Diff: test/mjsunit/wasm/asm-wasm.js

Issue 1504713014: Initial import of v8-native WASM. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/mjsunit.status ('k') | test/mjsunit/wasm/calls.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/asm-wasm.js
diff --git a/test/mjsunit/wasm/asm-wasm.js b/test/mjsunit/wasm/asm-wasm.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a803cdcd4616982e15a82020199df9e03d1bcdf
--- /dev/null
+++ b/test/mjsunit/wasm/asm-wasm.js
@@ -0,0 +1,559 @@
+// 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.
+
+function IntTest() {
+ "use asm";
+ function sum(a, b) {
+ a = a|0;
+ b = b|0;
+ var c = (b + 1)|0
+ return (a + c + 1)|0;
+ }
+
+ function caller() {
+ return sum(77,22) | 0;
+ }
+
+ return {caller: caller};
+}
+
+assertEquals(101, WASM.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, WASM.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() {
+ WASM.asmCompileRun(BadModule.toString())
+});
+
+function TestReturnInBlock() {
+ "use asm";
+
+ function caller() {
+ if(1) {
+ {
+ {
+ return 1;
+ }
+ }
+ }
+ return 0;
+ }
+
+ return {caller: caller};
+}
+
+assertEquals(1, WASM.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, WASM.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, WASM.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, WASM.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, WASM.asmCompileRun(TestReturnInWhileWithoutBraces.toString()));
+
+function TestBreakInWhile() {
+ "use asm";
+
+ function caller() {
+ while(1) {
+ break;
+ }
+ return 8;
+ }
+
+ return {caller: caller};
+}
+
+assertEquals(8, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.asmCompileRun(TestContinueInNamedWhile.toString()));
+
+function TestNot() {
+ "use asm";
+
+ function caller() {
+ var a = !(2 > 3);
+ return a | 0;
+ }
+
+ return {caller:caller};
+}
+
+assertEquals(1, WASM.asmCompileRun(TestNot.toString()));
+
+function TestNotEquals() {
+ "use asm";
+
+ function caller() {
+ var a = 3;
+ if (a != 2) {
+ return 21;
+ }
+ return 0;
+ }
+
+ return {caller:caller};
+}
+
+assertEquals(21, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.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, WASM.asmCompileRun(TestModDoubleNegative.toString()));
+*/
+
+function TestGlobals() {
+ "use asm";
+
+ var a = 0.0;
+ var b = 0.0;
+ var c = 0.0;
+
+ function add() {
+ c = a + b;
+ }
+
+ function caller() {
+ a = 23.75;
+ b = 7.75;
+ add();
+ return (~~c)|0;
+ }
+
+ return {caller:caller};
+}
+
+assertEquals(31, WASM.asmCompileRun(TestGlobals.toString()));
+
+function TestGlobalsWithInit() {
+ "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 = WASM.instantiateModuleFromAsm(TestGlobalsWithInit.toString());
+module.init();
+assertEquals(77.5, module.add());
« no previous file with comments | « test/mjsunit/mjsunit.status ('k') | test/mjsunit/wasm/calls.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698