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

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

Issue 2729943002: [WASM] Implement remaining F32x4 operations for ARM. (Closed)
Patch Set: Rebase. Created 3 years, 9 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
« no previous file with comments | « src/wasm/wasm-opcodes.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "src/wasm/wasm-macro-gen.h" 6 #include "src/wasm/wasm-macro-gen.h"
7 #include "test/cctest/cctest.h" 7 #include "test/cctest/cctest.h"
8 #include "test/cctest/compiler/value-helper.h" 8 #include "test/cctest/compiler/value-helper.h"
9 #include "test/cctest/wasm/wasm-run-utils.h" 9 #include "test/cctest/wasm/wasm-run-utils.h"
10 10
11 using namespace v8::base; 11 using namespace v8::base;
12 using namespace v8::internal; 12 using namespace v8::internal;
13 using namespace v8::internal::compiler; 13 using namespace v8::internal::compiler;
14 using namespace v8::internal::wasm; 14 using namespace v8::internal::wasm;
15 15
16 namespace { 16 namespace {
17 17
18 typedef float (*FloatUnOp)(float); 18 typedef float (*FloatUnOp)(float);
19 typedef float (*FloatBinOp)(float, float); 19 typedef float (*FloatBinOp)(float, float);
20 typedef int32_t (*FloatCompareOp)(float, float); 20 typedef int (*FloatCompareOp)(float, float);
21 typedef int32_t (*Int32UnOp)(int32_t); 21 typedef int32_t (*Int32UnOp)(int32_t);
22 typedef int32_t (*Int32BinOp)(int32_t, int32_t); 22 typedef int32_t (*Int32BinOp)(int32_t, int32_t);
23 typedef int (*Int32CompareOp)(int32_t, int32_t);
23 typedef int32_t (*Int32ShiftOp)(int32_t, int); 24 typedef int32_t (*Int32ShiftOp)(int32_t, int);
24 typedef int16_t (*Int16UnOp)(int16_t); 25 typedef int16_t (*Int16UnOp)(int16_t);
25 typedef int16_t (*Int16BinOp)(int16_t, int16_t); 26 typedef int16_t (*Int16BinOp)(int16_t, int16_t);
27 typedef int (*Int16CompareOp)(int16_t, int16_t);
26 typedef int16_t (*Int16ShiftOp)(int16_t, int); 28 typedef int16_t (*Int16ShiftOp)(int16_t, int);
27 typedef int8_t (*Int8UnOp)(int8_t); 29 typedef int8_t (*Int8UnOp)(int8_t);
28 typedef int8_t (*Int8BinOp)(int8_t, int8_t); 30 typedef int8_t (*Int8BinOp)(int8_t, int8_t);
31 typedef int (*Int8CompareOp)(int8_t, int8_t);
29 typedef int8_t (*Int8ShiftOp)(int8_t, int); 32 typedef int8_t (*Int8ShiftOp)(int8_t, int);
30 33
31 #if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_X64 34 #if !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_X64
32 #define SIMD_LOWERING_TARGET 1 35 #define SIMD_LOWERING_TARGET 1
33 #else 36 #else
34 #define SIMD_LOWERING_TARGET 0 37 #define SIMD_LOWERING_TARGET 0
35 #endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_X64 38 #endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_X64
36 39
37 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
38 int32_t Equal(float a, float b) { return a == b ? 1 : 0; }
39
40 int32_t NotEqual(float a, float b) { return a != b ? 1 : 0; }
41 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
42
43 #if SIMD_LOWERING_TARGET
44 int32_t Less(float a, float b) { return a < b ? 1 : 0; }
45
46 int32_t LessEqual(float a, float b) { return a <= b ? 1 : 0; }
47
48 int32_t Greater(float a, float b) { return a > b ? 1 : 0; }
49
50 int32_t GreaterEqual(float a, float b) { return a >= b ? 1 : 0; }
51 #endif // SIMD_LOWERING_TARGET
52
53 // Generic expected value functions. 40 // Generic expected value functions.
54 template <typename T> 41 template <typename T>
55 T Negate(T a) { 42 T Negate(T a) {
56 return -a; 43 return -a;
57 } 44 }
58 45
59 template <typename T> 46 template <typename T>
60 T Add(T a, T b) { 47 T Add(T a, T b) {
61 return a + b; 48 return a + b;
62 } 49 }
(...skipping 29 matching lines...) Expand all
92 return static_cast<UnsignedT>(a) <= static_cast<UnsignedT>(b) ? a : b; 79 return static_cast<UnsignedT>(a) <= static_cast<UnsignedT>(b) ? a : b;
93 } 80 }
94 81
95 template <typename T> 82 template <typename T>
96 T UnsignedMaximum(T a, T b) { 83 T UnsignedMaximum(T a, T b) {
97 using UnsignedT = typename std::make_unsigned<T>::type; 84 using UnsignedT = typename std::make_unsigned<T>::type;
98 return static_cast<UnsignedT>(a) >= static_cast<UnsignedT>(b) ? a : b; 85 return static_cast<UnsignedT>(a) >= static_cast<UnsignedT>(b) ? a : b;
99 } 86 }
100 87
101 template <typename T> 88 template <typename T>
102 T Equal(T a, T b) { 89 int Equal(T a, T b) {
103 return a == b ? 1 : 0; 90 return a == b ? 1 : 0;
104 } 91 }
105 92
106 template <typename T> 93 template <typename T>
107 T NotEqual(T a, T b) { 94 int NotEqual(T a, T b) {
108 return a != b ? 1 : 0; 95 return a != b ? 1 : 0;
109 } 96 }
110 97
111 template <typename T> 98 template <typename T>
112 T Greater(T a, T b) { 99 int Less(T a, T b) {
100 return a < b ? 1 : 0;
101 }
102
103 template <typename T>
104 int LessEqual(T a, T b) {
105 return a <= b ? 1 : 0;
106 }
107
108 template <typename T>
109 int Greater(T a, T b) {
113 return a > b ? 1 : 0; 110 return a > b ? 1 : 0;
114 } 111 }
115 112
116 template <typename T> 113 template <typename T>
117 T GreaterEqual(T a, T b) { 114 int GreaterEqual(T a, T b) {
118 return a >= b ? 1 : 0; 115 return a >= b ? 1 : 0;
119 } 116 }
120 117
121 template <typename T> 118 template <typename T>
122 T Less(T a, T b) { 119 int UnsignedLess(T a, T b) {
123 return a < b ? 1 : 0; 120 using UnsignedT = typename std::make_unsigned<T>::type;
121 return static_cast<UnsignedT>(a) < static_cast<UnsignedT>(b) ? 1 : 0;
124 } 122 }
125 123
126 template <typename T> 124 template <typename T>
127 T LessEqual(T a, T b) { 125 int UnsignedLessEqual(T a, T b) {
128 return a <= b ? 1 : 0; 126 using UnsignedT = typename std::make_unsigned<T>::type;
127 return static_cast<UnsignedT>(a) <= static_cast<UnsignedT>(b) ? 1 : 0;
129 } 128 }
130 129
131 template <typename T> 130 template <typename T>
132 T UnsignedGreater(T a, T b) { 131 int UnsignedGreater(T a, T b) {
133 using UnsignedT = typename std::make_unsigned<T>::type; 132 using UnsignedT = typename std::make_unsigned<T>::type;
134 return static_cast<UnsignedT>(a) > static_cast<UnsignedT>(b) ? 1 : 0; 133 return static_cast<UnsignedT>(a) > static_cast<UnsignedT>(b) ? 1 : 0;
135 } 134 }
136 135
137 template <typename T> 136 template <typename T>
138 T UnsignedGreaterEqual(T a, T b) { 137 int UnsignedGreaterEqual(T a, T b) {
139 using UnsignedT = typename std::make_unsigned<T>::type; 138 using UnsignedT = typename std::make_unsigned<T>::type;
140 return static_cast<UnsignedT>(a) >= static_cast<UnsignedT>(b) ? 1 : 0; 139 return static_cast<UnsignedT>(a) >= static_cast<UnsignedT>(b) ? 1 : 0;
141 } 140 }
142 141
143 template <typename T> 142 template <typename T>
144 T UnsignedLess(T a, T b) {
145 using UnsignedT = typename std::make_unsigned<T>::type;
146 return static_cast<UnsignedT>(a) < static_cast<UnsignedT>(b) ? 1 : 0;
147 }
148
149 template <typename T>
150 T UnsignedLessEqual(T a, T b) {
151 using UnsignedT = typename std::make_unsigned<T>::type;
152 return static_cast<UnsignedT>(a) <= static_cast<UnsignedT>(b) ? 1 : 0;
153 }
154
155 template <typename T>
156 T LogicalShiftLeft(T a, int shift) { 143 T LogicalShiftLeft(T a, int shift) {
157 return a << shift; 144 return a << shift;
158 } 145 }
159 146
160 template <typename T> 147 template <typename T>
161 T LogicalShiftRight(T a, int shift) { 148 T LogicalShiftRight(T a, int shift) {
162 using UnsignedT = typename std::make_unsigned<T>::type; 149 using UnsignedT = typename std::make_unsigned<T>::type;
163 return static_cast<UnsignedT>(a) >> shift; 150 return static_cast<UnsignedT>(a) >> shift;
164 } 151 }
165 152
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 template <typename T> 217 template <typename T>
231 T LogicalNot(T a) { 218 T LogicalNot(T a) {
232 return a == 0 ? 1 : 0; 219 return a == 0 ? 1 : 0;
233 } 220 }
234 221
235 template <typename T> 222 template <typename T>
236 T Sqrt(T a) { 223 T Sqrt(T a) {
237 return std::sqrt(a); 224 return std::sqrt(a);
238 } 225 }
239 226
227 template <typename T>
228 T Recip(T a) {
229 return 1.0f / a;
230 }
231
232 template <typename T>
233 T RecipSqrt(T a) {
234 return 1.0f / std::sqrt(a);
235 }
236
237 template <typename T>
238 T RecipRefine(T a, T b) {
239 return 2.0f - a * b;
240 }
241
242 template <typename T>
243 T RecipSqrtRefine(T a, T b) {
244 return (3.0f - a * b) * 0.5f;
245 }
246
240 } // namespace 247 } // namespace
241 248
242 #define WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lane_value, lane_index) \ 249 #define WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lane_value, lane_index) \
243 WASM_IF(WASM_##LANE_TYPE##_NE(WASM_GET_LOCAL(lane_value), \ 250 WASM_IF(WASM_##LANE_TYPE##_NE(WASM_GET_LOCAL(lane_value), \
244 WASM_SIMD_##TYPE##_EXTRACT_LANE( \ 251 WASM_SIMD_##TYPE##_EXTRACT_LANE( \
245 lane_index, WASM_GET_LOCAL(value))), \ 252 lane_index, WASM_GET_LOCAL(value))), \
246 WASM_RETURN1(WASM_ZERO)) 253 WASM_RETURN1(WASM_ZERO))
247 254
248 #define WASM_SIMD_CHECK_F32_LANE(value, lane_value, lane_index) \
249 WASM_IF(WASM_F32_NE(WASM_GET_LOCAL(lane_value), \
250 WASM_SIMD_F32x4_EXTRACT_LANE(lane_index, \
251 WASM_GET_LOCAL(value))), \
252 WASM_RETURN1(WASM_ZERO))
253
254 #define WASM_SIMD_CHECK4(TYPE, value, LANE_TYPE, lv0, lv1, lv2, lv3) \ 255 #define WASM_SIMD_CHECK4(TYPE, value, LANE_TYPE, lv0, lv1, lv2, lv3) \
255 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv0, 0) \ 256 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv0, 0) \
256 , WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv1, 1), \ 257 , WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv1, 1), \
257 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv2, 2), \ 258 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv2, 2), \
258 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv3, 3) 259 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv3, 3)
259 260
260 #define WASM_SIMD_CHECK_SPLAT4(TYPE, value, LANE_TYPE, lv) \ 261 #define WASM_SIMD_CHECK_SPLAT4(TYPE, value, LANE_TYPE, lv) \
261 WASM_SIMD_CHECK4(TYPE, value, LANE_TYPE, lv, lv, lv, lv) 262 WASM_SIMD_CHECK4(TYPE, value, LANE_TYPE, lv, lv, lv, lv)
262 263
263 #define WASM_SIMD_CHECK8(TYPE, value, LANE_TYPE, lv0, lv1, lv2, lv3, lv4, lv5, \ 264 #define WASM_SIMD_CHECK8(TYPE, value, LANE_TYPE, lv0, lv1, lv2, lv3, lv4, lv5, \
(...skipping 27 matching lines...) Expand all
291 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv11, 11), \ 292 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv11, 11), \
292 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv12, 12), \ 293 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv12, 12), \
293 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv13, 13), \ 294 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv13, 13), \
294 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv14, 14), \ 295 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv14, 14), \
295 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv15, 15) 296 WASM_SIMD_CHECK_LANE(TYPE, value, LANE_TYPE, lv15, 15)
296 297
297 #define WASM_SIMD_CHECK_SPLAT16(TYPE, value, LANE_TYPE, lv) \ 298 #define WASM_SIMD_CHECK_SPLAT16(TYPE, value, LANE_TYPE, lv) \
298 WASM_SIMD_CHECK16(TYPE, value, LANE_TYPE, lv, lv, lv, lv, lv, lv, lv, lv, \ 299 WASM_SIMD_CHECK16(TYPE, value, LANE_TYPE, lv, lv, lv, lv, lv, lv, lv, lv, \
299 lv, lv, lv, lv, lv, lv, lv, lv) 300 lv, lv, lv, lv, lv, lv, lv, lv)
300 301
302 #define WASM_SIMD_CHECK_F32_LANE(value, lane_value, lane_index) \
303 WASM_IF(WASM_F32_NE(WASM_GET_LOCAL(lane_value), \
304 WASM_SIMD_F32x4_EXTRACT_LANE(lane_index, \
305 WASM_GET_LOCAL(value))), \
306 WASM_RETURN1(WASM_ZERO))
307
301 #define WASM_SIMD_CHECK_F32x4(value, lv0, lv1, lv2, lv3) \ 308 #define WASM_SIMD_CHECK_F32x4(value, lv0, lv1, lv2, lv3) \
302 WASM_SIMD_CHECK_F32_LANE(value, lv0, 0) \ 309 WASM_SIMD_CHECK_F32_LANE(value, lv0, 0) \
303 , WASM_SIMD_CHECK_F32_LANE(value, lv1, 1), \ 310 , WASM_SIMD_CHECK_F32_LANE(value, lv1, 1), \
304 WASM_SIMD_CHECK_F32_LANE(value, lv2, 2), \ 311 WASM_SIMD_CHECK_F32_LANE(value, lv2, 2), \
305 WASM_SIMD_CHECK_F32_LANE(value, lv3, 3) 312 WASM_SIMD_CHECK_F32_LANE(value, lv3, 3)
306 313
307 #define WASM_SIMD_CHECK_SPLAT_F32x4(value, lv) \ 314 #define WASM_SIMD_CHECK_SPLAT_F32x4(value, lv) \
308 WASM_SIMD_CHECK_F32x4(value, lv, lv, lv, lv) 315 WASM_SIMD_CHECK_F32x4(value, lv, lv, lv, lv)
309 316
317 #define WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, lane_index) \
318 WASM_IF(WASM_F32_GT(WASM_GET_LOCAL(low), \
319 WASM_SIMD_F32x4_EXTRACT_LANE(lane_index, \
320 WASM_GET_LOCAL(value))), \
321 WASM_RETURN1(WASM_ZERO)) \
322 , WASM_IF(WASM_F32_LT(WASM_GET_LOCAL(high), \
323 WASM_SIMD_F32x4_EXTRACT_LANE(lane_index, \
324 WASM_GET_LOCAL(value))), \
325 WASM_RETURN1(WASM_ZERO))
326
327 #define WASM_SIMD_CHECK_SPLAT_F32x4_ESTIMATE(value, low, high) \
328 WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, 0) \
329 , WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, 1), \
330 WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, 2), \
331 WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, 3)
332
310 #define TO_BYTE(val) static_cast<byte>(val) 333 #define TO_BYTE(val) static_cast<byte>(val)
311 #define WASM_SIMD_OP(op) kSimdPrefix, TO_BYTE(op) 334 #define WASM_SIMD_OP(op) kSimdPrefix, TO_BYTE(op)
312 #define WASM_SIMD_SPLAT(Type, x) x, WASM_SIMD_OP(kExpr##Type##Splat) 335 #define WASM_SIMD_SPLAT(Type, x) x, WASM_SIMD_OP(kExpr##Type##Splat)
313 #define WASM_SIMD_UNOP(op, x) x, WASM_SIMD_OP(op) 336 #define WASM_SIMD_UNOP(op, x) x, WASM_SIMD_OP(op)
314 #define WASM_SIMD_BINOP(op, x, y) x, y, WASM_SIMD_OP(op) 337 #define WASM_SIMD_BINOP(op, x, y) x, y, WASM_SIMD_OP(op)
315 #define WASM_SIMD_SHIFT_OP(op, shift, x) x, WASM_SIMD_OP(op), TO_BYTE(shift) 338 #define WASM_SIMD_SHIFT_OP(op, shift, x) x, WASM_SIMD_OP(op), TO_BYTE(shift)
316 #define WASM_SIMD_SELECT(format, x, y, z) \ 339 #define WASM_SIMD_SELECT(format, x, y, z) \
317 x, y, z, WASM_SIMD_OP(kExprS##format##Select) 340 x, y, z, WASM_SIMD_OP(kExprS##format##Select)
318 // Since boolean vectors can't be checked directly, materialize them into 341 // Since boolean vectors can't be checked directly, materialize them into
319 // integer vectors using a Select operation. 342 // integer vectors using a Select operation.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 WASM_SET_LOCAL(simd2, WASM_SIMD_F32x4_FROM_U32x4(WASM_GET_LOCAL(simd0))), 450 WASM_SET_LOCAL(simd2, WASM_SIMD_F32x4_FROM_U32x4(WASM_GET_LOCAL(simd0))),
428 WASM_SIMD_CHECK_SPLAT_F32x4(simd2, expected_unsigned), 451 WASM_SIMD_CHECK_SPLAT_F32x4(simd2, expected_unsigned),
429 WASM_RETURN1(WASM_ONE)); 452 WASM_RETURN1(WASM_ONE));
430 453
431 FOR_INT32_INPUTS(i) { 454 FOR_INT32_INPUTS(i) {
432 CHECK_EQ(1, r.Call(*i, static_cast<float>(*i), 455 CHECK_EQ(1, r.Call(*i, static_cast<float>(*i),
433 static_cast<float>(static_cast<uint32_t>(*i)))); 456 static_cast<float>(static_cast<uint32_t>(*i))));
434 } 457 }
435 } 458 }
436 459
437 void RunF32x4UnOpTest(WasmOpcode simd_op, FloatUnOp expected_op) { 460 void RunF32x4UnOpTest(WasmOpcode simd_op, FloatUnOp expected_op,
461 float error = 0.0f) {
438 FLAG_wasm_simd_prototype = true; 462 FLAG_wasm_simd_prototype = true;
439 WasmRunner<int32_t, float, float> r(kExecuteCompiled); 463 WasmRunner<int32_t, float, float, float> r(kExecuteCompiled);
440 byte a = 0; 464 byte a = 0;
441 byte expected = 1; 465 byte low = 1;
466 byte high = 2;
442 byte simd = r.AllocateLocal(kWasmS128); 467 byte simd = r.AllocateLocal(kWasmS128);
443 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 468 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
444 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 469 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
445 WASM_SIMD_CHECK_SPLAT_F32x4(simd, expected), WASM_RETURN1(WASM_ONE)); 470 WASM_SIMD_CHECK_SPLAT_F32x4_ESTIMATE(simd, low, high),
471 WASM_RETURN1(WASM_ONE));
446 472
447 FOR_FLOAT32_INPUTS(i) { 473 FOR_FLOAT32_INPUTS(i) {
448 if (SkipFPTestInput(*i)) continue; 474 if (SkipFPTestInput(*i)) continue;
449 float expected = expected_op(*i); 475 float expected = expected_op(*i);
450 if (SkipFPTestResult(expected)) continue; 476 if (SkipFPTestResult(expected)) continue;
451 CHECK_EQ(1, r.Call(*i, expected)); 477 float abs_error = std::abs(expected) * error;
478 CHECK_EQ(1, r.Call(*i, expected - abs_error, expected + abs_error));
452 } 479 }
453 } 480 }
454 481
455 WASM_EXEC_COMPILED_TEST(F32x4Abs) { RunF32x4UnOpTest(kExprF32x4Abs, std::abs); } 482 WASM_EXEC_COMPILED_TEST(F32x4Abs) { RunF32x4UnOpTest(kExprF32x4Abs, std::abs); }
456 WASM_EXEC_COMPILED_TEST(F32x4Neg) { RunF32x4UnOpTest(kExprF32x4Neg, Negate); } 483 WASM_EXEC_COMPILED_TEST(F32x4Neg) { RunF32x4UnOpTest(kExprF32x4Neg, Negate); }
457 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 484 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
458 485
459 #if SIMD_LOWERING_TARGET 486 #if SIMD_LOWERING_TARGET
460 WASM_EXEC_COMPILED_TEST(F32x4Sqrt) { RunF32x4UnOpTest(kExprF32x4Sqrt, Sqrt); } 487 WASM_EXEC_COMPILED_TEST(F32x4Sqrt) { RunF32x4UnOpTest(kExprF32x4Sqrt, Sqrt); }
461 #endif // SIMD_LOWERING_TARGET 488 #endif // SIMD_LOWERING_TARGET
462 489
490 #if V8_TARGET_ARCH_ARM
491 static const float kApproxError = 0.01f;
492
493 WASM_EXEC_COMPILED_TEST(F32x4RecipApprox) {
494 RunF32x4UnOpTest(kExprF32x4RecipApprox, Recip, kApproxError);
495 }
496
497 WASM_EXEC_COMPILED_TEST(F32x4RecipSqrtApprox) {
498 RunF32x4UnOpTest(kExprF32x4RecipSqrtApprox, RecipSqrt, kApproxError);
499 }
500 #endif // V8_TARGET_ARCH_ARM
501
463 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 502 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
464 void RunF32x4BinOpTest(WasmOpcode simd_op, FloatBinOp expected_op) { 503 void RunF32x4BinOpTest(WasmOpcode simd_op, FloatBinOp expected_op) {
465 FLAG_wasm_simd_prototype = true; 504 FLAG_wasm_simd_prototype = true;
466 WasmRunner<int32_t, float, float, float> r(kExecuteCompiled); 505 WasmRunner<int32_t, float, float, float> r(kExecuteCompiled);
467 byte a = 0; 506 byte a = 0;
468 byte b = 1; 507 byte b = 1;
469 byte expected = 2; 508 byte expected = 2;
470 byte simd0 = r.AllocateLocal(kWasmS128); 509 byte simd0 = r.AllocateLocal(kWasmS128);
471 byte simd1 = r.AllocateLocal(kWasmS128); 510 byte simd1 = r.AllocateLocal(kWasmS128);
472 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 511 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
473 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))), 512 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))),
474 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0), 513 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0),
475 WASM_GET_LOCAL(simd1))), 514 WASM_GET_LOCAL(simd1))),
476 WASM_SIMD_CHECK_SPLAT_F32x4(simd1, expected), WASM_RETURN1(WASM_ONE)); 515 WASM_SIMD_CHECK_SPLAT_F32x4(simd1, expected), WASM_RETURN1(WASM_ONE));
477 516
478 FOR_FLOAT32_INPUTS(i) { 517 FOR_FLOAT32_INPUTS(i) {
479 if (SkipFPTestInput(*i)) continue; 518 if (SkipFPTestInput(*i)) continue;
480 FOR_FLOAT32_INPUTS(j) { 519 FOR_FLOAT32_INPUTS(j) {
481 if (SkipFPTestInput(*j)) continue; 520 if (SkipFPTestInput(*j)) continue;
482 float expected = expected_op(*i, *j); 521 float expected = expected_op(*i, *j);
483 if (SkipFPTestResult(expected)) continue; 522 if (SkipFPTestResult(expected)) continue;
484 CHECK_EQ(1, r.Call(*i, *j, expected)); 523 CHECK_EQ(1, r.Call(*i, *j, expected));
485 } 524 }
486 } 525 }
487 } 526 }
488 527
489 WASM_EXEC_COMPILED_TEST(F32x4Add) { RunF32x4BinOpTest(kExprF32x4Add, Add); } 528 WASM_EXEC_COMPILED_TEST(F32x4Add) { RunF32x4BinOpTest(kExprF32x4Add, Add); }
490 WASM_EXEC_COMPILED_TEST(F32x4Sub) { RunF32x4BinOpTest(kExprF32x4Sub, Sub); } 529 WASM_EXEC_COMPILED_TEST(F32x4Sub) { RunF32x4BinOpTest(kExprF32x4Sub, Sub); }
530 WASM_EXEC_COMPILED_TEST(F32x4Mul) { RunF32x4BinOpTest(kExprF32x4Sub, Sub); }
531 WASM_EXEC_COMPILED_TEST(F32x4_Min) {
532 RunF32x4BinOpTest(kExprF32x4Min, Minimum);
533 }
534 WASM_EXEC_COMPILED_TEST(F32x4_Max) {
535 RunF32x4BinOpTest(kExprF32x4Max, Maximum);
536 }
491 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 537 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
492 538
493 #if SIMD_LOWERING_TARGET 539 #if SIMD_LOWERING_TARGET
494 WASM_EXEC_COMPILED_TEST(F32x4Mul) { RunF32x4BinOpTest(kExprF32x4Mul, Mul); }
495 WASM_EXEC_COMPILED_TEST(F32x4Div) { RunF32x4BinOpTest(kExprF32x4Div, Div); } 540 WASM_EXEC_COMPILED_TEST(F32x4Div) { RunF32x4BinOpTest(kExprF32x4Div, Div); }
496 WASM_EXEC_COMPILED_TEST(Simd_F32x4_Min) { 541 #endif // SIMD_LOWERING_TARGET
497 RunF32x4BinOpTest(kExprF32x4Min, Minimum); 542
543 #if V8_TARGET_ARCH_ARM
544 WASM_EXEC_COMPILED_TEST(F32x4RecipRefine) {
545 RunF32x4BinOpTest(kExprF32x4RecipRefine, RecipRefine);
498 } 546 }
499 WASM_EXEC_COMPILED_TEST(Simd_F32x4_Max) { 547
500 RunF32x4BinOpTest(kExprF32x4Max, Maximum); 548 WASM_EXEC_COMPILED_TEST(F32x4RecipSqrtRefine) {
549 RunF32x4BinOpTest(kExprF32x4RecipSqrtRefine, RecipSqrtRefine);
501 } 550 }
502 #endif // SIMD_LOWERING_TARGET 551 #endif // V8_TARGET_ARCH_ARM
503 552
504 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 553 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
505 void RunF32x4CompareOpTest(WasmOpcode simd_op, FloatCompareOp expected_op) { 554 void RunF32x4CompareOpTest(WasmOpcode simd_op, FloatCompareOp expected_op) {
506 FLAG_wasm_simd_prototype = true; 555 FLAG_wasm_simd_prototype = true;
507 WasmRunner<int32_t, float, float, int32_t> r(kExecuteCompiled); 556 WasmRunner<int32_t, float, float, int32_t> r(kExecuteCompiled);
508 byte a = 0; 557 byte a = 0;
509 byte b = 1; 558 byte b = 1;
510 byte expected = 2; 559 byte expected = 2;
511 byte simd0 = r.AllocateLocal(kWasmS128); 560 byte simd0 = r.AllocateLocal(kWasmS128);
512 byte simd1 = r.AllocateLocal(kWasmS128); 561 byte simd1 = r.AllocateLocal(kWasmS128);
513 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 562 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
514 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))), 563 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))),
515 WASM_SET_LOCAL(simd1, 564 WASM_SET_LOCAL(simd1,
516 WASM_SIMD_MATERIALIZE_BOOLS( 565 WASM_SIMD_MATERIALIZE_BOOLS(
517 32x4, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0), 566 32x4, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0),
518 WASM_GET_LOCAL(simd1)))), 567 WASM_GET_LOCAL(simd1)))),
519 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE); 568 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE);
520 569
521 FOR_FLOAT32_INPUTS(i) { 570 FOR_FLOAT32_INPUTS(i) {
522 if (SkipFPTestInput(*i)) continue; 571 if (SkipFPTestInput(*i)) continue;
523 FOR_FLOAT32_INPUTS(j) { 572 FOR_FLOAT32_INPUTS(j) {
524 if (SkipFPTestInput(*j)) continue; 573 if (SkipFPTestInput(*j)) continue;
525 float diff = *i - *j; 574 float diff = *i - *j;
526 if (SkipFPTestResult(diff)) continue; 575 if (SkipFPTestResult(diff)) continue;
527 CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); 576 CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j)));
528 } 577 }
529 } 578 }
530 } 579 }
531 580
532 WASM_EXEC_COMPILED_TEST(F32x4Equal) { 581 WASM_EXEC_COMPILED_TEST(F32x4Eq) { RunF32x4CompareOpTest(kExprF32x4Eq, Equal); }
533 RunF32x4CompareOpTest(kExprF32x4Eq, Equal); 582
583 WASM_EXEC_COMPILED_TEST(F32x4Ne) {
584 RunF32x4CompareOpTest(kExprF32x4Ne, NotEqual);
534 } 585 }
535 586
536 WASM_EXEC_COMPILED_TEST(F32x4NotEqual) { 587 WASM_EXEC_COMPILED_TEST(F32x4Gt) {
537 RunF32x4CompareOpTest(kExprF32x4Ne, NotEqual); 588 RunF32x4CompareOpTest(kExprF32x4Gt, Greater);
589 }
590
591 WASM_EXEC_COMPILED_TEST(F32x4Ge) {
592 RunF32x4CompareOpTest(kExprF32x4Ge, GreaterEqual);
593 }
594
595 WASM_EXEC_COMPILED_TEST(F32x4Lt) { RunF32x4CompareOpTest(kExprF32x4Lt, Less); }
596
597 WASM_EXEC_COMPILED_TEST(F32x4Le) {
598 RunF32x4CompareOpTest(kExprF32x4Le, LessEqual);
538 } 599 }
539 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 600 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
540 601
541 #if SIMD_LOWERING_TARGET
542 WASM_EXEC_COMPILED_TEST(F32x4LessThan) {
543 RunF32x4CompareOpTest(kExprF32x4Lt, Less);
544 }
545 WASM_EXEC_COMPILED_TEST(F32x4LessThanOrEqual) {
546 RunF32x4CompareOpTest(kExprF32x4Le, LessEqual);
547 }
548 WASM_EXEC_COMPILED_TEST(F32x4GreaterThan) {
549 RunF32x4CompareOpTest(kExprF32x4Gt, Greater);
550 }
551 WASM_EXEC_COMPILED_TEST(F32x4GreaterThanOrEqual) {
552 RunF32x4CompareOpTest(kExprF32x4Ge, GreaterEqual);
553 }
554 #endif // SIMD_LOWERING_TARGET
555
556 WASM_EXEC_COMPILED_TEST(I32x4Splat) { 602 WASM_EXEC_COMPILED_TEST(I32x4Splat) {
557 FLAG_wasm_simd_prototype = true; 603 FLAG_wasm_simd_prototype = true;
558 604
559 // Store SIMD value in a local variable, use extract lane to check lane values 605 // Store SIMD value in a local variable, use extract lane to check lane values
560 // This test is not a test for ExtractLane as Splat does not create 606 // This test is not a test for ExtractLane as Splat does not create
561 // interesting SIMD values. 607 // interesting SIMD values.
562 // 608 //
563 // SetLocal(1, I32x4Splat(Local(0))); 609 // SetLocal(1, I32x4Splat(Local(0)));
564 // For each lane index 610 // For each lane index
565 // if(Local(0) != I32x4ExtractLane(Local(1), index) 611 // if(Local(0) != I32x4ExtractLane(Local(1), index)
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 WASM_EXEC_COMPILED_TEST(S128And) { RunI32x4BinOpTest(kExprS128And, And); } 946 WASM_EXEC_COMPILED_TEST(S128And) { RunI32x4BinOpTest(kExprS128And, And); }
901 947
902 WASM_EXEC_COMPILED_TEST(S128Or) { RunI32x4BinOpTest(kExprS128Or, Or); } 948 WASM_EXEC_COMPILED_TEST(S128Or) { RunI32x4BinOpTest(kExprS128Or, Or); }
903 949
904 WASM_EXEC_COMPILED_TEST(S128Xor) { RunI32x4BinOpTest(kExprS128Xor, Xor); } 950 WASM_EXEC_COMPILED_TEST(S128Xor) { RunI32x4BinOpTest(kExprS128Xor, Xor); }
905 951
906 WASM_EXEC_COMPILED_TEST(I32x4Min) { 952 WASM_EXEC_COMPILED_TEST(I32x4Min) {
907 RunI32x4BinOpTest(kExprI32x4MinS, Minimum); 953 RunI32x4BinOpTest(kExprI32x4MinS, Minimum);
908 } 954 }
909 955
910 WASM_EXEC_COMPILED_TEST(I32x4Max) { 956 WASM_EXEC_COMPILED_TEST(I32x4MaxS) {
911 RunI32x4BinOpTest(kExprI32x4MaxS, Maximum); 957 RunI32x4BinOpTest(kExprI32x4MaxS, Maximum);
912 } 958 }
913 959
914 WASM_EXEC_COMPILED_TEST(Ui32x4Min) { 960 WASM_EXEC_COMPILED_TEST(I32x4MinU) {
915 RunI32x4BinOpTest(kExprI32x4MinU, UnsignedMinimum); 961 RunI32x4BinOpTest(kExprI32x4MinU, UnsignedMinimum);
916 } 962 }
917 963
918 WASM_EXEC_COMPILED_TEST(Ui32x4Max) { 964 WASM_EXEC_COMPILED_TEST(I32x4MaxU) {
919 RunI32x4BinOpTest(kExprI32x4MaxU, UnsignedMaximum); 965 RunI32x4BinOpTest(kExprI32x4MaxU, UnsignedMaximum);
920 } 966 }
921 967
922 void RunI32x4CompareOpTest(WasmOpcode simd_op, Int32BinOp expected_op) { 968 void RunI32x4CompareOpTest(WasmOpcode simd_op, Int32CompareOp expected_op) {
923 FLAG_wasm_simd_prototype = true; 969 FLAG_wasm_simd_prototype = true;
924 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 970 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
925 byte a = 0; 971 byte a = 0;
926 byte b = 1; 972 byte b = 1;
927 byte expected = 2; 973 byte expected = 2;
928 byte simd0 = r.AllocateLocal(kWasmS128); 974 byte simd0 = r.AllocateLocal(kWasmS128);
929 byte simd1 = r.AllocateLocal(kWasmS128); 975 byte simd1 = r.AllocateLocal(kWasmS128);
930 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 976 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
931 WASM_SET_LOCAL(simd1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(b))), 977 WASM_SET_LOCAL(simd1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(b))),
932 WASM_SET_LOCAL(simd1, 978 WASM_SET_LOCAL(simd1,
933 WASM_SIMD_MATERIALIZE_BOOLS( 979 WASM_SIMD_MATERIALIZE_BOOLS(
934 32x4, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0), 980 32x4, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0),
935 WASM_GET_LOCAL(simd1)))), 981 WASM_GET_LOCAL(simd1)))),
936 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE); 982 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE);
937 983
938 FOR_INT32_INPUTS(i) { 984 FOR_INT32_INPUTS(i) {
939 FOR_INT32_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 985 FOR_INT32_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
940 } 986 }
941 } 987 }
942 988
943 WASM_EXEC_COMPILED_TEST(I32x4Equal) { 989 WASM_EXEC_COMPILED_TEST(I32x4Eq) { RunI32x4CompareOpTest(kExprI32x4Eq, Equal); }
944 RunI32x4CompareOpTest(kExprI32x4Eq, Equal);
945 }
946 990
947 WASM_EXEC_COMPILED_TEST(I32x4NotEqual) { 991 WASM_EXEC_COMPILED_TEST(I32x4Ne) {
948 RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual); 992 RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual);
949 } 993 }
950 994
951 WASM_EXEC_COMPILED_TEST(I32x4Greater) { 995 WASM_EXEC_COMPILED_TEST(I32x4LtS) {
996 RunI32x4CompareOpTest(kExprI32x4LtS, Less);
997 }
998
999 WASM_EXEC_COMPILED_TEST(I32x4LeS) {
1000 RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual);
1001 }
1002
1003 WASM_EXEC_COMPILED_TEST(I32x4GtS) {
952 RunI32x4CompareOpTest(kExprI32x4GtS, Greater); 1004 RunI32x4CompareOpTest(kExprI32x4GtS, Greater);
953 } 1005 }
954 1006
955 WASM_EXEC_COMPILED_TEST(I32x4GreaterEqual) { 1007 WASM_EXEC_COMPILED_TEST(I32x4GeS) {
956 RunI32x4CompareOpTest(kExprI32x4GeS, GreaterEqual); 1008 RunI32x4CompareOpTest(kExprI32x4GeS, GreaterEqual);
957 } 1009 }
958 1010
959 WASM_EXEC_COMPILED_TEST(I32x4Less) { 1011 WASM_EXEC_COMPILED_TEST(I32x4LtU) {
960 RunI32x4CompareOpTest(kExprI32x4LtS, Less); 1012 RunI32x4CompareOpTest(kExprI32x4LtU, UnsignedLess);
961 } 1013 }
962 1014
963 WASM_EXEC_COMPILED_TEST(I32x4LessEqual) { 1015 WASM_EXEC_COMPILED_TEST(I32x4LeU) {
964 RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual); 1016 RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual);
965 } 1017 }
966 1018
967 WASM_EXEC_COMPILED_TEST(Ui32x4Greater) { 1019 WASM_EXEC_COMPILED_TEST(I32x4GtU) {
968 RunI32x4CompareOpTest(kExprI32x4GtU, UnsignedGreater); 1020 RunI32x4CompareOpTest(kExprI32x4GtU, UnsignedGreater);
969 } 1021 }
970 1022
971 WASM_EXEC_COMPILED_TEST(Ui32x4GreaterEqual) { 1023 WASM_EXEC_COMPILED_TEST(I32x4GeU) {
972 RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual); 1024 RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual);
973 } 1025 }
974 1026
975 WASM_EXEC_COMPILED_TEST(Ui32x4Less) {
976 RunI32x4CompareOpTest(kExprI32x4LtU, UnsignedLess);
977 }
978
979 WASM_EXEC_COMPILED_TEST(Ui32x4LessEqual) {
980 RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual);
981 }
982
983 void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op, 1027 void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op,
984 int shift) { 1028 int shift) {
985 FLAG_wasm_simd_prototype = true; 1029 FLAG_wasm_simd_prototype = true;
986 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1030 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
987 byte a = 0; 1031 byte a = 0;
988 byte expected = 1; 1032 byte expected = 1;
989 byte simd = r.AllocateLocal(kWasmS128); 1033 byte simd = r.AllocateLocal(kWasmS128);
990 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 1034 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
991 WASM_SET_LOCAL( 1035 WASM_SET_LOCAL(
992 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))), 1036 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 WASM_GET_LOCAL(simd1))), 1083 WASM_GET_LOCAL(simd1))),
1040 WASM_SIMD_CHECK_SPLAT8(I16x8, simd1, I32, expected), WASM_ONE); 1084 WASM_SIMD_CHECK_SPLAT8(I16x8, simd1, I32, expected), WASM_ONE);
1041 1085
1042 FOR_INT16_INPUTS(i) { 1086 FOR_INT16_INPUTS(i) {
1043 FOR_INT16_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1087 FOR_INT16_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1044 } 1088 }
1045 } 1089 }
1046 1090
1047 WASM_EXEC_COMPILED_TEST(I16x8Add) { RunI16x8BinOpTest(kExprI16x8Add, Add); } 1091 WASM_EXEC_COMPILED_TEST(I16x8Add) { RunI16x8BinOpTest(kExprI16x8Add, Add); }
1048 1092
1049 WASM_EXEC_COMPILED_TEST(I16x8AddSaturate) { 1093 WASM_EXEC_COMPILED_TEST(I16x8AddSaturateS) {
1050 RunI16x8BinOpTest(kExprI16x8AddSaturateS, AddSaturate); 1094 RunI16x8BinOpTest(kExprI16x8AddSaturateS, AddSaturate);
1051 } 1095 }
1052 1096
1053 WASM_EXEC_COMPILED_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); } 1097 WASM_EXEC_COMPILED_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); }
1054 1098
1055 WASM_EXEC_COMPILED_TEST(I16x8SubSaturate) { 1099 WASM_EXEC_COMPILED_TEST(I16x8SubSaturateS) {
1056 RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate); 1100 RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate);
1057 } 1101 }
1058 1102
1059 WASM_EXEC_COMPILED_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); } 1103 WASM_EXEC_COMPILED_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); }
1060 1104
1061 WASM_EXEC_COMPILED_TEST(I16x8Min) { 1105 WASM_EXEC_COMPILED_TEST(I16x8MinS) {
1062 RunI16x8BinOpTest(kExprI16x8MinS, Minimum); 1106 RunI16x8BinOpTest(kExprI16x8MinS, Minimum);
1063 } 1107 }
1064 1108
1065 WASM_EXEC_COMPILED_TEST(I16x8Max) { 1109 WASM_EXEC_COMPILED_TEST(I16x8MaxS) {
1066 RunI16x8BinOpTest(kExprI16x8MaxS, Maximum); 1110 RunI16x8BinOpTest(kExprI16x8MaxS, Maximum);
1067 } 1111 }
1068 1112
1069 WASM_EXEC_COMPILED_TEST(Ui16x8AddSaturate) { 1113 WASM_EXEC_COMPILED_TEST(I16x8AddSaturateU) {
1070 RunI16x8BinOpTest(kExprI16x8AddSaturateU, UnsignedAddSaturate); 1114 RunI16x8BinOpTest(kExprI16x8AddSaturateU, UnsignedAddSaturate);
1071 } 1115 }
1072 1116
1073 WASM_EXEC_COMPILED_TEST(Ui16x8SubSaturate) { 1117 WASM_EXEC_COMPILED_TEST(I16x8SubSaturateU) {
1074 RunI16x8BinOpTest(kExprI16x8SubSaturateU, UnsignedSubSaturate); 1118 RunI16x8BinOpTest(kExprI16x8SubSaturateU, UnsignedSubSaturate);
1075 } 1119 }
1076 1120
1077 WASM_EXEC_COMPILED_TEST(Ui16x8Min) { 1121 WASM_EXEC_COMPILED_TEST(I16x8MinU) {
1078 RunI16x8BinOpTest(kExprI16x8MinU, UnsignedMinimum); 1122 RunI16x8BinOpTest(kExprI16x8MinU, UnsignedMinimum);
1079 } 1123 }
1080 1124
1081 WASM_EXEC_COMPILED_TEST(Ui16x8Max) { 1125 WASM_EXEC_COMPILED_TEST(I16x8MaxU) {
1082 RunI16x8BinOpTest(kExprI16x8MaxU, UnsignedMaximum); 1126 RunI16x8BinOpTest(kExprI16x8MaxU, UnsignedMaximum);
1083 } 1127 }
1084 1128
1085 void RunI16x8CompareOpTest(WasmOpcode simd_op, Int16BinOp expected_op) { 1129 void RunI16x8CompareOpTest(WasmOpcode simd_op, Int16CompareOp expected_op) {
1086 FLAG_wasm_simd_prototype = true; 1130 FLAG_wasm_simd_prototype = true;
1087 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 1131 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
1088 byte a = 0; 1132 byte a = 0;
1089 byte b = 1; 1133 byte b = 1;
1090 byte expected = 2; 1134 byte expected = 2;
1091 byte simd0 = r.AllocateLocal(kWasmS128); 1135 byte simd0 = r.AllocateLocal(kWasmS128);
1092 byte simd1 = r.AllocateLocal(kWasmS128); 1136 byte simd1 = r.AllocateLocal(kWasmS128);
1093 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))), 1137 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))),
1094 WASM_SET_LOCAL(simd1, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(b))), 1138 WASM_SET_LOCAL(simd1, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(b))),
1095 WASM_SET_LOCAL(simd1, 1139 WASM_SET_LOCAL(simd1,
1096 WASM_SIMD_MATERIALIZE_BOOLS( 1140 WASM_SIMD_MATERIALIZE_BOOLS(
1097 16x8, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0), 1141 16x8, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0),
1098 WASM_GET_LOCAL(simd1)))), 1142 WASM_GET_LOCAL(simd1)))),
1099 WASM_SIMD_CHECK_SPLAT8(I16x8, simd1, I32, expected), WASM_ONE); 1143 WASM_SIMD_CHECK_SPLAT8(I16x8, simd1, I32, expected), WASM_ONE);
1100 1144
1101 FOR_INT16_INPUTS(i) { 1145 FOR_INT16_INPUTS(i) {
1102 FOR_INT16_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1146 FOR_INT16_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1103 } 1147 }
1104 } 1148 }
1105 1149
1106 WASM_EXEC_COMPILED_TEST(I16x8Equal) { 1150 WASM_EXEC_COMPILED_TEST(I16x8Eq) { RunI16x8CompareOpTest(kExprI16x8Eq, Equal); }
1107 RunI16x8CompareOpTest(kExprI16x8Eq, Equal);
1108 }
1109 1151
1110 WASM_EXEC_COMPILED_TEST(I16x8NotEqual) { 1152 WASM_EXEC_COMPILED_TEST(I16x8Ne) {
1111 RunI16x8CompareOpTest(kExprI16x8Ne, NotEqual); 1153 RunI16x8CompareOpTest(kExprI16x8Ne, NotEqual);
1112 } 1154 }
1113 1155
1114 WASM_EXEC_COMPILED_TEST(I16x8Greater) { 1156 WASM_EXEC_COMPILED_TEST(I16x8LtS) {
1157 RunI16x8CompareOpTest(kExprI16x8LtS, Less);
1158 }
1159
1160 WASM_EXEC_COMPILED_TEST(I16x8LeS) {
1161 RunI16x8CompareOpTest(kExprI16x8LeS, LessEqual);
1162 }
1163
1164 WASM_EXEC_COMPILED_TEST(I16x8GtS) {
1115 RunI16x8CompareOpTest(kExprI16x8GtS, Greater); 1165 RunI16x8CompareOpTest(kExprI16x8GtS, Greater);
1116 } 1166 }
1117 1167
1118 WASM_EXEC_COMPILED_TEST(I16x8GreaterEqual) { 1168 WASM_EXEC_COMPILED_TEST(I16x8GeS) {
1119 RunI16x8CompareOpTest(kExprI16x8GeS, GreaterEqual); 1169 RunI16x8CompareOpTest(kExprI16x8GeS, GreaterEqual);
1120 } 1170 }
1121 1171
1122 WASM_EXEC_COMPILED_TEST(I16x8Less) { 1172 WASM_EXEC_COMPILED_TEST(I16x8GtU) {
1123 RunI16x8CompareOpTest(kExprI16x8LtS, Less);
1124 }
1125
1126 WASM_EXEC_COMPILED_TEST(I16x8LessEqual) {
1127 RunI16x8CompareOpTest(kExprI16x8LeS, LessEqual);
1128 }
1129
1130 WASM_EXEC_COMPILED_TEST(Ui16x8Greater) {
1131 RunI16x8CompareOpTest(kExprI16x8GtU, UnsignedGreater); 1173 RunI16x8CompareOpTest(kExprI16x8GtU, UnsignedGreater);
1132 } 1174 }
1133 1175
1134 WASM_EXEC_COMPILED_TEST(Ui16x8GreaterEqual) { 1176 WASM_EXEC_COMPILED_TEST(I16x8GeU) {
1135 RunI16x8CompareOpTest(kExprI16x8GeU, UnsignedGreaterEqual); 1177 RunI16x8CompareOpTest(kExprI16x8GeU, UnsignedGreaterEqual);
1136 } 1178 }
1137 1179
1138 WASM_EXEC_COMPILED_TEST(Ui16x8Less) { 1180 WASM_EXEC_COMPILED_TEST(I16x8LtU) {
1139 RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess); 1181 RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess);
1140 } 1182 }
1141 1183
1142 WASM_EXEC_COMPILED_TEST(Ui16x8LessEqual) { 1184 WASM_EXEC_COMPILED_TEST(I16x8LeU) {
1143 RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual); 1185 RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual);
1144 } 1186 }
1145 1187
1146 void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op, 1188 void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op,
1147 int shift) { 1189 int shift) {
1148 FLAG_wasm_simd_prototype = true; 1190 FLAG_wasm_simd_prototype = true;
1149 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1191 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1150 byte a = 0; 1192 byte a = 0;
1151 byte expected = 1; 1193 byte expected = 1;
1152 byte simd = r.AllocateLocal(kWasmS128); 1194 byte simd = r.AllocateLocal(kWasmS128);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 WASM_GET_LOCAL(simd1))), 1241 WASM_GET_LOCAL(simd1))),
1200 WASM_SIMD_CHECK_SPLAT16(I8x16, simd1, I32, expected), WASM_ONE); 1242 WASM_SIMD_CHECK_SPLAT16(I8x16, simd1, I32, expected), WASM_ONE);
1201 1243
1202 FOR_INT8_INPUTS(i) { 1244 FOR_INT8_INPUTS(i) {
1203 FOR_INT8_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1245 FOR_INT8_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1204 } 1246 }
1205 } 1247 }
1206 1248
1207 WASM_EXEC_COMPILED_TEST(I8x16Add) { RunI8x16BinOpTest(kExprI8x16Add, Add); } 1249 WASM_EXEC_COMPILED_TEST(I8x16Add) { RunI8x16BinOpTest(kExprI8x16Add, Add); }
1208 1250
1209 WASM_EXEC_COMPILED_TEST(I8x16AddSaturate) { 1251 WASM_EXEC_COMPILED_TEST(I8x16AddSaturateS) {
1210 RunI8x16BinOpTest(kExprI8x16AddSaturateS, AddSaturate); 1252 RunI8x16BinOpTest(kExprI8x16AddSaturateS, AddSaturate);
1211 } 1253 }
1212 1254
1213 WASM_EXEC_COMPILED_TEST(I8x16Sub) { RunI8x16BinOpTest(kExprI8x16Sub, Sub); } 1255 WASM_EXEC_COMPILED_TEST(I8x16Sub) { RunI8x16BinOpTest(kExprI8x16Sub, Sub); }
1214 1256
1215 WASM_EXEC_COMPILED_TEST(I8x16SubSaturate) { 1257 WASM_EXEC_COMPILED_TEST(I8x16SubSaturateS) {
1216 RunI8x16BinOpTest(kExprI8x16SubSaturateS, SubSaturate); 1258 RunI8x16BinOpTest(kExprI8x16SubSaturateS, SubSaturate);
1217 } 1259 }
1218 1260
1219 WASM_EXEC_COMPILED_TEST(I8x16Mul) { RunI8x16BinOpTest(kExprI8x16Mul, Mul); } 1261 WASM_EXEC_COMPILED_TEST(I8x16Mul) { RunI8x16BinOpTest(kExprI8x16Mul, Mul); }
1220 1262
1221 WASM_EXEC_COMPILED_TEST(I8x16Min) { 1263 WASM_EXEC_COMPILED_TEST(I8x16MinS) {
1222 RunI8x16BinOpTest(kExprI8x16MinS, Minimum); 1264 RunI8x16BinOpTest(kExprI8x16MinS, Minimum);
1223 } 1265 }
1224 1266
1225 WASM_EXEC_COMPILED_TEST(I8x16Max) { 1267 WASM_EXEC_COMPILED_TEST(I8x16MaxS) {
1226 RunI8x16BinOpTest(kExprI8x16MaxS, Maximum); 1268 RunI8x16BinOpTest(kExprI8x16MaxS, Maximum);
1227 } 1269 }
1228 1270
1229 WASM_EXEC_COMPILED_TEST(Ui8x16AddSaturate) { 1271 WASM_EXEC_COMPILED_TEST(I8x16AddSaturateU) {
1230 RunI8x16BinOpTest(kExprI8x16AddSaturateU, UnsignedAddSaturate); 1272 RunI8x16BinOpTest(kExprI8x16AddSaturateU, UnsignedAddSaturate);
1231 } 1273 }
1232 1274
1233 WASM_EXEC_COMPILED_TEST(Ui8x16SubSaturate) { 1275 WASM_EXEC_COMPILED_TEST(I8x16SubSaturateU) {
1234 RunI8x16BinOpTest(kExprI8x16SubSaturateU, UnsignedSubSaturate); 1276 RunI8x16BinOpTest(kExprI8x16SubSaturateU, UnsignedSubSaturate);
1235 } 1277 }
1236 1278
1237 WASM_EXEC_COMPILED_TEST(Ui8x16Min) { 1279 WASM_EXEC_COMPILED_TEST(I8x16MinU) {
1238 RunI8x16BinOpTest(kExprI8x16MinU, UnsignedMinimum); 1280 RunI8x16BinOpTest(kExprI8x16MinU, UnsignedMinimum);
1239 } 1281 }
1240 1282
1241 WASM_EXEC_COMPILED_TEST(Ui8x16Max) { 1283 WASM_EXEC_COMPILED_TEST(I8x16MaxU) {
1242 RunI8x16BinOpTest(kExprI8x16MaxU, UnsignedMaximum); 1284 RunI8x16BinOpTest(kExprI8x16MaxU, UnsignedMaximum);
1243 } 1285 }
1244 1286
1245 void RunI8x16CompareOpTest(WasmOpcode simd_op, Int8BinOp expected_op) { 1287 void RunI8x16CompareOpTest(WasmOpcode simd_op, Int8CompareOp expected_op) {
1246 FLAG_wasm_simd_prototype = true; 1288 FLAG_wasm_simd_prototype = true;
1247 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 1289 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
1248 byte a = 0; 1290 byte a = 0;
1249 byte b = 1; 1291 byte b = 1;
1250 byte expected = 2; 1292 byte expected = 2;
1251 byte simd0 = r.AllocateLocal(kWasmS128); 1293 byte simd0 = r.AllocateLocal(kWasmS128);
1252 byte simd1 = r.AllocateLocal(kWasmS128); 1294 byte simd1 = r.AllocateLocal(kWasmS128);
1253 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))), 1295 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))),
1254 WASM_SET_LOCAL(simd1, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(b))), 1296 WASM_SET_LOCAL(simd1, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(b))),
1255 WASM_SET_LOCAL(simd1, 1297 WASM_SET_LOCAL(simd1,
1256 WASM_SIMD_MATERIALIZE_BOOLS( 1298 WASM_SIMD_MATERIALIZE_BOOLS(
1257 8x16, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0), 1299 8x16, WASM_SIMD_BINOP(simd_op, WASM_GET_LOCAL(simd0),
1258 WASM_GET_LOCAL(simd1)))), 1300 WASM_GET_LOCAL(simd1)))),
1259 WASM_SIMD_CHECK_SPLAT16(I8x16, simd1, I32, expected), WASM_ONE); 1301 WASM_SIMD_CHECK_SPLAT16(I8x16, simd1, I32, expected), WASM_ONE);
1260 1302
1261 FOR_INT8_INPUTS(i) { 1303 FOR_INT8_INPUTS(i) {
1262 FOR_INT8_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 1304 FOR_INT8_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
1263 } 1305 }
1264 } 1306 }
1265 1307
1266 WASM_EXEC_COMPILED_TEST(I8x16Equal) { 1308 WASM_EXEC_COMPILED_TEST(I8x16Eq) { RunI8x16CompareOpTest(kExprI8x16Eq, Equal); }
1267 RunI8x16CompareOpTest(kExprI8x16Eq, Equal);
1268 }
1269 1309
1270 WASM_EXEC_COMPILED_TEST(I8x16NotEqual) { 1310 WASM_EXEC_COMPILED_TEST(I8x16Ne) {
1271 RunI8x16CompareOpTest(kExprI8x16Ne, NotEqual); 1311 RunI8x16CompareOpTest(kExprI8x16Ne, NotEqual);
1272 } 1312 }
1273 1313
1274 WASM_EXEC_COMPILED_TEST(I8x16Greater) { 1314 WASM_EXEC_COMPILED_TEST(I8x16GtS) {
1275 RunI8x16CompareOpTest(kExprI8x16GtS, Greater); 1315 RunI8x16CompareOpTest(kExprI8x16GtS, Greater);
1276 } 1316 }
1277 1317
1278 WASM_EXEC_COMPILED_TEST(I8x16GreaterEqual) { 1318 WASM_EXEC_COMPILED_TEST(I8x16GeS) {
1279 RunI8x16CompareOpTest(kExprI8x16GeS, GreaterEqual); 1319 RunI8x16CompareOpTest(kExprI8x16GeS, GreaterEqual);
1280 } 1320 }
1281 1321
1282 WASM_EXEC_COMPILED_TEST(I8x16Less) { 1322 WASM_EXEC_COMPILED_TEST(I8x16LtS) {
1283 RunI8x16CompareOpTest(kExprI8x16LtS, Less); 1323 RunI8x16CompareOpTest(kExprI8x16LtS, Less);
1284 } 1324 }
1285 1325
1286 WASM_EXEC_COMPILED_TEST(I8x16LessEqual) { 1326 WASM_EXEC_COMPILED_TEST(I8x16LeS) {
1287 RunI8x16CompareOpTest(kExprI8x16LeS, LessEqual); 1327 RunI8x16CompareOpTest(kExprI8x16LeS, LessEqual);
1288 } 1328 }
1289 1329
1290 WASM_EXEC_COMPILED_TEST(Ui8x16Greater) { 1330 WASM_EXEC_COMPILED_TEST(I8x16GtU) {
1291 RunI8x16CompareOpTest(kExprI8x16GtU, UnsignedGreater); 1331 RunI8x16CompareOpTest(kExprI8x16GtU, UnsignedGreater);
1292 } 1332 }
1293 1333
1294 WASM_EXEC_COMPILED_TEST(Ui8x16GreaterEqual) { 1334 WASM_EXEC_COMPILED_TEST(I8x16GeU) {
1295 RunI8x16CompareOpTest(kExprI8x16GeU, UnsignedGreaterEqual); 1335 RunI8x16CompareOpTest(kExprI8x16GeU, UnsignedGreaterEqual);
1296 } 1336 }
1297 1337
1298 WASM_EXEC_COMPILED_TEST(Ui8x16Less) { 1338 WASM_EXEC_COMPILED_TEST(I8x16LtU) {
1299 RunI8x16CompareOpTest(kExprI8x16LtU, UnsignedLess); 1339 RunI8x16CompareOpTest(kExprI8x16LtU, UnsignedLess);
1300 } 1340 }
1301 1341
1302 WASM_EXEC_COMPILED_TEST(Ui8x16LessEqual) { 1342 WASM_EXEC_COMPILED_TEST(I8x16LeU) {
1303 RunI8x16CompareOpTest(kExprI8x16LeU, UnsignedLessEqual); 1343 RunI8x16CompareOpTest(kExprI8x16LeU, UnsignedLessEqual);
1304 } 1344 }
1305 1345
1306 void RunI8x16ShiftOpTest(WasmOpcode simd_op, Int8ShiftOp expected_op, 1346 void RunI8x16ShiftOpTest(WasmOpcode simd_op, Int8ShiftOp expected_op,
1307 int shift) { 1347 int shift) {
1308 FLAG_wasm_simd_prototype = true; 1348 FLAG_wasm_simd_prototype = true;
1309 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1349 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1310 byte a = 0; 1350 byte a = 0;
1311 byte expected = 1; 1351 byte expected = 1;
1312 byte simd = r.AllocateLocal(kWasmS128); 1352 byte simd = r.AllocateLocal(kWasmS128);
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1772 WASM_SET_GLOBAL(0, WASM_SIMD_F32x4_REPLACE_LANE(3, WASM_GET_GLOBAL(0), 1812 WASM_SET_GLOBAL(0, WASM_SIMD_F32x4_REPLACE_LANE(3, WASM_GET_GLOBAL(0),
1773 WASM_F32(65.0))), 1813 WASM_F32(65.0))),
1774 WASM_I32V(1)); 1814 WASM_I32V(1));
1775 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(0)); } 1815 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(0)); }
1776 CHECK_EQ(*global, 13.5); 1816 CHECK_EQ(*global, 13.5);
1777 CHECK_EQ(*(global + 1), 45.5); 1817 CHECK_EQ(*(global + 1), 45.5);
1778 CHECK_EQ(*(global + 2), 32.25); 1818 CHECK_EQ(*(global + 2), 32.25);
1779 CHECK_EQ(*(global + 3), 65.0); 1819 CHECK_EQ(*(global + 3), 65.0);
1780 } 1820 }
1781 #endif // SIMD_LOWERING_TARGET 1821 #endif // SIMD_LOWERING_TARGET
OLDNEW
« no previous file with comments | « src/wasm/wasm-opcodes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698