| 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" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 EXPECT_CALL(6, jsfunc, 0x3F, 0); | 149 EXPECT_CALL(6, jsfunc, 0x3F, 0); |
| 150 } | 150 } |
| 151 | 151 |
| 152 | 152 |
| 153 TEST(Run_CallJS_Add_jswrapped) { | 153 TEST(Run_CallJS_Add_jswrapped) { |
| 154 TestSignatures sigs; | 154 TestSignatures sigs; |
| 155 TestingModule module; | 155 TestingModule module; |
| 156 WasmFunctionCompiler t(sigs.i_i(), &module); | 156 WasmFunctionCompiler t(sigs.i_i(), &module); |
| 157 uint32_t js_index = | 157 uint32_t js_index = |
| 158 module.AddJsFunction(sigs.i_i(), "(function(a) { return a + 99; })"); | 158 module.AddJsFunction(sigs.i_i(), "(function(a) { return a + 99; })"); |
| 159 BUILD(t, WASM_CALL_FUNCTION(js_index, WASM_GET_LOCAL(0))); | 159 BUILD(t, WASM_CALL_FUNCTION1(js_index, WASM_GET_LOCAL(0))); |
| 160 | 160 |
| 161 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); | 161 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); |
| 162 | 162 |
| 163 EXPECT_CALL(101, jsfunc, 2, -8); | 163 EXPECT_CALL(101, jsfunc, 2, -8); |
| 164 EXPECT_CALL(199, jsfunc, 100, -1); | 164 EXPECT_CALL(199, jsfunc, 100, -1); |
| 165 EXPECT_CALL(-666666801, jsfunc, -666666900, -1); | 165 EXPECT_CALL(-666666801, jsfunc, -666666900, -1); |
| 166 } | 166 } |
| 167 | 167 |
| 168 | 168 |
| 169 void RunJSSelectTest(int which) { | 169 void RunJSSelectTest(int which) { |
| 170 const int kMaxParams = 8; | 170 const int kMaxParams = 8; |
| 171 PredictableInputValues inputs(0x100); | 171 PredictableInputValues inputs(0x100); |
| 172 LocalType type = kAstF64; | 172 LocalType type = kAstF64; |
| 173 LocalType types[kMaxParams + 1] = {type, type, type, type, type, | 173 LocalType types[kMaxParams + 1] = {type, type, type, type, type, |
| 174 type, type, type, type}; | 174 type, type, type, type}; |
| 175 for (int num_params = which + 1; num_params < kMaxParams; num_params++) { | 175 for (int num_params = which + 1; num_params < kMaxParams; num_params++) { |
| 176 HandleScope scope(CcTest::InitIsolateOnce()); | 176 HandleScope scope(CcTest::InitIsolateOnce()); |
| 177 FunctionSig sig(1, num_params, types); | 177 FunctionSig sig(1, num_params, types); |
| 178 | 178 |
| 179 TestingModule module; | 179 TestingModule module; |
| 180 uint32_t js_index = AddJSSelector(&module, &sig, which); | 180 uint32_t js_index = AddJSSelector(&module, &sig, which); |
| 181 WasmFunctionCompiler t(&sig, &module); | 181 WasmFunctionCompiler t(&sig, &module); |
| 182 | 182 |
| 183 { | 183 { |
| 184 std::vector<byte> code; | 184 std::vector<byte> code; |
| 185 ADD_CODE(code, kExprCallFunction, static_cast<byte>(js_index)); | |
| 186 | 185 |
| 187 for (int i = 0; i < num_params; i++) { | 186 for (int i = 0; i < num_params; i++) { |
| 188 ADD_CODE(code, WASM_F64(inputs.arg_d(i))); | 187 ADD_CODE(code, WASM_F64(inputs.arg_d(i))); |
| 189 } | 188 } |
| 190 | 189 |
| 190 ADD_CODE(code, kExprCallFunction, static_cast<byte>(num_params), |
| 191 static_cast<byte>(js_index)); |
| 192 |
| 191 size_t end = code.size(); | 193 size_t end = code.size(); |
| 192 code.push_back(0); | 194 code.push_back(0); |
| 193 t.Build(&code[0], &code[end]); | 195 t.Build(&code[0], &code[end]); |
| 194 } | 196 } |
| 195 | 197 |
| 196 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); | 198 Handle<JSFunction> jsfunc = module.WrapCode(t.CompileAndAdd()); |
| 197 double expected = inputs.arg_d(which); | 199 double expected = inputs.arg_d(which); |
| 198 EXPECT_CALL(expected, jsfunc, 0.0, 0.0); | 200 EXPECT_CALL(expected, jsfunc, 0.0, 0.0); |
| 199 } | 201 } |
| 200 } | 202 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 const int kMaxParams = 10; | 365 const int kMaxParams = 10; |
| 364 CHECK_LE(num_args, kMaxParams); | 366 CHECK_LE(num_args, kMaxParams); |
| 365 CHECK_LE(num_params, kMaxParams); | 367 CHECK_LE(num_params, kMaxParams); |
| 366 LocalType type = kAstF64; | 368 LocalType type = kAstF64; |
| 367 LocalType types[kMaxParams + 1] = {type, type, type, type, type, type, | 369 LocalType types[kMaxParams + 1] = {type, type, type, type, type, type, |
| 368 type, type, type, type, type}; | 370 type, type, type, type, type}; |
| 369 FunctionSig sig(1, num_params, types); | 371 FunctionSig sig(1, num_params, types); |
| 370 | 372 |
| 371 // Build the calling code. | 373 // Build the calling code. |
| 372 std::vector<byte> code; | 374 std::vector<byte> code; |
| 373 ADD_CODE(code, kExprCallFunction, 0); | |
| 374 | 375 |
| 375 for (int i = 0; i < num_params; i++) { | 376 for (int i = 0; i < num_params; i++) { |
| 376 ADD_CODE(code, WASM_GET_LOCAL(i)); | 377 ADD_CODE(code, WASM_GET_LOCAL(i)); |
| 377 } | 378 } |
| 378 | 379 |
| 380 ADD_CODE(code, kExprCallFunction, static_cast<byte>(num_params), 0); |
| 381 |
| 379 size_t end = code.size(); | 382 size_t end = code.size(); |
| 380 code.push_back(0); | 383 code.push_back(0); |
| 381 | 384 |
| 382 // Call different select JS functions. | 385 // Call different select JS functions. |
| 383 for (int which = 0; which < num_params; which++) { | 386 for (int which = 0; which < num_params; which++) { |
| 384 HandleScope scope(isolate); | 387 HandleScope scope(isolate); |
| 385 TestingModule module; | 388 TestingModule module; |
| 386 uint32_t js_index = AddJSSelector(&module, &sig, which); | 389 uint32_t js_index = AddJSSelector(&module, &sig, which); |
| 387 CHECK_EQ(0, js_index); | 390 CHECK_EQ(0, js_index); |
| 388 WasmFunctionCompiler t(&sig, &module); | 391 WasmFunctionCompiler t(&sig, &module); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 RunJSSelectAlignTest(9, 8); | 458 RunJSSelectAlignTest(9, 8); |
| 456 RunJSSelectAlignTest(9, 9); | 459 RunJSSelectAlignTest(9, 9); |
| 457 } | 460 } |
| 458 | 461 |
| 459 TEST(Run_JSSelectAlign_10) { | 462 TEST(Run_JSSelectAlign_10) { |
| 460 RunJSSelectAlignTest(10, 7); | 463 RunJSSelectAlignTest(10, 7); |
| 461 RunJSSelectAlignTest(10, 8); | 464 RunJSSelectAlignTest(10, 8); |
| 462 RunJSSelectAlignTest(10, 9); | 465 RunJSSelectAlignTest(10, 9); |
| 463 RunJSSelectAlignTest(10, 10); | 466 RunJSSelectAlignTest(10, 10); |
| 464 } | 467 } |
| OLD | NEW |