OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --expose-wasm --expose-gc --stress-compaction | 5 // Flags: --expose-wasm --expose-gc --stress-compaction |
6 | 6 |
7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
9 | 9 |
10 var kPageSize = 0x10000; | 10 var kPageSize = 0x10000; |
(...skipping 20 matching lines...) Expand all Loading... |
31 builder.addFunction("load8", kSig_i_i) | 31 builder.addFunction("load8", kSig_i_i) |
32 .addBody([kExprGetLocal, 0, kExprI32LoadMem8U, 0, 0]) | 32 .addBody([kExprGetLocal, 0, kExprI32LoadMem8U, 0, 0]) |
33 .exportFunc(); | 33 .exportFunc(); |
34 builder.addFunction("store8", kSig_i_ii) | 34 builder.addFunction("store8", kSig_i_ii) |
35 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0, | 35 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0, |
36 kExprGetLocal, 1]) | 36 kExprGetLocal, 1]) |
37 .exportFunc(); | 37 .exportFunc(); |
38 return builder; | 38 return builder; |
39 } | 39 } |
40 | 40 |
| 41 // TODO(gdeepti): Generate tests programatically for all the sizes instead of |
| 42 // current implementation. |
41 function testGrowMemoryReadWrite32() { | 43 function testGrowMemoryReadWrite32() { |
42 var builder = genGrowMemoryBuilder(); | 44 var builder = genGrowMemoryBuilder(); |
43 builder.addMemory(1, 1, false); | 45 builder.addMemory(1, 1, false); |
44 var module = builder.instantiate(); | 46 var module = builder.instantiate(); |
45 var offset; | 47 var offset; |
46 function peek() { return module.exports.load(offset); } | 48 function peek() { return module.exports.load(offset); } |
47 function poke(value) { return module.exports.store(offset, value); } | 49 function poke(value) { return module.exports.store(offset, value); } |
48 function growMem(pages) { return module.exports.grow_memory(pages); } | 50 function growMem(pages) { return module.exports.grow_memory(pages); } |
49 | 51 |
50 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | 52 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 assertEquals(20, peek()); | 174 assertEquals(20, peek()); |
173 } | 175 } |
174 for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) { | 176 for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) { |
175 assertTraps(kTrapMemOutOfBounds, poke); | 177 assertTraps(kTrapMemOutOfBounds, poke); |
176 assertTraps(kTrapMemOutOfBounds, peek); | 178 assertTraps(kTrapMemOutOfBounds, peek); |
177 } | 179 } |
178 } | 180 } |
179 | 181 |
180 testGrowMemoryReadWrite8(); | 182 testGrowMemoryReadWrite8(); |
181 | 183 |
182 function testGrowMemoryZeroInitialSize() { | 184 function testGrowMemoryZeroInitialSize32() { |
183 var builder = genGrowMemoryBuilder(); | 185 var builder = genGrowMemoryBuilder(); |
184 var module = builder.instantiate(); | 186 var module = builder.instantiate(); |
185 var offset; | 187 var offset; |
186 function peek() { return module.exports.load(offset); } | 188 function peek() { return module.exports.load(offset); } |
187 function poke(value) { return module.exports.store(offset, value); } | 189 function poke(value) { return module.exports.store(offset, value); } |
188 function growMem(pages) { return module.exports.grow_memory(pages); } | 190 function growMem(pages) { return module.exports.grow_memory(pages); } |
189 | 191 |
190 assertTraps(kTrapMemOutOfBounds, peek); | 192 assertTraps(kTrapMemOutOfBounds, peek); |
191 assertTraps(kTrapMemOutOfBounds, poke); | 193 assertTraps(kTrapMemOutOfBounds, poke); |
192 | 194 |
193 assertEquals(0, growMem(1)); | 195 assertEquals(0, growMem(1)); |
194 | 196 |
195 for(offset = 0; offset <= kPageSize - 4; offset++) { | 197 for(offset = 0; offset <= kPageSize - 4; offset++) { |
196 poke(20); | 198 poke(20); |
197 assertEquals(20, peek()); | 199 assertEquals(20, peek()); |
198 } | 200 } |
199 | 201 |
200 //TODO(gdeepti): Fix tests with correct write boundaries | 202 for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) { |
201 //when runtime function is fixed. | 203 assertTraps(kTrapMemOutOfBounds, peek); |
| 204 } |
| 205 } |
| 206 |
| 207 testGrowMemoryZeroInitialSize32(); |
| 208 |
| 209 function testGrowMemoryZeroInitialSize16() { |
| 210 var builder = genGrowMemoryBuilder(); |
| 211 var module = builder.instantiate(); |
| 212 var offset; |
| 213 function peek() { return module.exports.load16(offset); } |
| 214 function poke(value) { return module.exports.store16(offset, value); } |
| 215 function growMem(pages) { return module.exports.grow_memory(pages); } |
| 216 |
| 217 assertTraps(kTrapMemOutOfBounds, peek); |
| 218 assertTraps(kTrapMemOutOfBounds, poke); |
| 219 |
| 220 assertEquals(0, growMem(1)); |
| 221 |
| 222 for(offset = 0; offset <= kPageSize - 2; offset++) { |
| 223 poke(20); |
| 224 assertEquals(20, peek()); |
| 225 } |
| 226 |
| 227 for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) { |
| 228 assertTraps(kTrapMemOutOfBounds, peek); |
| 229 } |
| 230 } |
| 231 |
| 232 testGrowMemoryZeroInitialSize16(); |
| 233 |
| 234 function testGrowMemoryZeroInitialSize8() { |
| 235 var builder = genGrowMemoryBuilder(); |
| 236 var module = builder.instantiate(); |
| 237 var offset; |
| 238 function peek() { return module.exports.load8(offset); } |
| 239 function poke(value) { return module.exports.store8(offset, value); } |
| 240 function growMem(pages) { return module.exports.grow_memory(pages); } |
| 241 |
| 242 assertTraps(kTrapMemOutOfBounds, peek); |
| 243 assertTraps(kTrapMemOutOfBounds, poke); |
| 244 |
| 245 assertEquals(0, growMem(1)); |
| 246 |
| 247 for(offset = 0; offset <= kPageSize - 1; offset++) { |
| 248 poke(20); |
| 249 assertEquals(20, peek()); |
| 250 } |
| 251 |
202 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { | 252 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { |
203 assertTraps(kTrapMemOutOfBounds, peek); | 253 assertTraps(kTrapMemOutOfBounds, peek); |
204 } | 254 } |
205 } | 255 } |
206 | 256 |
207 testGrowMemoryZeroInitialSize(); | 257 testGrowMemoryZeroInitialSize8(); |
208 | 258 |
209 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { | 259 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { |
210 var builder = genGrowMemoryBuilder(); | 260 var builder = genGrowMemoryBuilder(); |
211 var module = builder.instantiate(); | 261 var module = builder.instantiate(); |
212 var maxPages = 16385; | 262 var maxPages = 16385; |
213 function growMem(pages) { return module.exports.grow_memory(pages); } | 263 function growMem(pages) { return module.exports.grow_memory(pages); } |
214 assertEquals(-1, growMem(maxPages)); | 264 assertEquals(-1, growMem(maxPages)); |
215 } | 265 } |
216 | 266 |
217 testGrowMemoryTrapMaxPagesZeroInitialMemory(); | 267 testGrowMemoryTrapMaxPagesZeroInitialMemory(); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 poke(0xaced); | 401 poke(0xaced); |
352 assertEquals(0xaced, peek()); | 402 assertEquals(0xaced, peek()); |
353 } | 403 } |
354 | 404 |
355 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { | 405 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { |
356 assertTraps(kTrapMemOutOfBounds, poke); | 406 assertTraps(kTrapMemOutOfBounds, poke); |
357 } | 407 } |
358 } | 408 } |
359 | 409 |
360 testGrowMemoryOutOfBoundsOffset(); | 410 testGrowMemoryOutOfBoundsOffset(); |
OLD | NEW |