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

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

Issue 2595733003: [wasm] Remove non-standard kExprI8Const bytecode (Closed)
Patch Set: Remove regression test Created 3 years, 11 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
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/base/platform/elapsed-timer.h" 9 #include "src/base/platform/elapsed-timer.h"
10 #include "src/utils.h" 10 #include "src/utils.h"
11 #include "src/wasm/wasm-macro-gen.h" 11 #include "src/wasm/wasm-macro-gen.h"
12 12
13 #include "test/cctest/cctest.h" 13 #include "test/cctest/cctest.h"
14 #include "test/cctest/compiler/value-helper.h" 14 #include "test/cctest/compiler/value-helper.h"
15 #include "test/cctest/wasm/wasm-run-utils.h" 15 #include "test/cctest/wasm/wasm-run-utils.h"
16 #include "test/common/wasm/test-signatures.h" 16 #include "test/common/wasm/test-signatures.h"
17 17
18 using namespace v8::base; 18 using namespace v8::base;
19 using namespace v8::internal; 19 using namespace v8::internal;
20 using namespace v8::internal::compiler; 20 using namespace v8::internal::compiler;
21 using namespace v8::internal::wasm; 21 using namespace v8::internal::wasm;
22 22
23 // for even shorter tests. 23 // for even shorter tests.
24 #define B1(a) WASM_BLOCK(a) 24 #define B1(a) WASM_BLOCK(a)
25 #define B2(a, b) WASM_BLOCK(a, b) 25 #define B2(a, b) WASM_BLOCK(a, b)
26 #define B3(a, b, c) WASM_BLOCK(a, b, c) 26 #define B3(a, b, c) WASM_BLOCK(a, b, c)
27 #define RET(x) x, kExprReturn 27 #define RET(x) x, kExprReturn
28 #define RET_I8(x) kExprI8Const, x, kExprReturn 28 #define RET_I8(x) WASM_I32V_2(x), kExprReturn
29
30 WASM_EXEC_TEST(Int8Const) {
31 WasmRunner<int32_t> r(execution_mode);
32 const byte kExpectedValue = 121;
33 // return(kExpectedValue)
34 BUILD(r, WASM_I8(kExpectedValue));
35 CHECK_EQ(kExpectedValue, r.Call());
36 }
37
38 WASM_EXEC_TEST(Int8Const_end) {
39 WasmRunner<int32_t> r(execution_mode);
40 const byte kExpectedValue = 121;
41 // return(kExpectedValue)
42 BUILD(r, WASM_I8(kExpectedValue), kExprEnd);
43 CHECK_EQ(kExpectedValue, r.Call());
44 }
45
46 WASM_EXEC_TEST(Int8Const_fallthru2) {
47 WasmRunner<int32_t> r(execution_mode);
48 const byte kExpectedValue = 123;
49 // -99 kExpectedValue
50 BUILD(r, WASM_I8(-99), WASM_DROP, WASM_I8(kExpectedValue));
51 CHECK_EQ(kExpectedValue, r.Call());
52 }
53
54 WASM_EXEC_TEST(Int8Const_all) {
55 for (int value = -128; value <= 127; ++value) {
56 WasmRunner<int32_t> r(execution_mode);
57 // return(value)
58 BUILD(r, WASM_I8(value));
59 int32_t result = r.Call();
60 CHECK_EQ(value, result);
61 }
62 }
63 29
64 WASM_EXEC_TEST(Int32Const) { 30 WASM_EXEC_TEST(Int32Const) {
65 WasmRunner<int32_t> r(execution_mode); 31 WasmRunner<int32_t> r(execution_mode);
66 const int32_t kExpectedValue = 0x11223344; 32 const int32_t kExpectedValue = 0x11223344;
67 // return(kExpectedValue) 33 // return(kExpectedValue)
68 BUILD(r, WASM_I32V_5(kExpectedValue)); 34 BUILD(r, WASM_I32V_5(kExpectedValue));
69 CHECK_EQ(kExpectedValue, r.Call()); 35 CHECK_EQ(kExpectedValue, r.Call());
70 } 36 }
71 37
72 WASM_EXEC_TEST(Int32Const_many) { 38 WASM_EXEC_TEST(Int32Const_many) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 WASM_EXEC_TEST(Int32Param1) { 70 WASM_EXEC_TEST(Int32Param1) {
105 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 71 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
106 // local[1] 72 // local[1]
107 BUILD(r, WASM_GET_LOCAL(1)); 73 BUILD(r, WASM_GET_LOCAL(1));
108 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(-111, *i)); } 74 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(-111, *i)); }
109 } 75 }
110 76
111 WASM_EXEC_TEST(Int32Add) { 77 WASM_EXEC_TEST(Int32Add) {
112 WasmRunner<int32_t> r(execution_mode); 78 WasmRunner<int32_t> r(execution_mode);
113 // 11 + 44 79 // 11 + 44
114 BUILD(r, WASM_I32_ADD(WASM_I8(11), WASM_I8(44))); 80 BUILD(r, WASM_I32_ADD(WASM_I32V_1(11), WASM_I32V_1(44)));
115 CHECK_EQ(55, r.Call()); 81 CHECK_EQ(55, r.Call());
116 } 82 }
117 83
118 WASM_EXEC_TEST(Int32Add_P) { 84 WASM_EXEC_TEST(Int32Add_P) {
119 WasmRunner<int32_t, int32_t> r(execution_mode); 85 WasmRunner<int32_t, int32_t> r(execution_mode);
120 // p0 + 13 86 // p0 + 13
121 BUILD(r, WASM_I32_ADD(WASM_I8(13), WASM_GET_LOCAL(0))); 87 BUILD(r, WASM_I32_ADD(WASM_I32V_1(13), WASM_GET_LOCAL(0)));
122 FOR_INT32_INPUTS(i) { CHECK_EQ(*i + 13, r.Call(*i)); } 88 FOR_INT32_INPUTS(i) { CHECK_EQ(*i + 13, r.Call(*i)); }
123 } 89 }
124 90
125 WASM_EXEC_TEST(Int32Add_P_fallthru) { 91 WASM_EXEC_TEST(Int32Add_P_fallthru) {
126 WasmRunner<int32_t, int32_t> r(execution_mode); 92 WasmRunner<int32_t, int32_t> r(execution_mode);
127 // p0 + 13 93 // p0 + 13
128 BUILD(r, WASM_I32_ADD(WASM_I8(13), WASM_GET_LOCAL(0))); 94 BUILD(r, WASM_I32_ADD(WASM_I32V_1(13), WASM_GET_LOCAL(0)));
129 FOR_INT32_INPUTS(i) { CHECK_EQ(*i + 13, r.Call(*i)); } 95 FOR_INT32_INPUTS(i) { CHECK_EQ(*i + 13, r.Call(*i)); }
130 } 96 }
131 97
132 static void RunInt32AddTest(WasmExecutionMode execution_mode, const byte* code, 98 static void RunInt32AddTest(WasmExecutionMode execution_mode, const byte* code,
133 size_t size) { 99 size_t size) {
134 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 100 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
135 r.Build(code, code + size); 101 r.Build(code, code + size);
136 FOR_INT32_INPUTS(i) { 102 FOR_INT32_INPUTS(i) {
137 FOR_INT32_INPUTS(j) { 103 FOR_INT32_INPUTS(j) {
138 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + 104 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) +
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 const int32_t kMin = std::numeric_limits<int32_t>::min(); 386 const int32_t kMin = std::numeric_limits<int32_t>::min();
421 CHECK_TRAP(r.Call(100, 0)); 387 CHECK_TRAP(r.Call(100, 0));
422 CHECK_TRAP(r.Call(-1001, 0)); 388 CHECK_TRAP(r.Call(-1001, 0));
423 CHECK_TRAP(r.Call(kMin, 0)); 389 CHECK_TRAP(r.Call(kMin, 0));
424 CHECK_EQ(kMin, r.Call(kMin, -1)); 390 CHECK_EQ(kMin, r.Call(kMin, -1));
425 } 391 }
426 392
427 WASM_EXEC_TEST_WITH_TRAP(Int32DivS_byzero_const) { 393 WASM_EXEC_TEST_WITH_TRAP(Int32DivS_byzero_const) {
428 for (int8_t denom = -2; denom < 8; ++denom) { 394 for (int8_t denom = -2; denom < 8; ++denom) {
429 WasmRunner<int32_t, int32_t> r(execution_mode); 395 WasmRunner<int32_t, int32_t> r(execution_mode);
430 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_I8(denom))); 396 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_I32V_1(denom)));
431 for (int32_t val = -7; val < 8; ++val) { 397 for (int32_t val = -7; val < 8; ++val) {
432 if (denom == 0) { 398 if (denom == 0) {
433 CHECK_TRAP(r.Call(val)); 399 CHECK_TRAP(r.Call(val));
434 } else { 400 } else {
435 CHECK_EQ(val / denom, r.Call(val)); 401 CHECK_EQ(val / denom, r.Call(val));
436 } 402 }
437 } 403 }
438 } 404 }
439 } 405 }
440 406
441 WASM_EXEC_TEST(Int32AsmjsDivS_byzero_const) { 407 WASM_EXEC_TEST(Int32AsmjsDivS_byzero_const) {
442 for (int8_t denom = -2; denom < 8; ++denom) { 408 for (int8_t denom = -2; denom < 8; ++denom) {
443 WasmRunner<int32_t, int32_t> r(execution_mode); 409 WasmRunner<int32_t, int32_t> r(execution_mode);
444 r.module().ChangeOriginToAsmjs(); 410 r.module().ChangeOriginToAsmjs();
445 BUILD(r, WASM_I32_ASMJS_DIVS(WASM_GET_LOCAL(0), WASM_I8(denom))); 411 BUILD(r, WASM_I32_ASMJS_DIVS(WASM_GET_LOCAL(0), WASM_I32V_1(denom)));
446 FOR_INT32_INPUTS(i) { 412 FOR_INT32_INPUTS(i) {
447 if (denom == 0) { 413 if (denom == 0) {
448 CHECK_EQ(0, r.Call(*i)); 414 CHECK_EQ(0, r.Call(*i));
449 } else if (denom == -1 && *i == std::numeric_limits<int32_t>::min()) { 415 } else if (denom == -1 && *i == std::numeric_limits<int32_t>::min()) {
450 CHECK_EQ(std::numeric_limits<int32_t>::min(), r.Call(*i)); 416 CHECK_EQ(std::numeric_limits<int32_t>::min(), r.Call(*i));
451 } else { 417 } else {
452 CHECK_EQ(*i / denom, r.Call(*i)); 418 CHECK_EQ(*i / denom, r.Call(*i));
453 } 419 }
454 } 420 }
455 } 421 }
456 } 422 }
457 423
458 WASM_EXEC_TEST(Int32AsmjsRemS_byzero_const) { 424 WASM_EXEC_TEST(Int32AsmjsRemS_byzero_const) {
459 for (int8_t denom = -2; denom < 8; ++denom) { 425 for (int8_t denom = -2; denom < 8; ++denom) {
460 WasmRunner<int32_t, int32_t> r(execution_mode); 426 WasmRunner<int32_t, int32_t> r(execution_mode);
461 r.module().ChangeOriginToAsmjs(); 427 r.module().ChangeOriginToAsmjs();
462 BUILD(r, WASM_I32_ASMJS_REMS(WASM_GET_LOCAL(0), WASM_I8(denom))); 428 BUILD(r, WASM_I32_ASMJS_REMS(WASM_GET_LOCAL(0), WASM_I32V_1(denom)));
463 FOR_INT32_INPUTS(i) { 429 FOR_INT32_INPUTS(i) {
464 if (denom == 0) { 430 if (denom == 0) {
465 CHECK_EQ(0, r.Call(*i)); 431 CHECK_EQ(0, r.Call(*i));
466 } else if (denom == -1 && *i == std::numeric_limits<int32_t>::min()) { 432 } else if (denom == -1 && *i == std::numeric_limits<int32_t>::min()) {
467 CHECK_EQ(0, r.Call(*i)); 433 CHECK_EQ(0, r.Call(*i));
468 } else { 434 } else {
469 CHECK_EQ(*i % denom, r.Call(*i)); 435 CHECK_EQ(*i % denom, r.Call(*i));
470 } 436 }
471 } 437 }
472 } 438 }
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 FOR_FLOAT64_INPUTS(i) { 636 FOR_FLOAT64_INPUTS(i) {
671 CHECK_EQ(0x8000000000000000, 637 CHECK_EQ(0x8000000000000000,
672 bit_cast<uint64_t>(*i) ^ bit_cast<uint64_t>(r.Call(*i))); 638 bit_cast<uint64_t>(*i) ^ bit_cast<uint64_t>(r.Call(*i)));
673 } 639 }
674 } 640 }
675 641
676 WASM_EXEC_TEST(IfElse_P) { 642 WASM_EXEC_TEST(IfElse_P) {
677 WasmRunner<int32_t, int32_t> r(execution_mode); 643 WasmRunner<int32_t, int32_t> r(execution_mode);
678 // if (p0) return 11; else return 22; 644 // if (p0) return 11; else return 22;
679 BUILD(r, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), // -- 645 BUILD(r, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), // --
680 WASM_I8(11), // -- 646 WASM_I32V_1(11), // --
681 WASM_I8(22))); // -- 647 WASM_I32V_1(22))); // --
682 FOR_INT32_INPUTS(i) { 648 FOR_INT32_INPUTS(i) {
683 int32_t expected = *i ? 11 : 22; 649 int32_t expected = *i ? 11 : 22;
684 CHECK_EQ(expected, r.Call(*i)); 650 CHECK_EQ(expected, r.Call(*i));
685 } 651 }
686 } 652 }
687 #define EMPTY 653 #define EMPTY
688 654
689 WASM_EXEC_TEST(If_empty1) { 655 WASM_EXEC_TEST(If_empty1) {
690 WasmRunner<uint32_t, uint32_t, uint32_t> r(execution_mode); 656 WasmRunner<uint32_t, uint32_t, uint32_t> r(execution_mode);
691 BUILD(r, WASM_GET_LOCAL(0), kExprIf, kLocalVoid, kExprEnd, WASM_GET_LOCAL(1)); 657 BUILD(r, WASM_GET_LOCAL(0), kExprIf, kLocalVoid, kExprEnd, WASM_GET_LOCAL(1));
(...skipping 18 matching lines...) Expand all
710 WasmRunner<uint32_t, uint32_t, uint32_t> r(execution_mode); 676 WasmRunner<uint32_t, uint32_t, uint32_t> r(execution_mode);
711 BUILD(r, WASM_GET_LOCAL(0), kExprIf, kLocalVoid, kExprElse, WASM_NOP, 677 BUILD(r, WASM_GET_LOCAL(0), kExprIf, kLocalVoid, kExprElse, WASM_NOP,
712 kExprEnd, WASM_GET_LOCAL(1)); 678 kExprEnd, WASM_GET_LOCAL(1));
713 FOR_UINT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i - 6, *i)); } 679 FOR_UINT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i - 6, *i)); }
714 } 680 }
715 681
716 WASM_EXEC_TEST(If_chain1) { 682 WASM_EXEC_TEST(If_chain1) {
717 WasmRunner<int32_t, int32_t> r(execution_mode); 683 WasmRunner<int32_t, int32_t> r(execution_mode);
718 // if (p0) 13; if (p0) 14; 15 684 // if (p0) 13; if (p0) 14; 15
719 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP), 685 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP),
720 WASM_IF(WASM_GET_LOCAL(0), WASM_NOP), WASM_I8(15)); 686 WASM_IF(WASM_GET_LOCAL(0), WASM_NOP), WASM_I32V_1(15));
721 FOR_INT32_INPUTS(i) { CHECK_EQ(15, r.Call(*i)); } 687 FOR_INT32_INPUTS(i) { CHECK_EQ(15, r.Call(*i)); }
722 } 688 }
723 689
724 WASM_EXEC_TEST(If_chain_set) { 690 WASM_EXEC_TEST(If_chain_set) {
725 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 691 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
726 // if (p0) p1 = 73; if (p0) p1 = 74; p1 692 // if (p0) p1 = 73; if (p0) p1 = 74; p1
727 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(1, WASM_I8(73))), 693 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(1, WASM_I32V_2(73))),
728 WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(1, WASM_I8(74))), 694 WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(1, WASM_I32V_2(74))),
729 WASM_GET_LOCAL(1)); 695 WASM_GET_LOCAL(1));
730 FOR_INT32_INPUTS(i) { 696 FOR_INT32_INPUTS(i) {
731 int32_t expected = *i ? 74 : *i; 697 int32_t expected = *i ? 74 : *i;
732 CHECK_EQ(expected, r.Call(*i, *i)); 698 CHECK_EQ(expected, r.Call(*i, *i));
733 } 699 }
734 } 700 }
735 701
736 WASM_EXEC_TEST(IfElse_Unreachable1) { 702 WASM_EXEC_TEST(IfElse_Unreachable1) {
737 WasmRunner<int32_t> r(execution_mode); 703 WasmRunner<int32_t> r(execution_mode);
738 // 0 ? unreachable : 27 704 // 0 ? unreachable : 27
739 BUILD(r, WASM_IF_ELSE_I(WASM_ZERO, // -- 705 BUILD(r, WASM_IF_ELSE_I(WASM_ZERO, // --
740 WASM_UNREACHABLE, // -- 706 WASM_UNREACHABLE, // --
741 WASM_I8(27))); // -- 707 WASM_I32V_1(27))); // --
742 CHECK_EQ(27, r.Call()); 708 CHECK_EQ(27, r.Call());
743 } 709 }
744 710
745 WASM_EXEC_TEST(IfElse_Unreachable2) { 711 WASM_EXEC_TEST(IfElse_Unreachable2) {
746 WasmRunner<int32_t> r(execution_mode); 712 WasmRunner<int32_t> r(execution_mode);
747 // 1 ? 28 : unreachable 713 // 1 ? 28 : unreachable
748 BUILD(r, WASM_IF_ELSE_I(WASM_I8(1), // -- 714 BUILD(r, WASM_IF_ELSE_I(WASM_I32V_1(1), // --
749 WASM_I8(28), // -- 715 WASM_I32V_1(28), // --
750 WASM_UNREACHABLE)); // -- 716 WASM_UNREACHABLE)); // --
751 CHECK_EQ(28, r.Call()); 717 CHECK_EQ(28, r.Call());
752 } 718 }
753 719
754 WASM_EXEC_TEST(Return12) { 720 WASM_EXEC_TEST(Return12) {
755 WasmRunner<int32_t> r(execution_mode); 721 WasmRunner<int32_t> r(execution_mode);
756 722
757 BUILD(r, RET_I8(12)); 723 BUILD(r, RET_I8(12));
758 CHECK_EQ(12, r.Call()); 724 CHECK_EQ(12, r.Call());
759 } 725 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 WasmRunner<float, float, float, int32_t> r(execution_mode); 775 WasmRunner<float, float, float, int32_t> r(execution_mode);
810 // return select(11, 22, a); 776 // return select(11, 22, a);
811 BUILD(r, 777 BUILD(r,
812 WASM_SELECT(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1), WASM_GET_LOCAL(2))); 778 WASM_SELECT(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1), WASM_GET_LOCAL(2)));
813 CHECK_FLOAT_EQ(2.0f, r.Call(2.0f, 1.0f, 1)); 779 CHECK_FLOAT_EQ(2.0f, r.Call(2.0f, 1.0f, 1));
814 } 780 }
815 781
816 WASM_EXEC_TEST(Select) { 782 WASM_EXEC_TEST(Select) {
817 WasmRunner<int32_t, int32_t> r(execution_mode); 783 WasmRunner<int32_t, int32_t> r(execution_mode);
818 // return select(11, 22, a); 784 // return select(11, 22, a);
819 BUILD(r, WASM_SELECT(WASM_I8(11), WASM_I8(22), WASM_GET_LOCAL(0))); 785 BUILD(r, WASM_SELECT(WASM_I32V_1(11), WASM_I32V_1(22), WASM_GET_LOCAL(0)));
820 FOR_INT32_INPUTS(i) { 786 FOR_INT32_INPUTS(i) {
821 int32_t expected = *i ? 11 : 22; 787 int32_t expected = *i ? 11 : 22;
822 CHECK_EQ(expected, r.Call(*i)); 788 CHECK_EQ(expected, r.Call(*i));
823 } 789 }
824 } 790 }
825 791
826 WASM_EXEC_TEST(Select_strict1) { 792 WASM_EXEC_TEST(Select_strict1) {
827 WasmRunner<int32_t, int32_t> r(execution_mode); 793 WasmRunner<int32_t, int32_t> r(execution_mode);
828 // select(a=0, a=1, a=2); return a 794 // select(a=0, a=1, a=2); return a
829 BUILD(r, WASM_SELECT(WASM_TEE_LOCAL(0, WASM_I8(0)), 795 BUILD(r, WASM_SELECT(WASM_TEE_LOCAL(0, WASM_ZERO),
830 WASM_TEE_LOCAL(0, WASM_I8(1)), 796 WASM_TEE_LOCAL(0, WASM_I32V_1(1)),
831 WASM_TEE_LOCAL(0, WASM_I8(2))), 797 WASM_TEE_LOCAL(0, WASM_I32V_1(2))),
832 WASM_DROP, WASM_GET_LOCAL(0)); 798 WASM_DROP, WASM_GET_LOCAL(0));
833 FOR_INT32_INPUTS(i) { CHECK_EQ(2, r.Call(*i)); } 799 FOR_INT32_INPUTS(i) { CHECK_EQ(2, r.Call(*i)); }
834 } 800 }
835 801
836 WASM_EXEC_TEST(Select_strict2) { 802 WASM_EXEC_TEST(Select_strict2) {
837 WasmRunner<int32_t, int32_t> r(execution_mode); 803 WasmRunner<int32_t, int32_t> r(execution_mode);
838 r.AllocateLocal(kWasmI32); 804 r.AllocateLocal(kWasmI32);
839 r.AllocateLocal(kWasmI32); 805 r.AllocateLocal(kWasmI32);
840 // select(b=5, c=6, a) 806 // select(b=5, c=6, a)
841 BUILD(r, WASM_SELECT(WASM_TEE_LOCAL(1, WASM_I8(5)), 807 BUILD(r, WASM_SELECT(WASM_TEE_LOCAL(1, WASM_I32V_1(5)),
842 WASM_TEE_LOCAL(2, WASM_I8(6)), WASM_GET_LOCAL(0))); 808 WASM_TEE_LOCAL(2, WASM_I32V_1(6)), WASM_GET_LOCAL(0)));
843 FOR_INT32_INPUTS(i) { 809 FOR_INT32_INPUTS(i) {
844 int32_t expected = *i ? 5 : 6; 810 int32_t expected = *i ? 5 : 6;
845 CHECK_EQ(expected, r.Call(*i)); 811 CHECK_EQ(expected, r.Call(*i));
846 } 812 }
847 } 813 }
848 814
849 WASM_EXEC_TEST(Select_strict3) { 815 WASM_EXEC_TEST(Select_strict3) {
850 WasmRunner<int32_t, int32_t> r(execution_mode); 816 WasmRunner<int32_t, int32_t> r(execution_mode);
851 r.AllocateLocal(kWasmI32); 817 r.AllocateLocal(kWasmI32);
852 r.AllocateLocal(kWasmI32); 818 r.AllocateLocal(kWasmI32);
853 // select(b=5, c=6, a=b) 819 // select(b=5, c=6, a=b)
854 BUILD(r, WASM_SELECT(WASM_TEE_LOCAL(1, WASM_I8(5)), 820 BUILD(r, WASM_SELECT(WASM_TEE_LOCAL(1, WASM_I32V_1(5)),
855 WASM_TEE_LOCAL(2, WASM_I8(6)), 821 WASM_TEE_LOCAL(2, WASM_I32V_1(6)),
856 WASM_TEE_LOCAL(0, WASM_GET_LOCAL(1)))); 822 WASM_TEE_LOCAL(0, WASM_GET_LOCAL(1))));
857 FOR_INT32_INPUTS(i) { 823 FOR_INT32_INPUTS(i) {
858 int32_t expected = 5; 824 int32_t expected = 5;
859 CHECK_EQ(expected, r.Call(*i)); 825 CHECK_EQ(expected, r.Call(*i));
860 } 826 }
861 } 827 }
862 828
863 WASM_EXEC_TEST(BrIf_strict) { 829 WASM_EXEC_TEST(BrIf_strict) {
864 WasmRunner<int32_t, int32_t> r(execution_mode); 830 WasmRunner<int32_t, int32_t> r(execution_mode);
865 BUILD(r, WASM_BLOCK_I(WASM_BRV_IF(0, WASM_GET_LOCAL(0), 831 BUILD(r, WASM_BLOCK_I(WASM_BRV_IF(0, WASM_GET_LOCAL(0),
866 WASM_TEE_LOCAL(0, WASM_I8(99))))); 832 WASM_TEE_LOCAL(0, WASM_I32V_2(99)))));
867 833
868 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } 834 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); }
869 } 835 }
870 836
871 WASM_EXEC_TEST(Br_height) { 837 WASM_EXEC_TEST(Br_height) {
872 WasmRunner<int32_t, int32_t> r(execution_mode); 838 WasmRunner<int32_t, int32_t> r(execution_mode);
873 BUILD(r, 839 BUILD(r, WASM_BLOCK_I(WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_GET_LOCAL(0),
874 WASM_BLOCK_I( 840 WASM_GET_LOCAL(0)),
875 WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_GET_LOCAL(0), WASM_GET_LOCAL(0)), 841 WASM_RETURN1(WASM_I32V_1(9)),
876 WASM_RETURN1(WASM_I8(9)), WASM_I8(7), WASM_I8(7)), 842 WASM_I32V_1(7), WASM_I32V_1(7)),
877 WASM_BRV(0, WASM_I8(8)))); 843 WASM_BRV(0, WASM_I32V_1(8))));
878 844
879 for (int32_t i = 0; i < 5; i++) { 845 for (int32_t i = 0; i < 5; i++) {
880 int32_t expected = i != 0 ? 8 : 9; 846 int32_t expected = i != 0 ? 8 : 9;
881 CHECK_EQ(expected, r.Call(i)); 847 CHECK_EQ(expected, r.Call(i));
882 } 848 }
883 } 849 }
884 850
885 WASM_EXEC_TEST(Regression_660262) { 851 WASM_EXEC_TEST(Regression_660262) {
886 WasmRunner<int32_t> r(execution_mode); 852 WasmRunner<int32_t> r(execution_mode);
887 r.module().AddMemoryElems<int32_t>(8); 853 r.module().AddMemoryElems<int32_t>(8);
888 BUILD(r, kExprI8Const, 0x00, kExprI8Const, 0x00, kExprI32LoadMem, 0x00, 0x0f, 854 BUILD(r, kExprI32Const, 0x00, kExprI32Const, 0x00, kExprI32LoadMem, 0x00,
889 kExprBrTable, 0x00, 0x80, 0x00); // entries=0 855 0x0f, kExprBrTable, 0x00, 0x80, 0x00); // entries=0
890 r.Call(); 856 r.Call();
891 } 857 }
892 858
893 WASM_EXEC_TEST(BrTable0a) { 859 WASM_EXEC_TEST(BrTable0a) {
894 WasmRunner<int32_t, int32_t> r(execution_mode); 860 WasmRunner<int32_t, int32_t> r(execution_mode);
895 BUILD(r, B1(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0)))), 861 BUILD(r, B1(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0)))),
896 WASM_I8(91)); 862 WASM_I32V_2(91));
897 FOR_INT32_INPUTS(i) { CHECK_EQ(91, r.Call(*i)); } 863 FOR_INT32_INPUTS(i) { CHECK_EQ(91, r.Call(*i)); }
898 } 864 }
899 865
900 WASM_EXEC_TEST(BrTable0b) { 866 WASM_EXEC_TEST(BrTable0b) {
901 WasmRunner<int32_t, int32_t> r(execution_mode); 867 WasmRunner<int32_t, int32_t> r(execution_mode);
902 BUILD(r, 868 BUILD(r,
903 B1(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(0), BR_TARGET(0)))), 869 B1(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(0), BR_TARGET(0)))),
904 WASM_I8(92)); 870 WASM_I32V_2(92));
905 FOR_INT32_INPUTS(i) { CHECK_EQ(92, r.Call(*i)); } 871 FOR_INT32_INPUTS(i) { CHECK_EQ(92, r.Call(*i)); }
906 } 872 }
907 873
908 WASM_EXEC_TEST(BrTable0c) { 874 WASM_EXEC_TEST(BrTable0c) {
909 WasmRunner<int32_t, int32_t> r(execution_mode); 875 WasmRunner<int32_t, int32_t> r(execution_mode);
910 BUILD( 876 BUILD(
911 r, 877 r,
912 B1(B2(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(0), BR_TARGET(1))), 878 B1(B2(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(0), BR_TARGET(1))),
913 RET_I8(76))), 879 RET_I8(76))),
914 WASM_I8(77)); 880 WASM_I32V_2(77));
915 FOR_INT32_INPUTS(i) { 881 FOR_INT32_INPUTS(i) {
916 int32_t expected = *i == 0 ? 76 : 77; 882 int32_t expected = *i == 0 ? 76 : 77;
917 CHECK_EQ(expected, r.Call(*i)); 883 CHECK_EQ(expected, r.Call(*i));
918 } 884 }
919 } 885 }
920 886
921 WASM_EXEC_TEST(BrTable1) { 887 WASM_EXEC_TEST(BrTable1) {
922 WasmRunner<int32_t, int32_t> r(execution_mode); 888 WasmRunner<int32_t, int32_t> r(execution_mode);
923 BUILD(r, B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0))), RET_I8(93)); 889 BUILD(r, B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0))), RET_I8(93));
924 FOR_INT32_INPUTS(i) { CHECK_EQ(93, r.Call(*i)); } 890 FOR_INT32_INPUTS(i) { CHECK_EQ(93, r.Call(*i)); }
925 } 891 }
926 892
927 WASM_EXEC_TEST(BrTable_loop) { 893 WASM_EXEC_TEST(BrTable_loop) {
928 WasmRunner<int32_t, int32_t> r(execution_mode); 894 WasmRunner<int32_t, int32_t> r(execution_mode);
929 BUILD(r, 895 BUILD(r,
930 B2(B1(WASM_LOOP(WASM_BR_TABLE(WASM_INC_LOCAL_BYV(0, 1), 2, BR_TARGET(2), 896 B2(B1(WASM_LOOP(WASM_BR_TABLE(WASM_INC_LOCAL_BYV(0, 1), 2, BR_TARGET(2),
931 BR_TARGET(1), BR_TARGET(0)))), 897 BR_TARGET(1), BR_TARGET(0)))),
932 RET_I8(99)), 898 RET_I8(99)),
933 WASM_I8(98)); 899 WASM_I32V_2(98));
934 CHECK_EQ(99, r.Call(0)); 900 CHECK_EQ(99, r.Call(0));
935 CHECK_EQ(98, r.Call(-1)); 901 CHECK_EQ(98, r.Call(-1));
936 CHECK_EQ(98, r.Call(-2)); 902 CHECK_EQ(98, r.Call(-2));
937 CHECK_EQ(98, r.Call(-3)); 903 CHECK_EQ(98, r.Call(-3));
938 CHECK_EQ(98, r.Call(-100)); 904 CHECK_EQ(98, r.Call(-100));
939 } 905 }
940 906
941 WASM_EXEC_TEST(BrTable_br) { 907 WASM_EXEC_TEST(BrTable_br) {
942 WasmRunner<int32_t, int32_t> r(execution_mode); 908 WasmRunner<int32_t, int32_t> r(execution_mode);
943 BUILD(r, 909 BUILD(r,
944 B2(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(1), BR_TARGET(0))), 910 B2(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(1), BR_TARGET(0))),
945 RET_I8(91)), 911 RET_I8(91)),
946 WASM_I8(99)); 912 WASM_I32V_2(99));
947 CHECK_EQ(99, r.Call(0)); 913 CHECK_EQ(99, r.Call(0));
948 CHECK_EQ(91, r.Call(1)); 914 CHECK_EQ(91, r.Call(1));
949 CHECK_EQ(91, r.Call(2)); 915 CHECK_EQ(91, r.Call(2));
950 CHECK_EQ(91, r.Call(3)); 916 CHECK_EQ(91, r.Call(3));
951 } 917 }
952 918
953 WASM_EXEC_TEST(BrTable_br2) { 919 WASM_EXEC_TEST(BrTable_br2) {
954 WasmRunner<int32_t, int32_t> r(execution_mode); 920 WasmRunner<int32_t, int32_t> r(execution_mode);
955 921
956 BUILD(r, B2(B2(B2(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 3, BR_TARGET(1), 922 BUILD(r, B2(B2(B2(B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 3, BR_TARGET(1),
957 BR_TARGET(2), BR_TARGET(3), BR_TARGET(0))), 923 BR_TARGET(2), BR_TARGET(3), BR_TARGET(0))),
958 RET_I8(85)), 924 RET_I8(85)),
959 RET_I8(86)), 925 RET_I8(86)),
960 RET_I8(87)), 926 RET_I8(87)),
961 WASM_I8(88)); 927 WASM_I32V_2(88));
962 CHECK_EQ(86, r.Call(0)); 928 CHECK_EQ(86, r.Call(0));
963 CHECK_EQ(87, r.Call(1)); 929 CHECK_EQ(87, r.Call(1));
964 CHECK_EQ(88, r.Call(2)); 930 CHECK_EQ(88, r.Call(2));
965 CHECK_EQ(85, r.Call(3)); 931 CHECK_EQ(85, r.Call(3));
966 CHECK_EQ(85, r.Call(4)); 932 CHECK_EQ(85, r.Call(4));
967 CHECK_EQ(85, r.Call(5)); 933 CHECK_EQ(85, r.Call(5));
968 } 934 }
969 935
970 WASM_EXEC_TEST(BrTable4) { 936 WASM_EXEC_TEST(BrTable4) {
971 for (int i = 0; i < 4; ++i) { 937 for (int i = 0; i < 4; ++i) {
972 for (int t = 0; t < 4; ++t) { 938 for (int t = 0; t < 4; ++t) {
973 uint32_t cases[] = {0, 1, 2, 3}; 939 uint32_t cases[] = {0, 1, 2, 3};
974 cases[i] = t; 940 cases[i] = t;
975 byte code[] = {B2(B2(B2(B2(B1(WASM_BR_TABLE( 941 byte code[] = {B2(B2(B2(B2(B1(WASM_BR_TABLE(
976 WASM_GET_LOCAL(0), 3, BR_TARGET(cases[0]), 942 WASM_GET_LOCAL(0), 3, BR_TARGET(cases[0]),
977 BR_TARGET(cases[1]), BR_TARGET(cases[2]), 943 BR_TARGET(cases[1]), BR_TARGET(cases[2]),
978 BR_TARGET(cases[3]))), 944 BR_TARGET(cases[3]))),
979 RET_I8(70)), 945 RET_I8(70)),
980 RET_I8(71)), 946 RET_I8(71)),
981 RET_I8(72)), 947 RET_I8(72)),
982 RET_I8(73)), 948 RET_I8(73)),
983 WASM_I8(75)}; 949 WASM_I32V_2(75)};
984 950
985 WasmRunner<int32_t, int32_t> r(execution_mode); 951 WasmRunner<int32_t, int32_t> r(execution_mode);
986 r.Build(code, code + arraysize(code)); 952 r.Build(code, code + arraysize(code));
987 953
988 for (int x = -3; x < 50; ++x) { 954 for (int x = -3; x < 50; ++x) {
989 int index = (x > 3 || x < 0) ? 3 : x; 955 int index = (x > 3 || x < 0) ? 3 : x;
990 int32_t expected = 70 + cases[index]; 956 int32_t expected = 70 + cases[index];
991 CHECK_EQ(expected, r.Call(x)); 957 CHECK_EQ(expected, r.Call(x));
992 } 958 }
993 } 959 }
994 } 960 }
995 } 961 }
996 962
997 WASM_EXEC_TEST(BrTable4x4) { 963 WASM_EXEC_TEST(BrTable4x4) {
998 for (byte a = 0; a < 4; ++a) { 964 for (byte a = 0; a < 4; ++a) {
999 for (byte b = 0; b < 4; ++b) { 965 for (byte b = 0; b < 4; ++b) {
1000 for (byte c = 0; c < 4; ++c) { 966 for (byte c = 0; c < 4; ++c) {
1001 for (byte d = 0; d < 4; ++d) { 967 for (byte d = 0; d < 4; ++d) {
1002 for (int i = 0; i < 4; ++i) { 968 for (int i = 0; i < 4; ++i) {
1003 uint32_t cases[] = {a, b, c, d}; 969 uint32_t cases[] = {a, b, c, d};
1004 byte code[] = { 970 byte code[] = {
1005 B2(B2(B2(B2(B1(WASM_BR_TABLE( 971 B2(B2(B2(B2(B1(WASM_BR_TABLE(
1006 WASM_GET_LOCAL(0), 3, BR_TARGET(cases[0]), 972 WASM_GET_LOCAL(0), 3, BR_TARGET(cases[0]),
1007 BR_TARGET(cases[1]), BR_TARGET(cases[2]), 973 BR_TARGET(cases[1]), BR_TARGET(cases[2]),
1008 BR_TARGET(cases[3]))), 974 BR_TARGET(cases[3]))),
1009 RET_I8(50)), 975 RET_I8(50)),
1010 RET_I8(51)), 976 RET_I8(51)),
1011 RET_I8(52)), 977 RET_I8(52)),
1012 RET_I8(53)), 978 RET_I8(53)),
1013 WASM_I8(55)}; 979 WASM_I32V_2(55)};
1014 980
1015 WasmRunner<int32_t, int32_t> r(execution_mode); 981 WasmRunner<int32_t, int32_t> r(execution_mode);
1016 r.Build(code, code + arraysize(code)); 982 r.Build(code, code + arraysize(code));
1017 983
1018 for (int x = -6; x < 47; ++x) { 984 for (int x = -6; x < 47; ++x) {
1019 int index = (x > 3 || x < 0) ? 3 : x; 985 int index = (x > 3 || x < 0) ? 3 : x;
1020 int32_t expected = 50 + cases[index]; 986 int32_t expected = 50 + cases[index];
1021 CHECK_EQ(expected, r.Call(x)); 987 CHECK_EQ(expected, r.Call(x));
1022 } 988 }
1023 } 989 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 CHECK_EQ(expected, r.Call()); 1032 CHECK_EQ(expected, r.Call());
1067 } 1033 }
1068 } 1034 }
1069 1035
1070 WASM_EXEC_TEST(I32ReinterpretF32) { 1036 WASM_EXEC_TEST(I32ReinterpretF32) {
1071 WasmRunner<int32_t, int32_t> r(execution_mode); 1037 WasmRunner<int32_t, int32_t> r(execution_mode);
1072 int32_t* memory = r.module().AddMemoryElems<int32_t>(8); 1038 int32_t* memory = r.module().AddMemoryElems<int32_t>(8);
1073 1039
1074 BUILD(r, WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, 1040 BUILD(r, WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO,
1075 WASM_F32_REINTERPRET_I32(WASM_GET_LOCAL(0))), 1041 WASM_F32_REINTERPRET_I32(WASM_GET_LOCAL(0))),
1076 WASM_I8(107)); 1042 WASM_I32V_2(107));
1077 1043
1078 FOR_INT32_INPUTS(i) { 1044 FOR_INT32_INPUTS(i) {
1079 int32_t expected = *i; 1045 int32_t expected = *i;
1080 CHECK_EQ(107, r.Call(expected)); 1046 CHECK_EQ(107, r.Call(expected));
1081 CHECK_EQ(expected, r.module().ReadMemory(&memory[0])); 1047 CHECK_EQ(expected, r.module().ReadMemory(&memory[0]));
1082 } 1048 }
1083 } 1049 }
1084 1050
1085 WASM_EXEC_TEST_WITH_TRAP(LoadMaxUint32Offset) { 1051 WASM_EXEC_TEST_WITH_TRAP(LoadMaxUint32Offset) {
1086 WasmRunner<int32_t> r(execution_mode); 1052 WasmRunner<int32_t> r(execution_mode);
1087 r.module().AddMemoryElems<int32_t>(8); 1053 r.module().AddMemoryElems<int32_t>(8);
1088 1054
1089 BUILD(r, kExprI8Const, 0, // index 1055 BUILD(r, kExprI32Const, 0, // index
1090 static_cast<byte>(v8::internal::wasm::WasmOpcodes::LoadStoreOpcodeOf( 1056 static_cast<byte>(v8::internal::wasm::WasmOpcodes::LoadStoreOpcodeOf(
1091 MachineType::Int32(), false)), // -- 1057 MachineType::Int32(), false)), // --
1092 0, // alignment 1058 0, // alignment
1093 U32V_5(0xffffffff)); // offset 1059 U32V_5(0xffffffff)); // offset
1094 1060
1095 CHECK_TRAP32(r.Call()); 1061 CHECK_TRAP32(r.Call());
1096 } 1062 }
1097 1063
1098 WASM_EXEC_TEST(LoadStoreLoad) { 1064 WASM_EXEC_TEST(LoadStoreLoad) {
1099 WasmRunner<int32_t> r(execution_mode); 1065 WasmRunner<int32_t> r(execution_mode);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 1166
1201 WASM_EXEC_TEST(Block_br2) { 1167 WASM_EXEC_TEST(Block_br2) {
1202 WasmRunner<int32_t, int32_t> r(execution_mode); 1168 WasmRunner<int32_t, int32_t> r(execution_mode);
1203 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_GET_LOCAL(0)))); 1169 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_GET_LOCAL(0))));
1204 FOR_UINT32_INPUTS(i) { CHECK_EQ(*i, static_cast<uint32_t>(r.Call(*i))); } 1170 FOR_UINT32_INPUTS(i) { CHECK_EQ(*i, static_cast<uint32_t>(r.Call(*i))); }
1205 } 1171 }
1206 1172
1207 WASM_EXEC_TEST(Block_If_P) { 1173 WASM_EXEC_TEST(Block_If_P) {
1208 WasmRunner<int32_t, int32_t> r(execution_mode); 1174 WasmRunner<int32_t, int32_t> r(execution_mode);
1209 // block { if (p0) break 51; 52; } 1175 // block { if (p0) break 51; 52; }
1210 BUILD(r, WASM_BLOCK_I( // -- 1176 BUILD(r, WASM_BLOCK_I( // --
1211 WASM_IF(WASM_GET_LOCAL(0), // -- 1177 WASM_IF(WASM_GET_LOCAL(0), // --
1212 WASM_BRV(1, WASM_I8(51))), // -- 1178 WASM_BRV(1, WASM_I32V_1(51))), // --
1213 WASM_I8(52))); // -- 1179 WASM_I32V_1(52))); // --
1214 FOR_INT32_INPUTS(i) { 1180 FOR_INT32_INPUTS(i) {
1215 int32_t expected = *i ? 51 : 52; 1181 int32_t expected = *i ? 51 : 52;
1216 CHECK_EQ(expected, r.Call(*i)); 1182 CHECK_EQ(expected, r.Call(*i));
1217 } 1183 }
1218 } 1184 }
1219 1185
1220 WASM_EXEC_TEST(Loop_empty) { 1186 WASM_EXEC_TEST(Loop_empty) {
1221 WasmRunner<int32_t, int32_t> r(execution_mode); 1187 WasmRunner<int32_t, int32_t> r(execution_mode);
1222 BUILD(r, kExprLoop, kLocalVoid, kExprEnd, WASM_GET_LOCAL(0)); 1188 BUILD(r, kExprLoop, kLocalVoid, kExprEnd, WASM_GET_LOCAL(0));
1223 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } 1189 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 FOR_UINT32_INPUTS(i) { 1232 FOR_UINT32_INPUTS(i) {
1267 FOR_UINT32_INPUTS(j) { 1233 FOR_UINT32_INPUTS(j) {
1268 CHECK_EQ(*i, r.Call(0, *i, *j)); 1234 CHECK_EQ(*i, r.Call(0, *i, *j));
1269 CHECK_EQ(*j, r.Call(1, *i, *j)); 1235 CHECK_EQ(*j, r.Call(1, *i, *j));
1270 } 1236 }
1271 } 1237 }
1272 } 1238 }
1273 1239
1274 WASM_EXEC_TEST(Block_BrIf_P) { 1240 WASM_EXEC_TEST(Block_BrIf_P) {
1275 WasmRunner<int32_t, int32_t> r(execution_mode); 1241 WasmRunner<int32_t, int32_t> r(execution_mode);
1276 BUILD(r, WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I8(51), WASM_GET_LOCAL(0)), 1242 BUILD(r, WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I32V_1(51), WASM_GET_LOCAL(0)),
1277 WASM_I8(52))); 1243 WASM_I32V_1(52)));
1278 FOR_INT32_INPUTS(i) { 1244 FOR_INT32_INPUTS(i) {
1279 int32_t expected = *i ? 51 : 52; 1245 int32_t expected = *i ? 51 : 52;
1280 CHECK_EQ(expected, r.Call(*i)); 1246 CHECK_EQ(expected, r.Call(*i));
1281 } 1247 }
1282 } 1248 }
1283 1249
1284 WASM_EXEC_TEST(Block_IfElse_P_assign) { 1250 WASM_EXEC_TEST(Block_IfElse_P_assign) {
1285 WasmRunner<int32_t, int32_t> r(execution_mode); 1251 WasmRunner<int32_t, int32_t> r(execution_mode);
1286 // { if (p0) p0 = 71; else p0 = 72; return p0; } 1252 // { if (p0) p0 = 71; else p0 = 72; return p0; }
1287 BUILD(r, // -- 1253 BUILD(r, // --
1288 WASM_IF_ELSE(WASM_GET_LOCAL(0), // -- 1254 WASM_IF_ELSE(WASM_GET_LOCAL(0), // --
1289 WASM_SET_LOCAL(0, WASM_I8(71)), // -- 1255 WASM_SET_LOCAL(0, WASM_I32V_2(71)), // --
1290 WASM_SET_LOCAL(0, WASM_I8(72))), // -- 1256 WASM_SET_LOCAL(0, WASM_I32V_2(72))), // --
1291 WASM_GET_LOCAL(0)); 1257 WASM_GET_LOCAL(0));
1292 FOR_INT32_INPUTS(i) { 1258 FOR_INT32_INPUTS(i) {
1293 int32_t expected = *i ? 71 : 72; 1259 int32_t expected = *i ? 71 : 72;
1294 CHECK_EQ(expected, r.Call(*i)); 1260 CHECK_EQ(expected, r.Call(*i));
1295 } 1261 }
1296 } 1262 }
1297 1263
1298 WASM_EXEC_TEST(Block_IfElse_P_return) { 1264 WASM_EXEC_TEST(Block_IfElse_P_return) {
1299 WasmRunner<int32_t, int32_t> r(execution_mode); 1265 WasmRunner<int32_t, int32_t> r(execution_mode);
1300 // if (p0) return 81; else return 82; 1266 // if (p0) return 81; else return 82;
1301 BUILD(r, // -- 1267 BUILD(r, // --
1302 WASM_IF_ELSE(WASM_GET_LOCAL(0), // -- 1268 WASM_IF_ELSE(WASM_GET_LOCAL(0), // --
1303 RET_I8(81), // -- 1269 RET_I8(81), // --
1304 RET_I8(82))); // -- 1270 RET_I8(82))); // --
1305 FOR_INT32_INPUTS(i) { 1271 FOR_INT32_INPUTS(i) {
1306 int32_t expected = *i ? 81 : 82; 1272 int32_t expected = *i ? 81 : 82;
1307 CHECK_EQ(expected, r.Call(*i)); 1273 CHECK_EQ(expected, r.Call(*i));
1308 } 1274 }
1309 } 1275 }
1310 1276
1311 WASM_EXEC_TEST(Block_If_P_assign) { 1277 WASM_EXEC_TEST(Block_If_P_assign) {
1312 WasmRunner<int32_t, int32_t> r(execution_mode); 1278 WasmRunner<int32_t, int32_t> r(execution_mode);
1313 // { if (p0) p0 = 61; p0; } 1279 // { if (p0) p0 = 61; p0; }
1314 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(0, WASM_I8(61))), 1280 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(0, WASM_I32V_1(61))),
1315 WASM_GET_LOCAL(0)); 1281 WASM_GET_LOCAL(0));
1316 FOR_INT32_INPUTS(i) { 1282 FOR_INT32_INPUTS(i) {
1317 int32_t expected = *i ? 61 : *i; 1283 int32_t expected = *i ? 61 : *i;
1318 CHECK_EQ(expected, r.Call(*i)); 1284 CHECK_EQ(expected, r.Call(*i));
1319 } 1285 }
1320 } 1286 }
1321 1287
1322 WASM_EXEC_TEST(DanglingAssign) { 1288 WASM_EXEC_TEST(DanglingAssign) {
1323 WasmRunner<int32_t, int32_t> r(execution_mode); 1289 WasmRunner<int32_t, int32_t> r(execution_mode);
1324 // { return 0; p0 = 0; } 1290 // { return 0; p0 = 0; }
1325 BUILD(r, B2(RET_I8(99), WASM_SET_LOCAL(0, WASM_ZERO))); 1291 BUILD(r, B2(RET_I8(99), WASM_SET_LOCAL(0, WASM_ZERO)));
1326 CHECK_EQ(99, r.Call(1)); 1292 CHECK_EQ(99, r.Call(1));
1327 } 1293 }
1328 1294
1329 WASM_EXEC_TEST(ExprIf_P) { 1295 WASM_EXEC_TEST(ExprIf_P) {
1330 WasmRunner<int32_t, int32_t> r(execution_mode); 1296 WasmRunner<int32_t, int32_t> r(execution_mode);
1331 // p0 ? 11 : 22; 1297 // p0 ? 11 : 22;
1332 BUILD(r, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), // -- 1298 BUILD(r, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), // --
1333 WASM_I8(11), // -- 1299 WASM_I32V_1(11), // --
1334 WASM_I8(22))); // -- 1300 WASM_I32V_1(22))); // --
1335 FOR_INT32_INPUTS(i) { 1301 FOR_INT32_INPUTS(i) {
1336 int32_t expected = *i ? 11 : 22; 1302 int32_t expected = *i ? 11 : 22;
1337 CHECK_EQ(expected, r.Call(*i)); 1303 CHECK_EQ(expected, r.Call(*i));
1338 } 1304 }
1339 } 1305 }
1340 1306
1341 WASM_EXEC_TEST(CountDown) { 1307 WASM_EXEC_TEST(CountDown) {
1342 WasmRunner<int32_t, int32_t> r(execution_mode); 1308 WasmRunner<int32_t, int32_t> r(execution_mode);
1343 BUILD(r, WASM_LOOP(WASM_IFB( 1309 BUILD(r, WASM_LOOP(WASM_IFB(WASM_GET_LOCAL(0),
1344 WASM_GET_LOCAL(0), 1310 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0),
1345 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1))), 1311 WASM_I32V_1(1))),
1346 WASM_BR(1))), 1312 WASM_BR(1))),
1347 WASM_GET_LOCAL(0)); 1313 WASM_GET_LOCAL(0));
1348 CHECK_EQ(0, r.Call(1)); 1314 CHECK_EQ(0, r.Call(1));
1349 CHECK_EQ(0, r.Call(10)); 1315 CHECK_EQ(0, r.Call(10));
1350 CHECK_EQ(0, r.Call(100)); 1316 CHECK_EQ(0, r.Call(100));
1351 } 1317 }
1352 1318
1353 WASM_EXEC_TEST(CountDown_fallthru) { 1319 WASM_EXEC_TEST(CountDown_fallthru) {
1354 WasmRunner<int32_t, int32_t> r(execution_mode); 1320 WasmRunner<int32_t, int32_t> r(execution_mode);
1355 BUILD(r, WASM_LOOP( 1321 BUILD(
1356 WASM_IF(WASM_NOT(WASM_GET_LOCAL(0)), 1322 r,
1357 WASM_BRV(2, WASM_GET_LOCAL(0))), 1323 WASM_LOOP(
1358 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1))), 1324 WASM_IF(WASM_NOT(WASM_GET_LOCAL(0)), WASM_BRV(2, WASM_GET_LOCAL(0))),
1359 WASM_CONTINUE(0)), 1325 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I32V_1(1))),
1360 WASM_GET_LOCAL(0)); 1326 WASM_CONTINUE(0)),
1327 WASM_GET_LOCAL(0));
1361 CHECK_EQ(0, r.Call(1)); 1328 CHECK_EQ(0, r.Call(1));
1362 CHECK_EQ(0, r.Call(10)); 1329 CHECK_EQ(0, r.Call(10));
1363 CHECK_EQ(0, r.Call(100)); 1330 CHECK_EQ(0, r.Call(100));
1364 } 1331 }
1365 1332
1366 WASM_EXEC_TEST(WhileCountDown) { 1333 WASM_EXEC_TEST(WhileCountDown) {
1367 WasmRunner<int32_t, int32_t> r(execution_mode); 1334 WasmRunner<int32_t, int32_t> r(execution_mode);
1368 BUILD(r, WASM_WHILE( 1335 BUILD(r, WASM_WHILE(WASM_GET_LOCAL(0),
1369 WASM_GET_LOCAL(0), 1336 WASM_SET_LOCAL(
1370 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1)))), 1337 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I32V_1(1)))),
1371 WASM_GET_LOCAL(0)); 1338 WASM_GET_LOCAL(0));
1372 CHECK_EQ(0, r.Call(1)); 1339 CHECK_EQ(0, r.Call(1));
1373 CHECK_EQ(0, r.Call(10)); 1340 CHECK_EQ(0, r.Call(10));
1374 CHECK_EQ(0, r.Call(100)); 1341 CHECK_EQ(0, r.Call(100));
1375 } 1342 }
1376 1343
1377 WASM_EXEC_TEST(Loop_if_break1) { 1344 WASM_EXEC_TEST(Loop_if_break1) {
1378 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 1345 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
1379 BUILD(r, WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(2, WASM_GET_LOCAL(1))), 1346 BUILD(r, WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(2, WASM_GET_LOCAL(1))),
1380 WASM_SET_LOCAL(0, WASM_I8(99))), 1347 WASM_SET_LOCAL(0, WASM_I32V_2(99))),
1381 WASM_GET_LOCAL(0)); 1348 WASM_GET_LOCAL(0));
1382 CHECK_EQ(99, r.Call(0, 11)); 1349 CHECK_EQ(99, r.Call(0, 11));
1383 CHECK_EQ(65, r.Call(3, 65)); 1350 CHECK_EQ(65, r.Call(3, 65));
1384 CHECK_EQ(10001, r.Call(10000, 10001)); 1351 CHECK_EQ(10001, r.Call(10000, 10001));
1385 CHECK_EQ(-29, r.Call(-28, -29)); 1352 CHECK_EQ(-29, r.Call(-28, -29));
1386 } 1353 }
1387 1354
1388 WASM_EXEC_TEST(Loop_if_break2) { 1355 WASM_EXEC_TEST(Loop_if_break2) {
1389 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 1356 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
1390 BUILD(r, WASM_LOOP(WASM_BRV_IF(1, WASM_GET_LOCAL(1), WASM_GET_LOCAL(0)), 1357 BUILD(r, WASM_LOOP(WASM_BRV_IF(1, WASM_GET_LOCAL(1), WASM_GET_LOCAL(0)),
1391 WASM_DROP, WASM_SET_LOCAL(0, WASM_I8(99))), 1358 WASM_DROP, WASM_SET_LOCAL(0, WASM_I32V_2(99))),
1392 WASM_GET_LOCAL(0)); 1359 WASM_GET_LOCAL(0));
1393 CHECK_EQ(99, r.Call(0, 33)); 1360 CHECK_EQ(99, r.Call(0, 33));
1394 CHECK_EQ(3, r.Call(1, 3)); 1361 CHECK_EQ(3, r.Call(1, 3));
1395 CHECK_EQ(10000, r.Call(99, 10000)); 1362 CHECK_EQ(10000, r.Call(99, 10000));
1396 CHECK_EQ(-29, r.Call(-11, -29)); 1363 CHECK_EQ(-29, r.Call(-11, -29));
1397 } 1364 }
1398 1365
1399 WASM_EXEC_TEST(Loop_if_break_fallthru) { 1366 WASM_EXEC_TEST(Loop_if_break_fallthru) {
1400 WasmRunner<int32_t, int32_t> r(execution_mode); 1367 WasmRunner<int32_t, int32_t> r(execution_mode);
1401 BUILD(r, B1(WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BR(2)), 1368 BUILD(r, B1(WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BR(2)),
1402 WASM_SET_LOCAL(0, WASM_I8(93)))), 1369 WASM_SET_LOCAL(0, WASM_I32V_2(93)))),
1403 WASM_GET_LOCAL(0)); 1370 WASM_GET_LOCAL(0));
1404 CHECK_EQ(93, r.Call(0)); 1371 CHECK_EQ(93, r.Call(0));
1405 CHECK_EQ(3, r.Call(3)); 1372 CHECK_EQ(3, r.Call(3));
1406 CHECK_EQ(10001, r.Call(10001)); 1373 CHECK_EQ(10001, r.Call(10001));
1407 CHECK_EQ(-22, r.Call(-22)); 1374 CHECK_EQ(-22, r.Call(-22));
1408 } 1375 }
1409 1376
1410 WASM_EXEC_TEST(Loop_if_break_fallthru2) { 1377 WASM_EXEC_TEST(Loop_if_break_fallthru2) {
1411 WasmRunner<int32_t, int32_t> r(execution_mode); 1378 WasmRunner<int32_t, int32_t> r(execution_mode);
1412 BUILD(r, B1(B1(WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BR(2)), 1379 BUILD(r, B1(B1(WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BR(2)),
1413 WASM_SET_LOCAL(0, WASM_I8(93))))), 1380 WASM_SET_LOCAL(0, WASM_I32V_2(93))))),
1414 WASM_GET_LOCAL(0)); 1381 WASM_GET_LOCAL(0));
1415 CHECK_EQ(93, r.Call(0)); 1382 CHECK_EQ(93, r.Call(0));
1416 CHECK_EQ(3, r.Call(3)); 1383 CHECK_EQ(3, r.Call(3));
1417 CHECK_EQ(10001, r.Call(10001)); 1384 CHECK_EQ(10001, r.Call(10001));
1418 CHECK_EQ(-22, r.Call(-22)); 1385 CHECK_EQ(-22, r.Call(-22));
1419 } 1386 }
1420 1387
1421 WASM_EXEC_TEST(IfBreak1) { 1388 WASM_EXEC_TEST(IfBreak1) {
1422 WasmRunner<int32_t, int32_t> r(execution_mode); 1389 WasmRunner<int32_t, int32_t> r(execution_mode);
1423 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SEQ(WASM_BR(0), WASM_UNREACHABLE)), 1390 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SEQ(WASM_BR(0), WASM_UNREACHABLE)),
1424 WASM_I8(91)); 1391 WASM_I32V_2(91));
1425 CHECK_EQ(91, r.Call(0)); 1392 CHECK_EQ(91, r.Call(0));
1426 CHECK_EQ(91, r.Call(1)); 1393 CHECK_EQ(91, r.Call(1));
1427 CHECK_EQ(91, r.Call(-8734)); 1394 CHECK_EQ(91, r.Call(-8734));
1428 } 1395 }
1429 1396
1430 WASM_EXEC_TEST(IfBreak2) { 1397 WASM_EXEC_TEST(IfBreak2) {
1431 WasmRunner<int32_t, int32_t> r(execution_mode); 1398 WasmRunner<int32_t, int32_t> r(execution_mode);
1432 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SEQ(WASM_BR(0), RET_I8(77))), 1399 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_SEQ(WASM_BR(0), RET_I8(77))),
1433 WASM_I8(81)); 1400 WASM_I32V_2(81));
1434 CHECK_EQ(81, r.Call(0)); 1401 CHECK_EQ(81, r.Call(0));
1435 CHECK_EQ(81, r.Call(1)); 1402 CHECK_EQ(81, r.Call(1));
1436 CHECK_EQ(81, r.Call(-8734)); 1403 CHECK_EQ(81, r.Call(-8734));
1437 } 1404 }
1438 1405
1439 WASM_EXEC_TEST(LoadMemI32) { 1406 WASM_EXEC_TEST(LoadMemI32) {
1440 WasmRunner<int32_t, int32_t> r(execution_mode); 1407 WasmRunner<int32_t, int32_t> r(execution_mode);
1441 int32_t* memory = r.module().AddMemoryElems<int32_t>(8); 1408 int32_t* memory = r.module().AddMemoryElems<int32_t>(8);
1442 r.module().RandomizeMemory(1111); 1409 r.module().RandomizeMemory(1111);
1443 1410
1444 BUILD(r, WASM_LOAD_MEM(MachineType::Int32(), WASM_I8(0))); 1411 BUILD(r, WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO));
1445 1412
1446 r.module().WriteMemory(&memory[0], 99999999); 1413 r.module().WriteMemory(&memory[0], 99999999);
1447 CHECK_EQ(99999999, r.Call(0)); 1414 CHECK_EQ(99999999, r.Call(0));
1448 1415
1449 r.module().WriteMemory(&memory[0], 88888888); 1416 r.module().WriteMemory(&memory[0], 88888888);
1450 CHECK_EQ(88888888, r.Call(0)); 1417 CHECK_EQ(88888888, r.Call(0));
1451 1418
1452 r.module().WriteMemory(&memory[0], 77777777); 1419 r.module().WriteMemory(&memory[0], 77777777);
1453 CHECK_EQ(77777777, r.Call(0)); 1420 CHECK_EQ(77777777, r.Call(0));
1454 } 1421 }
1455 1422
1456 WASM_EXEC_TEST(LoadMemI32_alignment) { 1423 WASM_EXEC_TEST(LoadMemI32_alignment) {
1457 for (byte alignment = 0; alignment <= 2; ++alignment) { 1424 for (byte alignment = 0; alignment <= 2; ++alignment) {
1458 WasmRunner<int32_t, int32_t> r(execution_mode); 1425 WasmRunner<int32_t, int32_t> r(execution_mode);
1459 int32_t* memory = r.module().AddMemoryElems<int32_t>(8); 1426 int32_t* memory = r.module().AddMemoryElems<int32_t>(8);
1460 r.module().RandomizeMemory(1111); 1427 r.module().RandomizeMemory(1111);
1461 1428
1462 BUILD(r, 1429 BUILD(r,
1463 WASM_LOAD_MEM_ALIGNMENT(MachineType::Int32(), WASM_I8(0), alignment)); 1430 WASM_LOAD_MEM_ALIGNMENT(MachineType::Int32(), WASM_ZERO, alignment));
1464 1431
1465 r.module().WriteMemory(&memory[0], 0x1a2b3c4d); 1432 r.module().WriteMemory(&memory[0], 0x1a2b3c4d);
1466 CHECK_EQ(0x1a2b3c4d, r.Call(0)); 1433 CHECK_EQ(0x1a2b3c4d, r.Call(0));
1467 1434
1468 r.module().WriteMemory(&memory[0], 0x5e6f7a8b); 1435 r.module().WriteMemory(&memory[0], 0x5e6f7a8b);
1469 CHECK_EQ(0x5e6f7a8b, r.Call(0)); 1436 CHECK_EQ(0x5e6f7a8b, r.Call(0));
1470 1437
1471 r.module().WriteMemory(&memory[0], 0x7ca0b1c2); 1438 r.module().WriteMemory(&memory[0], 0x7ca0b1c2);
1472 CHECK_EQ(0x7ca0b1c2, r.Call(0)); 1439 CHECK_EQ(0x7ca0b1c2, r.Call(0));
1473 } 1440 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1542 1509
1543 WASM_EXEC_TEST_WITH_TRAP(LoadMemI32_const_oob_misaligned) { 1510 WASM_EXEC_TEST_WITH_TRAP(LoadMemI32_const_oob_misaligned) {
1544 const int kMemSize = 12; 1511 const int kMemSize = 12;
1545 // TODO(titzer): Fix misaligned accesses on MIPS and re-enable. 1512 // TODO(titzer): Fix misaligned accesses on MIPS and re-enable.
1546 for (int offset = 0; offset < kMemSize + 5; ++offset) { 1513 for (int offset = 0; offset < kMemSize + 5; ++offset) {
1547 for (int index = 0; index < kMemSize + 5; ++index) { 1514 for (int index = 0; index < kMemSize + 5; ++index) {
1548 WasmRunner<int32_t> r(execution_mode); 1515 WasmRunner<int32_t> r(execution_mode);
1549 r.module().AddMemoryElems<byte>(kMemSize); 1516 r.module().AddMemoryElems<byte>(kMemSize);
1550 r.module().RandomizeMemory(); 1517 r.module().RandomizeMemory();
1551 1518
1552 BUILD(r, 1519 BUILD(r, WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset,
1553 WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset, WASM_I8(index))); 1520 WASM_I32V_2(index)));
1554 1521
1555 if ((offset + index) <= static_cast<int>((kMemSize - sizeof(int32_t)))) { 1522 if ((offset + index) <= static_cast<int>((kMemSize - sizeof(int32_t)))) {
1556 CHECK_EQ(r.module().raw_val_at<int32_t>(offset + index), r.Call()); 1523 CHECK_EQ(r.module().raw_val_at<int32_t>(offset + index), r.Call());
1557 } else { 1524 } else {
1558 CHECK_TRAP(r.Call()); 1525 CHECK_TRAP(r.Call());
1559 } 1526 }
1560 } 1527 }
1561 } 1528 }
1562 } 1529 }
1563 1530
1564 WASM_EXEC_TEST_WITH_TRAP(LoadMemI32_const_oob) { 1531 WASM_EXEC_TEST_WITH_TRAP(LoadMemI32_const_oob) {
1565 const int kMemSize = 24; 1532 const int kMemSize = 24;
1566 for (int offset = 0; offset < kMemSize + 5; offset += 4) { 1533 for (int offset = 0; offset < kMemSize + 5; offset += 4) {
1567 for (int index = 0; index < kMemSize + 5; index += 4) { 1534 for (int index = 0; index < kMemSize + 5; index += 4) {
1568 WasmRunner<int32_t> r(execution_mode); 1535 WasmRunner<int32_t> r(execution_mode);
1569 r.module().AddMemoryElems<byte>(kMemSize); 1536 r.module().AddMemoryElems<byte>(kMemSize);
1570 r.module().RandomizeMemory(); 1537 r.module().RandomizeMemory();
1571 1538
1572 BUILD(r, 1539 BUILD(r, WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset,
1573 WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset, WASM_I8(index))); 1540 WASM_I32V_2(index)));
1574 1541
1575 if ((offset + index) <= static_cast<int>((kMemSize - sizeof(int32_t)))) { 1542 if ((offset + index) <= static_cast<int>((kMemSize - sizeof(int32_t)))) {
1576 CHECK_EQ(r.module().raw_val_at<int32_t>(offset + index), r.Call()); 1543 CHECK_EQ(r.module().raw_val_at<int32_t>(offset + index), r.Call());
1577 } else { 1544 } else {
1578 CHECK_TRAP(r.Call()); 1545 CHECK_TRAP(r.Call());
1579 } 1546 }
1580 } 1547 }
1581 } 1548 }
1582 } 1549 }
1583 1550
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1661 CHECK_EQ(r.module().ReadMemory(&memory[i]), r.Call(i * 4)); 1628 CHECK_EQ(r.module().ReadMemory(&memory[i]), r.Call(i * 4));
1662 } 1629 }
1663 } 1630 }
1664 1631
1665 WASM_EXEC_TEST(MemI32_Sum) { 1632 WASM_EXEC_TEST(MemI32_Sum) {
1666 const int kNumElems = 20; 1633 const int kNumElems = 20;
1667 WasmRunner<uint32_t, int32_t> r(execution_mode); 1634 WasmRunner<uint32_t, int32_t> r(execution_mode);
1668 uint32_t* memory = r.module().AddMemoryElems<uint32_t>(kNumElems); 1635 uint32_t* memory = r.module().AddMemoryElems<uint32_t>(kNumElems);
1669 const byte kSum = r.AllocateLocal(kWasmI32); 1636 const byte kSum = r.AllocateLocal(kWasmI32);
1670 1637
1671 BUILD( 1638 BUILD(r, WASM_WHILE(
1672 r, 1639 WASM_GET_LOCAL(0),
1673 WASM_WHILE( 1640 WASM_BLOCK(
1674 WASM_GET_LOCAL(0), 1641 WASM_SET_LOCAL(
1675 WASM_BLOCK( 1642 kSum, WASM_I32_ADD(WASM_GET_LOCAL(kSum),
1676 WASM_SET_LOCAL(kSum,
1677 WASM_I32_ADD(WASM_GET_LOCAL(kSum),
1678 WASM_LOAD_MEM(MachineType::Int32(), 1643 WASM_LOAD_MEM(MachineType::Int32(),
1679 WASM_GET_LOCAL(0)))), 1644 WASM_GET_LOCAL(0)))),
1680 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(4))))), 1645 WASM_SET_LOCAL(
1681 WASM_GET_LOCAL(1)); 1646 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I32V_1(4))))),
1647 WASM_GET_LOCAL(1));
1682 1648
1683 // Run 4 trials. 1649 // Run 4 trials.
1684 for (int i = 0; i < 3; ++i) { 1650 for (int i = 0; i < 3; ++i) {
1685 r.module().RandomizeMemory(i * 33); 1651 r.module().RandomizeMemory(i * 33);
1686 uint32_t expected = 0; 1652 uint32_t expected = 0;
1687 for (size_t j = kNumElems - 1; j > 0; --j) { 1653 for (size_t j = kNumElems - 1; j > 0; --j) {
1688 expected += r.module().ReadMemory(&memory[j]); 1654 expected += r.module().ReadMemory(&memory[j]);
1689 } 1655 }
1690 uint32_t result = r.Call(4 * (kNumElems - 1)); 1656 uint32_t result = r.Call(4 * (kNumElems - 1));
1691 CHECK_EQ(expected, result); 1657 CHECK_EQ(expected, result);
1692 } 1658 }
1693 } 1659 }
1694 1660
1695 WASM_EXEC_TEST(CheckMachIntsZero) { 1661 WASM_EXEC_TEST(CheckMachIntsZero) {
1696 const int kNumElems = 55; 1662 const int kNumElems = 55;
1697 WasmRunner<uint32_t, int32_t> r(execution_mode); 1663 WasmRunner<uint32_t, int32_t> r(execution_mode);
1698 r.module().AddMemoryElems<uint32_t>(kNumElems); 1664 r.module().AddMemoryElems<uint32_t>(kNumElems);
1699 1665
1700 BUILD(r, // -- 1666 BUILD(r, // --
1701 /**/ kExprLoop, kLocalVoid, // -- 1667 /**/ kExprLoop, kLocalVoid, // --
1702 /* */ kExprGetLocal, 0, // -- 1668 /* */ kExprGetLocal, 0, // --
1703 /* */ kExprIf, kLocalVoid, // -- 1669 /* */ kExprIf, kLocalVoid, // --
1704 /* */ kExprGetLocal, 0, // -- 1670 /* */ kExprGetLocal, 0, // --
1705 /* */ kExprI32LoadMem, 0, 0, // -- 1671 /* */ kExprI32LoadMem, 0, 0, // --
1706 /* */ kExprIf, kLocalVoid, // -- 1672 /* */ kExprIf, kLocalVoid, // --
1707 /* */ kExprI8Const, 255, // -- 1673 /* */ kExprI32Const, 127, // --
1708 /* */ kExprReturn, // -- 1674 /* */ kExprReturn, // --
1709 /* */ kExprEnd, // -- 1675 /* */ kExprEnd, // --
1710 /* */ kExprGetLocal, 0, // -- 1676 /* */ kExprGetLocal, 0, // --
1711 /* */ kExprI8Const, 4, // -- 1677 /* */ kExprI32Const, 4, // --
1712 /* */ kExprI32Sub, // -- 1678 /* */ kExprI32Sub, // --
1713 /* */ kExprTeeLocal, 0, // -- 1679 /* */ kExprTeeLocal, 0, // --
1714 /* */ kExprBr, DEPTH_0, // -- 1680 /* */ kExprBr, DEPTH_0, // --
1715 /* */ kExprEnd, // -- 1681 /* */ kExprEnd, // --
1716 /**/ kExprEnd, // -- 1682 /**/ kExprEnd, // --
1717 /**/ kExprI8Const, 0); // -- 1683 /**/ kExprI32Const, 0); // --
1718 1684
1719 r.module().BlankMemory(); 1685 r.module().BlankMemory();
1720 CHECK_EQ(0, r.Call((kNumElems - 1) * 4)); 1686 CHECK_EQ(0, r.Call((kNumElems - 1) * 4));
1721 } 1687 }
1722 1688
1723 WASM_EXEC_TEST(MemF32_Sum) { 1689 WASM_EXEC_TEST(MemF32_Sum) {
1724 const int kSize = 5; 1690 const int kSize = 5;
1725 WasmRunner<int32_t, int32_t> r(execution_mode); 1691 WasmRunner<int32_t, int32_t> r(execution_mode);
1726 r.module().AddMemoryElems<float>(kSize); 1692 r.module().AddMemoryElems<float>(kSize);
1727 float* buffer = r.module().raw_mem_start<float>(); 1693 float* buffer = r.module().raw_mem_start<float>();
1728 r.module().WriteMemory(&buffer[0], -99.25f); 1694 r.module().WriteMemory(&buffer[0], -99.25f);
1729 r.module().WriteMemory(&buffer[1], -888.25f); 1695 r.module().WriteMemory(&buffer[1], -888.25f);
1730 r.module().WriteMemory(&buffer[2], -77.25f); 1696 r.module().WriteMemory(&buffer[2], -77.25f);
1731 r.module().WriteMemory(&buffer[3], 66666.25f); 1697 r.module().WriteMemory(&buffer[3], 66666.25f);
1732 r.module().WriteMemory(&buffer[4], 5555.25f); 1698 r.module().WriteMemory(&buffer[4], 5555.25f);
1733 const byte kSum = r.AllocateLocal(kWasmF32); 1699 const byte kSum = r.AllocateLocal(kWasmF32);
1734 1700
1735 BUILD( 1701 BUILD(r, WASM_WHILE(
1736 r, 1702 WASM_GET_LOCAL(0),
1737 WASM_WHILE( 1703 WASM_BLOCK(
1738 WASM_GET_LOCAL(0), 1704 WASM_SET_LOCAL(
1739 WASM_BLOCK( 1705 kSum, WASM_F32_ADD(WASM_GET_LOCAL(kSum),
1740 WASM_SET_LOCAL(kSum,
1741 WASM_F32_ADD(WASM_GET_LOCAL(kSum),
1742 WASM_LOAD_MEM(MachineType::Float32(), 1706 WASM_LOAD_MEM(MachineType::Float32(),
1743 WASM_GET_LOCAL(0)))), 1707 WASM_GET_LOCAL(0)))),
1744 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(4))))), 1708 WASM_SET_LOCAL(
1745 WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, WASM_GET_LOCAL(kSum)), 1709 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I32V_1(4))))),
1746 WASM_GET_LOCAL(0)); 1710 WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, WASM_GET_LOCAL(kSum)),
1711 WASM_GET_LOCAL(0));
1747 1712
1748 CHECK_EQ(0, r.Call(4 * (kSize - 1))); 1713 CHECK_EQ(0, r.Call(4 * (kSize - 1)));
1749 CHECK_NE(-99.25f, r.module().ReadMemory(&buffer[0])); 1714 CHECK_NE(-99.25f, r.module().ReadMemory(&buffer[0]));
1750 CHECK_EQ(71256.0f, r.module().ReadMemory(&buffer[0])); 1715 CHECK_EQ(71256.0f, r.module().ReadMemory(&buffer[0]));
1751 } 1716 }
1752 1717
1753 template <typename T> 1718 template <typename T>
1754 T GenerateAndRunFold(WasmExecutionMode execution_mode, WasmOpcode binop, 1719 T GenerateAndRunFold(WasmExecutionMode execution_mode, WasmOpcode binop,
1755 T* buffer, uint32_t size, ValueType astType, 1720 T* buffer, uint32_t size, ValueType astType,
1756 MachineType memType) { 1721 MachineType memType) {
1757 WasmRunner<int32_t, int32_t> r(execution_mode); 1722 WasmRunner<int32_t, int32_t> r(execution_mode);
1758 T* memory = r.module().AddMemoryElems<T>(size); 1723 T* memory = r.module().AddMemoryElems<T>(size);
1759 for (uint32_t i = 0; i < size; ++i) { 1724 for (uint32_t i = 0; i < size; ++i) {
1760 r.module().WriteMemory(&memory[i], buffer[i]); 1725 r.module().WriteMemory(&memory[i], buffer[i]);
1761 } 1726 }
1762 const byte kAccum = r.AllocateLocal(astType); 1727 const byte kAccum = r.AllocateLocal(astType);
1763 1728
1764 BUILD(r, WASM_SET_LOCAL(kAccum, WASM_LOAD_MEM(memType, WASM_ZERO)), 1729 BUILD(
1765 WASM_WHILE( 1730 r, WASM_SET_LOCAL(kAccum, WASM_LOAD_MEM(memType, WASM_ZERO)),
1766 WASM_GET_LOCAL(0), 1731 WASM_WHILE(
1767 WASM_BLOCK(WASM_SET_LOCAL( 1732 WASM_GET_LOCAL(0),
1768 kAccum, WASM_BINOP(binop, WASM_GET_LOCAL(kAccum), 1733 WASM_BLOCK(WASM_SET_LOCAL(
1769 WASM_LOAD_MEM( 1734 kAccum,
1770 memType, WASM_GET_LOCAL(0)))), 1735 WASM_BINOP(binop, WASM_GET_LOCAL(kAccum),
1771 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), 1736 WASM_LOAD_MEM(memType, WASM_GET_LOCAL(0)))),
1772 WASM_I8(sizeof(T)))))), 1737 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0),
1773 WASM_STORE_MEM(memType, WASM_ZERO, WASM_GET_LOCAL(kAccum)), 1738 WASM_I32V_1(sizeof(T)))))),
1774 WASM_GET_LOCAL(0)); 1739 WASM_STORE_MEM(memType, WASM_ZERO, WASM_GET_LOCAL(kAccum)),
1740 WASM_GET_LOCAL(0));
1775 r.Call(static_cast<int>(sizeof(T) * (size - 1))); 1741 r.Call(static_cast<int>(sizeof(T) * (size - 1)));
1776 return r.module().ReadMemory(&memory[0]); 1742 return r.module().ReadMemory(&memory[0]);
1777 } 1743 }
1778 1744
1779 WASM_EXEC_TEST(MemF64_Mul) { 1745 WASM_EXEC_TEST(MemF64_Mul) {
1780 const size_t kSize = 6; 1746 const size_t kSize = 6;
1781 double buffer[kSize] = {1, 2, 2, 2, 2, 2}; 1747 double buffer[kSize] = {1, 2, 2, 2, 2, 2};
1782 double result = 1748 double result =
1783 GenerateAndRunFold<double>(execution_mode, kExprF64Mul, buffer, kSize, 1749 GenerateAndRunFold<double>(execution_mode, kExprF64Mul, buffer, kSize,
1784 kWasmF64, MachineType::Float64()); 1750 kWasmF64, MachineType::Float64());
(...skipping 10 matching lines...) Expand all
1795 WasmRunner<int32_t, int32_t> r(execution_mode); 1761 WasmRunner<int32_t, int32_t> r(execution_mode);
1796 r.module().AddMemoryElems<int8_t>(16); 1762 r.module().AddMemoryElems<int8_t>(16);
1797 1763
1798 // Only build the graph and compile, don't run. 1764 // Only build the graph and compile, don't run.
1799 BUILD(r, WASM_LOOP(WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO), WASM_DROP), 1765 BUILD(r, WASM_LOOP(WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO), WASM_DROP),
1800 WASM_ZERO); 1766 WASM_ZERO);
1801 } 1767 }
1802 1768
1803 WASM_EXEC_TEST(Unreachable0a) { 1769 WASM_EXEC_TEST(Unreachable0a) {
1804 WasmRunner<int32_t, int32_t> r(execution_mode); 1770 WasmRunner<int32_t, int32_t> r(execution_mode);
1805 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_I8(9)), RET(WASM_GET_LOCAL(0)))); 1771 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_I32V_1(9)), RET(WASM_GET_LOCAL(0))));
1806 CHECK_EQ(9, r.Call(0)); 1772 CHECK_EQ(9, r.Call(0));
1807 CHECK_EQ(9, r.Call(1)); 1773 CHECK_EQ(9, r.Call(1));
1808 } 1774 }
1809 1775
1810 WASM_EXEC_TEST(Unreachable0b) { 1776 WASM_EXEC_TEST(Unreachable0b) {
1811 WasmRunner<int32_t, int32_t> r(execution_mode); 1777 WasmRunner<int32_t, int32_t> r(execution_mode);
1812 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_I8(7)), WASM_UNREACHABLE)); 1778 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_I32V_1(7)), WASM_UNREACHABLE));
1813 CHECK_EQ(7, r.Call(0)); 1779 CHECK_EQ(7, r.Call(0));
1814 CHECK_EQ(7, r.Call(1)); 1780 CHECK_EQ(7, r.Call(1));
1815 } 1781 }
1816 1782
1817 TEST(Build_Wasm_Unreachable1) { 1783 TEST(Build_Wasm_Unreachable1) {
1818 WasmRunner<int32_t, int32_t> r(kExecuteCompiled); 1784 WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
1819 BUILD(r, WASM_UNREACHABLE); 1785 BUILD(r, WASM_UNREACHABLE);
1820 } 1786 }
1821 1787
1822 TEST(Build_Wasm_Unreachable2) { 1788 TEST(Build_Wasm_Unreachable2) {
(...skipping 20 matching lines...) Expand all
1843 WASM_EXEC_TEST(Unreachable_Load) { 1809 WASM_EXEC_TEST(Unreachable_Load) {
1844 WasmRunner<int32_t, int32_t> r(execution_mode); 1810 WasmRunner<int32_t, int32_t> r(execution_mode);
1845 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_GET_LOCAL(0)), 1811 BUILD(r, WASM_BLOCK_I(WASM_BRV(0, WASM_GET_LOCAL(0)),
1846 WASM_LOAD_MEM(MachineType::Int8(), WASM_GET_LOCAL(0)))); 1812 WASM_LOAD_MEM(MachineType::Int8(), WASM_GET_LOCAL(0))));
1847 CHECK_EQ(11, r.Call(11)); 1813 CHECK_EQ(11, r.Call(11));
1848 CHECK_EQ(21, r.Call(21)); 1814 CHECK_EQ(21, r.Call(21));
1849 } 1815 }
1850 1816
1851 WASM_EXEC_TEST(Infinite_Loop_not_taken1) { 1817 WASM_EXEC_TEST(Infinite_Loop_not_taken1) {
1852 WasmRunner<int32_t, int32_t> r(execution_mode); 1818 WasmRunner<int32_t, int32_t> r(execution_mode);
1853 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_INFINITE_LOOP), WASM_I8(45)); 1819 BUILD(r, WASM_IF(WASM_GET_LOCAL(0), WASM_INFINITE_LOOP), WASM_I32V_1(45));
1854 // Run the code, but don't go into the infinite loop. 1820 // Run the code, but don't go into the infinite loop.
1855 CHECK_EQ(45, r.Call(0)); 1821 CHECK_EQ(45, r.Call(0));
1856 } 1822 }
1857 1823
1858 WASM_EXEC_TEST(Infinite_Loop_not_taken2) { 1824 WASM_EXEC_TEST(Infinite_Loop_not_taken2) {
1859 WasmRunner<int32_t, int32_t> r(execution_mode); 1825 WasmRunner<int32_t, int32_t> r(execution_mode);
1860 BUILD(r, 1826 BUILD(r, WASM_BLOCK_I(WASM_IF_ELSE(WASM_GET_LOCAL(0),
1861 WASM_BLOCK_I(WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I8(45)), 1827 WASM_BRV(1, WASM_I32V_1(45)),
1862 WASM_INFINITE_LOOP))); 1828 WASM_INFINITE_LOOP)));
1863 // Run the code, but don't go into the infinite loop. 1829 // Run the code, but don't go into the infinite loop.
1864 CHECK_EQ(45, r.Call(1)); 1830 CHECK_EQ(45, r.Call(1));
1865 } 1831 }
1866 1832
1867 WASM_EXEC_TEST(Infinite_Loop_not_taken2_brif) { 1833 WASM_EXEC_TEST(Infinite_Loop_not_taken2_brif) {
1868 WasmRunner<int32_t, int32_t> r(execution_mode); 1834 WasmRunner<int32_t, int32_t> r(execution_mode);
1869 BUILD(r, WASM_BLOCK_I(WASM_BRV_IF(0, WASM_I8(45), WASM_GET_LOCAL(0)), 1835 BUILD(r, WASM_BLOCK_I(WASM_BRV_IF(0, WASM_I32V_1(45), WASM_GET_LOCAL(0)),
1870 WASM_INFINITE_LOOP)); 1836 WASM_INFINITE_LOOP));
1871 // Run the code, but don't go into the infinite loop. 1837 // Run the code, but don't go into the infinite loop.
1872 CHECK_EQ(45, r.Call(1)); 1838 CHECK_EQ(45, r.Call(1));
1873 } 1839 }
1874 1840
1875 static void TestBuildGraphForSimpleExpression(WasmOpcode opcode) { 1841 static void TestBuildGraphForSimpleExpression(WasmOpcode opcode) {
1876 Isolate* isolate = CcTest::InitIsolateOnce(); 1842 Isolate* isolate = CcTest::InitIsolateOnce();
1877 Zone zone(isolate->allocator(), ZONE_NAME); 1843 Zone zone(isolate->allocator(), ZONE_NAME);
1878 HandleScope scope(isolate); 1844 HandleScope scope(isolate);
1879 // Enable all optional operators. 1845 // Enable all optional operators.
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
2140 WasmRunner<int32_t> r(execution_mode); 2106 WasmRunner<int32_t> r(execution_mode);
2141 2107
2142 const byte kMemOffset = 8; 2108 const byte kMemOffset = 8;
2143 const int32_t kElemNum = kMemOffset / sizeof(int32_t); 2109 const int32_t kElemNum = kMemOffset / sizeof(int32_t);
2144 const int32_t kExpected = 414444; 2110 const int32_t kExpected = 414444;
2145 // Build the target function. 2111 // Build the target function.
2146 TestSignatures sigs; 2112 TestSignatures sigs;
2147 int32_t* memory = r.module().AddMemoryElems<int32_t>(16 / sizeof(int32_t)); 2113 int32_t* memory = r.module().AddMemoryElems<int32_t>(16 / sizeof(int32_t));
2148 r.module().RandomizeMemory(); 2114 r.module().RandomizeMemory();
2149 WasmFunctionCompiler& t = r.NewFunction(sigs.v_v()); 2115 WasmFunctionCompiler& t = r.NewFunction(sigs.v_v());
2150 BUILD(t, WASM_STORE_MEM(MachineType::Int32(), WASM_I8(kMemOffset), 2116 BUILD(t, WASM_STORE_MEM(MachineType::Int32(), WASM_I32V_1(kMemOffset),
2151 WASM_I32V_3(kExpected))); 2117 WASM_I32V_3(kExpected)));
2152 2118
2153 // Build the calling function. 2119 // Build the calling function.
2154 BUILD(r, WASM_CALL_FUNCTION0(t.function_index()), 2120 BUILD(r, WASM_CALL_FUNCTION0(t.function_index()),
2155 WASM_LOAD_MEM(MachineType::Int32(), WASM_I8(kMemOffset))); 2121 WASM_LOAD_MEM(MachineType::Int32(), WASM_I32V_1(kMemOffset)));
2156 2122
2157 int32_t result = r.Call(); 2123 int32_t result = r.Call();
2158 CHECK_EQ(kExpected, result); 2124 CHECK_EQ(kExpected, result);
2159 CHECK_EQ(static_cast<int64_t>(kExpected), 2125 CHECK_EQ(static_cast<int64_t>(kExpected),
2160 static_cast<int64_t>(r.module().ReadMemory(&memory[kElemNum]))); 2126 static_cast<int64_t>(r.module().ReadMemory(&memory[kElemNum])));
2161 } 2127 }
2162 2128
2163 WASM_EXEC_TEST(Call_Int32Add) { 2129 WASM_EXEC_TEST(Call_Int32Add) {
2164 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 2130 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
2165 2131
(...skipping 29 matching lines...) Expand all
2195 FOR_FLOAT32_INPUTS(j) { CHECK_FLOAT_EQ(*i - *j, r.Call(*i, *j)); } 2161 FOR_FLOAT32_INPUTS(j) { CHECK_FLOAT_EQ(*i - *j, r.Call(*i, *j)); }
2196 } 2162 }
2197 } 2163 }
2198 2164
2199 WASM_EXEC_TEST(Call_Float64Sub) { 2165 WASM_EXEC_TEST(Call_Float64Sub) {
2200 WasmRunner<int32_t> r(execution_mode); 2166 WasmRunner<int32_t> r(execution_mode);
2201 double* memory = r.module().AddMemoryElems<double>(16); 2167 double* memory = r.module().AddMemoryElems<double>(16);
2202 2168
2203 BUILD(r, WASM_STORE_MEM( 2169 BUILD(r, WASM_STORE_MEM(
2204 MachineType::Float64(), WASM_ZERO, 2170 MachineType::Float64(), WASM_ZERO,
2205 WASM_F64_SUB(WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO), 2171 WASM_F64_SUB(
2206 WASM_LOAD_MEM(MachineType::Float64(), WASM_I8(8)))), 2172 WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO),
2207 WASM_I8(107)); 2173 WASM_LOAD_MEM(MachineType::Float64(), WASM_I32V_1(8)))),
2174 WASM_I32V_2(107));
2208 2175
2209 FOR_FLOAT64_INPUTS(i) { 2176 FOR_FLOAT64_INPUTS(i) {
2210 FOR_FLOAT64_INPUTS(j) { 2177 FOR_FLOAT64_INPUTS(j) {
2211 r.module().WriteMemory(&memory[0], *i); 2178 r.module().WriteMemory(&memory[0], *i);
2212 r.module().WriteMemory(&memory[1], *j); 2179 r.module().WriteMemory(&memory[1], *j);
2213 double expected = *i - *j; 2180 double expected = *i - *j;
2214 CHECK_EQ(107, r.Call()); 2181 CHECK_EQ(107, r.Call());
2215 2182
2216 if (expected != expected) { 2183 if (expected != expected) {
2217 CHECK(r.module().ReadMemory(&memory[0]) != 2184 CHECK(r.module().ReadMemory(&memory[0]) !=
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2265 // Build the calling function. 2232 // Build the calling function.
2266 // ========================================================================= 2233 // =========================================================================
2267 std::vector<byte> code; 2234 std::vector<byte> code;
2268 2235
2269 // Load the offset for the store. 2236 // Load the offset for the store.
2270 ADD_CODE(code, WASM_ZERO); 2237 ADD_CODE(code, WASM_ZERO);
2271 2238
2272 // Load the arguments. 2239 // Load the arguments.
2273 for (int i = 0; i < num_params; ++i) { 2240 for (int i = 0; i < num_params; ++i) {
2274 int offset = (i + 1) * kElemSize; 2241 int offset = (i + 1) * kElemSize;
2275 ADD_CODE(code, WASM_LOAD_MEM(memtypes[i], WASM_I8(offset))); 2242 ADD_CODE(code, WASM_LOAD_MEM(memtypes[i], WASM_I32V_2(offset)));
2276 } 2243 }
2277 2244
2278 // Call the selector function. 2245 // Call the selector function.
2279 ADD_CODE(code, WASM_CALL_FUNCTION0(t.function_index())); 2246 ADD_CODE(code, WASM_CALL_FUNCTION0(t.function_index()));
2280 2247
2281 // Store the result in memory. 2248 // Store the result in memory.
2282 ADD_CODE(code, 2249 ADD_CODE(code,
2283 static_cast<byte>(WasmOpcodes::LoadStoreOpcodeOf(result, true)), 2250 static_cast<byte>(WasmOpcodes::LoadStoreOpcodeOf(result, true)),
2284 ZERO_ALIGNMENT, ZERO_OFFSET); 2251 ZERO_ALIGNMENT, ZERO_OFFSET);
2285 2252
(...skipping 22 matching lines...) Expand all
2308 WASM_EXEC_TEST(MixedCall_1) { Run_WasmMixedCall_N(execution_mode, 1); } 2275 WASM_EXEC_TEST(MixedCall_1) { Run_WasmMixedCall_N(execution_mode, 1); }
2309 WASM_EXEC_TEST(MixedCall_2) { Run_WasmMixedCall_N(execution_mode, 2); } 2276 WASM_EXEC_TEST(MixedCall_2) { Run_WasmMixedCall_N(execution_mode, 2); }
2310 WASM_EXEC_TEST(MixedCall_3) { Run_WasmMixedCall_N(execution_mode, 3); } 2277 WASM_EXEC_TEST(MixedCall_3) { Run_WasmMixedCall_N(execution_mode, 3); }
2311 2278
2312 WASM_EXEC_TEST(AddCall) { 2279 WASM_EXEC_TEST(AddCall) {
2313 WasmRunner<int32_t, int32_t> r(kExecuteCompiled); 2280 WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
2314 WasmFunctionCompiler& t1 = r.NewFunction<int32_t, int32_t, int32_t>(); 2281 WasmFunctionCompiler& t1 = r.NewFunction<int32_t, int32_t, int32_t>();
2315 BUILD(t1, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 2282 BUILD(t1, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
2316 2283
2317 byte local = r.AllocateLocal(kWasmI32); 2284 byte local = r.AllocateLocal(kWasmI32);
2318 BUILD(r, WASM_SET_LOCAL(local, WASM_I8(99)), 2285 BUILD(r, WASM_SET_LOCAL(local, WASM_I32V_2(99)),
2319 WASM_I32_ADD(WASM_CALL_FUNCTION(t1.function_index(), WASM_GET_LOCAL(0), 2286 WASM_I32_ADD(WASM_CALL_FUNCTION(t1.function_index(), WASM_GET_LOCAL(0),
2320 WASM_GET_LOCAL(0)), 2287 WASM_GET_LOCAL(0)),
2321 WASM_CALL_FUNCTION(t1.function_index(), WASM_GET_LOCAL(1), 2288 WASM_CALL_FUNCTION(t1.function_index(), WASM_GET_LOCAL(1),
2322 WASM_GET_LOCAL(local)))); 2289 WASM_GET_LOCAL(local))));
2323 2290
2324 CHECK_EQ(198, r.Call(0)); 2291 CHECK_EQ(198, r.Call(0));
2325 CHECK_EQ(200, r.Call(1)); 2292 CHECK_EQ(200, r.Call(1));
2326 CHECK_EQ(100, r.Call(-49)); 2293 CHECK_EQ(100, r.Call(-49));
2327 } 2294 }
2328 2295
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2402 #endif 2369 #endif
2403 } 2370 }
2404 2371
2405 WASM_EXEC_TEST(MultiReturnSelect_f64) { 2372 WASM_EXEC_TEST(MultiReturnSelect_f64) {
2406 static const double inputs[] = {3.333333, 44444.44, -55.555555, -7777.777}; 2373 static const double inputs[] = {3.333333, 44444.44, -55.555555, -7777.777};
2407 RunMultiReturnSelect<double>(execution_mode, inputs); 2374 RunMultiReturnSelect<double>(execution_mode, inputs);
2408 } 2375 }
2409 2376
2410 WASM_EXEC_TEST(ExprBlock2a) { 2377 WASM_EXEC_TEST(ExprBlock2a) {
2411 WasmRunner<int32_t, int32_t> r(execution_mode); 2378 WasmRunner<int32_t, int32_t> r(execution_mode);
2412 BUILD(r, WASM_BLOCK_I(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I8(1))), 2379 BUILD(r, WASM_BLOCK_I(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I32V_1(1))),
2413 WASM_I8(1))); 2380 WASM_I32V_1(1)));
2414 CHECK_EQ(1, r.Call(0)); 2381 CHECK_EQ(1, r.Call(0));
2415 CHECK_EQ(1, r.Call(1)); 2382 CHECK_EQ(1, r.Call(1));
2416 } 2383 }
2417 2384
2418 WASM_EXEC_TEST(ExprBlock2b) { 2385 WASM_EXEC_TEST(ExprBlock2b) {
2419 WasmRunner<int32_t, int32_t> r(execution_mode); 2386 WasmRunner<int32_t, int32_t> r(execution_mode);
2420 BUILD(r, WASM_BLOCK_I(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I8(1))), 2387 BUILD(r, WASM_BLOCK_I(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I32V_1(1))),
2421 WASM_I8(2))); 2388 WASM_I32V_1(2)));
2422 CHECK_EQ(2, r.Call(0)); 2389 CHECK_EQ(2, r.Call(0));
2423 CHECK_EQ(1, r.Call(1)); 2390 CHECK_EQ(1, r.Call(1));
2424 } 2391 }
2425 2392
2426 WASM_EXEC_TEST(ExprBlock2c) { 2393 WASM_EXEC_TEST(ExprBlock2c) {
2427 WasmRunner<int32_t, int32_t> r(execution_mode); 2394 WasmRunner<int32_t, int32_t> r(execution_mode);
2428 BUILD(r, WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I8(1), WASM_GET_LOCAL(0)), 2395 BUILD(r, WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I32V_1(1), WASM_GET_LOCAL(0)),
2429 WASM_I8(1))); 2396 WASM_I32V_1(1)));
2430 CHECK_EQ(1, r.Call(0)); 2397 CHECK_EQ(1, r.Call(0));
2431 CHECK_EQ(1, r.Call(1)); 2398 CHECK_EQ(1, r.Call(1));
2432 } 2399 }
2433 2400
2434 WASM_EXEC_TEST(ExprBlock2d) { 2401 WASM_EXEC_TEST(ExprBlock2d) {
2435 WasmRunner<int32_t, int32_t> r(execution_mode); 2402 WasmRunner<int32_t, int32_t> r(execution_mode);
2436 BUILD(r, WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I8(1), WASM_GET_LOCAL(0)), 2403 BUILD(r, WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I32V_1(1), WASM_GET_LOCAL(0)),
2437 WASM_I8(2))); 2404 WASM_I32V_1(2)));
2438 CHECK_EQ(2, r.Call(0)); 2405 CHECK_EQ(2, r.Call(0));
2439 CHECK_EQ(1, r.Call(1)); 2406 CHECK_EQ(1, r.Call(1));
2440 } 2407 }
2441 2408
2442 WASM_EXEC_TEST(ExprBlock_ManualSwitch) { 2409 WASM_EXEC_TEST(ExprBlock_ManualSwitch) {
2443 WasmRunner<int32_t, int32_t> r(execution_mode); 2410 WasmRunner<int32_t, int32_t> r(execution_mode);
2444 BUILD(r, WASM_BLOCK_I(WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(1)), 2411 BUILD(r, WASM_BLOCK_I(WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(1)),
2445 WASM_BRV(1, WASM_I8(11))), 2412 WASM_BRV(1, WASM_I32V_1(11))),
2446 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(2)), 2413 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(2)),
2447 WASM_BRV(1, WASM_I8(12))), 2414 WASM_BRV(1, WASM_I32V_1(12))),
2448 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(3)), 2415 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(3)),
2449 WASM_BRV(1, WASM_I8(13))), 2416 WASM_BRV(1, WASM_I32V_1(13))),
2450 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(4)), 2417 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(4)),
2451 WASM_BRV(1, WASM_I8(14))), 2418 WASM_BRV(1, WASM_I32V_1(14))),
2452 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(5)), 2419 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(5)),
2453 WASM_BRV(1, WASM_I8(15))), 2420 WASM_BRV(1, WASM_I32V_1(15))),
2454 WASM_I8(99))); 2421 WASM_I32V_2(99)));
2455 CHECK_EQ(99, r.Call(0)); 2422 CHECK_EQ(99, r.Call(0));
2456 CHECK_EQ(11, r.Call(1)); 2423 CHECK_EQ(11, r.Call(1));
2457 CHECK_EQ(12, r.Call(2)); 2424 CHECK_EQ(12, r.Call(2));
2458 CHECK_EQ(13, r.Call(3)); 2425 CHECK_EQ(13, r.Call(3));
2459 CHECK_EQ(14, r.Call(4)); 2426 CHECK_EQ(14, r.Call(4));
2460 CHECK_EQ(15, r.Call(5)); 2427 CHECK_EQ(15, r.Call(5));
2461 CHECK_EQ(99, r.Call(6)); 2428 CHECK_EQ(99, r.Call(6));
2462 } 2429 }
2463 2430
2464 WASM_EXEC_TEST(ExprBlock_ManualSwitch_brif) { 2431 WASM_EXEC_TEST(ExprBlock_ManualSwitch_brif) {
2465 WasmRunner<int32_t, int32_t> r(execution_mode); 2432 WasmRunner<int32_t, int32_t> r(execution_mode);
2466 BUILD(r, 2433 BUILD(r, WASM_BLOCK_I(
2467 WASM_BLOCK_I(WASM_BRV_IFD(0, WASM_I8(11), 2434 WASM_BRV_IFD(0, WASM_I32V_1(11),
2468 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(1))), 2435 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(1))),
2469 WASM_BRV_IFD(0, WASM_I8(12), 2436 WASM_BRV_IFD(0, WASM_I32V_1(12),
2470 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(2))), 2437 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(2))),
2471 WASM_BRV_IFD(0, WASM_I8(13), 2438 WASM_BRV_IFD(0, WASM_I32V_1(13),
2472 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(3))), 2439 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(3))),
2473 WASM_BRV_IFD(0, WASM_I8(14), 2440 WASM_BRV_IFD(0, WASM_I32V_1(14),
2474 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(4))), 2441 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(4))),
2475 WASM_BRV_IFD(0, WASM_I8(15), 2442 WASM_BRV_IFD(0, WASM_I32V_1(15),
2476 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(5))), 2443 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(5))),
2477 WASM_I8(99))); 2444 WASM_I32V_2(99)));
2478 CHECK_EQ(99, r.Call(0)); 2445 CHECK_EQ(99, r.Call(0));
2479 CHECK_EQ(11, r.Call(1)); 2446 CHECK_EQ(11, r.Call(1));
2480 CHECK_EQ(12, r.Call(2)); 2447 CHECK_EQ(12, r.Call(2));
2481 CHECK_EQ(13, r.Call(3)); 2448 CHECK_EQ(13, r.Call(3));
2482 CHECK_EQ(14, r.Call(4)); 2449 CHECK_EQ(14, r.Call(4));
2483 CHECK_EQ(15, r.Call(5)); 2450 CHECK_EQ(15, r.Call(5));
2484 CHECK_EQ(99, r.Call(6)); 2451 CHECK_EQ(99, r.Call(6));
2485 } 2452 }
2486 2453
2487 WASM_EXEC_TEST(If_nested) { 2454 WASM_EXEC_TEST(If_nested) {
2488 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 2455 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
2489 2456
2490 BUILD(r, WASM_IF_ELSE_I( 2457 BUILD(
2491 WASM_GET_LOCAL(0), 2458 r,
2492 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_I8(11), WASM_I8(12)), 2459 WASM_IF_ELSE_I(
2493 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_I8(13), WASM_I8(14)))); 2460 WASM_GET_LOCAL(0),
2461 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_I32V_1(11), WASM_I32V_1(12)),
2462 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_I32V_1(13), WASM_I32V_1(14))));
2494 2463
2495 CHECK_EQ(11, r.Call(1, 1)); 2464 CHECK_EQ(11, r.Call(1, 1));
2496 CHECK_EQ(12, r.Call(1, 0)); 2465 CHECK_EQ(12, r.Call(1, 0));
2497 CHECK_EQ(13, r.Call(0, 1)); 2466 CHECK_EQ(13, r.Call(0, 1));
2498 CHECK_EQ(14, r.Call(0, 0)); 2467 CHECK_EQ(14, r.Call(0, 0));
2499 } 2468 }
2500 2469
2501 WASM_EXEC_TEST(ExprBlock_if) { 2470 WASM_EXEC_TEST(ExprBlock_if) {
2502 WasmRunner<int32_t, int32_t> r(execution_mode); 2471 WasmRunner<int32_t, int32_t> r(execution_mode);
2503 2472
2504 BUILD(r, 2473 BUILD(r, WASM_BLOCK_I(WASM_IF_ELSE_I(WASM_GET_LOCAL(0),
2505 WASM_BLOCK_I(WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(11)), 2474 WASM_BRV(0, WASM_I32V_1(11)),
2506 WASM_BRV(1, WASM_I8(14))))); 2475 WASM_BRV(1, WASM_I32V_1(14)))));
2507 2476
2508 CHECK_EQ(11, r.Call(1)); 2477 CHECK_EQ(11, r.Call(1));
2509 CHECK_EQ(14, r.Call(0)); 2478 CHECK_EQ(14, r.Call(0));
2510 } 2479 }
2511 2480
2512 WASM_EXEC_TEST(ExprBlock_nested_ifs) { 2481 WASM_EXEC_TEST(ExprBlock_nested_ifs) {
2513 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 2482 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
2514 2483
2515 BUILD(r, WASM_BLOCK_I(WASM_IF_ELSE_I( 2484 BUILD(r, WASM_BLOCK_I(WASM_IF_ELSE_I(
2516 WASM_GET_LOCAL(0), 2485 WASM_GET_LOCAL(0),
2517 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I8(11)), 2486 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I32V_1(11)),
2518 WASM_BRV(1, WASM_I8(12))), 2487 WASM_BRV(1, WASM_I32V_1(12))),
2519 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I8(13)), 2488 WASM_IF_ELSE_I(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I32V_1(13)),
2520 WASM_BRV(1, WASM_I8(14)))))); 2489 WASM_BRV(1, WASM_I32V_1(14))))));
2521 2490
2522 CHECK_EQ(11, r.Call(1, 1)); 2491 CHECK_EQ(11, r.Call(1, 1));
2523 CHECK_EQ(12, r.Call(1, 0)); 2492 CHECK_EQ(12, r.Call(1, 0));
2524 CHECK_EQ(13, r.Call(0, 1)); 2493 CHECK_EQ(13, r.Call(0, 1));
2525 CHECK_EQ(14, r.Call(0, 0)); 2494 CHECK_EQ(14, r.Call(0, 0));
2526 } 2495 }
2527 2496
2528 WASM_EXEC_TEST_WITH_TRAP(SimpleCallIndirect) { 2497 WASM_EXEC_TEST_WITH_TRAP(SimpleCallIndirect) {
2529 TestSignatures sigs; 2498 TestSignatures sigs;
2530 WasmRunner<int32_t, int32_t> r(execution_mode); 2499 WasmRunner<int32_t, int32_t> r(execution_mode);
(...skipping 13 matching lines...) Expand all
2544 2513
2545 // Function table. 2514 // Function table.
2546 uint16_t indirect_function_table[] = { 2515 uint16_t indirect_function_table[] = {
2547 static_cast<uint16_t>(t1.function_index()), 2516 static_cast<uint16_t>(t1.function_index()),
2548 static_cast<uint16_t>(t2.function_index())}; 2517 static_cast<uint16_t>(t2.function_index())};
2549 r.module().AddIndirectFunctionTable(indirect_function_table, 2518 r.module().AddIndirectFunctionTable(indirect_function_table,
2550 arraysize(indirect_function_table)); 2519 arraysize(indirect_function_table));
2551 r.module().PopulateIndirectFunctionTable(); 2520 r.module().PopulateIndirectFunctionTable();
2552 2521
2553 // Build the caller function. 2522 // Build the caller function.
2554 BUILD(r, WASM_CALL_INDIRECT2(1, WASM_GET_LOCAL(0), WASM_I8(66), WASM_I8(22))); 2523 BUILD(r, WASM_CALL_INDIRECT2(1, WASM_GET_LOCAL(0), WASM_I32V_2(66),
2524 WASM_I32V_1(22)));
2555 2525
2556 CHECK_EQ(88, r.Call(0)); 2526 CHECK_EQ(88, r.Call(0));
2557 CHECK_EQ(44, r.Call(1)); 2527 CHECK_EQ(44, r.Call(1));
2558 CHECK_TRAP(r.Call(2)); 2528 CHECK_TRAP(r.Call(2));
2559 } 2529 }
2560 2530
2561 WASM_EXEC_TEST_WITH_TRAP(MultipleCallIndirect) { 2531 WASM_EXEC_TEST_WITH_TRAP(MultipleCallIndirect) {
2562 TestSignatures sigs; 2532 TestSignatures sigs;
2563 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(execution_mode); 2533 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(execution_mode);
2564 2534
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2609 WasmFunctionCompiler& t1 = r.NewFunction(sigs.i_ii()); 2579 WasmFunctionCompiler& t1 = r.NewFunction(sigs.i_ii());
2610 BUILD(t1, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 2580 BUILD(t1, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
2611 t1.SetSigIndex(1); 2581 t1.SetSigIndex(1);
2612 2582
2613 // Signature table. 2583 // Signature table.
2614 r.module().AddSignature(sigs.f_ff()); 2584 r.module().AddSignature(sigs.f_ff());
2615 r.module().AddSignature(sigs.i_ii()); 2585 r.module().AddSignature(sigs.i_ii());
2616 r.module().AddIndirectFunctionTable(nullptr, 0); 2586 r.module().AddIndirectFunctionTable(nullptr, 0);
2617 2587
2618 // Build the caller function. 2588 // Build the caller function.
2619 BUILD(r, WASM_CALL_INDIRECT2(1, WASM_GET_LOCAL(0), WASM_I8(66), WASM_I8(22))); 2589 BUILD(r, WASM_CALL_INDIRECT2(1, WASM_GET_LOCAL(0), WASM_I32V_2(66),
2590 WASM_I32V_1(22)));
2620 2591
2621 CHECK_TRAP(r.Call(0)); 2592 CHECK_TRAP(r.Call(0));
2622 CHECK_TRAP(r.Call(1)); 2593 CHECK_TRAP(r.Call(1));
2623 CHECK_TRAP(r.Call(2)); 2594 CHECK_TRAP(r.Call(2));
2624 } 2595 }
2625 2596
2626 WASM_EXEC_TEST_WITH_TRAP(CallIndirect_canonical) { 2597 WASM_EXEC_TEST_WITH_TRAP(CallIndirect_canonical) {
2627 TestSignatures sigs; 2598 TestSignatures sigs;
2628 WasmRunner<int32_t, int32_t> r(execution_mode); 2599 WasmRunner<int32_t, int32_t> r(execution_mode);
2629 2600
(...skipping 18 matching lines...) Expand all
2648 uint16_t i1 = static_cast<uint16_t>(t1.function_index()); 2619 uint16_t i1 = static_cast<uint16_t>(t1.function_index());
2649 uint16_t i2 = static_cast<uint16_t>(t2.function_index()); 2620 uint16_t i2 = static_cast<uint16_t>(t2.function_index());
2650 uint16_t i3 = static_cast<uint16_t>(t3.function_index()); 2621 uint16_t i3 = static_cast<uint16_t>(t3.function_index());
2651 uint16_t indirect_function_table[] = {i1, i2, i3, i1, i2}; 2622 uint16_t indirect_function_table[] = {i1, i2, i3, i1, i2};
2652 2623
2653 r.module().AddIndirectFunctionTable(indirect_function_table, 2624 r.module().AddIndirectFunctionTable(indirect_function_table,
2654 arraysize(indirect_function_table)); 2625 arraysize(indirect_function_table));
2655 r.module().PopulateIndirectFunctionTable(); 2626 r.module().PopulateIndirectFunctionTable();
2656 2627
2657 // Build the caller function. 2628 // Build the caller function.
2658 BUILD(r, WASM_CALL_INDIRECT2(1, WASM_GET_LOCAL(0), WASM_I8(77), WASM_I8(11))); 2629 BUILD(r, WASM_CALL_INDIRECT2(1, WASM_GET_LOCAL(0), WASM_I32V_2(77),
2630 WASM_I32V_1(11)));
2659 2631
2660 CHECK_EQ(88, r.Call(0)); 2632 CHECK_EQ(88, r.Call(0));
2661 CHECK_EQ(66, r.Call(1)); 2633 CHECK_EQ(66, r.Call(1));
2662 CHECK_TRAP(r.Call(2)); 2634 CHECK_TRAP(r.Call(2));
2663 CHECK_EQ(88, r.Call(3)); 2635 CHECK_EQ(88, r.Call(3));
2664 CHECK_EQ(66, r.Call(4)); 2636 CHECK_EQ(66, r.Call(4));
2665 CHECK_TRAP(r.Call(5)); 2637 CHECK_TRAP(r.Call(5));
2666 } 2638 }
2667 2639
2668 WASM_EXEC_TEST(F32Floor) { 2640 WASM_EXEC_TEST(F32Floor) {
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
2862 r.module().AddSignature(sig); 2834 r.module().AddSignature(sig);
2863 r.module().AddSignature(sig); 2835 r.module().AddSignature(sig);
2864 r.module().AddIndirectFunctionTable(nullptr, 0); 2836 r.module().AddIndirectFunctionTable(nullptr, 0);
2865 2837
2866 WasmFunctionCompiler& t = r.NewFunction(sig); 2838 WasmFunctionCompiler& t = r.NewFunction(sig);
2867 2839
2868 std::vector<byte> code; 2840 std::vector<byte> code;
2869 for (byte p = 0; p < num_params; ++p) { 2841 for (byte p = 0; p < num_params; ++p) {
2870 ADD_CODE(code, kExprGetLocal, p); 2842 ADD_CODE(code, kExprGetLocal, p);
2871 } 2843 }
2872 ADD_CODE(code, kExprI8Const, 0); 2844 ADD_CODE(code, kExprI32Const, 0);
2873 ADD_CODE(code, kExprCallIndirect, 1, TABLE_ZERO); 2845 ADD_CODE(code, kExprCallIndirect, 1, TABLE_ZERO);
2874 2846
2875 t.Build(&code[0], &code[0] + code.size()); 2847 t.Build(&code[0], &code[0] + code.size());
2876 } 2848 }
2877 } 2849 }
2878 2850
2879 TEST(Compile_Wasm_CallIndirect_Many_i32) { CompileCallIndirectMany(kWasmI32); } 2851 TEST(Compile_Wasm_CallIndirect_Many_i32) { CompileCallIndirectMany(kWasmI32); }
2880 2852
2881 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kWasmF32); } 2853 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kWasmF32); }
2882 2854
2883 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kWasmF64); } 2855 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kWasmF64); }
2884 2856
2885 WASM_EXEC_TEST_WITH_TRAP(Int32RemS_dead) { 2857 WASM_EXEC_TEST_WITH_TRAP(Int32RemS_dead) {
2886 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode); 2858 WasmRunner<int32_t, int32_t, int32_t> r(execution_mode);
2887 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)), WASM_DROP, 2859 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)), WASM_DROP,
2888 WASM_ZERO); 2860 WASM_ZERO);
2889 const int32_t kMin = std::numeric_limits<int32_t>::min(); 2861 const int32_t kMin = std::numeric_limits<int32_t>::min();
2890 CHECK_EQ(0, r.Call(133, 100)); 2862 CHECK_EQ(0, r.Call(133, 100));
2891 CHECK_EQ(0, r.Call(kMin, -1)); 2863 CHECK_EQ(0, r.Call(kMin, -1));
2892 CHECK_EQ(0, r.Call(0, 1)); 2864 CHECK_EQ(0, r.Call(0, 1));
2893 CHECK_TRAP(r.Call(100, 0)); 2865 CHECK_TRAP(r.Call(100, 0));
2894 CHECK_TRAP(r.Call(-1001, 0)); 2866 CHECK_TRAP(r.Call(-1001, 0));
2895 CHECK_TRAP(r.Call(kMin, 0)); 2867 CHECK_TRAP(r.Call(kMin, 0));
2896 } 2868 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698