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

Side by Side Diff: test/unittests/wasm/function-body-decoder-unittest.cc

Issue 2595733003: [wasm] Remove non-standard kExprI8Const bytecode (Closed)
Patch Set: Created 3 years, 12 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 "test/unittests/test-utils.h" 5 #include "test/unittests/test-utils.h"
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "test/common/wasm/test-signatures.h" 9 #include "test/common/wasm/test-signatures.h"
10 10
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 if (types[0] != ret_type || types[1] != param_type) { 175 if (types[0] != ret_type || types[1] != param_type) {
176 // Test signature mismatch. 176 // Test signature mismatch.
177 FunctionSig sig(1, 1, types); 177 FunctionSig sig(1, 1, types);
178 EXPECT_FAILURE_SC(&sig, code); 178 EXPECT_FAILURE_SC(&sig, code);
179 } 179 }
180 } 180 }
181 } 181 }
182 } 182 }
183 }; 183 };
184 184
185 TEST_F(FunctionBodyDecoderTest, Int8Const) { 185 TEST_F(FunctionBodyDecoderTest, Int32Const1) {
186 byte code[] = {kExprI8Const, 0}; 186 byte code[] = {kExprI32Const, 0};
187 for (int i = -128; i < 128; i++) { 187 for (int i = -64; i <= 63; i++) {
188 code[1] = static_cast<byte>(i); 188 code[1] = static_cast<byte>(i & 0x7F);
189 EXPECT_VERIFIES_C(i_i, code); 189 EXPECT_VERIFIES_C(i_i, code);
190 } 190 }
191 } 191 }
192 192
193 TEST_F(FunctionBodyDecoderTest, EmptyFunction) { 193 TEST_F(FunctionBodyDecoderTest, EmptyFunction) {
194 byte code[] = {0}; 194 byte code[] = {0};
195 Verify(kSuccess, sigs.v_v(), code, code); 195 Verify(kSuccess, sigs.v_v(), code, code);
196 Verify(kError, sigs.i_i(), code, code); 196 Verify(kError, sigs.i_i(), code, code);
197 } 197 }
198 198
199 TEST_F(FunctionBodyDecoderTest, IncompleteIf1) { 199 TEST_F(FunctionBodyDecoderTest, IncompleteIf1) {
200 byte code[] = {kExprIf}; 200 byte code[] = {kExprIf};
201 EXPECT_FAILURE_C(v_v, code); 201 EXPECT_FAILURE_C(v_v, code);
202 EXPECT_FAILURE_C(i_i, code); 202 EXPECT_FAILURE_C(i_i, code);
203 } 203 }
204 204
205 TEST_F(FunctionBodyDecoderTest, Int8Const_fallthru) { 205 TEST_F(FunctionBodyDecoderTest, Int32Const_fallthru) {
206 EXPECT_VERIFIES(i_i, WASM_I32V_1(0)); 206 EXPECT_VERIFIES(i_i, WASM_I32V_1(0));
207 } 207 }
208 208
209 TEST_F(FunctionBodyDecoderTest, Int8Const_fallthru2) { 209 TEST_F(FunctionBodyDecoderTest, Int32Const_fallthru2) {
210 EXPECT_FAILURE(i_i, WASM_I32V_1(0), WASM_I32V_1(1)); 210 EXPECT_FAILURE(i_i, WASM_I32V_1(0), WASM_I32V_1(1));
211 } 211 }
212 212
213 TEST_F(FunctionBodyDecoderTest, Int32Const) { 213 TEST_F(FunctionBodyDecoderTest, Int32Const) {
214 const int kInc = 4498211; 214 const int kInc = 4498211;
215 for (int32_t i = kMinInt; i < kMaxInt - kInc; i = i + kInc) { 215 for (int32_t i = kMinInt; i < kMaxInt - kInc; i = i + kInc) {
216 // TODO(binji): expand test for other sized int32s; 1 through 5 bytes. 216 // TODO(binji): expand test for other sized int32s; 1 through 5 bytes.
217 byte code[] = {WASM_I32V(i)}; 217 byte code[] = {WASM_I32V(i)};
218 EXPECT_VERIFIES_C(i_i, code); 218 EXPECT_VERIFIES_C(i_i, code);
219 } 219 }
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 TEST_F(FunctionBodyDecoderTest, TeeLocal0_local) { 413 TEST_F(FunctionBodyDecoderTest, TeeLocal0_local) {
414 EXPECT_FAILURE_C(i_v, kCodeTeeLocal0); 414 EXPECT_FAILURE_C(i_v, kCodeTeeLocal0);
415 AddLocals(kWasmI32, 1); 415 AddLocals(kWasmI32, 1);
416 EXPECT_VERIFIES_C(i_v, kCodeTeeLocal0); 416 EXPECT_VERIFIES_C(i_v, kCodeTeeLocal0);
417 } 417 }
418 418
419 TEST_F(FunctionBodyDecoderTest, TeeLocalN_local) { 419 TEST_F(FunctionBodyDecoderTest, TeeLocalN_local) {
420 for (byte i = 1; i < 8; i++) { 420 for (byte i = 1; i < 8; i++) {
421 AddLocals(kWasmI32, 1); 421 AddLocals(kWasmI32, 1);
422 for (byte j = 0; j < i; j++) { 422 for (byte j = 0; j < i; j++) {
423 EXPECT_FAILURE(v_v, WASM_TEE_LOCAL(j, WASM_I8(i))); 423 EXPECT_FAILURE(v_v, WASM_TEE_LOCAL(j, WASM_I32V_1(i)));
424 EXPECT_VERIFIES(i_i, WASM_TEE_LOCAL(j, WASM_I8(i))); 424 EXPECT_VERIFIES(i_i, WASM_TEE_LOCAL(j, WASM_I32V_1(i)));
425 } 425 }
426 } 426 }
427 } 427 }
428 428
429 TEST_F(FunctionBodyDecoderTest, BlockN) { 429 TEST_F(FunctionBodyDecoderTest, BlockN) {
430 const int kMaxSize = 200; 430 const int kMaxSize = 200;
431 byte buffer[kMaxSize + 3]; 431 byte buffer[kMaxSize + 3];
432 432
433 for (int i = 0; i <= kMaxSize; i++) { 433 for (int i = 0; i <= kMaxSize; i++) {
434 memset(buffer, kExprNop, sizeof(buffer)); 434 memset(buffer, kExprNop, sizeof(buffer));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 TEST_F(FunctionBodyDecoderTest, Block2b) { 519 TEST_F(FunctionBodyDecoderTest, Block2b) {
520 byte code[] = {WASM_BLOCK_I(WASM_SET_LOCAL(0, WASM_ZERO), WASM_ZERO)}; 520 byte code[] = {WASM_BLOCK_I(WASM_SET_LOCAL(0, WASM_ZERO), WASM_ZERO)};
521 EXPECT_VERIFIES_C(i_i, code); 521 EXPECT_VERIFIES_C(i_i, code);
522 EXPECT_FAILURE_C(v_v, code); 522 EXPECT_FAILURE_C(v_v, code);
523 EXPECT_FAILURE_C(f_ff, code); 523 EXPECT_FAILURE_C(f_ff, code);
524 } 524 }
525 525
526 TEST_F(FunctionBodyDecoderTest, Block2_fallthru) { 526 TEST_F(FunctionBodyDecoderTest, Block2_fallthru) {
527 EXPECT_VERIFIES( 527 EXPECT_VERIFIES(
528 i_i, B2(WASM_SET_LOCAL(0, WASM_ZERO), WASM_SET_LOCAL(0, WASM_ZERO)), 528 i_i, B2(WASM_SET_LOCAL(0, WASM_ZERO), WASM_SET_LOCAL(0, WASM_ZERO)),
529 WASM_I8(23)); 529 WASM_I32V_1(23));
530 } 530 }
531 531
532 TEST_F(FunctionBodyDecoderTest, Block3) { 532 TEST_F(FunctionBodyDecoderTest, Block3) {
533 EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_SET_LOCAL(0, WASM_ZERO), 533 EXPECT_VERIFIES(i_i,
534 WASM_SET_LOCAL(0, WASM_ZERO), WASM_I8(11))); 534 WASM_BLOCK_I(WASM_SET_LOCAL(0, WASM_ZERO),
535 WASM_SET_LOCAL(0, WASM_ZERO), WASM_I32V_1(11)));
535 } 536 }
536 537
537 TEST_F(FunctionBodyDecoderTest, Block5) { 538 TEST_F(FunctionBodyDecoderTest, Block5) {
538 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO)); 539 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO));
539 540
540 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO, WASM_ZERO)); 541 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO, WASM_ZERO));
541 542
542 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO, WASM_ZERO, WASM_ZERO)); 543 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO, WASM_ZERO, WASM_ZERO));
543 544
544 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO, WASM_ZERO, WASM_ZERO, WASM_ZERO)); 545 EXPECT_FAILURE(v_i, WASM_BLOCK(WASM_ZERO, WASM_ZERO, WASM_ZERO, WASM_ZERO));
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(1)))); 599 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(1))));
599 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(2)))); 600 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(2))));
600 EXPECT_FAILURE(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(3)))); 601 EXPECT_FAILURE(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(3))));
601 } 602 }
602 603
603 TEST_F(FunctionBodyDecoderTest, NestedBlock_return) { 604 TEST_F(FunctionBodyDecoderTest, NestedBlock_return) {
604 EXPECT_VERIFIES(i_i, B1(B1(WASM_RETURN1(WASM_ZERO)))); 605 EXPECT_VERIFIES(i_i, B1(B1(WASM_RETURN1(WASM_ZERO))));
605 } 606 }
606 607
607 TEST_F(FunctionBodyDecoderTest, BlockBrBinop) { 608 TEST_F(FunctionBodyDecoderTest, BlockBrBinop) {
608 EXPECT_VERIFIES( 609 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_BLOCK_I(WASM_BRV(0, WASM_I32V_1(1))),
609 i_i, WASM_I32_AND(WASM_BLOCK_I(WASM_BRV(0, WASM_I8(1))), WASM_I8(2))); 610 WASM_I32V_1(2)));
610 } 611 }
611 612
612 TEST_F(FunctionBodyDecoderTest, If_empty1) { 613 TEST_F(FunctionBodyDecoderTest, If_empty1) {
613 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprEnd); 614 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprEnd);
614 } 615 }
615 616
616 TEST_F(FunctionBodyDecoderTest, If_empty2) { 617 TEST_F(FunctionBodyDecoderTest, If_empty2) {
617 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprElse, kExprEnd); 618 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprElse, kExprEnd);
618 } 619 }
619 620
620 TEST_F(FunctionBodyDecoderTest, If_empty3) { 621 TEST_F(FunctionBodyDecoderTest, If_empty3) {
621 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, WASM_NOP, kExprElse, kExprEnd); 622 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, WASM_NOP, kExprElse, kExprEnd);
622 EXPECT_FAILURE(v_v, WASM_ZERO, WASM_IF_OP, WASM_ZERO, kExprElse, kExprEnd); 623 EXPECT_FAILURE(v_v, WASM_ZERO, WASM_IF_OP, WASM_ZERO, kExprElse, kExprEnd);
623 } 624 }
624 625
625 TEST_F(FunctionBodyDecoderTest, If_empty4) { 626 TEST_F(FunctionBodyDecoderTest, If_empty4) {
626 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprElse, WASM_NOP, kExprEnd); 627 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprElse, WASM_NOP, kExprEnd);
627 EXPECT_FAILURE(v_v, WASM_ZERO, WASM_IF_OP, kExprElse, WASM_ZERO, kExprEnd); 628 EXPECT_FAILURE(v_v, WASM_ZERO, WASM_IF_OP, kExprElse, WASM_ZERO, kExprEnd);
628 } 629 }
629 630
630 TEST_F(FunctionBodyDecoderTest, If_empty_stack) { 631 TEST_F(FunctionBodyDecoderTest, If_empty_stack) {
631 byte code[] = {kExprIf}; 632 byte code[] = {kExprIf};
632 EXPECT_FAILURE_C(v_v, code); 633 EXPECT_FAILURE_C(v_v, code);
633 EXPECT_FAILURE_C(i_i, code); 634 EXPECT_FAILURE_C(i_i, code);
634 } 635 }
635 636
636 TEST_F(FunctionBodyDecoderTest, If_incomplete1) { 637 TEST_F(FunctionBodyDecoderTest, If_incomplete1) {
637 byte code[] = {kExprI8Const, 0, kExprIf}; 638 byte code[] = {kExprI32Const, 0, kExprIf};
638 EXPECT_FAILURE_C(v_v, code); 639 EXPECT_FAILURE_C(v_v, code);
639 EXPECT_FAILURE_C(i_i, code); 640 EXPECT_FAILURE_C(i_i, code);
640 } 641 }
641 642
642 TEST_F(FunctionBodyDecoderTest, If_incomplete2) { 643 TEST_F(FunctionBodyDecoderTest, If_incomplete2) {
643 byte code[] = {kExprI8Const, 0, kExprIf, kExprNop}; 644 byte code[] = {kExprI32Const, 0, kExprIf, kExprNop};
644 EXPECT_FAILURE_C(v_v, code); 645 EXPECT_FAILURE_C(v_v, code);
645 EXPECT_FAILURE_C(i_i, code); 646 EXPECT_FAILURE_C(i_i, code);
646 } 647 }
647 648
648 TEST_F(FunctionBodyDecoderTest, If_else_else) { 649 TEST_F(FunctionBodyDecoderTest, If_else_else) {
649 byte code[] = {kExprI8Const, 0, WASM_IF_OP, kExprElse, kExprElse, kExprEnd}; 650 byte code[] = {kExprI32Const, 0, WASM_IF_OP, kExprElse, kExprElse, kExprEnd};
650 EXPECT_FAILURE_C(v_v, code); 651 EXPECT_FAILURE_C(v_v, code);
651 EXPECT_FAILURE_C(i_i, code); 652 EXPECT_FAILURE_C(i_i, code);
652 } 653 }
653 654
654 TEST_F(FunctionBodyDecoderTest, IfEmpty) { 655 TEST_F(FunctionBodyDecoderTest, IfEmpty) {
655 EXPECT_VERIFIES(v_i, kExprGetLocal, 0, WASM_IF_OP, kExprEnd); 656 EXPECT_VERIFIES(v_i, kExprGetLocal, 0, WASM_IF_OP, kExprEnd);
656 } 657 }
657 658
658 TEST_F(FunctionBodyDecoderTest, IfSet) { 659 TEST_F(FunctionBodyDecoderTest, IfSet) {
659 EXPECT_VERIFIES(v_i, 660 EXPECT_VERIFIES(v_i,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 EXPECT_FAILURE(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_BR(2))); 697 EXPECT_FAILURE(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_BR(2)));
697 } 698 }
698 699
699 TEST_F(FunctionBodyDecoderTest, IfElseBreak) { 700 TEST_F(FunctionBodyDecoderTest, IfElseBreak) {
700 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_BR(0))); 701 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_BR(0)));
701 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_BR(1))); 702 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_BR(1)));
702 EXPECT_FAILURE(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_BR(2))); 703 EXPECT_FAILURE(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_BR(2)));
703 } 704 }
704 705
705 TEST_F(FunctionBodyDecoderTest, Block_else) { 706 TEST_F(FunctionBodyDecoderTest, Block_else) {
706 byte code[] = {kExprI8Const, 0, kExprBlock, kExprElse, kExprEnd}; 707 byte code[] = {kExprI32Const, 0, kExprBlock, kExprElse, kExprEnd};
707 EXPECT_FAILURE_C(v_v, code); 708 EXPECT_FAILURE_C(v_v, code);
708 EXPECT_FAILURE_C(i_i, code); 709 EXPECT_FAILURE_C(i_i, code);
709 } 710 }
710 711
711 TEST_F(FunctionBodyDecoderTest, IfNop) { 712 TEST_F(FunctionBodyDecoderTest, IfNop) {
712 EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP)); 713 EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP));
713 } 714 }
714 715
715 TEST_F(FunctionBodyDecoderTest, IfNopElseNop) { 716 TEST_F(FunctionBodyDecoderTest, IfNopElseNop) {
716 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP)); 717 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 TEST_F(FunctionBodyDecoderTest, IfBlock2b) { 769 TEST_F(FunctionBodyDecoderTest, IfBlock2b) {
769 EXPECT_VERIFIES( 770 EXPECT_VERIFIES(
770 v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), B2(WASM_SET_LOCAL(0, WASM_ZERO), 771 v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), B2(WASM_SET_LOCAL(0, WASM_ZERO),
771 WASM_SET_LOCAL(0, WASM_ZERO)), 772 WASM_SET_LOCAL(0, WASM_ZERO)),
772 WASM_NOP)); 773 WASM_NOP));
773 } 774 }
774 775
775 TEST_F(FunctionBodyDecoderTest, IfElseSet) { 776 TEST_F(FunctionBodyDecoderTest, IfElseSet) {
776 EXPECT_VERIFIES(v_i, 777 EXPECT_VERIFIES(v_i,
777 WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_SET_LOCAL(0, WASM_ZERO), 778 WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_SET_LOCAL(0, WASM_ZERO),
778 WASM_SET_LOCAL(0, WASM_I8(1)))); 779 WASM_SET_LOCAL(0, WASM_I32V_1(1))));
779 } 780 }
780 781
781 TEST_F(FunctionBodyDecoderTest, Loop0) { 782 TEST_F(FunctionBodyDecoderTest, Loop0) {
782 EXPECT_VERIFIES(v_v, WASM_LOOP_OP, kExprEnd); 783 EXPECT_VERIFIES(v_v, WASM_LOOP_OP, kExprEnd);
783 } 784 }
784 785
785 TEST_F(FunctionBodyDecoderTest, Loop1) { 786 TEST_F(FunctionBodyDecoderTest, Loop1) {
786 static const byte code[] = {WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO))}; 787 static const byte code[] = {WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO))};
787 EXPECT_VERIFIES_C(v_i, code); 788 EXPECT_VERIFIES_C(v_i, code);
788 EXPECT_FAILURE_C(v_v, code); 789 EXPECT_FAILURE_C(v_v, code);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 } 860 }
860 861
861 TEST_F(FunctionBodyDecoderTest, ReturnVoid2) { 862 TEST_F(FunctionBodyDecoderTest, ReturnVoid2) {
862 static const byte code[] = {WASM_BLOCK(WASM_BR(0))}; 863 static const byte code[] = {WASM_BLOCK(WASM_BR(0))};
863 EXPECT_VERIFIES_C(v_v, code); 864 EXPECT_VERIFIES_C(v_v, code);
864 EXPECT_FAILURE_C(i_i, code); 865 EXPECT_FAILURE_C(i_i, code);
865 EXPECT_FAILURE_C(i_f, code); 866 EXPECT_FAILURE_C(i_f, code);
866 } 867 }
867 868
868 TEST_F(FunctionBodyDecoderTest, ReturnVoid3) { 869 TEST_F(FunctionBodyDecoderTest, ReturnVoid3) {
869 EXPECT_FAILURE(v_v, kExprI8Const, 0);
870 EXPECT_FAILURE(v_v, kExprI32Const, 0); 870 EXPECT_FAILURE(v_v, kExprI32Const, 0);
871 EXPECT_FAILURE(v_v, kExprI64Const, 0); 871 EXPECT_FAILURE(v_v, kExprI64Const, 0);
872 EXPECT_FAILURE(v_v, kExprF32Const, 0, 0, 0, 0); 872 EXPECT_FAILURE(v_v, kExprF32Const, 0, 0, 0, 0);
873 EXPECT_FAILURE(v_v, kExprF64Const, 0, 0, 0, 0, 0, 0, 0, 0); 873 EXPECT_FAILURE(v_v, kExprF64Const, 0, 0, 0, 0, 0, 0, 0, 0);
874 874
875 EXPECT_FAILURE(v_i, kExprGetLocal, 0); 875 EXPECT_FAILURE(v_i, kExprGetLocal, 0);
876 } 876 }
877 877
878 TEST_F(FunctionBodyDecoderTest, Unreachable1) { 878 TEST_F(FunctionBodyDecoderTest, Unreachable1) {
879 EXPECT_VERIFIES(v_v, kExprUnreachable); 879 EXPECT_VERIFIES(v_v, kExprUnreachable);
880 EXPECT_VERIFIES(v_v, kExprUnreachable, kExprUnreachable); 880 EXPECT_VERIFIES(v_v, kExprUnreachable, kExprUnreachable);
881 EXPECT_VERIFIES(v_v, B2(WASM_UNREACHABLE, WASM_ZERO)); 881 EXPECT_VERIFIES(v_v, B2(WASM_UNREACHABLE, WASM_ZERO));
882 EXPECT_VERIFIES(v_v, B2(WASM_BR(0), WASM_ZERO)); 882 EXPECT_VERIFIES(v_v, B2(WASM_BR(0), WASM_ZERO));
883 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_ZERO)); 883 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_ZERO));
884 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0), WASM_ZERO)); 884 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0), WASM_ZERO));
885 } 885 }
886 886
887 TEST_F(FunctionBodyDecoderTest, Unreachable_binop) { 887 TEST_F(FunctionBodyDecoderTest, Unreachable_binop) {
888 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_ZERO, WASM_UNREACHABLE)); 888 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_ZERO, WASM_UNREACHABLE));
889 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_ZERO)); 889 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_ZERO));
890 } 890 }
891 891
892 TEST_F(FunctionBodyDecoderTest, Unreachable_select) { 892 TEST_F(FunctionBodyDecoderTest, Unreachable_select) {
893 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_ZERO)); 893 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_ZERO));
894 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_UNREACHABLE, WASM_ZERO)); 894 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_UNREACHABLE, WASM_ZERO));
895 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_ZERO, WASM_UNREACHABLE)); 895 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_ZERO, WASM_UNREACHABLE));
896 } 896 }
897 897
898 TEST_F(FunctionBodyDecoderTest, If1) { 898 TEST_F(FunctionBodyDecoderTest, If1) {
899 EXPECT_VERIFIES(i_i,
900 WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I8(9), WASM_I8(8)));
901 EXPECT_VERIFIES( 899 EXPECT_VERIFIES(
902 i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I8(9), WASM_GET_LOCAL(0))); 900 i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9), WASM_I32V_1(8)));
903 EXPECT_VERIFIES( 901 EXPECT_VERIFIES(i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9),
904 i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_GET_LOCAL(0), WASM_I8(8))); 902 WASM_GET_LOCAL(0)));
903 EXPECT_VERIFIES(i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_GET_LOCAL(0),
904 WASM_I32V_1(8)));
905 } 905 }
906 906
907 TEST_F(FunctionBodyDecoderTest, If_off_end) { 907 TEST_F(FunctionBodyDecoderTest, If_off_end) {
908 static const byte kCode[] = { 908 static const byte kCode[] = {
909 WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_GET_LOCAL(0), WASM_GET_LOCAL(0))}; 909 WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_GET_LOCAL(0), WASM_GET_LOCAL(0))};
910 for (size_t len = 3; len < arraysize(kCode); len++) { 910 for (size_t len = 3; len < arraysize(kCode); len++) {
911 Verify(kError, sigs.i_i(), kCode, kCode + len); 911 Verify(kError, sigs.i_i(), kCode, kCode + len);
912 } 912 }
913 } 913 }
914 914
915 TEST_F(FunctionBodyDecoderTest, If_type1) { 915 TEST_F(FunctionBodyDecoderTest, If_type1) {
916 // float|double ? 1 : 2 916 // float|double ? 1 : 2
917 static const byte kCode[] = { 917 static const byte kCode[] = {
918 WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I8(0), WASM_I8(2))}; 918 WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(0), WASM_I32V_1(2))};
919 EXPECT_VERIFIES_C(i_i, kCode); 919 EXPECT_VERIFIES_C(i_i, kCode);
920 EXPECT_FAILURE_C(i_f, kCode); 920 EXPECT_FAILURE_C(i_f, kCode);
921 EXPECT_FAILURE_C(i_d, kCode); 921 EXPECT_FAILURE_C(i_d, kCode);
922 } 922 }
923 923
924 TEST_F(FunctionBodyDecoderTest, If_type2) { 924 TEST_F(FunctionBodyDecoderTest, If_type2) {
925 // 1 ? float|double : 2 925 // 1 ? float|double : 2
926 static const byte kCode[] = { 926 static const byte kCode[] = {
927 WASM_IF_ELSE_I(WASM_I8(1), WASM_GET_LOCAL(0), WASM_I8(1))}; 927 WASM_IF_ELSE_I(WASM_I32V_1(1), WASM_GET_LOCAL(0), WASM_I32V_1(1))};
928 EXPECT_VERIFIES_C(i_i, kCode); 928 EXPECT_VERIFIES_C(i_i, kCode);
929 EXPECT_FAILURE_C(i_f, kCode); 929 EXPECT_FAILURE_C(i_f, kCode);
930 EXPECT_FAILURE_C(i_d, kCode); 930 EXPECT_FAILURE_C(i_d, kCode);
931 } 931 }
932 932
933 TEST_F(FunctionBodyDecoderTest, If_type3) { 933 TEST_F(FunctionBodyDecoderTest, If_type3) {
934 // stmt ? 0 : 1 934 // stmt ? 0 : 1
935 static const byte kCode[] = { 935 static const byte kCode[] = {
936 WASM_IF_ELSE_I(WASM_NOP, WASM_I8(0), WASM_I8(1))}; 936 WASM_IF_ELSE_I(WASM_NOP, WASM_I32V_1(0), WASM_I32V_1(1))};
937 EXPECT_FAILURE_C(i_i, kCode); 937 EXPECT_FAILURE_C(i_i, kCode);
938 EXPECT_FAILURE_C(i_f, kCode); 938 EXPECT_FAILURE_C(i_f, kCode);
939 EXPECT_FAILURE_C(i_d, kCode); 939 EXPECT_FAILURE_C(i_d, kCode);
940 } 940 }
941 941
942 TEST_F(FunctionBodyDecoderTest, If_type4) { 942 TEST_F(FunctionBodyDecoderTest, If_type4) {
943 // 0 ? stmt : 1 943 // 0 ? stmt : 1
944 static const byte kCode[] = { 944 static const byte kCode[] = {
945 WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_NOP, WASM_I8(1))}; 945 WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_NOP, WASM_I32V_1(1))};
946 EXPECT_FAILURE_C(i_i, kCode); 946 EXPECT_FAILURE_C(i_i, kCode);
947 EXPECT_FAILURE_C(i_f, kCode); 947 EXPECT_FAILURE_C(i_f, kCode);
948 EXPECT_FAILURE_C(i_d, kCode); 948 EXPECT_FAILURE_C(i_d, kCode);
949 } 949 }
950 950
951 TEST_F(FunctionBodyDecoderTest, If_type5) { 951 TEST_F(FunctionBodyDecoderTest, If_type5) {
952 // 0 ? 1 : stmt 952 // 0 ? 1 : stmt
953 static const byte kCode[] = {WASM_IF_ELSE_I(WASM_ZERO, WASM_I8(1), WASM_NOP)}; 953 static const byte kCode[] = {
954 WASM_IF_ELSE_I(WASM_ZERO, WASM_I32V_1(1), WASM_NOP)};
954 EXPECT_FAILURE_C(i_i, kCode); 955 EXPECT_FAILURE_C(i_i, kCode);
955 EXPECT_FAILURE_C(i_f, kCode); 956 EXPECT_FAILURE_C(i_f, kCode);
956 EXPECT_FAILURE_C(i_d, kCode); 957 EXPECT_FAILURE_C(i_d, kCode);
957 } 958 }
958 959
959 TEST_F(FunctionBodyDecoderTest, Int64Local_param) { 960 TEST_F(FunctionBodyDecoderTest, Int64Local_param) {
960 EXPECT_VERIFIES_C(l_l, kCodeGetLocal0); 961 EXPECT_VERIFIES_C(l_l, kCodeGetLocal0);
961 } 962 }
962 963
963 TEST_F(FunctionBodyDecoderTest, Int64Locals) { 964 TEST_F(FunctionBodyDecoderTest, Int64Locals) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 TestUnop(kExprF64SConvertI32, kWasmF64, kWasmI32); 1021 TestUnop(kExprF64SConvertI32, kWasmF64, kWasmI32);
1021 TestUnop(kExprF64UConvertI32, kWasmF64, kWasmI32); 1022 TestUnop(kExprF64UConvertI32, kWasmF64, kWasmI32);
1022 TestUnop(kExprF64ConvertF32, kWasmF64, kWasmF32); 1023 TestUnop(kExprF64ConvertF32, kWasmF64, kWasmF32);
1023 TestUnop(kExprF32SConvertI32, kWasmF32, kWasmI32); 1024 TestUnop(kExprF32SConvertI32, kWasmF32, kWasmI32);
1024 TestUnop(kExprF32UConvertI32, kWasmF32, kWasmI32); 1025 TestUnop(kExprF32UConvertI32, kWasmF32, kWasmI32);
1025 TestUnop(kExprF32ConvertF64, kWasmF32, kWasmF64); 1026 TestUnop(kExprF32ConvertF64, kWasmF32, kWasmF64);
1026 } 1027 }
1027 1028
1028 TEST_F(FunctionBodyDecoderTest, MacrosStmt) { 1029 TEST_F(FunctionBodyDecoderTest, MacrosStmt) {
1029 EXPECT_VERIFIES(v_i, WASM_SET_LOCAL(0, WASM_I32V_3(87348))); 1030 EXPECT_VERIFIES(v_i, WASM_SET_LOCAL(0, WASM_I32V_3(87348)));
1030 EXPECT_VERIFIES( 1031 EXPECT_VERIFIES(v_i, WASM_STORE_MEM(MachineType::Int32(), WASM_I32V_1(24),
1031 v_i, WASM_STORE_MEM(MachineType::Int32(), WASM_I8(24), WASM_I8(40))); 1032 WASM_I32V_1(40)));
1032 EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP)); 1033 EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP));
1033 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP)); 1034 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP));
1034 EXPECT_VERIFIES(v_v, WASM_NOP); 1035 EXPECT_VERIFIES(v_v, WASM_NOP);
1035 EXPECT_VERIFIES(v_v, B1(WASM_NOP)); 1036 EXPECT_VERIFIES(v_v, B1(WASM_NOP));
1036 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_NOP)); 1037 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_NOP));
1037 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0))); 1038 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0)));
1038 } 1039 }
1039 1040
1040 TEST_F(FunctionBodyDecoderTest, MacrosContinue) { 1041 TEST_F(FunctionBodyDecoderTest, MacrosContinue) {
1041 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_CONTINUE(0))); 1042 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_CONTINUE(0)));
(...skipping 16 matching lines...) Expand all
1058 1059
1059 TEST_F(FunctionBodyDecoderTest, MultipleReturn) { 1060 TEST_F(FunctionBodyDecoderTest, MultipleReturn) {
1060 static ValueType kIntTypes5[] = {kWasmI32, kWasmI32, kWasmI32, kWasmI32, 1061 static ValueType kIntTypes5[] = {kWasmI32, kWasmI32, kWasmI32, kWasmI32,
1061 kWasmI32}; 1062 kWasmI32};
1062 FunctionSig sig_ii_v(2, 0, kIntTypes5); 1063 FunctionSig sig_ii_v(2, 0, kIntTypes5);
1063 EXPECT_VERIFIES_S(&sig_ii_v, WASM_RETURNN(2, WASM_ZERO, WASM_ONE)); 1064 EXPECT_VERIFIES_S(&sig_ii_v, WASM_RETURNN(2, WASM_ZERO, WASM_ONE));
1064 EXPECT_FAILURE_S(&sig_ii_v, WASM_RETURNN(1, WASM_ZERO)); 1065 EXPECT_FAILURE_S(&sig_ii_v, WASM_RETURNN(1, WASM_ZERO));
1065 1066
1066 FunctionSig sig_iii_v(3, 0, kIntTypes5); 1067 FunctionSig sig_iii_v(3, 0, kIntTypes5);
1067 EXPECT_VERIFIES_S(&sig_iii_v, 1068 EXPECT_VERIFIES_S(&sig_iii_v,
1068 WASM_RETURNN(3, WASM_ZERO, WASM_ONE, WASM_I8(44))); 1069 WASM_RETURNN(3, WASM_ZERO, WASM_ONE, WASM_I32V_1(44)));
1069 EXPECT_FAILURE_S(&sig_iii_v, WASM_RETURNN(2, WASM_ZERO, WASM_ONE)); 1070 EXPECT_FAILURE_S(&sig_iii_v, WASM_RETURNN(2, WASM_ZERO, WASM_ONE));
1070 } 1071 }
1071 1072
1072 TEST_F(FunctionBodyDecoderTest, MultipleReturn_fallthru) { 1073 TEST_F(FunctionBodyDecoderTest, MultipleReturn_fallthru) {
1073 static ValueType kIntTypes5[] = {kWasmI32, kWasmI32, kWasmI32, kWasmI32, 1074 static ValueType kIntTypes5[] = {kWasmI32, kWasmI32, kWasmI32, kWasmI32,
1074 kWasmI32}; 1075 kWasmI32};
1075 FunctionSig sig_ii_v(2, 0, kIntTypes5); 1076 FunctionSig sig_ii_v(2, 0, kIntTypes5);
1076 1077
1077 EXPECT_VERIFIES_S(&sig_ii_v, WASM_ZERO, WASM_ONE); 1078 EXPECT_VERIFIES_S(&sig_ii_v, WASM_ZERO, WASM_ONE);
1078 EXPECT_FAILURE_S(&sig_ii_v, WASM_ZERO); 1079 EXPECT_FAILURE_S(&sig_ii_v, WASM_ZERO);
1079 1080
1080 FunctionSig sig_iii_v(3, 0, kIntTypes5); 1081 FunctionSig sig_iii_v(3, 0, kIntTypes5);
1081 EXPECT_VERIFIES_S(&sig_iii_v, WASM_ZERO, WASM_ONE, WASM_I8(44)); 1082 EXPECT_VERIFIES_S(&sig_iii_v, WASM_ZERO, WASM_ONE, WASM_I32V_1(44));
1082 EXPECT_FAILURE_S(&sig_iii_v, WASM_ZERO, WASM_ONE); 1083 EXPECT_FAILURE_S(&sig_iii_v, WASM_ZERO, WASM_ONE);
1083 } 1084 }
1084 1085
1085 TEST_F(FunctionBodyDecoderTest, MacrosInt32) { 1086 TEST_F(FunctionBodyDecoderTest, MacrosInt32) {
1086 EXPECT_VERIFIES(i_i, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_I8(12))); 1087 EXPECT_VERIFIES(i_i, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_I32V_1(12)));
1087 EXPECT_VERIFIES(i_i, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(13))); 1088 EXPECT_VERIFIES(i_i, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I32V_1(13)));
1088 EXPECT_VERIFIES(i_i, WASM_I32_MUL(WASM_GET_LOCAL(0), WASM_I8(14))); 1089 EXPECT_VERIFIES(i_i, WASM_I32_MUL(WASM_GET_LOCAL(0), WASM_I32V_1(14)));
1089 EXPECT_VERIFIES(i_i, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_I8(15))); 1090 EXPECT_VERIFIES(i_i, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_I32V_1(15)));
1090 EXPECT_VERIFIES(i_i, WASM_I32_DIVU(WASM_GET_LOCAL(0), WASM_I8(16))); 1091 EXPECT_VERIFIES(i_i, WASM_I32_DIVU(WASM_GET_LOCAL(0), WASM_I32V_1(16)));
1091 EXPECT_VERIFIES(i_i, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_I8(17))); 1092 EXPECT_VERIFIES(i_i, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_I32V_1(17)));
1092 EXPECT_VERIFIES(i_i, WASM_I32_REMU(WASM_GET_LOCAL(0), WASM_I8(18))); 1093 EXPECT_VERIFIES(i_i, WASM_I32_REMU(WASM_GET_LOCAL(0), WASM_I32V_1(18)));
1093 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_GET_LOCAL(0), WASM_I8(19))); 1094 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_GET_LOCAL(0), WASM_I32V_1(19)));
1094 EXPECT_VERIFIES(i_i, WASM_I32_IOR(WASM_GET_LOCAL(0), WASM_I8(20))); 1095 EXPECT_VERIFIES(i_i, WASM_I32_IOR(WASM_GET_LOCAL(0), WASM_I32V_1(20)));
1095 EXPECT_VERIFIES(i_i, WASM_I32_XOR(WASM_GET_LOCAL(0), WASM_I8(21))); 1096 EXPECT_VERIFIES(i_i, WASM_I32_XOR(WASM_GET_LOCAL(0), WASM_I32V_1(21)));
1096 EXPECT_VERIFIES(i_i, WASM_I32_SHL(WASM_GET_LOCAL(0), WASM_I8(22))); 1097 EXPECT_VERIFIES(i_i, WASM_I32_SHL(WASM_GET_LOCAL(0), WASM_I32V_1(22)));
1097 EXPECT_VERIFIES(i_i, WASM_I32_SHR(WASM_GET_LOCAL(0), WASM_I8(23))); 1098 EXPECT_VERIFIES(i_i, WASM_I32_SHR(WASM_GET_LOCAL(0), WASM_I32V_1(23)));
1098 EXPECT_VERIFIES(i_i, WASM_I32_SAR(WASM_GET_LOCAL(0), WASM_I8(24))); 1099 EXPECT_VERIFIES(i_i, WASM_I32_SAR(WASM_GET_LOCAL(0), WASM_I32V_1(24)));
1099 EXPECT_VERIFIES(i_i, WASM_I32_ROR(WASM_GET_LOCAL(0), WASM_I8(24))); 1100 EXPECT_VERIFIES(i_i, WASM_I32_ROR(WASM_GET_LOCAL(0), WASM_I32V_1(24)));
1100 EXPECT_VERIFIES(i_i, WASM_I32_ROL(WASM_GET_LOCAL(0), WASM_I8(24))); 1101 EXPECT_VERIFIES(i_i, WASM_I32_ROL(WASM_GET_LOCAL(0), WASM_I32V_1(24)));
1101 EXPECT_VERIFIES(i_i, WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(25))); 1102 EXPECT_VERIFIES(i_i, WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I32V_1(25)));
1102 EXPECT_VERIFIES(i_i, WASM_I32_NE(WASM_GET_LOCAL(0), WASM_I8(25))); 1103 EXPECT_VERIFIES(i_i, WASM_I32_NE(WASM_GET_LOCAL(0), WASM_I32V_1(25)));
1103 1104
1104 EXPECT_VERIFIES(i_i, WASM_I32_LTS(WASM_GET_LOCAL(0), WASM_I8(26))); 1105 EXPECT_VERIFIES(i_i, WASM_I32_LTS(WASM_GET_LOCAL(0), WASM_I32V_1(26)));
1105 EXPECT_VERIFIES(i_i, WASM_I32_LES(WASM_GET_LOCAL(0), WASM_I8(27))); 1106 EXPECT_VERIFIES(i_i, WASM_I32_LES(WASM_GET_LOCAL(0), WASM_I32V_1(27)));
1106 EXPECT_VERIFIES(i_i, WASM_I32_LTU(WASM_GET_LOCAL(0), WASM_I8(28))); 1107 EXPECT_VERIFIES(i_i, WASM_I32_LTU(WASM_GET_LOCAL(0), WASM_I32V_1(28)));
1107 EXPECT_VERIFIES(i_i, WASM_I32_LEU(WASM_GET_LOCAL(0), WASM_I8(29))); 1108 EXPECT_VERIFIES(i_i, WASM_I32_LEU(WASM_GET_LOCAL(0), WASM_I32V_1(29)));
1108 1109
1109 EXPECT_VERIFIES(i_i, WASM_I32_GTS(WASM_GET_LOCAL(0), WASM_I8(26))); 1110 EXPECT_VERIFIES(i_i, WASM_I32_GTS(WASM_GET_LOCAL(0), WASM_I32V_1(26)));
1110 EXPECT_VERIFIES(i_i, WASM_I32_GES(WASM_GET_LOCAL(0), WASM_I8(27))); 1111 EXPECT_VERIFIES(i_i, WASM_I32_GES(WASM_GET_LOCAL(0), WASM_I32V_1(27)));
1111 EXPECT_VERIFIES(i_i, WASM_I32_GTU(WASM_GET_LOCAL(0), WASM_I8(28))); 1112 EXPECT_VERIFIES(i_i, WASM_I32_GTU(WASM_GET_LOCAL(0), WASM_I32V_1(28)));
1112 EXPECT_VERIFIES(i_i, WASM_I32_GEU(WASM_GET_LOCAL(0), WASM_I8(29))); 1113 EXPECT_VERIFIES(i_i, WASM_I32_GEU(WASM_GET_LOCAL(0), WASM_I32V_1(29)));
1113 } 1114 }
1114 1115
1115 TEST_F(FunctionBodyDecoderTest, MacrosInt64) { 1116 TEST_F(FunctionBodyDecoderTest, MacrosInt64) {
1116 EXPECT_VERIFIES(l_ll, WASM_I64_ADD(WASM_GET_LOCAL(0), WASM_I64V_1(12))); 1117 EXPECT_VERIFIES(l_ll, WASM_I64_ADD(WASM_GET_LOCAL(0), WASM_I64V_1(12)));
1117 EXPECT_VERIFIES(l_ll, WASM_I64_SUB(WASM_GET_LOCAL(0), WASM_I64V_1(13))); 1118 EXPECT_VERIFIES(l_ll, WASM_I64_SUB(WASM_GET_LOCAL(0), WASM_I64V_1(13)));
1118 EXPECT_VERIFIES(l_ll, WASM_I64_MUL(WASM_GET_LOCAL(0), WASM_I64V_1(14))); 1119 EXPECT_VERIFIES(l_ll, WASM_I64_MUL(WASM_GET_LOCAL(0), WASM_I64V_1(14)));
1119 EXPECT_VERIFIES(l_ll, WASM_I64_DIVS(WASM_GET_LOCAL(0), WASM_I64V_1(15))); 1120 EXPECT_VERIFIES(l_ll, WASM_I64_DIVS(WASM_GET_LOCAL(0), WASM_I64V_1(15)));
1120 EXPECT_VERIFIES(l_ll, WASM_I64_DIVU(WASM_GET_LOCAL(0), WASM_I64V_1(16))); 1121 EXPECT_VERIFIES(l_ll, WASM_I64_DIVU(WASM_GET_LOCAL(0), WASM_I64V_1(16)));
1121 EXPECT_VERIFIES(l_ll, WASM_I64_REMS(WASM_GET_LOCAL(0), WASM_I64V_1(17))); 1122 EXPECT_VERIFIES(l_ll, WASM_I64_REMS(WASM_GET_LOCAL(0), WASM_I64V_1(17)));
1122 EXPECT_VERIFIES(l_ll, WASM_I64_REMU(WASM_GET_LOCAL(0), WASM_I64V_1(18))); 1123 EXPECT_VERIFIES(l_ll, WASM_I64_REMU(WASM_GET_LOCAL(0), WASM_I64V_1(18)));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 } 1163 }
1163 1164
1164 TEST_F(FunctionBodyDecoderTest, MemorySize) { 1165 TEST_F(FunctionBodyDecoderTest, MemorySize) {
1165 byte code[] = {kExprMemorySize, 0}; 1166 byte code[] = {kExprMemorySize, 0};
1166 EXPECT_VERIFIES_C(i_i, code); 1167 EXPECT_VERIFIES_C(i_i, code);
1167 EXPECT_FAILURE_C(f_ff, code); 1168 EXPECT_FAILURE_C(f_ff, code);
1168 } 1169 }
1169 1170
1170 TEST_F(FunctionBodyDecoderTest, LoadMemOffset) { 1171 TEST_F(FunctionBodyDecoderTest, LoadMemOffset) {
1171 for (int offset = 0; offset < 128; offset += 7) { 1172 for (int offset = 0; offset < 128; offset += 7) {
1172 byte code[] = {kExprI8Const, 0, kExprI32LoadMem, ZERO_ALIGNMENT, 1173 byte code[] = {kExprI32Const, 0, kExprI32LoadMem, ZERO_ALIGNMENT,
1173 static_cast<byte>(offset)}; 1174 static_cast<byte>(offset)};
1174 EXPECT_VERIFIES_C(i_i, code); 1175 EXPECT_VERIFIES_C(i_i, code);
1175 } 1176 }
1176 } 1177 }
1177 1178
1178 TEST_F(FunctionBodyDecoderTest, LoadMemAlignment) { 1179 TEST_F(FunctionBodyDecoderTest, LoadMemAlignment) {
1179 struct { 1180 struct {
1180 WasmOpcode instruction; 1181 WasmOpcode instruction;
1181 uint32_t maximum_aligment; 1182 uint32_t maximum_aligment;
1182 } values[] = { 1183 } values[] = {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 TEST_F(FunctionBodyDecoderTest, SimpleCalls) { 1338 TEST_F(FunctionBodyDecoderTest, SimpleCalls) {
1338 FunctionSig* sig = sigs.i_i(); 1339 FunctionSig* sig = sigs.i_i();
1339 TestModuleEnv module_env; 1340 TestModuleEnv module_env;
1340 module = &module_env; 1341 module = &module_env;
1341 1342
1342 module_env.AddFunction(sigs.i_v()); 1343 module_env.AddFunction(sigs.i_v());
1343 module_env.AddFunction(sigs.i_i()); 1344 module_env.AddFunction(sigs.i_i());
1344 module_env.AddFunction(sigs.i_ii()); 1345 module_env.AddFunction(sigs.i_ii());
1345 1346
1346 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION0(0)); 1347 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION0(0));
1347 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION(1, WASM_I8(27))); 1348 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION(1, WASM_I32V_1(27)));
1348 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION(2, WASM_I8(37), WASM_I8(77))); 1349 EXPECT_VERIFIES_S(sig,
1350 WASM_CALL_FUNCTION(2, WASM_I32V_1(37), WASM_I32V_2(77)));
1349 } 1351 }
1350 1352
1351 TEST_F(FunctionBodyDecoderTest, CallsWithTooFewArguments) { 1353 TEST_F(FunctionBodyDecoderTest, CallsWithTooFewArguments) {
1352 FunctionSig* sig = sigs.i_i(); 1354 FunctionSig* sig = sigs.i_i();
1353 TestModuleEnv module_env; 1355 TestModuleEnv module_env;
1354 module = &module_env; 1356 module = &module_env;
1355 1357
1356 module_env.AddFunction(sigs.i_i()); 1358 module_env.AddFunction(sigs.i_i());
1357 module_env.AddFunction(sigs.i_ii()); 1359 module_env.AddFunction(sigs.i_ii());
1358 module_env.AddFunction(sigs.f_ff()); 1360 module_env.AddFunction(sigs.f_ff());
(...skipping 15 matching lines...) Expand all
1374 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_F64(17.1))); 1376 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_F64(17.1)));
1375 } 1377 }
1376 1378
1377 TEST_F(FunctionBodyDecoderTest, CallsWithMismatchedSigs3) { 1379 TEST_F(FunctionBodyDecoderTest, CallsWithMismatchedSigs3) {
1378 FunctionSig* sig = sigs.i_i(); 1380 FunctionSig* sig = sigs.i_i();
1379 TestModuleEnv module_env; 1381 TestModuleEnv module_env;
1380 module = &module_env; 1382 module = &module_env;
1381 1383
1382 module_env.AddFunction(sigs.i_f()); 1384 module_env.AddFunction(sigs.i_f());
1383 1385
1384 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_I8(17))); 1386 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_I32V_1(17)));
1385 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_I64V_1(27))); 1387 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_I64V_1(27)));
1386 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_F64(37.2))); 1388 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(0, WASM_F64(37.2)));
1387 1389
1388 module_env.AddFunction(sigs.i_d()); 1390 module_env.AddFunction(sigs.i_d());
1389 1391
1390 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(1, WASM_I8(16))); 1392 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(1, WASM_I32V_1(16)));
1391 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(1, WASM_I64V_1(16))); 1393 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(1, WASM_I64V_1(16)));
1392 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(1, WASM_F32(17.6))); 1394 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(1, WASM_F32(17.6)));
1393 } 1395 }
1394 1396
1395 TEST_F(FunctionBodyDecoderTest, MultiReturn) { 1397 TEST_F(FunctionBodyDecoderTest, MultiReturn) {
1396 FLAG_wasm_mv_prototype = true; 1398 FLAG_wasm_mv_prototype = true;
1397 ValueType storage[] = {kWasmI32, kWasmI32}; 1399 ValueType storage[] = {kWasmI32, kWasmI32};
1398 FunctionSig sig_ii_v(2, 0, storage); 1400 FunctionSig sig_ii_v(2, 0, storage);
1399 FunctionSig sig_v_ii(0, 2, storage); 1401 FunctionSig sig_v_ii(0, 2, storage);
1400 TestModuleEnv module_env; 1402 TestModuleEnv module_env;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1440 FunctionSig* sig = sigs.i_i(); 1442 FunctionSig* sig = sigs.i_i();
1441 TestModuleEnv module_env; 1443 TestModuleEnv module_env;
1442 module_env.InitializeFunctionTable(); 1444 module_env.InitializeFunctionTable();
1443 module = &module_env; 1445 module = &module_env;
1444 1446
1445 byte f0 = module_env.AddSignature(sigs.i_v()); 1447 byte f0 = module_env.AddSignature(sigs.i_v());
1446 byte f1 = module_env.AddSignature(sigs.i_i()); 1448 byte f1 = module_env.AddSignature(sigs.i_i());
1447 byte f2 = module_env.AddSignature(sigs.i_ii()); 1449 byte f2 = module_env.AddSignature(sigs.i_ii());
1448 1450
1449 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT0(f0, WASM_ZERO)); 1451 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT0(f0, WASM_ZERO));
1450 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I8(22))); 1452 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I32V_1(22)));
1451 EXPECT_VERIFIES_S( 1453 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT2(f2, WASM_ZERO, WASM_I32V_1(32),
1452 sig, WASM_CALL_INDIRECT2(f2, WASM_ZERO, WASM_I8(32), WASM_I8(72))); 1454 WASM_I32V_2(72)));
1453 } 1455 }
1454 1456
1455 TEST_F(FunctionBodyDecoderTest, IndirectCallsOutOfBounds) { 1457 TEST_F(FunctionBodyDecoderTest, IndirectCallsOutOfBounds) {
1456 FunctionSig* sig = sigs.i_i(); 1458 FunctionSig* sig = sigs.i_i();
1457 TestModuleEnv module_env; 1459 TestModuleEnv module_env;
1458 module_env.InitializeFunctionTable(); 1460 module_env.InitializeFunctionTable();
1459 module = &module_env; 1461 module = &module_env;
1460 1462
1461 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(0, WASM_ZERO)); 1463 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(0, WASM_ZERO));
1462 module_env.AddSignature(sigs.i_v()); 1464 module_env.AddSignature(sigs.i_v());
1463 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT0(0, WASM_ZERO)); 1465 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT0(0, WASM_ZERO));
1464 1466
1465 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(1, WASM_ZERO, WASM_I8(22))); 1467 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(1, WASM_ZERO, WASM_I32V_1(22)));
1466 module_env.AddSignature(sigs.i_i()); 1468 module_env.AddSignature(sigs.i_i());
1467 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT1(1, WASM_ZERO, WASM_I8(27))); 1469 EXPECT_VERIFIES_S(sig, WASM_CALL_INDIRECT1(1, WASM_ZERO, WASM_I32V_1(27)));
1468 1470
1469 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(2, WASM_ZERO, WASM_I8(27))); 1471 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(2, WASM_ZERO, WASM_I32V_1(27)));
1470 } 1472 }
1471 1473
1472 TEST_F(FunctionBodyDecoderTest, IndirectCallsWithMismatchedSigs3) { 1474 TEST_F(FunctionBodyDecoderTest, IndirectCallsWithMismatchedSigs3) {
1473 FunctionSig* sig = sigs.i_i(); 1475 FunctionSig* sig = sigs.i_i();
1474 TestModuleEnv module_env; 1476 TestModuleEnv module_env;
1475 module_env.InitializeFunctionTable(); 1477 module_env.InitializeFunctionTable();
1476 module = &module_env; 1478 module = &module_env;
1477 1479
1478 byte f0 = module_env.AddFunction(sigs.i_f()); 1480 byte f0 = module_env.AddFunction(sigs.i_f());
1479 1481
1480 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f0, WASM_ZERO, WASM_I8(17))); 1482 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f0, WASM_ZERO, WASM_I32V_1(17)));
1481 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f0, WASM_ZERO, WASM_I64V_1(27))); 1483 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f0, WASM_ZERO, WASM_I64V_1(27)));
1482 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f0, WASM_ZERO, WASM_F64(37.2))); 1484 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f0, WASM_ZERO, WASM_F64(37.2)));
1483 1485
1484 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_I8(17))); 1486 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_I32V_1(17)));
1485 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_I64V_1(27))); 1487 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_I64V_1(27)));
1486 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_F64(37.2))); 1488 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_F64(37.2)));
1487 1489
1488 byte f1 = module_env.AddFunction(sigs.i_d()); 1490 byte f1 = module_env.AddFunction(sigs.i_d());
1489 1491
1490 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I8(16))); 1492 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I32V_1(16)));
1491 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I64V_1(16))); 1493 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I64V_1(16)));
1492 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_F32(17.6))); 1494 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_F32(17.6)));
1493 } 1495 }
1494 1496
1495 TEST_F(FunctionBodyDecoderTest, IndirectCallsWithoutTableCrash) { 1497 TEST_F(FunctionBodyDecoderTest, IndirectCallsWithoutTableCrash) {
1496 FunctionSig* sig = sigs.i_i(); 1498 FunctionSig* sig = sigs.i_i();
1497 TestModuleEnv module_env; 1499 TestModuleEnv module_env;
1498 module = &module_env; 1500 module = &module_env;
1499 1501
1500 byte f0 = module_env.AddSignature(sigs.i_v()); 1502 byte f0 = module_env.AddSignature(sigs.i_v());
1501 byte f1 = module_env.AddSignature(sigs.i_i()); 1503 byte f1 = module_env.AddSignature(sigs.i_i());
1502 byte f2 = module_env.AddSignature(sigs.i_ii()); 1504 byte f2 = module_env.AddSignature(sigs.i_ii());
1503 1505
1504 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_ZERO)); 1506 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_ZERO));
1505 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I8(22))); 1507 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I32V_1(22)));
1506 EXPECT_FAILURE_S( 1508 EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT2(f2, WASM_ZERO, WASM_I32V_1(32),
1507 sig, WASM_CALL_INDIRECT2(f2, WASM_ZERO, WASM_I8(32), WASM_I8(72))); 1509 WASM_I32V_2(72)));
1508 } 1510 }
1509 1511
1510 TEST_F(FunctionBodyDecoderTest, SimpleImportCalls) { 1512 TEST_F(FunctionBodyDecoderTest, SimpleImportCalls) {
1511 FunctionSig* sig = sigs.i_i(); 1513 FunctionSig* sig = sigs.i_i();
1512 TestModuleEnv module_env; 1514 TestModuleEnv module_env;
1513 module = &module_env; 1515 module = &module_env;
1514 1516
1515 byte f0 = module_env.AddImport(sigs.i_v()); 1517 byte f0 = module_env.AddImport(sigs.i_v());
1516 byte f1 = module_env.AddImport(sigs.i_i()); 1518 byte f1 = module_env.AddImport(sigs.i_i());
1517 byte f2 = module_env.AddImport(sigs.i_ii()); 1519 byte f2 = module_env.AddImport(sigs.i_ii());
1518 1520
1519 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION0(f0)); 1521 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION0(f0));
1520 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION(f1, WASM_I8(22))); 1522 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION(f1, WASM_I32V_1(22)));
1521 EXPECT_VERIFIES_S(sig, WASM_CALL_FUNCTION(f2, WASM_I8(32), WASM_I8(72))); 1523 EXPECT_VERIFIES_S(sig,
1524 WASM_CALL_FUNCTION(f2, WASM_I32V_1(32), WASM_I32V_2(72)));
1522 } 1525 }
1523 1526
1524 TEST_F(FunctionBodyDecoderTest, ImportCallsWithMismatchedSigs3) { 1527 TEST_F(FunctionBodyDecoderTest, ImportCallsWithMismatchedSigs3) {
1525 FunctionSig* sig = sigs.i_i(); 1528 FunctionSig* sig = sigs.i_i();
1526 TestModuleEnv module_env; 1529 TestModuleEnv module_env;
1527 module = &module_env; 1530 module = &module_env;
1528 1531
1529 byte f0 = module_env.AddImport(sigs.i_f()); 1532 byte f0 = module_env.AddImport(sigs.i_f());
1530 1533
1531 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION0(f0)); 1534 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION0(f0));
1532 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f0, WASM_I8(17))); 1535 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f0, WASM_I32V_1(17)));
1533 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f0, WASM_I64V_1(27))); 1536 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f0, WASM_I64V_1(27)));
1534 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f0, WASM_F64(37.2))); 1537 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f0, WASM_F64(37.2)));
1535 1538
1536 byte f1 = module_env.AddImport(sigs.i_d()); 1539 byte f1 = module_env.AddImport(sigs.i_d());
1537 1540
1538 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION0(f1)); 1541 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION0(f1));
1539 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f1, WASM_I8(16))); 1542 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f1, WASM_I32V_1(16)));
1540 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f1, WASM_I64V_1(16))); 1543 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f1, WASM_I64V_1(16)));
1541 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f1, WASM_F32(17.6))); 1544 EXPECT_FAILURE_S(sig, WASM_CALL_FUNCTION(f1, WASM_F32(17.6)));
1542 } 1545 }
1543 1546
1544 TEST_F(FunctionBodyDecoderTest, Int32Globals) { 1547 TEST_F(FunctionBodyDecoderTest, Int32Globals) {
1545 FunctionSig* sig = sigs.i_i(); 1548 FunctionSig* sig = sigs.i_i();
1546 TestModuleEnv module_env; 1549 TestModuleEnv module_env;
1547 module = &module_env; 1550 module = &module_env;
1548 1551
1549 module_env.AddGlobal(kWasmI32); 1552 module_env.AddGlobal(kWasmI32);
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 EXPECT_FAILURE_S( 1794 EXPECT_FAILURE_S(
1792 sigs.i_i(), 1795 sigs.i_i(),
1793 WASM_BLOCK_I(WASM_F32_ABS(WASM_BRV_IF(0, WASM_F32(0.0f), WASM_ZERO)))); 1796 WASM_BLOCK_I(WASM_F32_ABS(WASM_BRV_IF(0, WASM_F32(0.0f), WASM_ZERO))));
1794 } 1797 }
1795 1798
1796 TEST_F(FunctionBodyDecoderTest, BreakNesting1) { 1799 TEST_F(FunctionBodyDecoderTest, BreakNesting1) {
1797 for (int i = 0; i < 5; i++) { 1800 for (int i = 0; i < 5; i++) {
1798 // (block[2] (loop[2] (if (get p) break[N]) (set p 1)) p) 1801 // (block[2] (loop[2] (if (get p) break[N]) (set p 1)) p)
1799 byte code[] = {WASM_BLOCK_I( 1802 byte code[] = {WASM_BLOCK_I(
1800 WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(i + 1, WASM_ZERO)), 1803 WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(i + 1, WASM_ZERO)),
1801 WASM_SET_LOCAL(0, WASM_I8(1))), 1804 WASM_SET_LOCAL(0, WASM_I32V_1(1))),
1802 WASM_ZERO)}; 1805 WASM_ZERO)};
1803 if (i < 3) { 1806 if (i < 3) {
1804 EXPECT_VERIFIES_C(i_i, code); 1807 EXPECT_VERIFIES_C(i_i, code);
1805 } else { 1808 } else {
1806 EXPECT_FAILURE_C(i_i, code); 1809 EXPECT_FAILURE_C(i_i, code);
1807 } 1810 }
1808 } 1811 }
1809 } 1812 }
1810 1813
1811 TEST_F(FunctionBodyDecoderTest, BreakNesting2) { 1814 TEST_F(FunctionBodyDecoderTest, BreakNesting2) {
(...skipping 14 matching lines...) Expand all
1826 WASM_BLOCK(WASM_LOOP(B1(WASM_IF(WASM_ZERO, WASM_BR(i + 1)))))}; 1829 WASM_BLOCK(WASM_LOOP(B1(WASM_IF(WASM_ZERO, WASM_BR(i + 1)))))};
1827 if (i < 4) { 1830 if (i < 4) {
1828 EXPECT_VERIFIES_C(v_v, code); 1831 EXPECT_VERIFIES_C(v_v, code);
1829 } else { 1832 } else {
1830 EXPECT_FAILURE_C(v_v, code); 1833 EXPECT_FAILURE_C(v_v, code);
1831 } 1834 }
1832 } 1835 }
1833 } 1836 }
1834 1837
1835 TEST_F(FunctionBodyDecoderTest, BreaksWithMultipleTypes) { 1838 TEST_F(FunctionBodyDecoderTest, BreaksWithMultipleTypes) {
1836 EXPECT_FAILURE(i_i, B2(WASM_BRV_IF_ZERO(0, WASM_I8(7)), WASM_F32(7.7))); 1839 EXPECT_FAILURE(i_i, B2(WASM_BRV_IF_ZERO(0, WASM_I32V_1(7)), WASM_F32(7.7)));
1837 1840
1838 EXPECT_FAILURE(i_i, B2(WASM_BRV_IF_ZERO(0, WASM_I8(7)), 1841 EXPECT_FAILURE(i_i, B2(WASM_BRV_IF_ZERO(0, WASM_I32V_1(7)),
1839 WASM_BRV_IF_ZERO(0, WASM_F32(7.7)))); 1842 WASM_BRV_IF_ZERO(0, WASM_F32(7.7))));
1840 EXPECT_FAILURE( 1843 EXPECT_FAILURE(i_i, B3(WASM_BRV_IF_ZERO(0, WASM_I32V_1(8)),
1841 i_i, B3(WASM_BRV_IF_ZERO(0, WASM_I8(8)), WASM_BRV_IF_ZERO(0, WASM_I8(0)), 1844 WASM_BRV_IF_ZERO(0, WASM_I32V_1(0)),
1842 WASM_BRV_IF_ZERO(0, WASM_F32(7.7)))); 1845 WASM_BRV_IF_ZERO(0, WASM_F32(7.7))));
1843 EXPECT_FAILURE(i_i, B3(WASM_BRV_IF_ZERO(0, WASM_I8(9)), 1846 EXPECT_FAILURE(i_i, B3(WASM_BRV_IF_ZERO(0, WASM_I32V_1(9)),
1844 WASM_BRV_IF_ZERO(0, WASM_F32(7.7)), 1847 WASM_BRV_IF_ZERO(0, WASM_F32(7.7)),
1845 WASM_BRV_IF_ZERO(0, WASM_I8(11)))); 1848 WASM_BRV_IF_ZERO(0, WASM_I32V_1(11))));
1846 } 1849 }
1847 1850
1848 TEST_F(FunctionBodyDecoderTest, BreakNesting_6_levels) { 1851 TEST_F(FunctionBodyDecoderTest, BreakNesting_6_levels) {
1849 for (int mask = 0; mask < 64; mask++) { 1852 for (int mask = 0; mask < 64; mask++) {
1850 for (int i = 0; i < 14; i++) { 1853 for (int i = 0; i < 14; i++) {
1851 byte code[] = {WASM_BLOCK(WASM_BLOCK( 1854 byte code[] = {WASM_BLOCK(WASM_BLOCK(
1852 WASM_BLOCK(WASM_BLOCK(WASM_BLOCK(WASM_BLOCK(WASM_BR(i)))))))}; 1855 WASM_BLOCK(WASM_BLOCK(WASM_BLOCK(WASM_BLOCK(WASM_BR(i)))))))};
1853 1856
1854 int depth = 6; 1857 int depth = 6;
1855 int m = mask; 1858 int m = mask;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
2031 EXPECT_FAILURE_C(i_i, code); 2034 EXPECT_FAILURE_C(i_i, code);
2032 } 2035 }
2033 2036
2034 TEST_F(FunctionBodyDecoderTest, BrTable0c) { 2037 TEST_F(FunctionBodyDecoderTest, BrTable0c) {
2035 static byte code[] = {kExprI32Const, 11, kExprBrTable, 0, BR_TARGET(1)}; 2038 static byte code[] = {kExprI32Const, 11, kExprBrTable, 0, BR_TARGET(1)};
2036 EXPECT_FAILURE_C(v_v, code); 2039 EXPECT_FAILURE_C(v_v, code);
2037 EXPECT_FAILURE_C(i_i, code); 2040 EXPECT_FAILURE_C(i_i, code);
2038 } 2041 }
2039 2042
2040 TEST_F(FunctionBodyDecoderTest, BrTable1a) { 2043 TEST_F(FunctionBodyDecoderTest, BrTable1a) {
2041 static byte code[] = {B1(WASM_BR_TABLE(WASM_I8(67), 0, BR_TARGET(0)))}; 2044 static byte code[] = {B1(WASM_BR_TABLE(WASM_I32V_2(67), 0, BR_TARGET(0)))};
2042 EXPECT_VERIFIES_C(v_v, code); 2045 EXPECT_VERIFIES_C(v_v, code);
2043 } 2046 }
2044 2047
2045 TEST_F(FunctionBodyDecoderTest, BrTable1b) { 2048 TEST_F(FunctionBodyDecoderTest, BrTable1b) {
2046 static byte code[] = {B1(WASM_BR_TABLE(WASM_ZERO, 0, BR_TARGET(0)))}; 2049 static byte code[] = {B1(WASM_BR_TABLE(WASM_ZERO, 0, BR_TARGET(0)))};
2047 EXPECT_VERIFIES_C(v_v, code); 2050 EXPECT_VERIFIES_C(v_v, code);
2048 EXPECT_FAILURE_C(i_i, code); 2051 EXPECT_FAILURE_C(i_i, code);
2049 EXPECT_FAILURE_C(f_ff, code); 2052 EXPECT_FAILURE_C(f_ff, code);
2050 EXPECT_FAILURE_C(d_dd, code); 2053 EXPECT_FAILURE_C(d_dd, code);
2051 } 2054 }
2052 2055
2053 TEST_F(FunctionBodyDecoderTest, BrTable2a) { 2056 TEST_F(FunctionBodyDecoderTest, BrTable2a) {
2054 static byte code[] = { 2057 static byte code[] = {
2055 B1(WASM_BR_TABLE(WASM_I8(67), 1, BR_TARGET(0), BR_TARGET(0)))}; 2058 B1(WASM_BR_TABLE(WASM_I32V_2(67), 1, BR_TARGET(0), BR_TARGET(0)))};
2056 EXPECT_VERIFIES_C(v_v, code); 2059 EXPECT_VERIFIES_C(v_v, code);
2057 } 2060 }
2058 2061
2059 TEST_F(FunctionBodyDecoderTest, BrTable2b) { 2062 TEST_F(FunctionBodyDecoderTest, BrTable2b) {
2060 static byte code[] = {WASM_BLOCK( 2063 static byte code[] = {WASM_BLOCK(WASM_BLOCK(
2061 WASM_BLOCK(WASM_BR_TABLE(WASM_I8(67), 1, BR_TARGET(0), BR_TARGET(1))))}; 2064 WASM_BR_TABLE(WASM_I32V_2(67), 1, BR_TARGET(0), BR_TARGET(1))))};
2062 EXPECT_VERIFIES_C(v_v, code); 2065 EXPECT_VERIFIES_C(v_v, code);
2063 } 2066 }
2064 2067
2065 TEST_F(FunctionBodyDecoderTest, BrTable_off_end) { 2068 TEST_F(FunctionBodyDecoderTest, BrTable_off_end) {
2066 static byte code[] = {B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0)))}; 2069 static byte code[] = {B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0)))};
2067 for (size_t len = 1; len < sizeof(code); len++) { 2070 for (size_t len = 1; len < sizeof(code); len++) {
2068 Verify(kError, sigs.i_i(), code, code + len); 2071 Verify(kError, sigs.i_i(), code, code + len);
2069 } 2072 }
2070 } 2073 }
2071 2074
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
2333 EXPECT_LENGTH(1, kExprEnd); 2336 EXPECT_LENGTH(1, kExprEnd);
2334 EXPECT_LENGTH(1, kExprSelect); 2337 EXPECT_LENGTH(1, kExprSelect);
2335 EXPECT_LENGTH(2, kExprBr); 2338 EXPECT_LENGTH(2, kExprBr);
2336 EXPECT_LENGTH(2, kExprBrIf); 2339 EXPECT_LENGTH(2, kExprBrIf);
2337 EXPECT_LENGTH(1, kExprThrow); 2340 EXPECT_LENGTH(1, kExprThrow);
2338 EXPECT_LENGTH(2, kExprTry); 2341 EXPECT_LENGTH(2, kExprTry);
2339 EXPECT_LENGTH(2, kExprCatch); 2342 EXPECT_LENGTH(2, kExprCatch);
2340 } 2343 }
2341 2344
2342 TEST_F(WasmOpcodeLengthTest, MiscExpressions) { 2345 TEST_F(WasmOpcodeLengthTest, MiscExpressions) {
2343 EXPECT_LENGTH(2, kExprI8Const);
2344 EXPECT_LENGTH(5, kExprF32Const); 2346 EXPECT_LENGTH(5, kExprF32Const);
2345 EXPECT_LENGTH(9, kExprF64Const); 2347 EXPECT_LENGTH(9, kExprF64Const);
2346 EXPECT_LENGTH(2, kExprGetLocal); 2348 EXPECT_LENGTH(2, kExprGetLocal);
2347 EXPECT_LENGTH(2, kExprSetLocal); 2349 EXPECT_LENGTH(2, kExprSetLocal);
2348 EXPECT_LENGTH(2, kExprGetGlobal); 2350 EXPECT_LENGTH(2, kExprGetGlobal);
2349 EXPECT_LENGTH(2, kExprSetGlobal); 2351 EXPECT_LENGTH(2, kExprSetGlobal);
2350 EXPECT_LENGTH(2, kExprCallFunction); 2352 EXPECT_LENGTH(2, kExprCallFunction);
2351 EXPECT_LENGTH(3, kExprCallIndirect); 2353 EXPECT_LENGTH(3, kExprCallIndirect);
2352 } 2354 }
2353 2355
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
2663 pos = ExpectRun(map, pos, kWasmF32, 5); 2665 pos = ExpectRun(map, pos, kWasmF32, 5);
2664 pos = ExpectRun(map, pos, kWasmI32, 1337); 2666 pos = ExpectRun(map, pos, kWasmI32, 1337);
2665 pos = ExpectRun(map, pos, kWasmI64, 212); 2667 pos = ExpectRun(map, pos, kWasmI64, 212);
2666 } 2668 }
2667 2669
2668 class BytecodeIteratorTest : public TestWithZone {}; 2670 class BytecodeIteratorTest : public TestWithZone {};
2669 2671
2670 TEST_F(BytecodeIteratorTest, SimpleForeach) { 2672 TEST_F(BytecodeIteratorTest, SimpleForeach) {
2671 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)}; 2673 byte code[] = {WASM_IF_ELSE(WASM_ZERO, WASM_ZERO, WASM_ZERO)};
2672 BytecodeIterator iter(code, code + sizeof(code)); 2674 BytecodeIterator iter(code, code + sizeof(code));
2673 WasmOpcode expected[] = {kExprI8Const, kExprIf, kExprI8Const, 2675 WasmOpcode expected[] = {kExprI32Const, kExprIf, kExprI32Const,
2674 kExprElse, kExprI8Const, kExprEnd}; 2676 kExprElse, kExprI32Const, kExprEnd};
2675 size_t pos = 0; 2677 size_t pos = 0;
2676 for (WasmOpcode opcode : iter.opcodes()) { 2678 for (WasmOpcode opcode : iter.opcodes()) {
2677 if (pos >= arraysize(expected)) { 2679 if (pos >= arraysize(expected)) {
2678 EXPECT_TRUE(false); 2680 EXPECT_TRUE(false);
2679 break; 2681 break;
2680 } 2682 }
2681 EXPECT_EQ(expected[pos++], opcode); 2683 EXPECT_EQ(expected[pos++], opcode);
2682 } 2684 }
2683 EXPECT_EQ(arraysize(expected), pos); 2685 EXPECT_EQ(arraysize(expected), pos);
2684 } 2686 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2717 2719
2718 count = 0; 2720 count = 0;
2719 for (auto offset : iter.offsets()) { 2721 for (auto offset : iter.offsets()) {
2720 USE(offset); 2722 USE(offset);
2721 count++; 2723 count++;
2722 } 2724 }
2723 EXPECT_EQ(6, count); 2725 EXPECT_EQ(6, count);
2724 } 2726 }
2725 2727
2726 TEST_F(BytecodeIteratorTest, WithLocalDecls) { 2728 TEST_F(BytecodeIteratorTest, WithLocalDecls) {
2727 byte code[] = {1, 1, kLocalI32, WASM_I8(9), WASM_I8(11)}; 2729 byte code[] = {1, 1, kLocalI32, WASM_I32V_1(9), WASM_I32V_1(11)};
2728 BodyLocalDecls decls(zone()); 2730 BodyLocalDecls decls(zone());
2729 BytecodeIterator iter(code, code + sizeof(code), &decls); 2731 BytecodeIterator iter(code, code + sizeof(code), &decls);
2730 2732
2731 EXPECT_EQ(3u, decls.decls_encoded_size); 2733 EXPECT_EQ(3u, decls.decls_encoded_size);
2732 EXPECT_EQ(3u, iter.pc_offset()); 2734 EXPECT_EQ(3u, iter.pc_offset());
2733 EXPECT_TRUE(iter.has_next()); 2735 EXPECT_TRUE(iter.has_next());
2734 EXPECT_EQ(kExprI8Const, iter.current()); 2736 EXPECT_EQ(kExprI32Const, iter.current());
2735 iter.next(); 2737 iter.next();
2736 EXPECT_TRUE(iter.has_next()); 2738 EXPECT_TRUE(iter.has_next());
2737 EXPECT_EQ(kExprI8Const, iter.current()); 2739 EXPECT_EQ(kExprI32Const, iter.current());
2738 iter.next(); 2740 iter.next();
2739 EXPECT_FALSE(iter.has_next()); 2741 EXPECT_FALSE(iter.has_next());
2740 } 2742 }
2741 2743
2742 } // namespace wasm 2744 } // namespace wasm
2743 } // namespace internal 2745 } // namespace internal
2744 } // namespace v8 2746 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698