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

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

Issue 2951793003: [wasm] Implement remaining SIMD x64 compare ops, unops. (Closed)
Patch Set: Fix bug Created 3 years, 6 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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/assembler-inl.h" 5 #include "src/assembler-inl.h"
6 #include "test/cctest/cctest.h" 6 #include "test/cctest/cctest.h"
7 #include "test/cctest/compiler/value-helper.h" 7 #include "test/cctest/compiler/value-helper.h"
8 #include "test/cctest/wasm/wasm-run-utils.h" 8 #include "test/cctest/wasm/wasm-run-utils.h"
9 #include "test/common/wasm/wasm-macro-gen.h" 9 #include "test/common/wasm/wasm-macro-gen.h"
10 10
(...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 FOR_INT16_INPUTS(i) { 923 FOR_INT16_INPUTS(i) {
924 int32_t unpacked_signed = static_cast<int32_t>(Widen<int16_t>(*i)); 924 int32_t unpacked_signed = static_cast<int32_t>(Widen<int16_t>(*i));
925 int32_t unpacked_unsigned = 925 int32_t unpacked_unsigned =
926 static_cast<int32_t>(UnsignedWiden<int16_t>(*i)); 926 static_cast<int32_t>(UnsignedWiden<int16_t>(*i));
927 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned)); 927 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned));
928 } 928 }
929 } 929 }
930 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 930 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64
931 931
932 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \ 932 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
933 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 933 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
934 void RunI32x4UnOpTest(WasmOpcode simd_op, Int32UnOp expected_op) { 934 void RunI32x4UnOpTest(WasmOpcode simd_op, Int32UnOp expected_op) {
935 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 935 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
936 byte a = 0; 936 byte a = 0;
937 byte expected = 1; 937 byte expected = 1;
938 byte simd = r.AllocateLocal(kWasmS128); 938 byte simd = r.AllocateLocal(kWasmS128);
939 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 939 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
940 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 940 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
941 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE); 941 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE);
942 942
943 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); } 943 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); }
944 } 944 }
945 945
946 WASM_SIMD_TEST(I32x4Neg) { RunI32x4UnOpTest(kExprI32x4Neg, Negate); } 946 WASM_SIMD_TEST(I32x4Neg) { RunI32x4UnOpTest(kExprI32x4Neg, Negate); }
947 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || 947 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
948 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 948 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
949 949
950 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET 950 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
951 V8_TARGET_ARCH_X64
951 WASM_SIMD_TEST(S128Not) { RunI32x4UnOpTest(kExprS128Not, Not); } 952 WASM_SIMD_TEST(S128Not) { RunI32x4UnOpTest(kExprS128Not, Not); }
952 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET 953 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET
954 // V8_TARGET_ARCH_X64
953 955
954 void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) { 956 void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) {
955 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 957 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
956 byte a = 0; 958 byte a = 0;
957 byte b = 1; 959 byte b = 1;
958 byte expected = 2; 960 byte expected = 2;
959 byte simd0 = r.AllocateLocal(kWasmS128); 961 byte simd0 = r.AllocateLocal(kWasmS128);
960 byte simd1 = r.AllocateLocal(kWasmS128); 962 byte simd1 = r.AllocateLocal(kWasmS128);
961 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 963 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
962 WASM_SET_LOCAL(simd1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(b))), 964 WASM_SET_LOCAL(simd1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(b))),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE); 1011 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE);
1010 1012
1011 FOR_INT32_INPUTS(i) { 1013 FOR_INT32_INPUTS(i) {
1012 FOR_INT32_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1014 FOR_INT32_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1013 } 1015 }
1014 } 1016 }
1015 1017
1016 WASM_SIMD_TEST(I32x4Eq) { RunI32x4CompareOpTest(kExprI32x4Eq, Equal); } 1018 WASM_SIMD_TEST(I32x4Eq) { RunI32x4CompareOpTest(kExprI32x4Eq, Equal); }
1017 1019
1018 WASM_SIMD_TEST(I32x4Ne) { RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual); } 1020 WASM_SIMD_TEST(I32x4Ne) { RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual); }
1019 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1020 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1021 1021
1022 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
1023 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1024 WASM_SIMD_TEST(I32x4LtS) { RunI32x4CompareOpTest(kExprI32x4LtS, Less); } 1022 WASM_SIMD_TEST(I32x4LtS) { RunI32x4CompareOpTest(kExprI32x4LtS, Less); }
1025 1023
1026 WASM_SIMD_TEST(I32x4LeS) { RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual); } 1024 WASM_SIMD_TEST(I32x4LeS) { RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual); }
1027 1025
1028 WASM_SIMD_TEST(I32x4GtS) { RunI32x4CompareOpTest(kExprI32x4GtS, Greater); } 1026 WASM_SIMD_TEST(I32x4GtS) { RunI32x4CompareOpTest(kExprI32x4GtS, Greater); }
1029 1027
1030 WASM_SIMD_TEST(I32x4GeS) { RunI32x4CompareOpTest(kExprI32x4GeS, GreaterEqual); } 1028 WASM_SIMD_TEST(I32x4GeS) { RunI32x4CompareOpTest(kExprI32x4GeS, GreaterEqual); }
1031 1029
1032 WASM_SIMD_TEST(I32x4LtU) { RunI32x4CompareOpTest(kExprI32x4LtU, UnsignedLess); } 1030 WASM_SIMD_TEST(I32x4LtU) { RunI32x4CompareOpTest(kExprI32x4LtU, UnsignedLess); }
1033 1031
1034 WASM_SIMD_TEST(I32x4LeU) { 1032 WASM_SIMD_TEST(I32x4LeU) {
1035 RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual); 1033 RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual);
1036 } 1034 }
1037 1035
1038 WASM_SIMD_TEST(I32x4GtU) { 1036 WASM_SIMD_TEST(I32x4GtU) {
1039 RunI32x4CompareOpTest(kExprI32x4GtU, UnsignedGreater); 1037 RunI32x4CompareOpTest(kExprI32x4GtU, UnsignedGreater);
1040 } 1038 }
1041 1039
1042 WASM_SIMD_TEST(I32x4GeU) { 1040 WASM_SIMD_TEST(I32x4GeU) {
1043 RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual); 1041 RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual);
1044 } 1042 }
1045 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
1046 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1047 1043
1048 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
1049 SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1050 void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op, 1044 void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op,
1051 int shift) { 1045 int shift) {
1052 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1046 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1053 byte a = 0; 1047 byte a = 0;
1054 byte expected = 1; 1048 byte expected = 1;
1055 byte simd = r.AllocateLocal(kWasmS128); 1049 byte simd = r.AllocateLocal(kWasmS128);
1056 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 1050 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
1057 WASM_SET_LOCAL( 1051 WASM_SET_LOCAL(
1058 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))), 1052 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
1059 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE); 1053 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 1089
1096 FOR_INT8_INPUTS(i) { 1090 FOR_INT8_INPUTS(i) {
1097 int32_t unpacked_signed = static_cast<int32_t>(Widen<int8_t>(*i)); 1091 int32_t unpacked_signed = static_cast<int32_t>(Widen<int8_t>(*i));
1098 int32_t unpacked_unsigned = static_cast<int32_t>(UnsignedWiden<int8_t>(*i)); 1092 int32_t unpacked_unsigned = static_cast<int32_t>(UnsignedWiden<int8_t>(*i));
1099 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned)); 1093 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned));
1100 } 1094 }
1101 } 1095 }
1102 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 1096 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64
1103 1097
1104 #if SIMD_LOWERING_TARGET || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || \ 1098 #if SIMD_LOWERING_TARGET || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || \
1105 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 1099 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
1106 void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) { 1100 void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) {
1107 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1101 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1108 byte a = 0; 1102 byte a = 0;
1109 byte expected = 1; 1103 byte expected = 1;
1110 byte simd = r.AllocateLocal(kWasmS128); 1104 byte simd = r.AllocateLocal(kWasmS128);
1111 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))), 1105 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))),
1112 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 1106 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
1113 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE); 1107 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE);
1114 1108
1115 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); } 1109 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); }
1116 } 1110 }
1117 1111
1118 WASM_SIMD_TEST(I16x8Neg) { RunI16x8UnOpTest(kExprI16x8Neg, Negate); } 1112 WASM_SIMD_TEST(I16x8Neg) { RunI16x8UnOpTest(kExprI16x8Neg, Negate); }
1119 #endif // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || 1113 #endif // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 ||
1120 // V8_TARGET_ARCH_MIPS || 1114 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_X64
1121 // V8_TARGET_ARCH_MIPS64
1122 1115
1123 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 1116 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64
1124 // Tests both signed and unsigned conversion from I32x4 (packing). 1117 // Tests both signed and unsigned conversion from I32x4 (packing).
1125 WASM_SIMD_TEST(I16x8ConvertI32x4) { 1118 WASM_SIMD_TEST(I16x8ConvertI32x4) {
1126 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 1119 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
1127 byte a = 0; 1120 byte a = 0;
1128 byte packed_signed = 1; 1121 byte packed_signed = 1;
1129 byte packed_unsigned = 2; 1122 byte packed_unsigned = 2;
1130 byte simd0 = r.AllocateLocal(kWasmS128); 1123 byte simd0 = r.AllocateLocal(kWasmS128);
1131 byte simd1 = r.AllocateLocal(kWasmS128); 1124 byte simd1 = r.AllocateLocal(kWasmS128);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 1167
1175 WASM_SIMD_TEST(I16x8AddSaturateS) { 1168 WASM_SIMD_TEST(I16x8AddSaturateS) {
1176 RunI16x8BinOpTest(kExprI16x8AddSaturateS, AddSaturate); 1169 RunI16x8BinOpTest(kExprI16x8AddSaturateS, AddSaturate);
1177 } 1170 }
1178 1171
1179 WASM_SIMD_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); } 1172 WASM_SIMD_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); }
1180 1173
1181 WASM_SIMD_TEST(I16x8SubSaturateS) { 1174 WASM_SIMD_TEST(I16x8SubSaturateS) {
1182 RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate); 1175 RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate);
1183 } 1176 }
1184 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1185 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1186 1177
1187 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
1188 SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1189 WASM_SIMD_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); } 1178 WASM_SIMD_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); }
1190 1179
1191 WASM_SIMD_TEST(I16x8MinS) { RunI16x8BinOpTest(kExprI16x8MinS, Minimum); } 1180 WASM_SIMD_TEST(I16x8MinS) { RunI16x8BinOpTest(kExprI16x8MinS, Minimum); }
1192 1181
1193 WASM_SIMD_TEST(I16x8MaxS) { RunI16x8BinOpTest(kExprI16x8MaxS, Maximum); } 1182 WASM_SIMD_TEST(I16x8MaxS) { RunI16x8BinOpTest(kExprI16x8MaxS, Maximum); }
1194 1183
1195 WASM_SIMD_TEST(I16x8AddSaturateU) { 1184 WASM_SIMD_TEST(I16x8AddSaturateU) {
1196 RunI16x8BinOpTest(kExprI16x8AddSaturateU, UnsignedAddSaturate); 1185 RunI16x8BinOpTest(kExprI16x8AddSaturateU, UnsignedAddSaturate);
1197 } 1186 }
1198 1187
(...skipping 23 matching lines...) Expand all
1222 WASM_SIMD_CHECK_SPLAT8(I16x8, simd1, I32, expected), WASM_ONE); 1211 WASM_SIMD_CHECK_SPLAT8(I16x8, simd1, I32, expected), WASM_ONE);
1223 1212
1224 FOR_INT16_INPUTS(i) { 1213 FOR_INT16_INPUTS(i) {
1225 FOR_INT16_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1214 FOR_INT16_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1226 } 1215 }
1227 } 1216 }
1228 1217
1229 WASM_SIMD_TEST(I16x8Eq) { RunI16x8CompareOpTest(kExprI16x8Eq, Equal); } 1218 WASM_SIMD_TEST(I16x8Eq) { RunI16x8CompareOpTest(kExprI16x8Eq, Equal); }
1230 1219
1231 WASM_SIMD_TEST(I16x8Ne) { RunI16x8CompareOpTest(kExprI16x8Ne, NotEqual); } 1220 WASM_SIMD_TEST(I16x8Ne) { RunI16x8CompareOpTest(kExprI16x8Ne, NotEqual); }
1232 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1233 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1234 1221
1235 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
1236 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1237 WASM_SIMD_TEST(I16x8LtS) { RunI16x8CompareOpTest(kExprI16x8LtS, Less); } 1222 WASM_SIMD_TEST(I16x8LtS) { RunI16x8CompareOpTest(kExprI16x8LtS, Less); }
1238 1223
1239 WASM_SIMD_TEST(I16x8LeS) { RunI16x8CompareOpTest(kExprI16x8LeS, LessEqual); } 1224 WASM_SIMD_TEST(I16x8LeS) { RunI16x8CompareOpTest(kExprI16x8LeS, LessEqual); }
1240 1225
1241 WASM_SIMD_TEST(I16x8GtS) { RunI16x8CompareOpTest(kExprI16x8GtS, Greater); } 1226 WASM_SIMD_TEST(I16x8GtS) { RunI16x8CompareOpTest(kExprI16x8GtS, Greater); }
1242 1227
1243 WASM_SIMD_TEST(I16x8GeS) { RunI16x8CompareOpTest(kExprI16x8GeS, GreaterEqual); } 1228 WASM_SIMD_TEST(I16x8GeS) { RunI16x8CompareOpTest(kExprI16x8GeS, GreaterEqual); }
1244 1229
1245 WASM_SIMD_TEST(I16x8GtU) { 1230 WASM_SIMD_TEST(I16x8GtU) {
1246 RunI16x8CompareOpTest(kExprI16x8GtU, UnsignedGreater); 1231 RunI16x8CompareOpTest(kExprI16x8GtU, UnsignedGreater);
1247 } 1232 }
1248 1233
1249 WASM_SIMD_TEST(I16x8GeU) { 1234 WASM_SIMD_TEST(I16x8GeU) {
1250 RunI16x8CompareOpTest(kExprI16x8GeU, UnsignedGreaterEqual); 1235 RunI16x8CompareOpTest(kExprI16x8GeU, UnsignedGreaterEqual);
1251 } 1236 }
1252 1237
1253 WASM_SIMD_TEST(I16x8LtU) { RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess); } 1238 WASM_SIMD_TEST(I16x8LtU) { RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess); }
1254 1239
1255 WASM_SIMD_TEST(I16x8LeU) { 1240 WASM_SIMD_TEST(I16x8LeU) {
1256 RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual); 1241 RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual);
1257 } 1242 }
1258 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
1259 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1260 1243
1261 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
1262 SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1263 void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op, 1244 void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op,
1264 int shift) { 1245 int shift) {
1265 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1246 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1266 byte a = 0; 1247 byte a = 0;
1267 byte expected = 1; 1248 byte expected = 1;
1268 byte simd = r.AllocateLocal(kWasmS128); 1249 byte simd = r.AllocateLocal(kWasmS128);
1269 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))), 1250 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))),
1270 WASM_SET_LOCAL( 1251 WASM_SET_LOCAL(
1271 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))), 1252 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
1272 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE); 1253 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE);
1273 1254
1274 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); } 1255 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); }
1275 } 1256 }
1276 1257
1277 WASM_SIMD_TEST(I16x8Shl) { 1258 WASM_SIMD_TEST(I16x8Shl) {
1278 RunI16x8ShiftOpTest(kExprI16x8Shl, LogicalShiftLeft, 1); 1259 RunI16x8ShiftOpTest(kExprI16x8Shl, LogicalShiftLeft, 1);
1279 } 1260 }
1280 1261
1281 WASM_SIMD_TEST(I16x8ShrS) { 1262 WASM_SIMD_TEST(I16x8ShrS) {
1282 RunI16x8ShiftOpTest(kExprI16x8ShrS, ArithmeticShiftRight, 1); 1263 RunI16x8ShiftOpTest(kExprI16x8ShrS, ArithmeticShiftRight, 1);
1283 } 1264 }
1284 1265
1285 WASM_SIMD_TEST(I16x8ShrU) { 1266 WASM_SIMD_TEST(I16x8ShrU) {
1286 RunI16x8ShiftOpTest(kExprI16x8ShrU, LogicalShiftRight, 1); 1267 RunI16x8ShiftOpTest(kExprI16x8ShrU, LogicalShiftRight, 1);
1287 } 1268 }
1288 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1289 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1290 1269
1291 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \
1292 V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
1293 void RunI8x16UnOpTest(WasmOpcode simd_op, Int8UnOp expected_op) { 1270 void RunI8x16UnOpTest(WasmOpcode simd_op, Int8UnOp expected_op) {
1294 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1271 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1295 byte a = 0; 1272 byte a = 0;
1296 byte expected = 1; 1273 byte expected = 1;
1297 byte simd = r.AllocateLocal(kWasmS128); 1274 byte simd = r.AllocateLocal(kWasmS128);
1298 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))), 1275 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))),
1299 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 1276 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
1300 WASM_SIMD_CHECK_SPLAT16(I8x16, simd, I32, expected), WASM_ONE); 1277 WASM_SIMD_CHECK_SPLAT16(I8x16, simd, I32, expected), WASM_ONE);
1301 1278
1302 FOR_INT8_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); } 1279 FOR_INT8_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); }
1303 } 1280 }
1304 1281
1305 WASM_SIMD_TEST(I8x16Neg) { RunI8x16UnOpTest(kExprI8x16Neg, Negate); } 1282 WASM_SIMD_TEST(I8x16Neg) { RunI8x16UnOpTest(kExprI8x16Neg, Negate); }
1306 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || 1283 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1307 // V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET 1284 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1308 1285
1309 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 1286 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64
1310 // Tests both signed and unsigned conversion from I16x8 (packing). 1287 // Tests both signed and unsigned conversion from I16x8 (packing).
1311 WASM_SIMD_TEST(I8x16ConvertI16x8) { 1288 WASM_SIMD_TEST(I8x16ConvertI16x8) {
1312 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 1289 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
1313 byte a = 0; 1290 byte a = 0;
1314 byte packed_signed = 1; 1291 byte packed_signed = 1;
1315 byte packed_unsigned = 2; 1292 byte packed_unsigned = 2;
1316 byte simd0 = r.AllocateLocal(kWasmS128); 1293 byte simd0 = r.AllocateLocal(kWasmS128);
1317 byte simd1 = r.AllocateLocal(kWasmS128); 1294 byte simd1 = r.AllocateLocal(kWasmS128);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 WASM_SIMD_CHECK_SPLAT16(I8x16, simd1, I32, expected), WASM_ONE); 1379 WASM_SIMD_CHECK_SPLAT16(I8x16, simd1, I32, expected), WASM_ONE);
1403 1380
1404 FOR_INT8_INPUTS(i) { 1381 FOR_INT8_INPUTS(i) {
1405 FOR_INT8_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1382 FOR_INT8_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1406 } 1383 }
1407 } 1384 }
1408 1385
1409 WASM_SIMD_TEST(I8x16Eq) { RunI8x16CompareOpTest(kExprI8x16Eq, Equal); } 1386 WASM_SIMD_TEST(I8x16Eq) { RunI8x16CompareOpTest(kExprI8x16Eq, Equal); }
1410 1387
1411 WASM_SIMD_TEST(I8x16Ne) { RunI8x16CompareOpTest(kExprI8x16Ne, NotEqual); } 1388 WASM_SIMD_TEST(I8x16Ne) { RunI8x16CompareOpTest(kExprI8x16Ne, NotEqual); }
1412 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1413 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1414 1389
1415 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
1416 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1417 WASM_SIMD_TEST(I8x16Mul) { RunI8x16BinOpTest(kExprI8x16Mul, Mul); }
1418 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1419 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1420
1421 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
1422 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1423 WASM_SIMD_TEST(I8x16GtS) { RunI8x16CompareOpTest(kExprI8x16GtS, Greater); } 1390 WASM_SIMD_TEST(I8x16GtS) { RunI8x16CompareOpTest(kExprI8x16GtS, Greater); }
1424 1391
1425 WASM_SIMD_TEST(I8x16GeS) { RunI8x16CompareOpTest(kExprI8x16GeS, GreaterEqual); } 1392 WASM_SIMD_TEST(I8x16GeS) { RunI8x16CompareOpTest(kExprI8x16GeS, GreaterEqual); }
1426 1393
1427 WASM_SIMD_TEST(I8x16LtS) { RunI8x16CompareOpTest(kExprI8x16LtS, Less); } 1394 WASM_SIMD_TEST(I8x16LtS) { RunI8x16CompareOpTest(kExprI8x16LtS, Less); }
1428 1395
1429 WASM_SIMD_TEST(I8x16LeS) { RunI8x16CompareOpTest(kExprI8x16LeS, LessEqual); } 1396 WASM_SIMD_TEST(I8x16LeS) { RunI8x16CompareOpTest(kExprI8x16LeS, LessEqual); }
1430 1397
1431 WASM_SIMD_TEST(I8x16GtU) { 1398 WASM_SIMD_TEST(I8x16GtU) {
1432 RunI8x16CompareOpTest(kExprI8x16GtU, UnsignedGreater); 1399 RunI8x16CompareOpTest(kExprI8x16GtU, UnsignedGreater);
1433 } 1400 }
1434 1401
1435 WASM_SIMD_TEST(I8x16GeU) { 1402 WASM_SIMD_TEST(I8x16GeU) {
1436 RunI8x16CompareOpTest(kExprI8x16GeU, UnsignedGreaterEqual); 1403 RunI8x16CompareOpTest(kExprI8x16GeU, UnsignedGreaterEqual);
1437 } 1404 }
1438 1405
1439 WASM_SIMD_TEST(I8x16LtU) { RunI8x16CompareOpTest(kExprI8x16LtU, UnsignedLess); } 1406 WASM_SIMD_TEST(I8x16LtU) { RunI8x16CompareOpTest(kExprI8x16LtU, UnsignedLess); }
1440 1407
1441 WASM_SIMD_TEST(I8x16LeU) { 1408 WASM_SIMD_TEST(I8x16LeU) {
1442 RunI8x16CompareOpTest(kExprI8x16LeU, UnsignedLessEqual); 1409 RunI8x16CompareOpTest(kExprI8x16LeU, UnsignedLessEqual);
1443 } 1410 }
1444 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET 1411 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1445 // || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 1412 // SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1413
1414 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
1415 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1416 WASM_SIMD_TEST(I8x16Mul) { RunI8x16BinOpTest(kExprI8x16Mul, Mul); }
1417 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 ||
1418 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1446 1419
1447 void RunI8x16ShiftOpTest(WasmOpcode simd_op, Int8ShiftOp expected_op, 1420 void RunI8x16ShiftOpTest(WasmOpcode simd_op, Int8ShiftOp expected_op,
1448 int shift) { 1421 int shift) {
1449 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1422 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1450 byte a = 0; 1423 byte a = 0;
1451 byte expected = 1; 1424 byte expected = 1;
1452 byte simd = r.AllocateLocal(kWasmS128); 1425 byte simd = r.AllocateLocal(kWasmS128);
1453 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))), 1426 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))),
1454 WASM_SET_LOCAL( 1427 WASM_SET_LOCAL(
1455 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))), 1428 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
1456 WASM_SIMD_CHECK_SPLAT16(I8x16, simd, I32, expected), WASM_ONE); 1429 WASM_SIMD_CHECK_SPLAT16(I8x16, simd, I32, expected), WASM_ONE);
1457 1430
1458 FOR_INT8_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); } 1431 FOR_INT8_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); }
1459 } 1432 }
1460 1433
1461 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \ 1434 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \
1462 V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET 1435 V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
1463 WASM_SIMD_TEST(I8x16Shl) { 1436 WASM_SIMD_TEST(I8x16Shl) {
1464 RunI8x16ShiftOpTest(kExprI8x16Shl, LogicalShiftLeft, 1); 1437 RunI8x16ShiftOpTest(kExprI8x16Shl, LogicalShiftLeft, 1);
1465 } 1438 }
1466 1439
1467 WASM_SIMD_TEST(I8x16ShrS) { 1440 WASM_SIMD_TEST(I8x16ShrS) {
1468 RunI8x16ShiftOpTest(kExprI8x16ShrS, ArithmeticShiftRight, 1); 1441 RunI8x16ShiftOpTest(kExprI8x16ShrS, ArithmeticShiftRight, 1);
1469 } 1442 }
1443
1444 WASM_SIMD_TEST(I8x16ShrU) {
1445 RunI8x16ShiftOpTest(kExprI8x16ShrU, LogicalShiftRight, 1);
1446 }
1470 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || 1447 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS ||
1471 // V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET 1448 // V8_TARGET_ARCH_MIPS64 || SIMD_LOWERING_TARGET
1472 1449
1473 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || \
1474 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1475 WASM_SIMD_TEST(I8x16ShrU) {
1476 RunI8x16ShiftOpTest(kExprI8x16ShrU, LogicalShiftRight, 1);
1477 }
1478 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
1479 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1480
1481 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \ 1450 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_X64 || \
1482 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 1451 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1483 // Test Select by making a mask where the 0th and 3rd lanes are true and the 1452 // Test Select by making a mask where the 0th and 3rd lanes are true and the
1484 // rest false, and comparing for non-equality with zero to convert to a boolean 1453 // rest false, and comparing for non-equality with zero to convert to a boolean
1485 // vector. 1454 // vector.
1486 #define WASM_SIMD_SELECT_TEST(format) \ 1455 #define WASM_SIMD_SELECT_TEST(format) \
1487 WASM_SIMD_TEST(S##format##Select) { \ 1456 WASM_SIMD_TEST(S##format##Select) { \
1488 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \ 1457 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \
1489 byte val1 = 0; \ 1458 byte val1 = 0; \
1490 byte val2 = 1; \ 1459 byte val2 = 1; \
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 WASM_SIMD_I32x4_EXTRACT_LANE(0, WASM_SIMD_LOAD_MEM(WASM_ZERO))); 2167 WASM_SIMD_I32x4_EXTRACT_LANE(0, WASM_SIMD_LOAD_MEM(WASM_ZERO)));
2199 2168
2200 FOR_INT32_INPUTS(i) { 2169 FOR_INT32_INPUTS(i) {
2201 int32_t expected = *i; 2170 int32_t expected = *i;
2202 r.module().WriteMemory(&memory[0], expected); 2171 r.module().WriteMemory(&memory[0], expected);
2203 CHECK_EQ(expected, r.Call()); 2172 CHECK_EQ(expected, r.Call());
2204 } 2173 }
2205 } 2174 }
2206 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET || 2175 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || SIMD_LOWERING_TARGET ||
2207 // V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 2176 // V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
OLDNEW
« src/compiler/x64/code-generator-x64.cc ('K') | « src/compiler/x64/instruction-selector-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698