Index: test/cctest/wasm/test-run-wasm-simd.cc |
diff --git a/test/cctest/wasm/test-run-wasm-simd.cc b/test/cctest/wasm/test-run-wasm-simd.cc |
index f7bd34a9a5f06624b0828bd7361dc45abbf090f7..11ed73ecca34dcd164d7a48066368ea66403e014 100644 |
--- a/test/cctest/wasm/test-run-wasm-simd.cc |
+++ b/test/cctest/wasm/test-run-wasm-simd.cc |
@@ -399,13 +399,6 @@ T RecipSqrt(T a) { |
#define WASM_SIMD_I8x16_REPLACE_LANE(lane, x, y) \ |
x, y, WASM_SIMD_OP(kExprI8x16ReplaceLane), TO_BYTE(lane) |
-#define WASM_SIMD_S32x4_SHUFFLE_OP(opcode, m, x, y) \ |
- x, y, WASM_SIMD_OP(opcode), TO_BYTE(m[0]), TO_BYTE(m[1]), TO_BYTE(m[2]), \ |
- TO_BYTE(m[3]) |
-#define WASM_SIMD_S16x8_SHUFFLE_OP(opcode, m, x, y) \ |
- x, y, WASM_SIMD_OP(opcode), TO_BYTE(m[0]), TO_BYTE(m[1]), TO_BYTE(m[2]), \ |
- TO_BYTE(m[3]), TO_BYTE(m[4]), TO_BYTE(m[5]), TO_BYTE(m[6]), \ |
- TO_BYTE(m[7]) |
#define WASM_SIMD_S8x16_SHUFFLE_OP(opcode, m, x, y) \ |
x, y, WASM_SIMD_OP(opcode), TO_BYTE(m[0]), TO_BYTE(m[1]), TO_BYTE(m[2]), \ |
TO_BYTE(m[3]), TO_BYTE(m[4]), TO_BYTE(m[5]), TO_BYTE(m[6]), \ |
@@ -1588,38 +1581,17 @@ void RunBinaryLaneOpTest( |
src0[i] = i; |
src1[i] = kElems + i; |
} |
- switch (simd_op) { |
- case kExprS32x4Shuffle: { |
- BUILD(r, |
- WASM_SET_GLOBAL(0, WASM_SIMD_S32x4_SHUFFLE_OP(simd_op, expected, |
- WASM_GET_GLOBAL(0), |
- WASM_GET_GLOBAL(1))), |
- WASM_ONE); |
- break; |
- } |
- case kExprS16x8Shuffle: { |
- BUILD(r, |
- WASM_SET_GLOBAL(0, WASM_SIMD_S16x8_SHUFFLE_OP(simd_op, expected, |
- WASM_GET_GLOBAL(0), |
- WASM_GET_GLOBAL(1))), |
- WASM_ONE); |
- break; |
- } |
- case kExprS8x16Shuffle: { |
- BUILD(r, |
- WASM_SET_GLOBAL(0, WASM_SIMD_S8x16_SHUFFLE_OP(simd_op, expected, |
- WASM_GET_GLOBAL(0), |
- WASM_GET_GLOBAL(1))), |
- WASM_ONE); |
- break; |
- } |
- default: { |
- BUILD(r, |
- WASM_SET_GLOBAL(0, WASM_SIMD_BINOP(simd_op, WASM_GET_GLOBAL(0), |
- WASM_GET_GLOBAL(1))), |
- WASM_ONE); |
- break; |
- } |
+ if (simd_op == kExprS8x16Shuffle) { |
+ BUILD(r, |
+ WASM_SET_GLOBAL(0, WASM_SIMD_S8x16_SHUFFLE_OP(simd_op, expected, |
+ WASM_GET_GLOBAL(0), |
+ WASM_GET_GLOBAL(1))), |
+ WASM_ONE); |
+ } else { |
+ BUILD(r, |
+ WASM_SET_GLOBAL(0, WASM_SIMD_BINOP(simd_op, WASM_GET_GLOBAL(0), |
+ WASM_GET_GLOBAL(1))), |
+ WASM_ONE); |
} |
CHECK_EQ(1, r.Call()); |
@@ -1646,92 +1618,138 @@ WASM_SIMD_TEST(F32x4AddHoriz) { |
// Test some regular shuffles that may have special handling on some targets. |
// Test a normal and unary versions (where second operand isn't used). |
WASM_SIMD_TEST(S32x4ZipLeft) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 4, 1, 5}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 0, 1, 1}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, {{0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7}}); |
} |
WASM_SIMD_TEST(S32x4ZipRight) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{2, 6, 3, 7}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{2, 2, 3, 3}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{8, 9, 10, 11, 8, 9, 10, 11, 12, 13, 14, 15, 12, 13, 14, 15}}); |
} |
WASM_SIMD_TEST(S32x4UnzipLeft) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 2, 4, 6}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 2, 0, 2}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{0, 1, 2, 3, 8, 9, 10, 11, 0, |
+ 1, 2, 3, 8, 9, 10, 11}}); |
} |
WASM_SIMD_TEST(S32x4UnzipRight) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{1, 3, 5, 7}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{1, 3, 1, 3}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{4, 5, 6, 7, 12, 13, 14, 15, 4, 5, 6, 7, 12, 13, 14, 15}}); |
} |
WASM_SIMD_TEST(S32x4TransposeLeft) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 4, 2, 6}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 0, 2, 2}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 2, 3, 16, 17, 18, 19, 8, 9, 10, 11, 24, 25, 26, 27}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{0, 1, 2, 3, 0, 1, 2, 3, 8, 9, |
+ 10, 11, 8, 9, 10, 11}}); |
} |
WASM_SIMD_TEST(S32x4TransposeRight) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{1, 5, 3, 7}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{1, 1, 3, 3}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{4, 5, 6, 7, 20, 21, 22, 23, 12, 13, 14, 15, 28, 29, 30, 31}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{4, 5, 6, 7, 4, 5, 6, 7, 12, 13, 14, 15, 12, 13, 14, 15}}); |
} |
// Reverses are only unary. |
WASM_SIMD_TEST(S32x2Reverse) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{1, 0, 3, 2}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{4, 5, 6, 7, 0, 1, 2, 3, 12, |
+ 13, 14, 15, 8, 9, 10, 11}}); |
} |
// Test irregular shuffle. |
WASM_SIMD_TEST(S32x4Irregular) { |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 4, 4, 5}}); |
- RunBinaryLaneOpTest<int32_t>(kExprS32x4Shuffle, {{0, 0, 0, 1}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 2, 3, 16, 17, 18, 19, 16, 17, 18, 19, 20, 21, 22, 23}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, {{0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7}}); |
} |
WASM_SIMD_TEST(S16x8ZipLeft) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{0, 8, 1, 9, 2, 10, 3, 11}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{0, 0, 1, 1, 2, 2, 3, 3}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, {{0, 1, 0, 1, 2, 3, 2, 3, 4, 5, 4, 5, 6, 7, 6, 7}}); |
} |
WASM_SIMD_TEST(S16x8ZipRight) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, |
- {{4, 12, 5, 13, 6, 14, 7, 15}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{4, 4, 5, 5, 6, 6, 7, 7}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{8, 9, 8, 9, 10, 11, 10, 11, 12, 13, 12, 13, 14, 15, 14, 15}}); |
} |
WASM_SIMD_TEST(S16x8UnzipLeft) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, |
- {{0, 2, 4, 6, 8, 10, 12, 14}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{0, 2, 4, 6, 0, 2, 4, 6}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{0, 1, 4, 5, 8, 9, 12, 13, 0, |
+ 1, 4, 5, 8, 9, 12, 13}}); |
} |
WASM_SIMD_TEST(S16x8UnzipRight) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, |
- {{1, 3, 5, 7, 9, 11, 13, 15}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{1, 3, 5, 7, 1, 3, 5, 7}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{2, 3, 6, 7, 10, 11, 14, 15, 2, 3, 6, 7, 10, 11, 14, 15}}); |
} |
WASM_SIMD_TEST(S16x8TransposeLeft) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, |
- {{0, 8, 2, 10, 4, 12, 6, 14}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{0, 0, 2, 2, 4, 4, 6, 6}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 16, 17, 4, 5, 20, 21, 8, 9, 24, 25, 12, 13, 28, 29}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{0, 1, 0, 1, 4, 5, 4, 5, 8, 9, |
+ 8, 9, 12, 13, 12, 13}}); |
} |
WASM_SIMD_TEST(S16x8TransposeRight) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, |
- {{1, 9, 3, 11, 5, 13, 7, 15}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{1, 1, 3, 3, 5, 5, 7, 7}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{2, 3, 18, 19, 6, 7, 22, 23, 10, 11, 26, 27, 14, 15, 30, 31}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{2, 3, 2, 3, 6, 7, 6, 7, 10, 11, 10, 11, 14, 15, 14, 15}}); |
} |
WASM_SIMD_TEST(S16x4Reverse) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{3, 2, 1, 0, 7, 6, 5, 4}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{6, 7, 4, 5, 2, 3, 0, 1, 14, |
+ 15, 12, 13, 10, 11, 8, 9}}); |
} |
WASM_SIMD_TEST(S16x2Reverse) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{1, 0, 3, 2, 5, 4, 7, 6}}); |
+ RunBinaryLaneOpTest<int8_t>(kExprS8x16Shuffle, {{2, 3, 0, 1, 6, 7, 4, 5, 10, |
+ 11, 8, 9, 14, 15, 12, 13}}); |
} |
WASM_SIMD_TEST(S16x8Irregular) { |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{0, 8, 8, 0, 2, 10, 3, 11}}); |
- RunBinaryLaneOpTest<int16_t>(kExprS16x8Shuffle, {{0, 0, 0, 0, 2, 2, 3, 3}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, |
+ {{0, 1, 16, 17, 16, 17, 0, 1, 4, 5, 20, 21, 6, 7, 22, 23}}); |
+ RunBinaryLaneOpTest<int8_t>( |
+ kExprS8x16Shuffle, {{0, 1, 0, 1, 0, 1, 0, 1, 4, 5, 4, 5, 6, 7, 6, 7}}); |
} |
WASM_SIMD_TEST(S8x16ZipLeft) { |
@@ -1807,10 +1825,11 @@ WASM_SIMD_TEST(S8x16Irregular) { |
} |
// Test shuffles that concatenate the two vectors. |
-template <typename T> |
-void RunConcatOpTest(WasmOpcode simd_op) { |
- static const int kLanes = kSimd128Size / sizeof(T); |
- std::array<T, kLanes> expected; |
+void RunConcatOpTest() {} |
+ |
+WASM_SIMD_TEST(S8x16Concat) { |
+ static const int kLanes = 16; |
+ std::array<uint8_t, kLanes> expected; |
for (int bias = 1; bias < kLanes; bias++) { |
int i = 0; |
// last kLanes - bias bytes of first vector. |
@@ -1821,15 +1840,9 @@ void RunConcatOpTest(WasmOpcode simd_op) { |
for (int j = 0; j < bias; j++) { |
expected[i++] = j + kLanes; |
} |
- RunBinaryLaneOpTest<T>(simd_op, expected); |
+ RunBinaryLaneOpTest(kExprS8x16Shuffle, expected); |
} |
} |
- |
-WASM_SIMD_TEST(S32x4Concat) { RunConcatOpTest<int32_t>(kExprS32x4Shuffle); } |
- |
-WASM_SIMD_TEST(S16x8Concat) { RunConcatOpTest<int16_t>(kExprS16x8Shuffle); } |
- |
-WASM_SIMD_TEST(S8x16Concat) { RunConcatOpTest<int8_t>(kExprS8x16Shuffle); } |
#endif // V8_TARGET_ARCH_ARM |
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 |