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. | |
43 function testGrowMemoryReadWrite32() { | 41 function testGrowMemoryReadWrite32() { |
44 var builder = genGrowMemoryBuilder(); | 42 var builder = genGrowMemoryBuilder(); |
45 builder.addMemory(1, 1, false); | 43 builder.addMemory(1, 1, false); |
46 var module = builder.instantiate(); | 44 var module = builder.instantiate(); |
47 var offset; | 45 var offset; |
48 function peek() { return module.exports.load(offset); } | 46 function peek() { return module.exports.load(offset); } |
49 function poke(value) { return module.exports.store(offset, value); } | 47 function poke(value) { return module.exports.store(offset, value); } |
50 function growMem(pages) { return module.exports.grow_memory(pages); } | 48 function growMem(pages) { return module.exports.grow_memory(pages); } |
51 | 49 |
52 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | 50 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 assertTraps(kTrapMemOutOfBounds, peek); | 190 assertTraps(kTrapMemOutOfBounds, peek); |
193 assertTraps(kTrapMemOutOfBounds, poke); | 191 assertTraps(kTrapMemOutOfBounds, poke); |
194 | 192 |
195 assertEquals(0, growMem(1)); | 193 assertEquals(0, growMem(1)); |
196 | 194 |
197 for(offset = 0; offset <= kPageSize - 4; offset++) { | 195 for(offset = 0; offset <= kPageSize - 4; offset++) { |
198 poke(20); | 196 poke(20); |
199 assertEquals(20, peek()); | 197 assertEquals(20, peek()); |
200 } | 198 } |
201 | 199 |
202 for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) { | 200 //TODO(gdeepti): Fix tests with correct write boundaries |
203 assertTraps(kTrapMemOutOfBounds, peek); | 201 //when runtime function is fixed. |
204 } | |
205 | |
206 offset = 3*kPageSize; | |
207 for (var i = 1; i < 4; i++) { | |
208 assertTraps(kTrapMemOutOfBounds, poke); | |
209 assertEquals(i, growMem(1)); | |
210 } | |
211 poke(20); | |
212 assertEquals(20, peek()); | |
213 } | |
214 | |
215 testGrowMemoryZeroInitialSize(); | |
216 | |
217 function testGrowMemoryZeroInitialSize32() { | |
218 var builder = genGrowMemoryBuilder(); | |
219 var module = builder.instantiate(); | |
220 var offset; | |
221 function peek() { return module.exports.load(offset); } | |
222 function poke(value) { return module.exports.store(offset, value); } | |
223 function growMem(pages) { return module.exports.grow_memory(pages); } | |
224 | |
225 assertTraps(kTrapMemOutOfBounds, peek); | |
226 assertTraps(kTrapMemOutOfBounds, poke); | |
227 | |
228 assertEquals(0, growMem(1)); | |
229 | |
230 for(offset = 0; offset <= kPageSize - 4; offset++) { | |
231 poke(20); | |
232 assertEquals(20, peek()); | |
233 } | |
234 | |
235 for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) { | |
236 assertTraps(kTrapMemOutOfBounds, peek); | |
237 } | |
238 } | |
239 | |
240 testGrowMemoryZeroInitialSize32(); | |
241 | |
242 function testGrowMemoryZeroInitialSize16() { | |
243 var builder = genGrowMemoryBuilder(); | |
244 var module = builder.instantiate(); | |
245 var offset; | |
246 function peek() { return module.exports.load16(offset); } | |
247 function poke(value) { return module.exports.store16(offset, value); } | |
248 function growMem(pages) { return module.exports.grow_memory(pages); } | |
249 | |
250 assertTraps(kTrapMemOutOfBounds, peek); | |
251 assertTraps(kTrapMemOutOfBounds, poke); | |
252 | |
253 assertEquals(0, growMem(1)); | |
254 | |
255 for(offset = 0; offset <= kPageSize - 2; offset++) { | |
256 poke(20); | |
257 assertEquals(20, peek()); | |
258 } | |
259 | |
260 for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) { | |
261 assertTraps(kTrapMemOutOfBounds, peek); | |
262 } | |
263 } | |
264 | |
265 testGrowMemoryZeroInitialSize16(); | |
266 | |
267 function testGrowMemoryZeroInitialSize8() { | |
268 var builder = genGrowMemoryBuilder(); | |
269 var module = builder.instantiate(); | |
270 var offset; | |
271 function peek() { return module.exports.load8(offset); } | |
272 function poke(value) { return module.exports.store8(offset, value); } | |
273 function growMem(pages) { return module.exports.grow_memory(pages); } | |
274 | |
275 assertTraps(kTrapMemOutOfBounds, peek); | |
276 assertTraps(kTrapMemOutOfBounds, poke); | |
277 | |
278 assertEquals(0, growMem(1)); | |
279 | |
280 for(offset = 0; offset <= kPageSize - 1; offset++) { | |
281 poke(20); | |
282 assertEquals(20, peek()); | |
283 } | |
284 | |
285 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { | 202 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { |
286 assertTraps(kTrapMemOutOfBounds, peek); | 203 assertTraps(kTrapMemOutOfBounds, peek); |
287 } | 204 } |
288 } | 205 } |
289 | 206 |
290 testGrowMemoryZeroInitialSize8(); | 207 testGrowMemoryZeroInitialSize(); |
291 | 208 |
292 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { | 209 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { |
293 var builder = genGrowMemoryBuilder(); | 210 var builder = genGrowMemoryBuilder(); |
294 var module = builder.instantiate(); | 211 var module = builder.instantiate(); |
295 var maxPages = 16385; | 212 var maxPages = 16385; |
296 function growMem(pages) { return module.exports.grow_memory(pages); } | 213 function growMem(pages) { return module.exports.grow_memory(pages); } |
297 assertEquals(-1, growMem(maxPages)); | 214 assertEquals(-1, growMem(maxPages)); |
298 } | 215 } |
299 | 216 |
300 testGrowMemoryTrapMaxPagesZeroInitialMemory(); | 217 testGrowMemoryTrapMaxPagesZeroInitialMemory(); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 poke(0xaced); | 351 poke(0xaced); |
435 assertEquals(0xaced, peek()); | 352 assertEquals(0xaced, peek()); |
436 } | 353 } |
437 | 354 |
438 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { | 355 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { |
439 assertTraps(kTrapMemOutOfBounds, poke); | 356 assertTraps(kTrapMemOutOfBounds, poke); |
440 } | 357 } |
441 } | 358 } |
442 | 359 |
443 testGrowMemoryOutOfBoundsOffset(); | 360 testGrowMemoryOutOfBoundsOffset(); |
OLD | NEW |