OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "src/wasm/wasm-macro-gen.h" | 10 #include "src/wasm/wasm-macro-gen.h" |
11 | 11 |
12 #include "test/cctest/cctest.h" | 12 #include "test/cctest/cctest.h" |
13 #include "test/cctest/compiler/value-helper.h" | 13 #include "test/cctest/compiler/value-helper.h" |
14 #include "test/cctest/wasm/test-signatures.h" | 14 #include "test/cctest/wasm/test-signatures.h" |
15 #include "test/cctest/wasm/wasm-run-utils.h" | 15 #include "test/cctest/wasm/wasm-run-utils.h" |
16 | 16 |
17 using namespace v8::base; | 17 using namespace v8::base; |
18 using namespace v8::internal; | 18 using namespace v8::internal; |
19 using namespace v8::internal::compiler; | 19 using namespace v8::internal::compiler; |
20 using namespace v8::internal::wasm; | 20 using namespace v8::internal::wasm; |
21 | 21 |
22 #define BUILD(r, ...) \ | 22 #define BUILD(r, ...) \ |
23 do { \ | 23 do { \ |
24 byte code[] = {__VA_ARGS__}; \ | 24 byte code[] = {__VA_ARGS__}; \ |
25 r.Build(code, code + arraysize(code)); \ | 25 r.Build(code, code + arraysize(code), false); \ |
| 26 } while (false) |
| 27 |
| 28 #define BUILD_FAIL(r, ...) \ |
| 29 do { \ |
| 30 byte code[] = {__VA_ARGS__}; \ |
| 31 r.Build(code, code + arraysize(code), true); \ |
26 } while (false) | 32 } while (false) |
27 | 33 |
28 #define ADD_CODE(vec, ...) \ | 34 #define ADD_CODE(vec, ...) \ |
29 do { \ | 35 do { \ |
30 byte __buf[] = {__VA_ARGS__}; \ | 36 byte __buf[] = {__VA_ARGS__}; \ |
31 for (size_t i = 0; i < sizeof(__buf); i++) vec.push_back(__buf[i]); \ | 37 for (size_t i = 0; i < sizeof(__buf); i++) vec.push_back(__buf[i]); \ |
32 } while (false) | 38 } while (false) |
33 | 39 |
34 namespace { | 40 namespace { |
35 // A helper for generating predictable but unique argument values that | 41 // A helper for generating predictable but unique argument values that |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 | 181 |
176 for (int i = 0; i < num_params; i++) { | 182 for (int i = 0; i < num_params; i++) { |
177 ADD_CODE(code, WASM_F64(inputs.arg_d(i))); | 183 ADD_CODE(code, WASM_F64(inputs.arg_d(i))); |
178 } | 184 } |
179 | 185 |
180 ADD_CODE(code, kExprCallFunction, static_cast<byte>(num_params), | 186 ADD_CODE(code, kExprCallFunction, static_cast<byte>(num_params), |
181 static_cast<byte>(js_index)); | 187 static_cast<byte>(js_index)); |
182 | 188 |
183 size_t end = code.size(); | 189 size_t end = code.size(); |
184 code.push_back(0); | 190 code.push_back(0); |
185 t.Build(&code[0], &code[end]); | 191 t.Build(&code[0], &code[end], false); |
186 } | 192 } |
187 | 193 |
188 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); | 194 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); |
189 double expected = inputs.arg_d(which); | 195 double expected = inputs.arg_d(which); |
190 EXPECT_CALL(expected, jsfunc, 0.0, 0.0); | 196 EXPECT_CALL(expected, jsfunc, 0.0, 0.0); |
191 } | 197 } |
192 } | 198 } |
193 | 199 |
194 TEST(Run_JSSelect_0) { RunJSSelectTest(0); } | 200 TEST(Run_JSSelect_0) { RunJSSelectTest(0); } |
195 | 201 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 size_t end = code.size(); | 369 size_t end = code.size(); |
364 code.push_back(0); | 370 code.push_back(0); |
365 | 371 |
366 // Call different select JS functions. | 372 // Call different select JS functions. |
367 for (int which = 0; which < num_params; which++) { | 373 for (int which = 0; which < num_params; which++) { |
368 HandleScope scope(isolate); | 374 HandleScope scope(isolate); |
369 TestingModule module; | 375 TestingModule module; |
370 uint32_t js_index = AddJSSelector(&module, &sig, which); | 376 uint32_t js_index = AddJSSelector(&module, &sig, which); |
371 CHECK_EQ(0, js_index); | 377 CHECK_EQ(0, js_index); |
372 WasmFunctionCompiler t(&sig, &module); | 378 WasmFunctionCompiler t(&sig, &module); |
373 t.Build(&code[0], &code[end]); | 379 t.Build(&code[0], &code[end], false); |
374 | 380 |
375 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); | 381 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); |
376 | 382 |
377 Handle<Object> args[] = { | 383 Handle<Object> args[] = { |
378 factory->NewNumber(inputs.arg_d(0)), | 384 factory->NewNumber(inputs.arg_d(0)), |
379 factory->NewNumber(inputs.arg_d(1)), | 385 factory->NewNumber(inputs.arg_d(1)), |
380 factory->NewNumber(inputs.arg_d(2)), | 386 factory->NewNumber(inputs.arg_d(2)), |
381 factory->NewNumber(inputs.arg_d(3)), | 387 factory->NewNumber(inputs.arg_d(3)), |
382 factory->NewNumber(inputs.arg_d(4)), | 388 factory->NewNumber(inputs.arg_d(4)), |
383 factory->NewNumber(inputs.arg_d(5)), | 389 factory->NewNumber(inputs.arg_d(5)), |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 RunJSSelectAlignTest(9, 8); | 444 RunJSSelectAlignTest(9, 8); |
439 RunJSSelectAlignTest(9, 9); | 445 RunJSSelectAlignTest(9, 9); |
440 } | 446 } |
441 | 447 |
442 TEST(Run_JSSelectAlign_10) { | 448 TEST(Run_JSSelectAlign_10) { |
443 RunJSSelectAlignTest(10, 7); | 449 RunJSSelectAlignTest(10, 7); |
444 RunJSSelectAlignTest(10, 8); | 450 RunJSSelectAlignTest(10, 8); |
445 RunJSSelectAlignTest(10, 9); | 451 RunJSSelectAlignTest(10, 9); |
446 RunJSSelectAlignTest(10, 10); | 452 RunJSSelectAlignTest(10, 10); |
447 } | 453 } |
OLD | NEW |