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

Unified Diff: test/mjsunit/wasm/grow-memory.js

Issue 2319983002: [wasm] GrowMemory should use array_buffer_allocator instead of realloc. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Review changes Created 4 years, 3 months 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 | « src/runtime/runtime-wasm.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/grow-memory.js
diff --git a/test/mjsunit/wasm/grow-memory.js b/test/mjsunit/wasm/grow-memory.js
index 93db651c1bb49633800585c6382ae071e4934c7b..858a19e3deea113799775243896133ed65cef9fd 100644
--- a/test/mjsunit/wasm/grow-memory.js
+++ b/test/mjsunit/wasm/grow-memory.js
@@ -20,10 +20,22 @@ function genGrowMemoryBuilder() {
builder.addFunction("store", kSig_i_ii)
.addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem, 0, 0])
.exportFunc();
+ builder.addFunction("load16", kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem16U, 0, 0])
+ .exportFunc();
+ builder.addFunction("store16", kSig_i_ii)
+ .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem16, 0, 0])
+ .exportFunc();
+ builder.addFunction("load8", kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem8U, 0, 0])
+ .exportFunc();
+ builder.addFunction("store8", kSig_i_ii)
+ .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0])
+ .exportFunc();
return builder;
}
-function testGrowMemoryReadWrite() {
+function testGrowMemoryReadWrite32() {
var builder = genGrowMemoryBuilder();
builder.addMemory(1, 1, false);
var module = builder.instantiate();
@@ -32,7 +44,7 @@ function testGrowMemoryReadWrite() {
function poke(value) { return module.exports.store(offset, value); }
function growMem(pages) { return module.exports.grow_memory(pages); }
- for(offset = 0; offset <= (kPageSize - 4); offset++) {
+ for(offset = 0; offset <= (kPageSize - 4); offset+=4) {
poke(20);
assertEquals(20, peek());
}
@@ -43,7 +55,7 @@ function testGrowMemoryReadWrite() {
assertEquals(1, growMem(3));
- for (offset = kPageSize; offset <= 4*kPageSize -4; offset++) {
+ for (offset = kPageSize; offset <= 4*kPageSize -4; offset+=4) {
poke(20);
assertEquals(20, peek());
}
@@ -54,11 +66,11 @@ function testGrowMemoryReadWrite() {
assertEquals(4, growMem(15));
- for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) {
+ for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset+=4) {
poke(20);
assertEquals(20, peek());
}
- for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - 4; offset++) {
+ for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - 4; offset+=4) {
poke(20);
assertEquals(20, peek());
}
@@ -68,7 +80,101 @@ function testGrowMemoryReadWrite() {
}
}
-testGrowMemoryReadWrite();
+testGrowMemoryReadWrite32();
+
+function testGrowMemoryReadWrite16() {
+ var builder = genGrowMemoryBuilder();
+ builder.addMemory(1, 1, false);
+ var module = builder.instantiate();
+ var offset;
+ function peek() { return module.exports.load16(offset); }
+ function poke(value) { return module.exports.store16(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ for(offset = 0; offset <= (kPageSize - 2); offset+=2) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = kPageSize - 1; offset < kPageSize + 4; offset++) {
+ assertTraps(kTrapMemOutOfBounds, poke);
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+
+ assertEquals(1, growMem(3));
+
+ for (offset = kPageSize; offset <= 4*kPageSize -2; offset+=2) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = 4*kPageSize - 1; offset < 4*kPageSize + 4; offset++) {
+ assertTraps(kTrapMemOutOfBounds, poke);
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+
+ assertEquals(4, growMem(15));
+
+ for (offset = 4*kPageSize - 2; offset <= 4*kPageSize + 4; offset+=2) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - 2; offset+=2) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = 19*kPageSize - 1; offset < 19*kPageSize + 5; offset++) {
+ assertTraps(kTrapMemOutOfBounds, poke);
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+}
+
+testGrowMemoryReadWrite16();
+
+function testGrowMemoryReadWrite8() {
+ var builder = genGrowMemoryBuilder();
+ builder.addMemory(1, 1, false);
+ var module = builder.instantiate();
+ var offset;
+ function peek() { return module.exports.load8(offset); }
+ function poke(value) { return module.exports.store8(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ for(offset = 0; offset <= kPageSize - 1; offset++) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = kPageSize; offset < kPageSize + 4; offset++) {
+ assertTraps(kTrapMemOutOfBounds, poke);
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+
+ assertEquals(1, growMem(3));
+
+ for (offset = kPageSize; offset <= 4*kPageSize -1; offset++) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = 4*kPageSize; offset < 4*kPageSize + 4; offset++) {
+ assertTraps(kTrapMemOutOfBounds, poke);
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+
+ assertEquals(4, growMem(15));
+
+ for (offset = 4*kPageSize; offset <= 4*kPageSize + 4; offset++) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - 1; offset++) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+ for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) {
+ assertTraps(kTrapMemOutOfBounds, poke);
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+}
+
+testGrowMemoryReadWrite8();
function testGrowMemoryZeroInitialSize() {
var builder = genGrowMemoryBuilder();
@@ -144,3 +250,76 @@ function testGrowMemoryCurrentMemory() {
}
testGrowMemoryCurrentMemory();
+
+function testGrowMemoryPreservesDataMemOp32() {
+ var builder = genGrowMemoryBuilder();
+ builder.addMemory(1, 1, false);
+ var module = builder.instantiate();
+ var offset, val;
+ function peek() { return module.exports.load(offset); }
+ function poke(value) { return module.exports.store(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ for(offset = 0; offset <= (kPageSize - 4); offset+=4) {
+ poke(100000 - offset);
+ assertEquals(100000 - offset, peek());
+ }
+
+ assertEquals(1, growMem(3));
+
+ for(offset = 0; offset <= (kPageSize - 4); offset+=4) {
+ assertEquals(100000 - offset, peek());
+ }
+}
+
+testGrowMemoryPreservesDataMemOp32();
+
+function testGrowMemoryPreservesDataMemOp16() {
+ var builder = genGrowMemoryBuilder();
+ builder.addMemory(1, 1, false);
+ var module = builder.instantiate();
+ var offset, val;
+ function peek() { return module.exports.load16(offset); }
+ function poke(value) { return module.exports.store16(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ for(offset = 0; offset <= (kPageSize - 2); offset+=2) {
+ poke(65535 - offset);
+ assertEquals(65535 - offset, peek());
+ }
+
+ assertEquals(1, growMem(3));
+
+ for(offset = 0; offset <= (kPageSize - 2); offset+=2) {
+ assertEquals(65535 - offset, peek());
+ }
+}
+
+testGrowMemoryPreservesDataMemOp16();
+
+function testGrowMemoryPreservesDataMemOp8() {
+ var builder = genGrowMemoryBuilder();
+ builder.addMemory(1, 1, false);
+ var module = builder.instantiate();
+ var offset, val = 0;
+ function peek() { return module.exports.load8(offset); }
+ function poke(value) { return module.exports.store8(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ for(offset = 0; offset <= (kPageSize - 1); offset++, val++) {
+ poke(val);
+ assertEquals(val, peek());
+ if (val == 255) val = 0;
+ }
+
+ assertEquals(1, growMem(3));
+
+ val = 0;
+
+ for(offset = 0; offset <= (kPageSize - 1); offset++, val++) {
+ assertEquals(val, peek());
+ if (val == 255) val = 0;
+ }
+}
+
+testGrowMemoryPreservesDataMemOp8();
« no previous file with comments | « src/runtime/runtime-wasm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698