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

Side by Side Diff: test/cctest/wasm/test-run-wasm.cc

Issue 1839333002: [wasm] Fix asm.js semantics for divide by zero in WASM translation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Small code simplifications. Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « src/wasm/wasm-opcodes.h ('k') | test/mjsunit/wasm/asm-wasm-i32.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 #include <stdint.h> 5 #include <stdint.h>
6 #include <stdlib.h> 6 #include <stdlib.h>
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "src/wasm/wasm-macro-gen.h" 9 #include "src/wasm/wasm-macro-gen.h"
10 10
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 TestInt32Unop(kExprI32Eqz, 0, 1); 320 TestInt32Unop(kExprI32Eqz, 0, 1);
321 TestInt32Unop(kExprI32Eqz, 0, -1); 321 TestInt32Unop(kExprI32Eqz, 0, -1);
322 TestInt32Unop(kExprI32Eqz, 0, -827343); 322 TestInt32Unop(kExprI32Eqz, 0, -827343);
323 TestInt32Unop(kExprI32Eqz, 0, 8888888); 323 TestInt32Unop(kExprI32Eqz, 0, 8888888);
324 TestInt32Unop(kExprI32Eqz, 1, 0); 324 TestInt32Unop(kExprI32Eqz, 1, 0);
325 } 325 }
326 326
327 TEST(Run_WASM_Int32DivS_trap) { 327 TEST(Run_WASM_Int32DivS_trap) {
328 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); 328 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32());
329 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 329 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
330 const int32_t kMin = std::numeric_limits<int32_t>::min();
330 CHECK_EQ(0, r.Call(0, 100)); 331 CHECK_EQ(0, r.Call(0, 100));
331 CHECK_TRAP(r.Call(100, 0)); 332 CHECK_TRAP(r.Call(100, 0));
332 CHECK_TRAP(r.Call(-1001, 0)); 333 CHECK_TRAP(r.Call(-1001, 0));
333 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), -1)); 334 CHECK_TRAP(r.Call(kMin, -1));
334 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), 0)); 335 CHECK_TRAP(r.Call(kMin, 0));
335 } 336 }
336 337
337 338
338 TEST(Run_WASM_Int32RemS_trap) { 339 TEST(Run_WASM_Int32RemS_trap) {
339 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); 340 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32());
340 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 341 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
342 const int32_t kMin = std::numeric_limits<int32_t>::min();
341 CHECK_EQ(33, r.Call(133, 100)); 343 CHECK_EQ(33, r.Call(133, 100));
342 CHECK_EQ(0, r.Call(std::numeric_limits<int32_t>::min(), -1)); 344 CHECK_EQ(0, r.Call(kMin, -1));
343 CHECK_TRAP(r.Call(100, 0)); 345 CHECK_TRAP(r.Call(100, 0));
344 CHECK_TRAP(r.Call(-1001, 0)); 346 CHECK_TRAP(r.Call(-1001, 0));
345 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), 0)); 347 CHECK_TRAP(r.Call(kMin, 0));
346 } 348 }
347 349
348 350
349 TEST(Run_WASM_Int32DivU_trap) { 351 TEST(Run_WASM_Int32DivU_trap) {
350 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); 352 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32());
351 BUILD(r, WASM_I32_DIVU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 353 BUILD(r, WASM_I32_DIVU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
354 const int32_t kMin = std::numeric_limits<int32_t>::min();
352 CHECK_EQ(0, r.Call(0, 100)); 355 CHECK_EQ(0, r.Call(0, 100));
353 CHECK_EQ(0, r.Call(std::numeric_limits<int32_t>::min(), -1)); 356 CHECK_EQ(0, r.Call(kMin, -1));
354 CHECK_TRAP(r.Call(100, 0)); 357 CHECK_TRAP(r.Call(100, 0));
355 CHECK_TRAP(r.Call(-1001, 0)); 358 CHECK_TRAP(r.Call(-1001, 0));
356 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), 0)); 359 CHECK_TRAP(r.Call(kMin, 0));
357 } 360 }
358 361
359 362
360 TEST(Run_WASM_Int32RemU_trap) { 363 TEST(Run_WASM_Int32RemU_trap) {
361 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); 364 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32());
362 BUILD(r, WASM_I32_REMU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 365 BUILD(r, WASM_I32_REMU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
363 CHECK_EQ(17, r.Call(217, 100)); 366 CHECK_EQ(17, r.Call(217, 100));
367 const int32_t kMin = std::numeric_limits<int32_t>::min();
364 CHECK_TRAP(r.Call(100, 0)); 368 CHECK_TRAP(r.Call(100, 0));
365 CHECK_TRAP(r.Call(-1001, 0)); 369 CHECK_TRAP(r.Call(-1001, 0));
366 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), 0)); 370 CHECK_TRAP(r.Call(kMin, 0));
367 CHECK_EQ(std::numeric_limits<int32_t>::min(), 371 CHECK_EQ(kMin, r.Call(kMin, -1));
368 r.Call(std::numeric_limits<int32_t>::min(), -1)); 372 }
373
374 TEST(Run_WASM_Int32DivS_asmjs) {
375 TestingModule module;
376 module.origin = kAsmJsOrigin;
377 WasmRunner<int32_t> r(&module, MachineType::Int32(), MachineType::Int32());
378 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
379 const int32_t kMin = std::numeric_limits<int32_t>::min();
380 CHECK_EQ(0, r.Call(0, 100));
381 CHECK_EQ(0, r.Call(100, 0));
382 CHECK_EQ(0, r.Call(-1001, 0));
383 CHECK_EQ(kMin, r.Call(kMin, -1));
384 CHECK_EQ(0, r.Call(kMin, 0));
385 }
386
387 TEST(Run_WASM_Int32RemS_asmjs) {
388 TestingModule module;
389 module.origin = kAsmJsOrigin;
390 WasmRunner<int32_t> r(&module, MachineType::Int32(), MachineType::Int32());
391 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
392 const int32_t kMin = std::numeric_limits<int32_t>::min();
393 CHECK_EQ(33, r.Call(133, 100));
394 CHECK_EQ(0, r.Call(kMin, -1));
395 CHECK_EQ(0, r.Call(100, 0));
396 CHECK_EQ(0, r.Call(-1001, 0));
397 CHECK_EQ(0, r.Call(kMin, 0));
398 }
399
400 TEST(Run_WASM_Int32DivU_asmjs) {
401 TestingModule module;
402 module.origin = kAsmJsOrigin;
403 WasmRunner<int32_t> r(&module, MachineType::Int32(), MachineType::Int32());
404 BUILD(r, WASM_I32_DIVU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
405 const int32_t kMin = std::numeric_limits<int32_t>::min();
406 CHECK_EQ(0, r.Call(0, 100));
407 CHECK_EQ(0, r.Call(kMin, -1));
408 CHECK_EQ(0, r.Call(100, 0));
409 CHECK_EQ(0, r.Call(-1001, 0));
410 CHECK_EQ(0, r.Call(kMin, 0));
411 }
412
413 TEST(Run_WASM_Int32RemU_asmjs) {
414 TestingModule module;
415 module.origin = kAsmJsOrigin;
416 WasmRunner<int32_t> r(&module, MachineType::Int32(), MachineType::Int32());
417 BUILD(r, WASM_I32_REMU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
418 const int32_t kMin = std::numeric_limits<int32_t>::min();
419 CHECK_EQ(17, r.Call(217, 100));
420 CHECK_EQ(0, r.Call(100, 0));
421 CHECK_EQ(0, r.Call(-1001, 0));
422 CHECK_EQ(0, r.Call(kMin, 0));
423 CHECK_EQ(kMin, r.Call(kMin, -1));
369 } 424 }
370 425
371 426
372 TEST(Run_WASM_Int32DivS_byzero_const) { 427 TEST(Run_WASM_Int32DivS_byzero_const) {
373 for (int8_t denom = -2; denom < 8; denom++) { 428 for (int8_t denom = -2; denom < 8; denom++) {
374 WasmRunner<int32_t> r(MachineType::Int32()); 429 WasmRunner<int32_t> r(MachineType::Int32());
375 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_I8(denom))); 430 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_I8(denom)));
376 for (int32_t val = -7; val < 8; val++) { 431 for (int32_t val = -7; val < 8; val++) {
377 if (denom == 0) { 432 if (denom == 0) {
378 CHECK_TRAP(r.Call(val)); 433 CHECK_TRAP(r.Call(val));
(...skipping 2344 matching lines...) Expand 10 before | Expand all | Expand 10 after
2723 2778
2724 #if WASM_64 2779 #if WASM_64
2725 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } 2780 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); }
2726 #endif 2781 #endif
2727 2782
2728 2783
2729 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } 2784 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); }
2730 2785
2731 2786
2732 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } 2787 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); }
OLDNEW
« no previous file with comments | « src/wasm/wasm-opcodes.h ('k') | test/mjsunit/wasm/asm-wasm-i32.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698