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

Unified Diff: test/cctest/wasm/test-run-wasm-simd.cc

Issue 2719953002: Add Int32x4 Wasm Simd Binops, compare ops, select (Closed)
Patch Set: Add Int32x4 shift ops Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
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 53211ce340fbe8ca88a7f9f6448f3b264df629f5..dcad01952ff31ec44ecfcfe036ae24ee310af3e9 100644
--- a/test/cctest/wasm/test-run-wasm-simd.cc
+++ b/test/cctest/wasm/test-run-wasm-simd.cc
@@ -850,9 +850,9 @@ WASM_EXEC_COMPILED_TEST(I32x4Add) { RunI32x4BinOpTest(kExprI32x4Add, Add); }
WASM_EXEC_COMPILED_TEST(I32x4Sub) { RunI32x4BinOpTest(kExprI32x4Sub, Sub); }
-#if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
WASM_EXEC_COMPILED_TEST(I32x4Mul) { RunI32x4BinOpTest(kExprI32x4Mul, Mul); }
+#if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
WASM_EXEC_COMPILED_TEST(S128And) { RunI32x4BinOpTest(kExprS128And, And); }
WASM_EXEC_COMPILED_TEST(S128Or) { RunI32x4BinOpTest(kExprS128Or, Or); }
@@ -860,7 +860,7 @@ WASM_EXEC_COMPILED_TEST(S128Or) { RunI32x4BinOpTest(kExprS128Or, Or); }
WASM_EXEC_COMPILED_TEST(S128Xor) { RunI32x4BinOpTest(kExprS128Xor, Xor); }
#endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
-#if V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64
WASM_EXEC_COMPILED_TEST(I32x4Min) {
RunI32x4BinOpTest(kExprI32x4MinS, Minimum);
}
@@ -877,8 +877,6 @@ WASM_EXEC_COMPILED_TEST(Ui32x4Max) {
RunI32x4BinOpTest(kExprI32x4MaxU, UnsignedMaximum);
}
-
-
void RunI32x4CompareOpTest(WasmOpcode simd_op, Int32BinOp expected_op) {
FLAG_wasm_simd_prototype = true;
WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
@@ -908,6 +906,73 @@ WASM_EXEC_COMPILED_TEST(I32x4NotEqual) {
RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual);
}
+// Test Select by making a mask where the first two lanes are true and the rest
bbudge 2017/02/28 19:34:39 It would be better to adjust the #ifdefs rather th
gdeepti 2017/03/13 20:37:52 Sgtm, makes a lot more sense to move the macros, f
+// false, and comparing for non-equality with zero to materialize a bool vector.
+#define WASM_SIMD_SELECT_TEST(format) \
+ WASM_EXEC_COMPILED_TEST(S##format##Select) { \
+ FLAG_wasm_simd_prototype = true; \
+ WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \
+ byte val1 = 0; \
+ byte val2 = 1; \
+ byte src1 = r.AllocateLocal(kWasmS128); \
+ byte src2 = r.AllocateLocal(kWasmS128); \
+ byte zero = r.AllocateLocal(kWasmS128); \
+ byte mask = r.AllocateLocal(kWasmS128); \
+ BUILD(r, WASM_SET_LOCAL( \
+ src1, WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(val1))), \
+ WASM_SET_LOCAL(src2, \
+ WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(val2))), \
+ WASM_SET_LOCAL(zero, WASM_SIMD_I##format##_SPLAT(WASM_ZERO)), \
+ WASM_SET_LOCAL(mask, WASM_SIMD_I##format##_REPLACE_LANE( \
+ 1, WASM_GET_LOCAL(zero), WASM_I32V(-1))), \
+ WASM_SET_LOCAL(mask, WASM_SIMD_I##format##_REPLACE_LANE( \
+ 2, WASM_GET_LOCAL(mask), WASM_I32V(-1))), \
+ WASM_SET_LOCAL( \
+ mask, \
+ WASM_SIMD_SELECT(format, WASM_SIMD_BINOP(kExprI##format##Ne, \
+ WASM_GET_LOCAL(mask), \
+ WASM_GET_LOCAL(zero)), \
+ WASM_GET_LOCAL(src1), WASM_GET_LOCAL(src2))), \
+ WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 0), \
+ WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 1), \
+ WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 2), \
+ WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 3), WASM_ONE); \
+ \
+ CHECK_EQ(1, r.Call(0x12, 0x34)); \
+ }
+
+WASM_SIMD_SELECT_TEST(32x4)
+
+void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op,
+ int shift) {
+ FLAG_wasm_simd_prototype = true;
+ WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
+ byte a = 0;
+ byte expected = 1;
+ byte simd = r.AllocateLocal(kWasmS128);
+ BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
+ WASM_SET_LOCAL(
+ simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
+ WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE);
+
+ FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); }
+}
+
+WASM_EXEC_COMPILED_TEST(I32x4Shl) {
+ RunI32x4ShiftOpTest(kExprI32x4Shl, LogicalShiftLeft, 1);
+}
+
+WASM_EXEC_COMPILED_TEST(I32x4ShrS) {
+ RunI32x4ShiftOpTest(kExprI32x4ShrS, ArithmeticShiftRight, 1);
+}
+
+WASM_EXEC_COMPILED_TEST(I32x4ShrU) {
+ RunI32x4ShiftOpTest(kExprI32x4ShrU, LogicalShiftRight, 1);
+}
+
+#endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64
+
+#if V8_TARGET_ARCH_ARM
WASM_EXEC_COMPILED_TEST(I32x4Greater) {
RunI32x4CompareOpTest(kExprI32x4GtS, Greater);
}
@@ -940,33 +1005,6 @@ WASM_EXEC_COMPILED_TEST(Ui32x4LessEqual) {
RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual);
}
-void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op,
- int shift) {
- FLAG_wasm_simd_prototype = true;
- WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
- byte a = 0;
- byte expected = 1;
- byte simd = r.AllocateLocal(kWasmS128);
- BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
- WASM_SET_LOCAL(
- simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
- WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE);
-
- FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); }
-}
-
-WASM_EXEC_COMPILED_TEST(I32x4Shl) {
- RunI32x4ShiftOpTest(kExprI32x4Shl, LogicalShiftLeft, 1);
-}
-
-WASM_EXEC_COMPILED_TEST(I32x4ShrS) {
- RunI32x4ShiftOpTest(kExprI32x4ShrS, ArithmeticShiftRight, 1);
-}
-
-WASM_EXEC_COMPILED_TEST(I32x4ShrU) {
- RunI32x4ShiftOpTest(kExprI32x4ShrU, LogicalShiftRight, 1);
-}
-
void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) {
FLAG_wasm_simd_prototype = true;
WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
@@ -1287,42 +1325,6 @@ WASM_EXEC_COMPILED_TEST(I8x16ShrU) {
RunI8x16ShiftOpTest(kExprI8x16ShrU, LogicalShiftRight, 1);
}
-// Test Select by making a mask where the first two lanes are true and the rest
-// false, and comparing for non-equality with zero to materialize a bool vector.
-#define WASM_SIMD_SELECT_TEST(format) \
- WASM_EXEC_COMPILED_TEST(S##format##Select) { \
- FLAG_wasm_simd_prototype = true; \
- WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \
- byte val1 = 0; \
- byte val2 = 1; \
- byte src1 = r.AllocateLocal(kWasmS128); \
- byte src2 = r.AllocateLocal(kWasmS128); \
- byte zero = r.AllocateLocal(kWasmS128); \
- byte mask = r.AllocateLocal(kWasmS128); \
- BUILD(r, WASM_SET_LOCAL( \
- src1, WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(val1))), \
- WASM_SET_LOCAL(src2, \
- WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(val2))), \
- WASM_SET_LOCAL(zero, WASM_SIMD_I##format##_SPLAT(WASM_ZERO)), \
- WASM_SET_LOCAL(mask, WASM_SIMD_I##format##_REPLACE_LANE( \
- 1, WASM_GET_LOCAL(zero), WASM_I32V(-1))), \
- WASM_SET_LOCAL(mask, WASM_SIMD_I##format##_REPLACE_LANE( \
- 2, WASM_GET_LOCAL(mask), WASM_I32V(-1))), \
- WASM_SET_LOCAL( \
- mask, \
- WASM_SIMD_SELECT(format, WASM_SIMD_BINOP(kExprI##format##Ne, \
- WASM_GET_LOCAL(mask), \
- WASM_GET_LOCAL(zero)), \
- WASM_GET_LOCAL(src1), WASM_GET_LOCAL(src2))), \
- WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 0), \
- WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 1), \
- WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 2), \
- WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 3), WASM_ONE); \
- \
- CHECK_EQ(1, r.Call(0x12, 0x34)); \
- }
-
-WASM_SIMD_SELECT_TEST(32x4)
WASM_SIMD_SELECT_TEST(16x8)
WASM_SIMD_SELECT_TEST(8x16)
#endif // V8_TARGET_ARCH_ARM
« src/compiler/x64/instruction-selector-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