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 "src/compiler/wasm-compiler.h" | 5 #include "src/compiler/wasm-compiler.h" |
6 | 6 |
7 #include "src/isolate-inl.h" | 7 #include "src/isolate-inl.h" |
8 | 8 |
9 #include "src/base/platform/elapsed-timer.h" | 9 #include "src/base/platform/elapsed-timer.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 2344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2355 // Create the context parameter | 2355 // Create the context parameter |
2356 Node* context = graph()->NewNode( | 2356 Node* context = graph()->NewNode( |
2357 jsgraph()->common()->Parameter( | 2357 jsgraph()->common()->Parameter( |
2358 Linkage::GetJSCallContextParamIndex(wasm_count + 1), "%context"), | 2358 Linkage::GetJSCallContextParamIndex(wasm_count + 1), "%context"), |
2359 graph()->start()); | 2359 graph()->start()); |
2360 | 2360 |
2361 int pos = 0; | 2361 int pos = 0; |
2362 args[pos++] = HeapConstant(wasm_code); | 2362 args[pos++] = HeapConstant(wasm_code); |
2363 | 2363 |
2364 // Convert JS parameters to WASM numbers. | 2364 // Convert JS parameters to WASM numbers. |
2365 for (int i = 0; i < wasm_count; i++) { | 2365 for (int i = 0; i < wasm_count; ++i) { |
2366 Node* param = | 2366 Node* param = |
2367 graph()->NewNode(jsgraph()->common()->Parameter(i + 1), start); | 2367 graph()->NewNode(jsgraph()->common()->Parameter(i + 1), start); |
2368 Node* wasm_param = FromJS(param, context, sig->GetParam(i)); | 2368 Node* wasm_param = FromJS(param, context, sig->GetParam(i)); |
2369 args[pos++] = wasm_param; | 2369 args[pos++] = wasm_param; |
2370 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kAstI64) { | 2370 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kAstI64) { |
2371 // We make up the high word with SAR to get the proper sign extension. | 2371 // We make up the high word with SAR to get the proper sign extension. |
2372 args[pos++] = graph()->NewNode(jsgraph()->machine()->Word32Sar(), | 2372 args[pos++] = graph()->NewNode(jsgraph()->machine()->Word32Sar(), |
2373 wasm_param, jsgraph()->Int32Constant(31)); | 2373 wasm_param, jsgraph()->Int32Constant(31)); |
2374 } | 2374 } |
2375 } | 2375 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2444 args[pos++] = jsgraph()->Constant(function); // JS function. | 2444 args[pos++] = jsgraph()->Constant(function); // JS function. |
2445 if (arg_count_before_args) { | 2445 if (arg_count_before_args) { |
2446 args[pos++] = jsgraph()->Int32Constant(wasm_count); // argument count | 2446 args[pos++] = jsgraph()->Int32Constant(wasm_count); // argument count |
2447 } | 2447 } |
2448 // JS receiver. | 2448 // JS receiver. |
2449 Handle<Object> global(function->context()->global_object(), isolate); | 2449 Handle<Object> global(function->context()->global_object(), isolate); |
2450 args[pos++] = jsgraph()->Constant(global); | 2450 args[pos++] = jsgraph()->Constant(global); |
2451 | 2451 |
2452 // Convert WASM numbers to JS values. | 2452 // Convert WASM numbers to JS values. |
2453 int param_index = 0; | 2453 int param_index = 0; |
2454 for (int i = 0; i < wasm_count; i++) { | 2454 for (int i = 0; i < wasm_count; ++i) { |
2455 Node* param = | 2455 Node* param = |
2456 graph()->NewNode(jsgraph()->common()->Parameter(param_index++), start); | 2456 graph()->NewNode(jsgraph()->common()->Parameter(param_index++), start); |
2457 args[pos++] = ToJS(param, context, sig->GetParam(i)); | 2457 args[pos++] = ToJS(param, context, sig->GetParam(i)); |
2458 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kAstI64) { | 2458 if (jsgraph()->machine()->Is32() && sig->GetParam(i) == wasm::kAstI64) { |
2459 // On 32 bit platforms we have to skip the high word of int64 parameters. | 2459 // On 32 bit platforms we have to skip the high word of int64 parameters. |
2460 param_index++; | 2460 param_index++; |
2461 } | 2461 } |
2462 } | 2462 } |
2463 | 2463 |
2464 if (add_new_target_undefined) { | 2464 if (add_new_target_undefined) { |
(...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3270 function_->code_start_offset), | 3270 function_->code_start_offset), |
3271 compile_ms); | 3271 compile_ms); |
3272 } | 3272 } |
3273 | 3273 |
3274 return code; | 3274 return code; |
3275 } | 3275 } |
3276 | 3276 |
3277 } // namespace compiler | 3277 } // namespace compiler |
3278 } // namespace internal | 3278 } // namespace internal |
3279 } // namespace v8 | 3279 } // namespace v8 |
OLD | NEW |