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

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

Issue 2838943002: [wasm] Implement 128-bit endian swap for simd type (Closed)
Patch Set: fix sign compare error Created 3 years, 8 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
« src/compiler/wasm-compiler.cc ('K') | « src/compiler/wasm-compiler.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 58f1d6559c622a9b87e4054a8e23b981986c3e90..7f6e056c7fdc194263dfc906e7e743f29721f98f 100644
--- a/test/cctest/wasm/test-run-wasm-simd.cc
+++ b/test/cctest/wasm/test-run-wasm-simd.cc
@@ -1964,6 +1964,53 @@ WASM_EXEC_COMPILED_TEST(S1x16Xor) { RunS1x16BinOpTest(kExprS1x16Xor, Xor); }
#endif // !V8_TARGET_ARCH_ARM
#if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
+
+template <typename T, int maxLanes = 4>
+void SetVectorByLanes(T* v, ...) {
+ va_list vl;
+ va_start(vl, v);
+#if defined(V8_TARGET_BIG_ENDIAN)
+ for (int lane = maxLanes - 1; lane >= 0; lane--) {
+ v[lane] = static_cast<T>(va_arg(vl, T));
+ }
+#else
+ for (int lane = 0; lane < maxLanes; lane++) {
+ v[lane] = static_cast<T>(va_arg(vl, T));
+ }
+#endif
+ va_end(vl);
+}
+
+// has to specialize float to get rid of error
+template <>
+void SetVectorByLanes<float>(float* v, ...) {
+ va_list vl;
+ va_start(vl, v);
+ const int maxLanes = 4;
+#if defined(V8_TARGET_BIG_ENDIAN)
+ for (int lane = maxLanes - 1; lane >= 0; lane--) {
+ v[lane] = static_cast<float>(va_arg(vl, double));
+ }
+#else
+ for (int lane = 0; lane < maxLanes; lane++) {
+ v[lane] = static_cast<float>(va_arg(vl, double));
+ }
+#endif
+ va_end(vl);
+}
+
+template <int vSize = 16, typename T>
+T GetScalarByLanes(T* v, int lane) {
+#if defined(V8_TARGET_BIG_ENDIAN)
+ const int kElems = vSize / sizeof(T);
Clemens Hammacher 2017/04/28 09:45:48 You can make this (and the others) constexpr, move
+ const int index = kElems - 1 - lane;
+#else
+ const int index = lane;
+#endif
+ DCHECK(index >= 0 && index < static_cast<int>(vSize / sizeof(T)));
+ return v[index];
+}
+
WASM_EXEC_COMPILED_TEST(SimdI32x4ExtractWithF32x4) {
FLAG_wasm_simd_prototype = true;
WasmRunner<int32_t> r(kExecuteCompiled);
@@ -2108,10 +2155,7 @@ WASM_EXEC_COMPILED_TEST(SimdI32x4GetGlobal) {
FLAG_wasm_simd_prototype = true;
WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
int32_t* global = r.module().AddGlobal<int32_t>(kWasmS128);
- *(global) = 0;
- *(global + 1) = 1;
- *(global + 2) = 2;
- *(global + 3) = 3;
+ SetVectorByLanes(global, 0, 1, 2, 3);
r.AllocateLocal(kWasmI32);
BUILD(
r, WASM_SET_LOCAL(1, WASM_I32V(1)),
@@ -2144,20 +2188,17 @@ WASM_EXEC_COMPILED_TEST(SimdI32x4SetGlobal) {
WASM_I32V(56))),
WASM_I32V(1));
CHECK_EQ(1, r.Call(0));
- CHECK_EQ(*global, 23);
- CHECK_EQ(*(global + 1), 34);
- CHECK_EQ(*(global + 2), 45);
- CHECK_EQ(*(global + 3), 56);
+ CHECK_EQ(GetScalarByLanes(global, 0), 23);
+ CHECK_EQ(GetScalarByLanes(global, 1), 34);
+ CHECK_EQ(GetScalarByLanes(global, 2), 45);
+ CHECK_EQ(GetScalarByLanes(global, 3), 56);
}
WASM_EXEC_COMPILED_TEST(SimdF32x4GetGlobal) {
FLAG_wasm_simd_prototype = true;
WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
float* global = r.module().AddGlobal<float>(kWasmS128);
- *(global) = 0.0;
- *(global + 1) = 1.5;
- *(global + 2) = 2.25;
- *(global + 3) = 3.5;
+ SetVectorByLanes<float>(global, 0.0, 1.5, 2.25, 3.5);
r.AllocateLocal(kWasmI32);
BUILD(
r, WASM_SET_LOCAL(1, WASM_I32V(1)),
@@ -2190,10 +2231,10 @@ WASM_EXEC_COMPILED_TEST(SimdF32x4SetGlobal) {
WASM_F32(65.0))),
WASM_I32V(1));
CHECK_EQ(1, r.Call(0));
- CHECK_EQ(*global, 13.5);
- CHECK_EQ(*(global + 1), 45.5);
- CHECK_EQ(*(global + 2), 32.25);
- CHECK_EQ(*(global + 3), 65.0);
+ CHECK_EQ(GetScalarByLanes(global, 0), 13.5f);
+ CHECK_EQ(GetScalarByLanes(global, 1), 45.5f);
+ CHECK_EQ(GetScalarByLanes(global, 2), 32.25f);
+ CHECK_EQ(GetScalarByLanes(global, 3), 65.0f);
}
WASM_EXEC_COMPILED_TEST(SimdLoadStoreLoad) {
« src/compiler/wasm-compiler.cc ('K') | « src/compiler/wasm-compiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698