| 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 |