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

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

Issue 2594993002: [wasm] Rename wasm::LocalType to wasm::ValueType and kAst* to kWasm* (Closed)
Patch Set: Fix inspector tests Created 3 years, 12 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/wasm/wasm-macro-gen.h" 5 #include "src/wasm/wasm-macro-gen.h"
6 6
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
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 89
90 #define WASM_SIMD_CHECK_SPLAT4_F32(TYPE, value, lv) \ 90 #define WASM_SIMD_CHECK_SPLAT4_F32(TYPE, value, lv) \
91 WASM_SIMD_CHECK4_F32(TYPE, value, lv, lv, lv, lv) 91 WASM_SIMD_CHECK4_F32(TYPE, value, lv, lv, lv, lv)
92 92
93 #if V8_TARGET_ARCH_ARM 93 #if V8_TARGET_ARCH_ARM
94 WASM_EXEC_TEST(F32x4Splat) { 94 WASM_EXEC_TEST(F32x4Splat) {
95 FLAG_wasm_simd_prototype = true; 95 FLAG_wasm_simd_prototype = true;
96 96
97 WasmRunner<int32_t, float> r(kExecuteCompiled); 97 WasmRunner<int32_t, float> r(kExecuteCompiled);
98 byte lane_val = 0; 98 byte lane_val = 0;
99 byte simd = r.AllocateLocal(kAstS128); 99 byte simd = r.AllocateLocal(kWasmS128);
100 BUILD(r, WASM_BLOCK(WASM_SET_LOCAL(simd, WASM_SIMD_F32x4_SPLAT( 100 BUILD(r, WASM_BLOCK(WASM_SET_LOCAL(simd, WASM_SIMD_F32x4_SPLAT(
101 WASM_GET_LOCAL(lane_val))), 101 WASM_GET_LOCAL(lane_val))),
102 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd, lane_val), 102 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd, lane_val),
103 WASM_RETURN1(WASM_ONE))); 103 WASM_RETURN1(WASM_ONE)));
104 104
105 FOR_FLOAT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i)); } 105 FOR_FLOAT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i)); }
106 } 106 }
107 107
108 WASM_EXEC_TEST(F32x4ReplaceLane) { 108 WASM_EXEC_TEST(F32x4ReplaceLane) {
109 FLAG_wasm_simd_prototype = true; 109 FLAG_wasm_simd_prototype = true;
110 WasmRunner<int32_t, float, float> r(kExecuteCompiled); 110 WasmRunner<int32_t, float, float> r(kExecuteCompiled);
111 byte old_val = 0; 111 byte old_val = 0;
112 byte new_val = 1; 112 byte new_val = 1;
113 byte simd = r.AllocateLocal(kAstS128); 113 byte simd = r.AllocateLocal(kWasmS128);
114 BUILD(r, WASM_BLOCK( 114 BUILD(r, WASM_BLOCK(
115 WASM_SET_LOCAL(simd, 115 WASM_SET_LOCAL(simd,
116 WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(old_val))), 116 WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(old_val))),
117 WASM_SET_LOCAL( 117 WASM_SET_LOCAL(
118 simd, WASM_SIMD_F32x4_REPLACE_LANE(0, WASM_GET_LOCAL(simd), 118 simd, WASM_SIMD_F32x4_REPLACE_LANE(0, WASM_GET_LOCAL(simd),
119 WASM_GET_LOCAL(new_val))), 119 WASM_GET_LOCAL(new_val))),
120 WASM_SIMD_CHECK4(F32x4, simd, F32, new_val, old_val, old_val, 120 WASM_SIMD_CHECK4(F32x4, simd, F32, new_val, old_val, old_val,
121 old_val), 121 old_val),
122 WASM_SET_LOCAL( 122 WASM_SET_LOCAL(
123 simd, WASM_SIMD_F32x4_REPLACE_LANE(1, WASM_GET_LOCAL(simd), 123 simd, WASM_SIMD_F32x4_REPLACE_LANE(1, WASM_GET_LOCAL(simd),
(...skipping 14 matching lines...) Expand all
138 CHECK_EQ(1, r.Call(3.14159, -1.5)); 138 CHECK_EQ(1, r.Call(3.14159, -1.5));
139 } 139 }
140 140
141 // Tests both signed and unsigned conversion. 141 // Tests both signed and unsigned conversion.
142 WASM_EXEC_TEST(F32x4FromInt32x4) { 142 WASM_EXEC_TEST(F32x4FromInt32x4) {
143 FLAG_wasm_simd_prototype = true; 143 FLAG_wasm_simd_prototype = true;
144 WasmRunner<int32_t, int32_t, float, float> r(kExecuteCompiled); 144 WasmRunner<int32_t, int32_t, float, float> r(kExecuteCompiled);
145 byte a = 0; 145 byte a = 0;
146 byte expected_signed = 1; 146 byte expected_signed = 1;
147 byte expected_unsigned = 2; 147 byte expected_unsigned = 2;
148 byte simd0 = r.AllocateLocal(kAstS128); 148 byte simd0 = r.AllocateLocal(kWasmS128);
149 byte simd1 = r.AllocateLocal(kAstS128); 149 byte simd1 = r.AllocateLocal(kWasmS128);
150 byte simd2 = r.AllocateLocal(kAstS128); 150 byte simd2 = r.AllocateLocal(kWasmS128);
151 BUILD(r, WASM_BLOCK( 151 BUILD(r, WASM_BLOCK(
152 WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 152 WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
153 WASM_SET_LOCAL( 153 WASM_SET_LOCAL(
154 simd1, WASM_SIMD_F32x4_FROM_I32x4(WASM_GET_LOCAL(simd0))), 154 simd1, WASM_SIMD_F32x4_FROM_I32x4(WASM_GET_LOCAL(simd0))),
155 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd1, expected_signed), 155 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd1, expected_signed),
156 WASM_SET_LOCAL( 156 WASM_SET_LOCAL(
157 simd2, WASM_SIMD_F32x4_FROM_U32x4(WASM_GET_LOCAL(simd0))), 157 simd2, WASM_SIMD_F32x4_FROM_U32x4(WASM_GET_LOCAL(simd0))),
158 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd2, expected_unsigned), 158 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd2, expected_unsigned),
159 WASM_RETURN1(WASM_ONE))); 159 WASM_RETURN1(WASM_ONE)));
160 160
161 FOR_INT32_INPUTS(i) { 161 FOR_INT32_INPUTS(i) {
162 CHECK_EQ(1, r.Call(*i, static_cast<float>(*i), 162 CHECK_EQ(1, r.Call(*i, static_cast<float>(*i),
163 static_cast<float>(static_cast<uint32_t>(*i)))); 163 static_cast<float>(static_cast<uint32_t>(*i))));
164 } 164 }
165 } 165 }
166 166
167 WASM_EXEC_TEST(S32x4Select) { 167 WASM_EXEC_TEST(S32x4Select) {
168 FLAG_wasm_simd_prototype = true; 168 FLAG_wasm_simd_prototype = true;
169 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 169 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
170 byte val1 = 0; 170 byte val1 = 0;
171 byte val2 = 1; 171 byte val2 = 1;
172 byte mask = r.AllocateLocal(kAstS128); 172 byte mask = r.AllocateLocal(kWasmS128);
173 byte src1 = r.AllocateLocal(kAstS128); 173 byte src1 = r.AllocateLocal(kWasmS128);
174 byte src2 = r.AllocateLocal(kAstS128); 174 byte src2 = r.AllocateLocal(kWasmS128);
175 BUILD(r, 175 BUILD(r,
176 WASM_BLOCK( 176 WASM_BLOCK(
177 WASM_SET_LOCAL(mask, WASM_SIMD_I32x4_SPLAT(WASM_ZERO)), 177 WASM_SET_LOCAL(mask, WASM_SIMD_I32x4_SPLAT(WASM_ZERO)),
178 WASM_SET_LOCAL(src1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(val1))), 178 WASM_SET_LOCAL(src1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(val1))),
179 WASM_SET_LOCAL(src2, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(val2))), 179 WASM_SET_LOCAL(src2, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(val2))),
180 WASM_SET_LOCAL(mask, WASM_SIMD_I32x4_REPLACE_LANE( 180 WASM_SET_LOCAL(mask, WASM_SIMD_I32x4_REPLACE_LANE(
181 1, WASM_GET_LOCAL(mask), WASM_I32V(-1))), 181 1, WASM_GET_LOCAL(mask), WASM_I32V(-1))),
182 WASM_SET_LOCAL(mask, WASM_SIMD_I32x4_REPLACE_LANE( 182 WASM_SET_LOCAL(mask, WASM_SIMD_I32x4_REPLACE_LANE(
183 2, WASM_GET_LOCAL(mask), WASM_I32V(-1))), 183 2, WASM_GET_LOCAL(mask), WASM_I32V(-1))),
184 WASM_SET_LOCAL(mask, WASM_SIMD_S32x4_SELECT(WASM_GET_LOCAL(mask), 184 WASM_SET_LOCAL(mask, WASM_SIMD_S32x4_SELECT(WASM_GET_LOCAL(mask),
185 WASM_GET_LOCAL(src1), 185 WASM_GET_LOCAL(src1),
186 WASM_GET_LOCAL(src2))), 186 WASM_GET_LOCAL(src2))),
187 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val2, 0), 187 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val2, 0),
188 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val1, 1), 188 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val1, 1),
189 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val1, 2), 189 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val1, 2),
190 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val2, 3), 190 WASM_SIMD_CHECK_LANE(I32x4, mask, I32, val2, 3),
191 WASM_RETURN1(WASM_ONE))); 191 WASM_RETURN1(WASM_ONE)));
192 192
193 CHECK_EQ(1, r.Call(0x1234, 0x5678)); 193 CHECK_EQ(1, r.Call(0x1234, 0x5678));
194 } 194 }
195 195
196 void RunF32x4UnOpTest(WasmOpcode simd_op, FloatUnOp expected_op) { 196 void RunF32x4UnOpTest(WasmOpcode simd_op, FloatUnOp expected_op) {
197 FLAG_wasm_simd_prototype = true; 197 FLAG_wasm_simd_prototype = true;
198 WasmRunner<int32_t, float, float> r(kExecuteCompiled); 198 WasmRunner<int32_t, float, float> r(kExecuteCompiled);
199 byte a = 0; 199 byte a = 0;
200 byte expected = 1; 200 byte expected = 1;
201 byte simd = r.AllocateLocal(kAstS128); 201 byte simd = r.AllocateLocal(kWasmS128);
202 BUILD(r, WASM_BLOCK( 202 BUILD(r, WASM_BLOCK(
203 WASM_SET_LOCAL(simd, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 203 WASM_SET_LOCAL(simd, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
204 WASM_SET_LOCAL( 204 WASM_SET_LOCAL(
205 simd, WASM_SIMD_UNOP(simd_op & 0xffu, WASM_GET_LOCAL(simd))), 205 simd, WASM_SIMD_UNOP(simd_op & 0xffu, WASM_GET_LOCAL(simd))),
206 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd, expected), 206 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd, expected),
207 WASM_RETURN1(WASM_ONE))); 207 WASM_RETURN1(WASM_ONE)));
208 208
209 FOR_FLOAT32_INPUTS(i) { 209 FOR_FLOAT32_INPUTS(i) {
210 if (std::isnan(*i)) continue; 210 if (std::isnan(*i)) continue;
211 CHECK_EQ(1, r.Call(*i, expected_op(*i))); 211 CHECK_EQ(1, r.Call(*i, expected_op(*i)));
212 } 212 }
213 } 213 }
214 214
215 WASM_EXEC_TEST(F32x4Abs) { RunF32x4UnOpTest(kExprF32x4Abs, std::abs); } 215 WASM_EXEC_TEST(F32x4Abs) { RunF32x4UnOpTest(kExprF32x4Abs, std::abs); }
216 WASM_EXEC_TEST(F32x4Neg) { RunF32x4UnOpTest(kExprF32x4Neg, Negate); } 216 WASM_EXEC_TEST(F32x4Neg) { RunF32x4UnOpTest(kExprF32x4Neg, Negate); }
217 217
218 void RunF32x4BinOpTest(WasmOpcode simd_op, FloatBinOp expected_op) { 218 void RunF32x4BinOpTest(WasmOpcode simd_op, FloatBinOp expected_op) {
219 FLAG_wasm_simd_prototype = true; 219 FLAG_wasm_simd_prototype = true;
220 WasmRunner<int32_t, float, float, float> r(kExecuteCompiled); 220 WasmRunner<int32_t, float, float, float> r(kExecuteCompiled);
221 byte a = 0; 221 byte a = 0;
222 byte b = 1; 222 byte b = 1;
223 byte expected = 2; 223 byte expected = 2;
224 byte simd0 = r.AllocateLocal(kAstS128); 224 byte simd0 = r.AllocateLocal(kWasmS128);
225 byte simd1 = r.AllocateLocal(kAstS128); 225 byte simd1 = r.AllocateLocal(kWasmS128);
226 BUILD(r, WASM_BLOCK( 226 BUILD(r, WASM_BLOCK(
227 WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 227 WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
228 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))), 228 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))),
229 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op & 0xffu, 229 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op & 0xffu,
230 WASM_GET_LOCAL(simd0), 230 WASM_GET_LOCAL(simd0),
231 WASM_GET_LOCAL(simd1))), 231 WASM_GET_LOCAL(simd1))),
232 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd1, expected), 232 WASM_SIMD_CHECK_SPLAT4_F32(F32x4, simd1, expected),
233 WASM_RETURN1(WASM_ONE))); 233 WASM_RETURN1(WASM_ONE)));
234 234
235 FOR_FLOAT32_INPUTS(i) { 235 FOR_FLOAT32_INPUTS(i) {
236 if (std::isnan(*i)) continue; 236 if (std::isnan(*i)) continue;
237 FOR_FLOAT32_INPUTS(j) { 237 FOR_FLOAT32_INPUTS(j) {
238 if (std::isnan(*j)) continue; 238 if (std::isnan(*j)) continue;
239 CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); 239 CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j)));
240 } 240 }
241 } 241 }
242 } 242 }
243 243
244 WASM_EXEC_TEST(F32x4Add) { RunF32x4BinOpTest(kExprF32x4Add, Add); } 244 WASM_EXEC_TEST(F32x4Add) { RunF32x4BinOpTest(kExprF32x4Add, Add); }
245 WASM_EXEC_TEST(F32x4Sub) { RunF32x4BinOpTest(kExprF32x4Sub, Sub); } 245 WASM_EXEC_TEST(F32x4Sub) { RunF32x4BinOpTest(kExprF32x4Sub, Sub); }
246 246
247 void RunF32x4CompareOpTest(WasmOpcode simd_op, FloatCompareOp expected_op) { 247 void RunF32x4CompareOpTest(WasmOpcode simd_op, FloatCompareOp expected_op) {
248 FLAG_wasm_simd_prototype = true; 248 FLAG_wasm_simd_prototype = true;
249 WasmRunner<int32_t, float, float, int32_t> r(kExecuteCompiled); 249 WasmRunner<int32_t, float, float, int32_t> r(kExecuteCompiled);
250 byte a = 0; 250 byte a = 0;
251 byte b = 1; 251 byte b = 1;
252 byte expected = 2; 252 byte expected = 2;
253 byte simd0 = r.AllocateLocal(kAstS128); 253 byte simd0 = r.AllocateLocal(kWasmS128);
254 byte simd1 = r.AllocateLocal(kAstS128); 254 byte simd1 = r.AllocateLocal(kWasmS128);
255 BUILD(r, WASM_BLOCK( 255 BUILD(r, WASM_BLOCK(
256 WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 256 WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
257 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))), 257 WASM_SET_LOCAL(simd1, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(b))),
258 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op & 0xffu, 258 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op & 0xffu,
259 WASM_GET_LOCAL(simd0), 259 WASM_GET_LOCAL(simd0),
260 WASM_GET_LOCAL(simd1))), 260 WASM_GET_LOCAL(simd1))),
261 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), 261 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected),
262 WASM_RETURN1(WASM_ONE))); 262 WASM_RETURN1(WASM_ONE)));
263 263
264 FOR_FLOAT32_INPUTS(i) { 264 FOR_FLOAT32_INPUTS(i) {
(...skipping 17 matching lines...) Expand all
282 // interesting SIMD values. 282 // interesting SIMD values.
283 // 283 //
284 // SetLocal(1, I32x4Splat(Local(0))); 284 // SetLocal(1, I32x4Splat(Local(0)));
285 // For each lane index 285 // For each lane index
286 // if(Local(0) != I32x4ExtractLane(Local(1), index) 286 // if(Local(0) != I32x4ExtractLane(Local(1), index)
287 // return 0 287 // return 0
288 // 288 //
289 // return 1 289 // return 1
290 WasmRunner<int32_t, int32_t> r(kExecuteCompiled); 290 WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
291 byte lane_val = 0; 291 byte lane_val = 0;
292 byte simd = r.AllocateLocal(kAstS128); 292 byte simd = r.AllocateLocal(kWasmS128);
293 BUILD(r, WASM_BLOCK(WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT( 293 BUILD(r, WASM_BLOCK(WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(
294 WASM_GET_LOCAL(lane_val))), 294 WASM_GET_LOCAL(lane_val))),
295 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, lane_val), 295 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, lane_val),
296 WASM_RETURN1(WASM_ONE))); 296 WASM_RETURN1(WASM_ONE)));
297 297
298 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i)); } 298 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i)); }
299 } 299 }
300 300
301 WASM_EXEC_TEST(I32x4ReplaceLane) { 301 WASM_EXEC_TEST(I32x4ReplaceLane) {
302 FLAG_wasm_simd_prototype = true; 302 FLAG_wasm_simd_prototype = true;
303 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 303 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
304 byte old_val = 0; 304 byte old_val = 0;
305 byte new_val = 1; 305 byte new_val = 1;
306 byte simd = r.AllocateLocal(kAstS128); 306 byte simd = r.AllocateLocal(kWasmS128);
307 BUILD(r, WASM_BLOCK( 307 BUILD(r, WASM_BLOCK(
308 WASM_SET_LOCAL(simd, 308 WASM_SET_LOCAL(simd,
309 WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(old_val))), 309 WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(old_val))),
310 WASM_SET_LOCAL( 310 WASM_SET_LOCAL(
311 simd, WASM_SIMD_I32x4_REPLACE_LANE(0, WASM_GET_LOCAL(simd), 311 simd, WASM_SIMD_I32x4_REPLACE_LANE(0, WASM_GET_LOCAL(simd),
312 WASM_GET_LOCAL(new_val))), 312 WASM_GET_LOCAL(new_val))),
313 WASM_SIMD_CHECK4(I32x4, simd, I32, new_val, old_val, old_val, 313 WASM_SIMD_CHECK4(I32x4, simd, I32, new_val, old_val, old_val,
314 old_val), 314 old_val),
315 WASM_SET_LOCAL( 315 WASM_SET_LOCAL(
316 simd, WASM_SIMD_I32x4_REPLACE_LANE(1, WASM_GET_LOCAL(simd), 316 simd, WASM_SIMD_I32x4_REPLACE_LANE(1, WASM_GET_LOCAL(simd),
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 return result; 373 return result;
374 } 374 }
375 375
376 // Tests both signed and unsigned conversion. 376 // Tests both signed and unsigned conversion.
377 WASM_EXEC_TEST(I32x4FromFloat32x4) { 377 WASM_EXEC_TEST(I32x4FromFloat32x4) {
378 FLAG_wasm_simd_prototype = true; 378 FLAG_wasm_simd_prototype = true;
379 WasmRunner<int32_t, float, int32_t, int32_t> r(kExecuteCompiled); 379 WasmRunner<int32_t, float, int32_t, int32_t> r(kExecuteCompiled);
380 byte a = 0; 380 byte a = 0;
381 byte expected_signed = 1; 381 byte expected_signed = 1;
382 byte expected_unsigned = 2; 382 byte expected_unsigned = 2;
383 byte simd0 = r.AllocateLocal(kAstS128); 383 byte simd0 = r.AllocateLocal(kWasmS128);
384 byte simd1 = r.AllocateLocal(kAstS128); 384 byte simd1 = r.AllocateLocal(kWasmS128);
385 byte simd2 = r.AllocateLocal(kAstS128); 385 byte simd2 = r.AllocateLocal(kWasmS128);
386 BUILD(r, WASM_BLOCK( 386 BUILD(r, WASM_BLOCK(
387 WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))), 387 WASM_SET_LOCAL(simd0, WASM_SIMD_F32x4_SPLAT(WASM_GET_LOCAL(a))),
388 WASM_SET_LOCAL( 388 WASM_SET_LOCAL(
389 simd1, WASM_SIMD_I32x4_FROM_F32x4(WASM_GET_LOCAL(simd0))), 389 simd1, WASM_SIMD_I32x4_FROM_F32x4(WASM_GET_LOCAL(simd0))),
390 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected_signed), 390 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected_signed),
391 WASM_SET_LOCAL( 391 WASM_SET_LOCAL(
392 simd2, WASM_SIMD_U32x4_FROM_F32x4(WASM_GET_LOCAL(simd0))), 392 simd2, WASM_SIMD_U32x4_FROM_F32x4(WASM_GET_LOCAL(simd0))),
393 WASM_SIMD_CHECK_SPLAT4(I32x4, simd2, I32, expected_unsigned), 393 WASM_SIMD_CHECK_SPLAT4(I32x4, simd2, I32, expected_unsigned),
394 WASM_RETURN1(WASM_ONE))); 394 WASM_RETURN1(WASM_ONE)));
395 395
396 FOR_FLOAT32_INPUTS(i) { 396 FOR_FLOAT32_INPUTS(i) {
397 int32_t signed_value = ConvertToInt(*i, false); 397 int32_t signed_value = ConvertToInt(*i, false);
398 int32_t unsigned_value = ConvertToInt(*i, true); 398 int32_t unsigned_value = ConvertToInt(*i, true);
399 CHECK_EQ(1, r.Call(*i, signed_value, unsigned_value)); 399 CHECK_EQ(1, r.Call(*i, signed_value, unsigned_value));
400 } 400 }
401 } 401 }
402 #endif // V8_TARGET_ARCH_ARM 402 #endif // V8_TARGET_ARCH_ARM
403 403
404 void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) { 404 void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) {
405 FLAG_wasm_simd_prototype = true; 405 FLAG_wasm_simd_prototype = true;
406 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 406 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
407 byte a = 0; 407 byte a = 0;
408 byte b = 1; 408 byte b = 1;
409 byte expected = 2; 409 byte expected = 2;
410 byte simd0 = r.AllocateLocal(kAstS128); 410 byte simd0 = r.AllocateLocal(kWasmS128);
411 byte simd1 = r.AllocateLocal(kAstS128); 411 byte simd1 = r.AllocateLocal(kWasmS128);
412 BUILD(r, WASM_BLOCK( 412 BUILD(r, WASM_BLOCK(
413 WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 413 WASM_SET_LOCAL(simd0, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
414 WASM_SET_LOCAL(simd1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(b))), 414 WASM_SET_LOCAL(simd1, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(b))),
415 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op & 0xffu, 415 WASM_SET_LOCAL(simd1, WASM_SIMD_BINOP(simd_op & 0xffu,
416 WASM_GET_LOCAL(simd0), 416 WASM_GET_LOCAL(simd0),
417 WASM_GET_LOCAL(simd1))), 417 WASM_GET_LOCAL(simd1))),
418 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), 418 WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected),
419 WASM_RETURN1(WASM_ONE))); 419 WASM_RETURN1(WASM_ONE)));
420 420
421 FOR_INT32_INPUTS(i) { 421 FOR_INT32_INPUTS(i) {
422 FOR_INT32_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); } 422 FOR_INT32_INPUTS(j) { CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j))); }
423 } 423 }
424 } 424 }
425 425
426 WASM_EXEC_TEST(I32x4Add) { RunI32x4BinOpTest(kExprI32x4Add, Add); } 426 WASM_EXEC_TEST(I32x4Add) { RunI32x4BinOpTest(kExprI32x4Add, Add); }
427 427
428 WASM_EXEC_TEST(I32x4Sub) { RunI32x4BinOpTest(kExprI32x4Sub, Sub); } 428 WASM_EXEC_TEST(I32x4Sub) { RunI32x4BinOpTest(kExprI32x4Sub, Sub); }
429 429
430 #if V8_TARGET_ARCH_ARM 430 #if V8_TARGET_ARCH_ARM
431 WASM_EXEC_TEST(I32x4Equal) { RunI32x4BinOpTest(kExprI32x4Eq, Equal); } 431 WASM_EXEC_TEST(I32x4Equal) { RunI32x4BinOpTest(kExprI32x4Eq, Equal); }
432 432
433 WASM_EXEC_TEST(I32x4NotEqual) { RunI32x4BinOpTest(kExprI32x4Ne, NotEqual); } 433 WASM_EXEC_TEST(I32x4NotEqual) { RunI32x4BinOpTest(kExprI32x4Ne, NotEqual); }
434 #endif // V8_TARGET_ARCH_ARM 434 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « test/cctest/wasm/test-run-wasm-module.cc ('k') | test/cctest/wasm/test-run-wasm-simd-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698