OLD | NEW |
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 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 } | 664 } |
665 | 665 |
666 TEST_F(FunctionBodyDecoderTest, Block3_continue) { | 666 TEST_F(FunctionBodyDecoderTest, Block3_continue) { |
667 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(0)))); | 667 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(0)))); |
668 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(1)))); | 668 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(1)))); |
669 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(2)))); | 669 EXPECT_VERIFIES(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(2)))); |
670 EXPECT_FAILURE(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(3)))); | 670 EXPECT_FAILURE(v_v, B1(WASM_LOOP(WASM_NOP, WASM_BR(3)))); |
671 } | 671 } |
672 | 672 |
673 TEST_F(FunctionBodyDecoderTest, NestedBlock_return) { | 673 TEST_F(FunctionBodyDecoderTest, NestedBlock_return) { |
674 EXPECT_VERIFIES(i_i, B1(B1(WASM_RETURN1(WASM_ZERO)))); | 674 EXPECT_VERIFIES(i_i, B1(B1(WASM_RETURN1(WASM_ZERO))), WASM_ZERO); |
675 } | 675 } |
676 | 676 |
677 TEST_F(FunctionBodyDecoderTest, BlockBrBinop) { | 677 TEST_F(FunctionBodyDecoderTest, BlockBrBinop) { |
678 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_BLOCK_I(WASM_BRV(0, WASM_I32V_1(1))), | 678 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_BLOCK_I(WASM_BRV(0, WASM_I32V_1(1))), |
679 WASM_I32V_1(2))); | 679 WASM_I32V_1(2))); |
680 } | 680 } |
681 | 681 |
682 TEST_F(FunctionBodyDecoderTest, If_empty1) { | 682 TEST_F(FunctionBodyDecoderTest, If_empty1) { |
683 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprEnd); | 683 EXPECT_VERIFIES(v_v, WASM_ZERO, WASM_IF_OP, kExprEnd); |
684 } | 684 } |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 } | 854 } |
855 | 855 |
856 TEST_F(FunctionBodyDecoderTest, Loop2_continue) { | 856 TEST_F(FunctionBodyDecoderTest, Loop2_continue) { |
857 EXPECT_VERIFIES(v_i, WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO), WASM_BR(0))); | 857 EXPECT_VERIFIES(v_i, WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO), WASM_BR(0))); |
858 } | 858 } |
859 | 859 |
860 TEST_F(FunctionBodyDecoderTest, Loop2_break) { | 860 TEST_F(FunctionBodyDecoderTest, Loop2_break) { |
861 EXPECT_VERIFIES(v_i, WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO), WASM_BR(1))); | 861 EXPECT_VERIFIES(v_i, WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO), WASM_BR(1))); |
862 } | 862 } |
863 | 863 |
864 TEST_F(FunctionBodyDecoderTest, InfiniteLoop) { | 864 TEST_F(FunctionBodyDecoderTest, InfiniteLoop1) { |
865 EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0))); | 865 EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0)), WASM_ZERO); |
866 EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BRV(1, WASM_ZERO))); | 866 EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0)), WASM_ZERO); |
| 867 EXPECT_VERIFIES(i_i, WASM_LOOP_I(WASM_BRV(1, WASM_ZERO))); |
| 868 } |
| 869 |
| 870 TEST_F(FunctionBodyDecoderTest, InfiniteLoop2) { |
| 871 EXPECT_FAILURE(i_i, WASM_LOOP(WASM_BR(0), WASM_ZERO), WASM_ZERO); |
867 } | 872 } |
868 | 873 |
869 TEST_F(FunctionBodyDecoderTest, Loop2_unreachable) { | 874 TEST_F(FunctionBodyDecoderTest, Loop2_unreachable) { |
870 EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0), WASM_NOP)); | 875 EXPECT_VERIFIES(i_i, WASM_LOOP_I(WASM_BR(0), WASM_NOP)); |
871 } | 876 } |
872 | 877 |
873 TEST_F(FunctionBodyDecoderTest, LoopType) { | 878 TEST_F(FunctionBodyDecoderTest, LoopType) { |
874 EXPECT_VERIFIES(i_i, WASM_LOOP_I(WASM_GET_LOCAL(0))); | 879 EXPECT_VERIFIES(i_i, WASM_LOOP_I(WASM_GET_LOCAL(0))); |
875 EXPECT_VERIFIES(l_l, WASM_LOOP_L(WASM_GET_LOCAL(0))); | 880 EXPECT_VERIFIES(l_l, WASM_LOOP_L(WASM_GET_LOCAL(0))); |
876 EXPECT_VERIFIES(f_f, WASM_LOOP_F(WASM_GET_LOCAL(0))); | 881 EXPECT_VERIFIES(f_f, WASM_LOOP_F(WASM_GET_LOCAL(0))); |
877 EXPECT_VERIFIES(d_d, WASM_LOOP_D(WASM_GET_LOCAL(0))); | 882 EXPECT_VERIFIES(d_d, WASM_LOOP_D(WASM_GET_LOCAL(0))); |
878 } | 883 } |
879 | 884 |
880 TEST_F(FunctionBodyDecoderTest, LoopType_void) { | 885 TEST_F(FunctionBodyDecoderTest, LoopType_void) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
919 TEST_F(FunctionBodyDecoderTest, ReturnVoid3) { | 924 TEST_F(FunctionBodyDecoderTest, ReturnVoid3) { |
920 EXPECT_FAILURE(v_v, kExprI32Const, 0); | 925 EXPECT_FAILURE(v_v, kExprI32Const, 0); |
921 EXPECT_FAILURE(v_v, kExprI64Const, 0); | 926 EXPECT_FAILURE(v_v, kExprI64Const, 0); |
922 EXPECT_FAILURE(v_v, kExprF32Const, 0, 0, 0, 0); | 927 EXPECT_FAILURE(v_v, kExprF32Const, 0, 0, 0, 0); |
923 EXPECT_FAILURE(v_v, kExprF64Const, 0, 0, 0, 0, 0, 0, 0, 0); | 928 EXPECT_FAILURE(v_v, kExprF64Const, 0, 0, 0, 0, 0, 0, 0, 0); |
924 | 929 |
925 EXPECT_FAILURE(v_i, kExprGetLocal, 0); | 930 EXPECT_FAILURE(v_i, kExprGetLocal, 0); |
926 } | 931 } |
927 | 932 |
928 TEST_F(FunctionBodyDecoderTest, Unreachable1) { | 933 TEST_F(FunctionBodyDecoderTest, Unreachable1) { |
929 EXPECT_VERIFIES(v_v, kExprUnreachable); | 934 EXPECT_VERIFIES(v_v, WASM_UNREACHABLE); |
930 EXPECT_VERIFIES(v_v, kExprUnreachable, kExprUnreachable); | 935 EXPECT_VERIFIES(v_v, WASM_UNREACHABLE, WASM_UNREACHABLE); |
931 EXPECT_VERIFIES(v_v, B2(WASM_UNREACHABLE, WASM_ZERO)); | 936 EXPECT_VERIFIES(i_i, WASM_UNREACHABLE, WASM_ZERO); |
932 EXPECT_VERIFIES(v_v, B2(WASM_BR(0), WASM_ZERO)); | |
933 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_ZERO)); | |
934 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0), WASM_ZERO)); | |
935 } | 937 } |
936 | 938 |
937 TEST_F(FunctionBodyDecoderTest, Unreachable_binop) { | 939 TEST_F(FunctionBodyDecoderTest, Unreachable2) { |
| 940 EXPECT_FAILURE(v_v, B2(WASM_UNREACHABLE, WASM_ZERO)); |
| 941 EXPECT_FAILURE(v_v, B2(WASM_BR(0), WASM_ZERO)); |
| 942 } |
| 943 |
| 944 TEST_F(FunctionBodyDecoderTest, UnreachableLoop1) { |
| 945 EXPECT_FAILURE(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_ZERO)); |
| 946 EXPECT_FAILURE(v_v, WASM_LOOP(WASM_BR(0), WASM_ZERO)); |
| 947 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_NOP)); |
| 948 EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0), WASM_NOP)); |
| 949 } |
| 950 |
| 951 TEST_F(FunctionBodyDecoderTest, Unreachable_binop1) { |
938 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_ZERO, WASM_UNREACHABLE)); | 952 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_ZERO, WASM_UNREACHABLE)); |
939 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_ZERO)); | 953 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_ZERO)); |
940 } | 954 } |
941 | 955 |
942 TEST_F(FunctionBodyDecoderTest, Unreachable_select) { | 956 TEST_F(FunctionBodyDecoderTest, Unreachable_binop2) { |
| 957 EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_F32(0.0), WASM_UNREACHABLE)); |
| 958 EXPECT_FAILURE(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_F32(0.0))); |
| 959 } |
| 960 |
| 961 TEST_F(FunctionBodyDecoderTest, Unreachable_select1) { |
943 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_ZERO)); | 962 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_ZERO)); |
944 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_UNREACHABLE, WASM_ZERO)); | 963 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_UNREACHABLE, WASM_ZERO)); |
945 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_ZERO, WASM_UNREACHABLE)); | 964 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_ZERO, WASM_UNREACHABLE)); |
946 } | 965 } |
947 | 966 |
| 967 TEST_F(FunctionBodyDecoderTest, Unreachable_select2) { |
| 968 EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_F32(0.0), WASM_UNREACHABLE, WASM_ZERO)); |
| 969 EXPECT_FAILURE(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_F32(0.0), WASM_ZERO)); |
| 970 EXPECT_FAILURE(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_F32(0.0))); |
| 971 } |
| 972 |
948 TEST_F(FunctionBodyDecoderTest, If1) { | 973 TEST_F(FunctionBodyDecoderTest, If1) { |
949 EXPECT_VERIFIES( | 974 EXPECT_VERIFIES( |
950 i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9), WASM_I32V_1(8))); | 975 i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9), WASM_I32V_1(8))); |
951 EXPECT_VERIFIES(i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9), | 976 EXPECT_VERIFIES(i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9), |
952 WASM_GET_LOCAL(0))); | 977 WASM_GET_LOCAL(0))); |
953 EXPECT_VERIFIES(i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_GET_LOCAL(0), | 978 EXPECT_VERIFIES(i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_GET_LOCAL(0), |
954 WASM_I32V_1(8))); | 979 WASM_I32V_1(8))); |
955 } | 980 } |
956 | 981 |
957 TEST_F(FunctionBodyDecoderTest, If_off_end) { | 982 TEST_F(FunctionBodyDecoderTest, If_off_end) { |
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2126 byte code[] = { | 2151 byte code[] = { |
2127 WASM_LOOP(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(depth)))}; | 2152 WASM_LOOP(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(depth)))}; |
2128 if (depth < 2) { | 2153 if (depth < 2) { |
2129 EXPECT_VERIFIES_C(v_i, code); | 2154 EXPECT_VERIFIES_C(v_i, code); |
2130 } else { | 2155 } else { |
2131 EXPECT_FAILURE_C(v_i, code); | 2156 EXPECT_FAILURE_C(v_i, code); |
2132 } | 2157 } |
2133 } | 2158 } |
2134 } | 2159 } |
2135 | 2160 |
2136 TEST_F(FunctionBodyDecoderTest, BrUnreachable) { | 2161 TEST_F(FunctionBodyDecoderTest, BrUnreachable1) { |
2137 static byte code[] = {WASM_GET_LOCAL(0), kExprBrTable, 0, | 2162 EXPECT_VERIFIES(v_i, WASM_GET_LOCAL(0), kExprBrTable, 0, BR_TARGET(0)); |
2138 BR_TARGET(0), kExprSetLocal, 0}; | 2163 } |
2139 EXPECT_VERIFIES_C(v_i, code); | 2164 |
| 2165 TEST_F(FunctionBodyDecoderTest, BrUnreachable2) { |
| 2166 EXPECT_VERIFIES(v_i, WASM_GET_LOCAL(0), kExprBrTable, 0, BR_TARGET(0), |
| 2167 WASM_NOP); |
| 2168 EXPECT_FAILURE(v_i, WASM_GET_LOCAL(0), kExprBrTable, 0, BR_TARGET(0), |
| 2169 WASM_ZERO); |
2140 } | 2170 } |
2141 | 2171 |
2142 TEST_F(FunctionBodyDecoderTest, Brv1) { | 2172 TEST_F(FunctionBodyDecoderTest, Brv1) { |
2143 EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_BRV(0, WASM_ZERO))); | 2173 EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_BRV(0, WASM_ZERO))); |
2144 EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_LOOP(WASM_BRV(2, WASM_ZERO)))); | 2174 EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_LOOP_I(WASM_BRV(2, WASM_ZERO)))); |
2145 } | 2175 } |
2146 | 2176 |
2147 TEST_F(FunctionBodyDecoderTest, Brv1_type) { | 2177 TEST_F(FunctionBodyDecoderTest, Brv1_type) { |
2148 EXPECT_VERIFIES(i_ii, WASM_BLOCK_I(WASM_BRV(0, WASM_GET_LOCAL(0)))); | 2178 EXPECT_VERIFIES(i_ii, WASM_BLOCK_I(WASM_BRV(0, WASM_GET_LOCAL(0)))); |
2149 EXPECT_VERIFIES(l_ll, WASM_BLOCK_L(WASM_BRV(0, WASM_GET_LOCAL(0)))); | 2179 EXPECT_VERIFIES(l_ll, WASM_BLOCK_L(WASM_BRV(0, WASM_GET_LOCAL(0)))); |
2150 EXPECT_VERIFIES(f_ff, WASM_BLOCK_F(WASM_BRV(0, WASM_GET_LOCAL(0)))); | 2180 EXPECT_VERIFIES(f_ff, WASM_BLOCK_F(WASM_BRV(0, WASM_GET_LOCAL(0)))); |
2151 EXPECT_VERIFIES(d_dd, WASM_BLOCK_D(WASM_BRV(0, WASM_GET_LOCAL(0)))); | 2181 EXPECT_VERIFIES(d_dd, WASM_BLOCK_D(WASM_BRV(0, WASM_GET_LOCAL(0)))); |
2152 } | 2182 } |
2153 | 2183 |
2154 TEST_F(FunctionBodyDecoderTest, Brv1_type_n) { | 2184 TEST_F(FunctionBodyDecoderTest, Brv1_type_n) { |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2777 iter.next(); | 2807 iter.next(); |
2778 EXPECT_TRUE(iter.has_next()); | 2808 EXPECT_TRUE(iter.has_next()); |
2779 EXPECT_EQ(kExprI32Const, iter.current()); | 2809 EXPECT_EQ(kExprI32Const, iter.current()); |
2780 iter.next(); | 2810 iter.next(); |
2781 EXPECT_FALSE(iter.has_next()); | 2811 EXPECT_FALSE(iter.has_next()); |
2782 } | 2812 } |
2783 | 2813 |
2784 } // namespace wasm | 2814 } // namespace wasm |
2785 } // namespace internal | 2815 } // namespace internal |
2786 } // namespace v8 | 2816 } // namespace v8 |
OLD | NEW |