OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
8 | 8 |
9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 4655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4666 | 4666 |
4667 // Push the target function under the receiver. | 4667 // Push the target function under the receiver. |
4668 __ push(Operand(esp, 0)); | 4668 __ push(Operand(esp, 0)); |
4669 __ mov(Operand(esp, kPointerSize), eax); | 4669 __ mov(Operand(esp, kPointerSize), eax); |
4670 | 4670 |
4671 // Push the arguments ("left-to-right"). | 4671 // Push the arguments ("left-to-right"). |
4672 for (int i = 0; i < arg_count; i++) { | 4672 for (int i = 0; i < arg_count; i++) { |
4673 VisitForStackValue(args->at(i)); | 4673 VisitForStackValue(args->at(i)); |
4674 } | 4674 } |
4675 | 4675 |
| 4676 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); |
4676 EmitCallJSRuntimeFunction(expr); | 4677 EmitCallJSRuntimeFunction(expr); |
4677 | 4678 |
4678 // Restore context register. | 4679 // Restore context register. |
4679 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); | 4680 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); |
4680 context()->DropAndPlug(1, eax); | 4681 context()->DropAndPlug(1, eax); |
4681 | 4682 |
4682 } else { | 4683 } else { |
4683 const Runtime::Function* function = expr->function(); | 4684 const Runtime::Function* function = expr->function(); |
4684 switch (function->function_id) { | 4685 switch (function->function_id) { |
4685 #define CALL_INTRINSIC_GENERATOR(Name) \ | 4686 #define CALL_INTRINSIC_GENERATOR(Name) \ |
4686 case Runtime::kInline##Name: { \ | 4687 case Runtime::kInline##Name: { \ |
4687 Comment cmnt(masm_, "[ Inline" #Name); \ | 4688 Comment cmnt(masm_, "[ Inline" #Name); \ |
4688 return Emit##Name(expr); \ | 4689 return Emit##Name(expr); \ |
4689 } | 4690 } |
4690 FOR_EACH_FULL_CODE_INTRINSIC(CALL_INTRINSIC_GENERATOR) | 4691 FOR_EACH_FULL_CODE_INTRINSIC(CALL_INTRINSIC_GENERATOR) |
4691 #undef CALL_INTRINSIC_GENERATOR | 4692 #undef CALL_INTRINSIC_GENERATOR |
4692 default: { | 4693 default: { |
4693 Comment cmnt(masm_, "[ CallRuntime for unhandled intrinsic"); | 4694 Comment cmnt(masm_, "[ CallRuntime for unhandled intrinsic"); |
4694 // Push the arguments ("left-to-right"). | 4695 // Push the arguments ("left-to-right"). |
4695 for (int i = 0; i < arg_count; i++) { | 4696 for (int i = 0; i < arg_count; i++) { |
4696 VisitForStackValue(args->at(i)); | 4697 VisitForStackValue(args->at(i)); |
4697 } | 4698 } |
4698 | 4699 |
4699 // Call the C runtime function. | 4700 // Call the C runtime function. |
| 4701 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); |
4700 __ CallRuntime(expr->function(), arg_count); | 4702 __ CallRuntime(expr->function(), arg_count); |
4701 context()->Plug(eax); | 4703 context()->Plug(eax); |
4702 } | 4704 } |
4703 } | 4705 } |
4704 } | 4706 } |
4705 } | 4707 } |
4706 | 4708 |
4707 | 4709 |
4708 void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { | 4710 void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { |
4709 switch (expr->op()) { | 4711 switch (expr->op()) { |
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5483 Assembler::target_address_at(call_target_address, | 5485 Assembler::target_address_at(call_target_address, |
5484 unoptimized_code)); | 5486 unoptimized_code)); |
5485 return OSR_AFTER_STACK_CHECK; | 5487 return OSR_AFTER_STACK_CHECK; |
5486 } | 5488 } |
5487 | 5489 |
5488 | 5490 |
5489 } // namespace internal | 5491 } // namespace internal |
5490 } // namespace v8 | 5492 } // namespace v8 |
5491 | 5493 |
5492 #endif // V8_TARGET_ARCH_IA32 | 5494 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |