OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
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 4414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4425 EmitLoadJSRuntimeFunction(expr); | 4425 EmitLoadJSRuntimeFunction(expr); |
4426 | 4426 |
4427 // Push the target function under the receiver. | 4427 // Push the target function under the receiver. |
4428 __ Pop(x10); | 4428 __ Pop(x10); |
4429 __ Push(x0, x10); | 4429 __ Push(x0, x10); |
4430 | 4430 |
4431 for (int i = 0; i < arg_count; i++) { | 4431 for (int i = 0; i < arg_count; i++) { |
4432 VisitForStackValue(args->at(i)); | 4432 VisitForStackValue(args->at(i)); |
4433 } | 4433 } |
4434 | 4434 |
| 4435 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); |
4435 EmitCallJSRuntimeFunction(expr); | 4436 EmitCallJSRuntimeFunction(expr); |
4436 | 4437 |
4437 // Restore context register. | 4438 // Restore context register. |
4438 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 4439 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
4439 | 4440 |
4440 context()->DropAndPlug(1, x0); | 4441 context()->DropAndPlug(1, x0); |
4441 | 4442 |
4442 } else { | 4443 } else { |
4443 const Runtime::Function* function = expr->function(); | 4444 const Runtime::Function* function = expr->function(); |
4444 switch (function->function_id) { | 4445 switch (function->function_id) { |
4445 #define CALL_INTRINSIC_GENERATOR(Name) \ | 4446 #define CALL_INTRINSIC_GENERATOR(Name) \ |
4446 case Runtime::kInline##Name: { \ | 4447 case Runtime::kInline##Name: { \ |
4447 Comment cmnt(masm_, "[ Inline" #Name); \ | 4448 Comment cmnt(masm_, "[ Inline" #Name); \ |
4448 return Emit##Name(expr); \ | 4449 return Emit##Name(expr); \ |
4449 } | 4450 } |
4450 FOR_EACH_FULL_CODE_INTRINSIC(CALL_INTRINSIC_GENERATOR) | 4451 FOR_EACH_FULL_CODE_INTRINSIC(CALL_INTRINSIC_GENERATOR) |
4451 #undef CALL_INTRINSIC_GENERATOR | 4452 #undef CALL_INTRINSIC_GENERATOR |
4452 default: { | 4453 default: { |
4453 Comment cmnt(masm_, "[ CallRuntime for unhandled intrinsic"); | 4454 Comment cmnt(masm_, "[ CallRuntime for unhandled intrinsic"); |
4454 // Push the arguments ("left-to-right"). | 4455 // Push the arguments ("left-to-right"). |
4455 for (int i = 0; i < arg_count; i++) { | 4456 for (int i = 0; i < arg_count; i++) { |
4456 VisitForStackValue(args->at(i)); | 4457 VisitForStackValue(args->at(i)); |
4457 } | 4458 } |
4458 | 4459 |
4459 // Call the C runtime function. | 4460 // Call the C runtime function. |
| 4461 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); |
4460 __ CallRuntime(expr->function(), arg_count); | 4462 __ CallRuntime(expr->function(), arg_count); |
4461 context()->Plug(x0); | 4463 context()->Plug(x0); |
4462 } | 4464 } |
4463 } | 4465 } |
4464 } | 4466 } |
4465 } | 4467 } |
4466 | 4468 |
4467 | 4469 |
4468 void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { | 4470 void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { |
4469 switch (expr->op()) { | 4471 switch (expr->op()) { |
(...skipping 1116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5586 } | 5588 } |
5587 | 5589 |
5588 return INTERRUPT; | 5590 return INTERRUPT; |
5589 } | 5591 } |
5590 | 5592 |
5591 | 5593 |
5592 } // namespace internal | 5594 } // namespace internal |
5593 } // namespace v8 | 5595 } // namespace v8 |
5594 | 5596 |
5595 #endif // V8_TARGET_ARCH_ARM64 | 5597 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |