| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Flags: --expose-wasm | |
| 6 | |
| 7 load("test/mjsunit/wasm/wasm-constants.js"); | |
| 8 load("test/mjsunit/wasm/wasm-module-builder.js"); | |
| 9 | |
| 10 var debug = false; | |
| 11 | |
| 12 function SimpleDataSegmentTest(offset) { | |
| 13 print("SimpleDataSegmentTest(" + offset + ")..."); | |
| 14 var builder = new WasmModuleBuilder(); | |
| 15 builder.addMemory(1, 1, false); | |
| 16 builder.addFunction("load", kSig_i_i) | |
| 17 .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0]) | |
| 18 .exportAs("load"); | |
| 19 builder.addDataSegment(offset, [9, 9, 9, 9]); | |
| 20 | |
| 21 var buffer = builder.toBuffer(debug); | |
| 22 var instance = Wasm.instantiateModule(buffer); | |
| 23 for (var i = offset - 20; i < offset + 20; i += 4) { | |
| 24 if (i < 0) continue; | |
| 25 var expected = (i == offset) ? 151587081 : 0; | |
| 26 assertEquals(expected, instance.exports.load(i)); | |
| 27 } | |
| 28 } | |
| 29 | |
| 30 SimpleDataSegmentTest(0); | |
| 31 SimpleDataSegmentTest(4); | |
| 32 SimpleDataSegmentTest(12); | |
| 33 SimpleDataSegmentTest(1064); | |
| 34 | |
| 35 function GlobalInitTest(offset) { | |
| 36 print("GlobalInitTest(" + offset + ")..."); | |
| 37 var builder = new WasmModuleBuilder(); | |
| 38 builder.addMemory(1, 1, false); | |
| 39 var g = builder.addGlobal(kAstI32, false); | |
| 40 g.init = offset; | |
| 41 builder.addFunction("load", kSig_i_i) | |
| 42 .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0]) | |
| 43 .exportAs("load"); | |
| 44 builder.addDataSegment(g.index, [7, 7, 7, 7], true); | |
| 45 | |
| 46 var buffer = builder.toBuffer(debug); | |
| 47 var instance = Wasm.instantiateModule(buffer); | |
| 48 for (var i = offset - 20; i < offset + 20; i += 4) { | |
| 49 if (i < 0) continue; | |
| 50 var expected = i == offset ? 117901063 : 0; | |
| 51 assertEquals(expected, instance.exports.load(i)); | |
| 52 } | |
| 53 } | |
| 54 | |
| 55 GlobalInitTest(0); | |
| 56 GlobalInitTest(12); | |
| 57 GlobalInitTest(3040); | |
| 58 | |
| 59 function GlobalImportedInitTest(pad) { | |
| 60 print("GlobaleImportedInitTest(" + pad + ")..."); | |
| 61 var builder = new WasmModuleBuilder(); | |
| 62 builder.addMemory(1, 1, false); | |
| 63 | |
| 64 while (pad-- > 0) builder.addGlobal(kAstI32); // pad | |
| 65 | |
| 66 var g = builder.addImportedGlobal("offset", undefined, kAstI32); | |
| 67 | |
| 68 while (pad-- > 0) builder.addGlobal(kAstI32); // pad | |
| 69 | |
| 70 builder.addFunction("load", kSig_i_i) | |
| 71 .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0]) | |
| 72 .exportAs("load"); | |
| 73 builder.addDataSegment(g.index, [5, 5, 5, 5], true); | |
| 74 | |
| 75 var buffer = builder.toBuffer(debug); | |
| 76 var module = new WebAssembly.Module(buffer); | |
| 77 | |
| 78 for (var offset of [0, 12, 192, 1024]) { | |
| 79 var instance = new WebAssembly.Instance(module, {offset: offset}); | |
| 80 for (var i = offset - 20; i < offset + 20; i += 4) { | |
| 81 if (i < 0) continue; | |
| 82 var expected = i == offset ? 84215045 : 0; | |
| 83 assertEquals(expected, instance.exports.load(i)); | |
| 84 } | |
| 85 } | |
| 86 } | |
| 87 | |
| 88 GlobalImportedInitTest(0); | |
| 89 GlobalImportedInitTest(1); | |
| 90 GlobalImportedInitTest(4); | |
| OLD | NEW |