diff options
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/parallel_compilation.js')
-rw-r--r-- | deps/v8/test/mjsunit/wasm/parallel_compilation.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/wasm/parallel_compilation.js b/deps/v8/test/mjsunit/wasm/parallel_compilation.js new file mode 100644 index 0000000000..23c5658dcd --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/parallel_compilation.js @@ -0,0 +1,100 @@ +// Copyright 2016 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 --wasm-num-compilation-tasks=10 + +load("test/mjsunit/wasm/wasm-constants.js"); +load("test/mjsunit/wasm/wasm-module-builder.js"); + +function assertModule(module, memsize) { + // Check the module exists. + assertFalse(module === undefined); + assertFalse(module === null); + assertFalse(module === 0); + assertEquals("object", typeof module); + + // Check the memory is an ArrayBuffer. + var mem = module.exports.memory; + assertFalse(mem === undefined); + assertFalse(mem === null); + assertFalse(mem === 0); + assertEquals("object", typeof mem); + assertTrue(mem instanceof ArrayBuffer); + for (var i = 0; i < 4; i++) { + module.exports.memory = 0; // should be ignored + assertEquals(mem, module.exports.memory); + } + + assertEquals(memsize, module.exports.memory.byteLength); +} + +function assertFunction(module, func) { + assertEquals("object", typeof module.exports); + + var exp = module.exports[func]; + assertFalse(exp === undefined); + assertFalse(exp === null); + assertFalse(exp === 0); + assertEquals("function", typeof exp); + return exp; +} + +(function CompileFunctionsTest() { + + var builder = new WasmModuleBuilder(); + + builder.addMemory(1, 1, true); + for (i = 0; i < 1000; i++) { + builder.addFunction("sub" + i, kSig_i_i) + .addBody([ // -- + kExprGetLocal, 0, // -- + kExprI32Const, i % 61, // -- + kExprI32Sub]) // -- + .exportFunc() + } + + var module = builder.instantiate(); + assertModule(module, kPageSize); + + // Check the properties of the functions. + for (i = 0; i < 1000; i++) { + var sub = assertFunction(module, "sub" + i); + assertEquals(33 - (i % 61), sub(33)); + } +})(); + +(function CallFunctionsTest() { + + var builder = new WasmModuleBuilder(); + + var f = [] + + f[0] = builder.addFunction("add0", kSig_i_ii) + .addBody([ + kExprGetLocal, 0, // -- + kExprGetLocal, 1, // -- + kExprI32Add, // -- + ]) + .exportFunc() + + builder.addMemory(1, 1, true); + for (i = 1; i < 256; i++) { + f[i] = builder.addFunction("add" + i, kSig_i_ii) + .addBody([ // -- + kExprGetLocal, 0, // -- + kExprGetLocal, 1, // -- + kExprCallFunction, kArity2, f[i >>> 1].index]) // -- + .exportFunc() + } + var module = builder.instantiate(); + assertModule(module, kPageSize); + + // Check the properties of the functions. + for (i = 0; i < 256; i++) { + var add = assertFunction(module, "add" + i); + assertEquals(88, add(33, 55)); + assertEquals(88888, add(33333, 55555)); + assertEquals(8888888, add(3333333, 5555555)); + } +})(); |