diff options
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/huge-memory.js')
-rw-r--r-- | deps/v8/test/mjsunit/wasm/huge-memory.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/wasm/huge-memory.js b/deps/v8/test/mjsunit/wasm/huge-memory.js new file mode 100644 index 0000000000..9719ad4a28 --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/huge-memory.js @@ -0,0 +1,76 @@ +// Copyright 2017 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: --wasm-max-mem-pages=49152 + +// This test makes sure things don't break once we support >2GB wasm memories. +load("test/mjsunit/wasm/wasm-constants.js"); +load("test/mjsunit/wasm/wasm-module-builder.js"); + +function testHugeMemory() { + var builder = new WasmModuleBuilder(); + + const num_pages = 49152; // 3GB + + builder.addMemory(num_pages, num_pages, true); + builder.addFunction("geti", kSig_i_ii) + .addBody([ + kExprGetLocal, 0, + kExprGetLocal, 1, + kExprI32Mul, + kExprI32LoadMem, 0, 0, + ]) + .exportFunc(); + + var module = builder.instantiate(); + const geti = module.exports.geti; + + print("In bounds"); + assertEquals(0, geti(2500, 1 << 20)); + print("Out of bounds"); + assertTraps(kTrapMemOutOfBounds, () => geti(3500, 1 << 20)); +} +testHugeMemory(); + +function testHugeMemoryConstInBounds() { + var builder = new WasmModuleBuilder(); + + const num_pages = 49152; // 3GB + + builder.addMemory(num_pages, num_pages, true); + builder.addFunction("geti", kSig_i_v) + .addBody([ + kExprI32Const, 0x80, 0x80, 0x80, 0x80, 0x7A, // 0xA0000000, 2.5GB + kExprI32LoadMem, 0, 0, + ]) + .exportFunc(); + + var module = builder.instantiate(); + const geti = module.exports.geti; + + print("In bounds"); + assertEquals(0, geti()); +} +testHugeMemoryConstInBounds(); + +function testHugeMemoryConstOutOfBounds() { + var builder = new WasmModuleBuilder(); + + const num_pages = 49152; // 3GB + + builder.addMemory(num_pages, num_pages, true); + builder.addFunction("geti", kSig_i_v) + .addBody([ + kExprI32Const, 0x80, 0x80, 0x80, 0x80, 0x7E, // 0xE0000000, 3.5GB + kExprI32LoadMem, 0, 0, + ]) + .exportFunc(); + + var module = builder.instantiate(); + const geti = module.exports.geti; + + print("Out of bounds"); + assertTraps(kTrapMemOutOfBounds, geti); +} +testHugeMemoryConstOutOfBounds(); |