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 --stress-compaction | 5 // Flags: --expose-wasm --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 24 matching lines...) Expand all Loading... | |
35 builder.addFunction("store8", kSig_i_ii) | 35 builder.addFunction("store8", kSig_i_ii) |
36 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0, | 36 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0, |
37 kExprGetLocal, 1]) | 37 kExprGetLocal, 1]) |
38 .exportFunc(); | 38 .exportFunc(); |
39 return builder; | 39 return builder; |
40 } | 40 } |
41 | 41 |
42 // TODO(gdeepti): Generate tests programatically for all the sizes instead of | 42 // TODO(gdeepti): Generate tests programatically for all the sizes instead of |
43 // current implementation. | 43 // current implementation. |
44 function testGrowMemoryReadWrite32() { | 44 function testGrowMemoryReadWrite32() { |
45 print('testGrowMemoryReadWrite32'); | |
Mark Seaborn
2017/02/17 21:41:12
Is this debugging that should be removed?
Eric Holk
2017/02/23 02:16:57
We're inconsistent about this; some tests print th
| |
45 var builder = genGrowMemoryBuilder(); | 46 var builder = genGrowMemoryBuilder(); |
46 builder.addMemory(1, kV8MaxPages, false); | 47 builder.addMemory(1, kV8MaxPages, false); |
47 var module = builder.instantiate(); | 48 var module = builder.instantiate(); |
48 var offset; | 49 var offset; |
49 function peek() { return module.exports.load(offset); } | 50 function peek() { return module.exports.load(offset); } |
50 function poke(value) { return module.exports.store(offset, value); } | 51 function poke(value) { return module.exports.store(offset, value); } |
51 function growMem(pages) { return module.exports.grow_memory(pages); } | 52 function growMem(pages) { return module.exports.grow_memory(pages); } |
52 | 53 |
53 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | 54 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
54 poke(20); | 55 poke(20); |
(...skipping 27 matching lines...) Expand all Loading... | |
82 } | 83 } |
83 for (offset = 19*kPageSize - 3; offset < 19*kPageSize + 5; offset++) { | 84 for (offset = 19*kPageSize - 3; offset < 19*kPageSize + 5; offset++) { |
84 assertTraps(kTrapMemOutOfBounds, poke); | 85 assertTraps(kTrapMemOutOfBounds, poke); |
85 assertTraps(kTrapMemOutOfBounds, peek); | 86 assertTraps(kTrapMemOutOfBounds, peek); |
86 } | 87 } |
87 } | 88 } |
88 | 89 |
89 testGrowMemoryReadWrite32(); | 90 testGrowMemoryReadWrite32(); |
90 | 91 |
91 function testGrowMemoryReadWrite16() { | 92 function testGrowMemoryReadWrite16() { |
93 print('testGrowMemoryReadWrite16'); | |
92 var builder = genGrowMemoryBuilder(); | 94 var builder = genGrowMemoryBuilder(); |
93 builder.addMemory(1, kV8MaxPages, false); | 95 builder.addMemory(1, kV8MaxPages, false); |
94 var module = builder.instantiate(); | 96 var module = builder.instantiate(); |
95 var offset; | 97 var offset; |
96 function peek() { return module.exports.load16(offset); } | 98 function peek() { return module.exports.load16(offset); } |
97 function poke(value) { return module.exports.store16(offset, value); } | 99 function poke(value) { return module.exports.store16(offset, value); } |
98 function growMem(pages) { return module.exports.grow_memory(pages); } | 100 function growMem(pages) { return module.exports.grow_memory(pages); } |
99 | 101 |
100 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { | 102 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { |
101 poke(20); | 103 poke(20); |
(...skipping 27 matching lines...) Expand all Loading... | |
129 } | 131 } |
130 for (offset = 19*kPageSize - 1; offset < 19*kPageSize + 5; offset++) { | 132 for (offset = 19*kPageSize - 1; offset < 19*kPageSize + 5; offset++) { |
131 assertTraps(kTrapMemOutOfBounds, poke); | 133 assertTraps(kTrapMemOutOfBounds, poke); |
132 assertTraps(kTrapMemOutOfBounds, peek); | 134 assertTraps(kTrapMemOutOfBounds, peek); |
133 } | 135 } |
134 } | 136 } |
135 | 137 |
136 testGrowMemoryReadWrite16(); | 138 testGrowMemoryReadWrite16(); |
137 | 139 |
138 function testGrowMemoryReadWrite8() { | 140 function testGrowMemoryReadWrite8() { |
141 print('testGrowMemoryReadWrite8'); | |
139 var builder = genGrowMemoryBuilder(); | 142 var builder = genGrowMemoryBuilder(); |
140 builder.addMemory(1, kV8MaxPages, false); | 143 builder.addMemory(1, kV8MaxPages, false); |
141 var module = builder.instantiate(); | 144 var module = builder.instantiate(); |
142 var offset; | 145 var offset; |
143 function peek() { return module.exports.load8(offset); } | 146 function peek() { return module.exports.load8(offset); } |
144 function poke(value) { return module.exports.store8(offset, value); } | 147 function poke(value) { return module.exports.store8(offset, value); } |
145 function growMem(pages) { return module.exports.grow_memory(pages); } | 148 function growMem(pages) { return module.exports.grow_memory(pages); } |
146 | 149 |
147 for(offset = 0; offset <= kPageSize - 1; offset++) { | 150 for(offset = 0; offset <= kPageSize - 1; offset++) { |
148 poke(20); | 151 poke(20); |
(...skipping 27 matching lines...) Expand all Loading... | |
176 } | 179 } |
177 for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) { | 180 for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) { |
178 assertTraps(kTrapMemOutOfBounds, poke); | 181 assertTraps(kTrapMemOutOfBounds, poke); |
179 assertTraps(kTrapMemOutOfBounds, peek); | 182 assertTraps(kTrapMemOutOfBounds, peek); |
180 } | 183 } |
181 } | 184 } |
182 | 185 |
183 testGrowMemoryReadWrite8(); | 186 testGrowMemoryReadWrite8(); |
184 | 187 |
185 function testGrowMemoryZeroInitialSize() { | 188 function testGrowMemoryZeroInitialSize() { |
189 print('testGrowMemoryZeroInitialSize'); | |
186 var builder = genGrowMemoryBuilder(); | 190 var builder = genGrowMemoryBuilder(); |
187 builder.addMemory(0, kV8MaxPages, false); | 191 builder.addMemory(0, kV8MaxPages, false); |
188 var module = builder.instantiate(); | 192 var module = builder.instantiate(); |
189 var offset; | 193 var offset; |
190 function peek() { return module.exports.load(offset); } | 194 function peek() { return module.exports.load(offset); } |
191 function poke(value) { return module.exports.store(offset, value); } | 195 function poke(value) { return module.exports.store(offset, value); } |
192 function growMem(pages) { return module.exports.grow_memory(pages); } | 196 function growMem(pages) { return module.exports.grow_memory(pages); } |
193 | 197 |
194 assertTraps(kTrapMemOutOfBounds, peek); | 198 assertTraps(kTrapMemOutOfBounds, peek); |
195 assertTraps(kTrapMemOutOfBounds, poke); | 199 assertTraps(kTrapMemOutOfBounds, poke); |
(...skipping 14 matching lines...) Expand all Loading... | |
210 assertTraps(kTrapMemOutOfBounds, poke); | 214 assertTraps(kTrapMemOutOfBounds, poke); |
211 assertEquals(i, growMem(1)); | 215 assertEquals(i, growMem(1)); |
212 } | 216 } |
213 poke(20); | 217 poke(20); |
214 assertEquals(20, peek()); | 218 assertEquals(20, peek()); |
215 } | 219 } |
216 | 220 |
217 testGrowMemoryZeroInitialSize(); | 221 testGrowMemoryZeroInitialSize(); |
218 | 222 |
219 function testGrowMemoryZeroInitialSize32() { | 223 function testGrowMemoryZeroInitialSize32() { |
224 print('testGrowMemoryZeroInitialSize32'); | |
220 var builder = genGrowMemoryBuilder(); | 225 var builder = genGrowMemoryBuilder(); |
221 builder.addMemory(0, kV8MaxPages, false); | 226 builder.addMemory(0, kV8MaxPages, false); |
222 var module = builder.instantiate(); | 227 var module = builder.instantiate(); |
223 var offset; | 228 var offset; |
224 function peek() { return module.exports.load(offset); } | 229 function peek() { return module.exports.load(offset); } |
225 function poke(value) { return module.exports.store(offset, value); } | 230 function poke(value) { return module.exports.store(offset, value); } |
226 function growMem(pages) { return module.exports.grow_memory(pages); } | 231 function growMem(pages) { return module.exports.grow_memory(pages); } |
227 | 232 |
228 assertTraps(kTrapMemOutOfBounds, peek); | 233 assertTraps(kTrapMemOutOfBounds, peek); |
229 assertTraps(kTrapMemOutOfBounds, poke); | 234 assertTraps(kTrapMemOutOfBounds, poke); |
230 | 235 |
231 assertEquals(0, growMem(1)); | 236 assertEquals(0, growMem(1)); |
232 | 237 |
233 for(offset = 0; offset <= kPageSize - 4; offset++) { | 238 for(offset = 0; offset <= kPageSize - 4; offset++) { |
234 poke(20); | 239 poke(20); |
235 assertEquals(20, peek()); | 240 assertEquals(20, peek()); |
236 } | 241 } |
237 | 242 |
238 for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) { | 243 for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) { |
239 assertTraps(kTrapMemOutOfBounds, peek); | 244 assertTraps(kTrapMemOutOfBounds, peek); |
240 } | 245 } |
241 } | 246 } |
242 | 247 |
243 testGrowMemoryZeroInitialSize32(); | 248 testGrowMemoryZeroInitialSize32(); |
244 | 249 |
245 function testGrowMemoryZeroInitialSize16() { | 250 function testGrowMemoryZeroInitialSize16() { |
251 print('testGrowMemoryZeroInitialSize16'); | |
246 var builder = genGrowMemoryBuilder(); | 252 var builder = genGrowMemoryBuilder(); |
247 builder.addMemory(0, kV8MaxPages, false); | 253 builder.addMemory(0, kV8MaxPages, false); |
248 var module = builder.instantiate(); | 254 var module = builder.instantiate(); |
249 var offset; | 255 var offset; |
250 function peek() { return module.exports.load16(offset); } | 256 function peek() { return module.exports.load16(offset); } |
251 function poke(value) { return module.exports.store16(offset, value); } | 257 function poke(value) { return module.exports.store16(offset, value); } |
252 function growMem(pages) { return module.exports.grow_memory(pages); } | 258 function growMem(pages) { return module.exports.grow_memory(pages); } |
253 | 259 |
254 assertTraps(kTrapMemOutOfBounds, peek); | 260 assertTraps(kTrapMemOutOfBounds, peek); |
255 assertTraps(kTrapMemOutOfBounds, poke); | 261 assertTraps(kTrapMemOutOfBounds, poke); |
256 | 262 |
257 assertEquals(0, growMem(1)); | 263 assertEquals(0, growMem(1)); |
258 | 264 |
259 for(offset = 0; offset <= kPageSize - 2; offset++) { | 265 for(offset = 0; offset <= kPageSize - 2; offset++) { |
260 poke(20); | 266 poke(20); |
261 assertEquals(20, peek()); | 267 assertEquals(20, peek()); |
262 } | 268 } |
263 | 269 |
264 for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) { | 270 for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) { |
265 assertTraps(kTrapMemOutOfBounds, peek); | 271 assertTraps(kTrapMemOutOfBounds, peek); |
266 } | 272 } |
267 } | 273 } |
268 | 274 |
269 testGrowMemoryZeroInitialSize16(); | 275 testGrowMemoryZeroInitialSize16(); |
270 | 276 |
271 function testGrowMemoryZeroInitialSize8() { | 277 function testGrowMemoryZeroInitialSize8() { |
278 print('testGrowMemoryZeroInitialSize8'); | |
272 var builder = genGrowMemoryBuilder(); | 279 var builder = genGrowMemoryBuilder(); |
273 builder.addMemory(0, kV8MaxPages, false); | 280 builder.addMemory(0, kV8MaxPages, false); |
274 var module = builder.instantiate(); | 281 var module = builder.instantiate(); |
275 var offset; | 282 var offset; |
276 function peek() { return module.exports.load8(offset); } | 283 function peek() { return module.exports.load8(offset); } |
277 function poke(value) { return module.exports.store8(offset, value); } | 284 function poke(value) { return module.exports.store8(offset, value); } |
278 function growMem(pages) { return module.exports.grow_memory(pages); } | 285 function growMem(pages) { return module.exports.grow_memory(pages); } |
279 | 286 |
280 assertTraps(kTrapMemOutOfBounds, peek); | 287 assertTraps(kTrapMemOutOfBounds, peek); |
281 assertTraps(kTrapMemOutOfBounds, poke); | 288 assertTraps(kTrapMemOutOfBounds, poke); |
282 | 289 |
283 assertEquals(0, growMem(1)); | 290 assertEquals(0, growMem(1)); |
284 | 291 |
285 for(offset = 0; offset <= kPageSize - 1; offset++) { | 292 for(offset = 0; offset <= kPageSize - 1; offset++) { |
286 poke(20); | 293 poke(20); |
287 assertEquals(20, peek()); | 294 assertEquals(20, peek()); |
288 } | 295 } |
289 | 296 |
290 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { | 297 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { |
291 assertTraps(kTrapMemOutOfBounds, peek); | 298 assertTraps(kTrapMemOutOfBounds, peek); |
292 } | 299 } |
293 } | 300 } |
294 | 301 |
295 testGrowMemoryZeroInitialSize8(); | 302 testGrowMemoryZeroInitialSize8(); |
296 | 303 |
297 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { | 304 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { |
305 print('testGrowMemoryTrapMaxPagesZeroInitialMemory'); | |
298 var builder = genGrowMemoryBuilder(); | 306 var builder = genGrowMemoryBuilder(); |
299 builder.addMemory(0, kV8MaxPages, false); | 307 builder.addMemory(0, kV8MaxPages, false); |
300 var module = builder.instantiate(); | 308 var module = builder.instantiate(); |
301 var maxPages = 16385; | 309 var maxPages = 16385; |
302 function growMem(pages) { return module.exports.grow_memory(pages); } | 310 function growMem(pages) { return module.exports.grow_memory(pages); } |
303 assertEquals(-1, growMem(maxPages)); | 311 assertEquals(-1, growMem(maxPages)); |
304 } | 312 } |
305 | 313 |
306 testGrowMemoryTrapMaxPagesZeroInitialMemory(); | 314 testGrowMemoryTrapMaxPagesZeroInitialMemory(); |
307 | 315 |
308 function testGrowMemoryTrapMaxPages() { | 316 function testGrowMemoryTrapMaxPages() { |
317 print('testGrowMemoryTrapMaxPages'); | |
309 var builder = genGrowMemoryBuilder(); | 318 var builder = genGrowMemoryBuilder(); |
310 builder.addMemory(1, 1, false); | 319 builder.addMemory(1, 1, false); |
311 var module = builder.instantiate(); | 320 var module = builder.instantiate(); |
312 var maxPages = 16384; | 321 var maxPages = 16384; |
313 function growMem(pages) { return module.exports.grow_memory(pages); } | 322 function growMem(pages) { return module.exports.grow_memory(pages); } |
314 assertEquals(-1, growMem(maxPages)); | 323 assertEquals(-1, growMem(maxPages)); |
315 } | 324 } |
316 | 325 |
317 testGrowMemoryTrapMaxPages(); | 326 testGrowMemoryTrapMaxPages(); |
318 | 327 |
319 function testGrowMemoryTrapsWithNonSmiInput() { | 328 function testGrowMemoryTrapsWithNonSmiInput() { |
329 print('testGrowMemoryTrapsWithNonSmiInput'); | |
320 var builder = genGrowMemoryBuilder(); | 330 var builder = genGrowMemoryBuilder(); |
321 builder.addMemory(0, kV8MaxPages, false); | 331 builder.addMemory(0, kV8MaxPages, false); |
322 var module = builder.instantiate(); | 332 var module = builder.instantiate(); |
323 function growMem(pages) { return module.exports.grow_memory(pages); } | 333 function growMem(pages) { return module.exports.grow_memory(pages); } |
324 // The parameter of grow_memory is unsigned. Therefore -1 stands for | 334 // The parameter of grow_memory is unsigned. Therefore -1 stands for |
325 // UINT32_MIN, which cannot be represented as SMI. | 335 // UINT32_MIN, which cannot be represented as SMI. |
326 assertEquals(-1, growMem(-1)); | 336 assertEquals(-1, growMem(-1)); |
327 }; | 337 }; |
328 | 338 |
329 testGrowMemoryTrapsWithNonSmiInput(); | 339 testGrowMemoryTrapsWithNonSmiInput(); |
330 | 340 |
331 function testGrowMemoryCurrentMemory() { | 341 function testGrowMemoryCurrentMemory() { |
342 print('testGrowMemoryCurrentMemory'); | |
332 var builder = genGrowMemoryBuilder(); | 343 var builder = genGrowMemoryBuilder(); |
333 builder.addMemory(1, kV8MaxPages, false); | 344 builder.addMemory(1, kV8MaxPages, false); |
334 builder.addFunction("memory_size", kSig_i_v) | 345 builder.addFunction("memory_size", kSig_i_v) |
335 .addBody([kExprMemorySize, kMemoryZero]) | 346 .addBody([kExprMemorySize, kMemoryZero]) |
336 .exportFunc(); | 347 .exportFunc(); |
337 var module = builder.instantiate(); | 348 var module = builder.instantiate(); |
338 function growMem(pages) { return module.exports.grow_memory(pages); } | 349 function growMem(pages) { return module.exports.grow_memory(pages); } |
339 function MemSize() { return module.exports.memory_size(); } | 350 function MemSize() { return module.exports.memory_size(); } |
340 assertEquals(1, MemSize()); | 351 assertEquals(1, MemSize()); |
341 assertEquals(1, growMem(1)); | 352 assertEquals(1, growMem(1)); |
342 assertEquals(2, MemSize()); | 353 assertEquals(2, MemSize()); |
343 } | 354 } |
344 | 355 |
345 testGrowMemoryCurrentMemory(); | 356 testGrowMemoryCurrentMemory(); |
346 | 357 |
347 function testGrowMemoryPreservesDataMemOp32() { | 358 function testGrowMemoryPreservesDataMemOp32() { |
359 print('testGrowMemoryPreservesDataMemOp32'); | |
348 var builder = genGrowMemoryBuilder(); | 360 var builder = genGrowMemoryBuilder(); |
349 builder.addMemory(1, kV8MaxPages, false); | 361 builder.addMemory(1, kV8MaxPages, false); |
350 var module = builder.instantiate(); | 362 var module = builder.instantiate(); |
351 var offset, val; | 363 var offset, val; |
352 function peek() { return module.exports.load(offset); } | 364 function peek() { return module.exports.load(offset); } |
353 function poke(value) { return module.exports.store(offset, value); } | 365 function poke(value) { return module.exports.store(offset, value); } |
354 function growMem(pages) { return module.exports.grow_memory(pages); } | 366 function growMem(pages) { return module.exports.grow_memory(pages); } |
355 | 367 |
356 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | 368 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
357 poke(100000 - offset); | 369 poke(100000 - offset); |
358 assertEquals(100000 - offset, peek()); | 370 assertEquals(100000 - offset, peek()); |
359 } | 371 } |
360 | 372 |
361 assertEquals(1, growMem(3)); | 373 assertEquals(1, growMem(3)); |
362 | 374 |
363 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | 375 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
364 assertEquals(100000 - offset, peek()); | 376 assertEquals(100000 - offset, peek()); |
365 } | 377 } |
366 } | 378 } |
367 | 379 |
368 testGrowMemoryPreservesDataMemOp32(); | 380 testGrowMemoryPreservesDataMemOp32(); |
369 | 381 |
370 function testGrowMemoryPreservesDataMemOp16() { | 382 function testGrowMemoryPreservesDataMemOp16() { |
383 print('testGrowMemoryPreservesDataMemOp16'); | |
371 var builder = genGrowMemoryBuilder(); | 384 var builder = genGrowMemoryBuilder(); |
372 builder.addMemory(1, kV8MaxPages, false); | 385 builder.addMemory(1, kV8MaxPages, false); |
373 var module = builder.instantiate(); | 386 var module = builder.instantiate(); |
374 var offset, val; | 387 var offset, val; |
375 function peek() { return module.exports.load16(offset); } | 388 function peek() { return module.exports.load16(offset); } |
376 function poke(value) { return module.exports.store16(offset, value); } | 389 function poke(value) { return module.exports.store16(offset, value); } |
377 function growMem(pages) { return module.exports.grow_memory(pages); } | 390 function growMem(pages) { return module.exports.grow_memory(pages); } |
378 | 391 |
379 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { | 392 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { |
380 poke(65535 - offset); | 393 poke(65535 - offset); |
381 assertEquals(65535 - offset, peek()); | 394 assertEquals(65535 - offset, peek()); |
382 } | 395 } |
383 | 396 |
384 assertEquals(1, growMem(3)); | 397 assertEquals(1, growMem(3)); |
385 | 398 |
386 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { | 399 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { |
387 assertEquals(65535 - offset, peek()); | 400 assertEquals(65535 - offset, peek()); |
388 } | 401 } |
389 } | 402 } |
390 | 403 |
391 testGrowMemoryPreservesDataMemOp16(); | 404 testGrowMemoryPreservesDataMemOp16(); |
392 | 405 |
393 function testGrowMemoryPreservesDataMemOp8() { | 406 function testGrowMemoryPreservesDataMemOp8() { |
407 print('testGrowMemoryPreservesDataMemOp8'); | |
394 var builder = genGrowMemoryBuilder(); | 408 var builder = genGrowMemoryBuilder(); |
395 builder.addMemory(1, kV8MaxPages, false); | 409 builder.addMemory(1, kV8MaxPages, false); |
396 var module = builder.instantiate(); | 410 var module = builder.instantiate(); |
397 var offset, val = 0; | 411 var offset, val = 0; |
398 function peek() { return module.exports.load8(offset); } | 412 function peek() { return module.exports.load8(offset); } |
399 function poke(value) { return module.exports.store8(offset, value); } | 413 function poke(value) { return module.exports.store8(offset, value); } |
400 function growMem(pages) { return module.exports.grow_memory(pages); } | 414 function growMem(pages) { return module.exports.grow_memory(pages); } |
401 | 415 |
402 for(offset = 0; offset <= (kPageSize - 1); offset++, val++) { | 416 for(offset = 0; offset <= (kPageSize - 1); offset++, val++) { |
403 poke(val); | 417 poke(val); |
404 assertEquals(val, peek()); | 418 assertEquals(val, peek()); |
405 if (val == 255) val = 0; | 419 if (val == 255) val = 0; |
406 } | 420 } |
407 | 421 |
408 assertEquals(1, growMem(3)); | 422 assertEquals(1, growMem(3)); |
409 | 423 |
410 val = 0; | 424 val = 0; |
411 | 425 |
412 for(offset = 0; offset <= (kPageSize - 1); offset++, val++) { | 426 for(offset = 0; offset <= (kPageSize - 1); offset++, val++) { |
413 assertEquals(val, peek()); | 427 assertEquals(val, peek()); |
414 if (val == 255) val = 0; | 428 if (val == 255) val = 0; |
415 } | 429 } |
416 } | 430 } |
417 | 431 |
418 testGrowMemoryPreservesDataMemOp8(); | 432 testGrowMemoryPreservesDataMemOp8(); |
419 | 433 |
420 function testGrowMemoryOutOfBoundsOffset() { | 434 function testGrowMemoryOutOfBoundsOffset() { |
435 print('testGrowMemoryOutOfBoundsOffset'); | |
421 var builder = genGrowMemoryBuilder(); | 436 var builder = genGrowMemoryBuilder(); |
422 builder.addMemory(1, kV8MaxPages, false); | 437 builder.addMemory(1, kV8MaxPages, false); |
423 var module = builder.instantiate(); | 438 var module = builder.instantiate(); |
424 var offset, val; | 439 var offset, val; |
425 function peek() { return module.exports.load(offset); } | 440 function peek() { return module.exports.load(offset); } |
426 function poke(value) { return module.exports.store(offset, value); } | 441 function poke(value) { return module.exports.store(offset, value); } |
427 function growMem(pages) { return module.exports.grow_memory(pages); } | 442 function growMem(pages) { return module.exports.grow_memory(pages); } |
428 | 443 |
429 offset = 3*kPageSize + 4; | 444 offset = 3*kPageSize + 4; |
430 assertTraps(kTrapMemOutOfBounds, poke); | 445 assertTraps(kTrapMemOutOfBounds, poke); |
(...skipping 12 matching lines...) Expand all Loading... | |
443 } | 458 } |
444 | 459 |
445 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { | 460 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { |
446 assertTraps(kTrapMemOutOfBounds, poke); | 461 assertTraps(kTrapMemOutOfBounds, poke); |
447 } | 462 } |
448 } | 463 } |
449 | 464 |
450 testGrowMemoryOutOfBoundsOffset(); | 465 testGrowMemoryOutOfBoundsOffset(); |
451 | 466 |
452 function testGrowMemoryOutOfBoundsOffset2() { | 467 function testGrowMemoryOutOfBoundsOffset2() { |
468 print('testGrowMemoryOutOfBoundsOffset2'); | |
453 var builder = new WasmModuleBuilder(); | 469 var builder = new WasmModuleBuilder(); |
454 builder.addMemory(16, 128, false); | 470 builder.addMemory(16, 128, false); |
455 builder.addFunction("main", kSig_v_v) | 471 builder.addFunction("main", kSig_v_v) |
456 .addBody([ | 472 .addBody([ |
457 kExprI32Const, 20, | 473 kExprI32Const, 20, |
458 kExprI32Const, 29, | 474 kExprI32Const, 29, |
459 kExprGrowMemory, kMemoryZero, | 475 kExprGrowMemory, kMemoryZero, |
460 kExprI32StoreMem, 0, 0xFF, 0xFF, 0xFF, 0x3a | 476 kExprI32StoreMem, 0, 0xFF, 0xFF, 0xFF, 0x3a |
461 ]) | 477 ]) |
462 .exportAs("main"); | 478 .exportAs("main"); |
463 var module = builder.instantiate(); | 479 var module = builder.instantiate(); |
464 assertTraps(kTrapMemOutOfBounds, module.exports.main); | 480 assertTraps(kTrapMemOutOfBounds, module.exports.main); |
465 } | 481 } |
466 | 482 |
467 testGrowMemoryOutOfBoundsOffset2(); | 483 testGrowMemoryOutOfBoundsOffset2(); |
468 | 484 |
469 function testGrowMemoryDeclaredMaxTraps() { | 485 function testGrowMemoryDeclaredMaxTraps() { |
486 print('testGrowMemoryDeclaredMaxTraps'); | |
470 var builder = genGrowMemoryBuilder(); | 487 var builder = genGrowMemoryBuilder(); |
471 builder.addMemory(1, 16, false); | 488 builder.addMemory(1, 16, false); |
472 var module = builder.instantiate(); | 489 var module = builder.instantiate(); |
473 function growMem(pages) { return module.exports.grow_memory(pages); } | 490 function growMem(pages) { return module.exports.grow_memory(pages); } |
474 assertEquals(1, growMem(5)); | 491 assertEquals(1, growMem(5)); |
475 assertEquals(6, growMem(5)); | 492 assertEquals(6, growMem(5)); |
476 assertEquals(-1, growMem(6)); | 493 assertEquals(-1, growMem(6)); |
477 } | 494 } |
478 | 495 |
479 testGrowMemoryDeclaredMaxTraps(); | 496 testGrowMemoryDeclaredMaxTraps(); |
480 | 497 |
481 function testGrowMemoryDeclaredSpecMaxTraps() { | 498 function testGrowMemoryDeclaredSpecMaxTraps() { |
499 print('testGrowMemoryDeclaredSpecMaxTraps'); | |
482 // The spec maximum is higher than the internal V8 maximum. This test only | 500 // The spec maximum is higher than the internal V8 maximum. This test only |
483 // checks that grow_memory does not grow past the internally defined maximum | 501 // checks that grow_memory does not grow past the internally defined maximum |
484 // to reflect the currentl implementation. | 502 // to reflect the currentl implementation. |
485 var builder = genGrowMemoryBuilder(); | 503 var builder = genGrowMemoryBuilder(); |
486 var kSpecMaxPages = 65535; | 504 var kSpecMaxPages = 65535; |
487 builder.addMemory(1, kSpecMaxPages, false); | 505 builder.addMemory(1, kSpecMaxPages, false); |
488 var module = builder.instantiate(); | 506 var module = builder.instantiate(); |
489 function poke(value) { return module.exports.store(offset, value); } | 507 function poke(value) { return module.exports.store(offset, value); } |
490 function growMem(pages) { return module.exports.grow_memory(pages); } | 508 function growMem(pages) { return module.exports.grow_memory(pages); } |
491 assertEquals(1, growMem(20)); | 509 assertEquals(1, growMem(20)); |
492 assertEquals(-1, growMem(kV8MaxPages - 20)); | 510 assertEquals(-1, growMem(kV8MaxPages - 20)); |
493 } | 511 } |
494 | 512 |
495 testGrowMemoryDeclaredSpecMaxTraps(); | 513 testGrowMemoryDeclaredSpecMaxTraps(); |
OLD | NEW |