| 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 #if V8_TARGET_ARCH_X64 | 5 #if V8_TARGET_ARCH_X64 |
| 6 | 6 |
| 7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
| 10 #include "src/cpu-profiler.h" | 10 #include "src/cpu-profiler.h" |
| (...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 } | 736 } |
| 737 | 737 |
| 738 | 738 |
| 739 void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr, | 739 void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr, |
| 740 Deoptimizer::DeoptReason deopt_reason, | 740 Deoptimizer::DeoptReason deopt_reason, |
| 741 Deoptimizer::BailoutType bailout_type) { | 741 Deoptimizer::BailoutType bailout_type) { |
| 742 LEnvironment* environment = instr->environment(); | 742 LEnvironment* environment = instr->environment(); |
| 743 RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt); | 743 RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt); |
| 744 DCHECK(environment->HasBeenRegistered()); | 744 DCHECK(environment->HasBeenRegistered()); |
| 745 int id = environment->deoptimization_index(); | 745 int id = environment->deoptimization_index(); |
| 746 DCHECK(info()->IsOptimizing() || info()->IsStub()); | |
| 747 Address entry = | 746 Address entry = |
| 748 Deoptimizer::GetDeoptimizationEntry(isolate(), id, bailout_type); | 747 Deoptimizer::GetDeoptimizationEntry(isolate(), id, bailout_type); |
| 749 if (entry == NULL) { | 748 if (entry == NULL) { |
| 750 Abort(kBailoutWasNotPrepared); | 749 Abort(kBailoutWasNotPrepared); |
| 751 return; | 750 return; |
| 752 } | 751 } |
| 753 | 752 |
| 754 if (DeoptEveryNTimes()) { | 753 if (DeoptEveryNTimes()) { |
| 755 ExternalReference count = ExternalReference::stress_deopt_count(isolate()); | 754 ExternalReference count = ExternalReference::stress_deopt_count(isolate()); |
| 756 Label no_deopt; | 755 Label no_deopt; |
| (...skipping 4913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5670 __ movp(temp, Operand(temp, StandardFrameConstants::kCallerFPOffset)); | 5669 __ movp(temp, Operand(temp, StandardFrameConstants::kCallerFPOffset)); |
| 5671 | 5670 |
| 5672 // Check the marker in the calling frame. | 5671 // Check the marker in the calling frame. |
| 5673 __ bind(&check_frame_marker); | 5672 __ bind(&check_frame_marker); |
| 5674 __ Cmp(Operand(temp, StandardFrameConstants::kMarkerOffset), | 5673 __ Cmp(Operand(temp, StandardFrameConstants::kMarkerOffset), |
| 5675 Smi::FromInt(StackFrame::CONSTRUCT)); | 5674 Smi::FromInt(StackFrame::CONSTRUCT)); |
| 5676 } | 5675 } |
| 5677 | 5676 |
| 5678 | 5677 |
| 5679 void LCodeGen::EnsureSpaceForLazyDeopt(int space_needed) { | 5678 void LCodeGen::EnsureSpaceForLazyDeopt(int space_needed) { |
| 5680 if (!info()->IsStub()) { | 5679 if (info()->ShouldEnsureSpaceForLazyDeopt()) { |
| 5681 // Ensure that we have enough space after the previous lazy-bailout | 5680 // Ensure that we have enough space after the previous lazy-bailout |
| 5682 // instruction for patching the code here. | 5681 // instruction for patching the code here. |
| 5683 int current_pc = masm()->pc_offset(); | 5682 int current_pc = masm()->pc_offset(); |
| 5684 if (current_pc < last_lazy_deopt_pc_ + space_needed) { | 5683 if (current_pc < last_lazy_deopt_pc_ + space_needed) { |
| 5685 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 5684 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
| 5686 __ Nop(padding_size); | 5685 __ Nop(padding_size); |
| 5687 } | 5686 } |
| 5688 } | 5687 } |
| 5689 last_lazy_deopt_pc_ = masm()->pc_offset(); | 5688 last_lazy_deopt_pc_ = masm()->pc_offset(); |
| 5690 } | 5689 } |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5939 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5938 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 5940 } | 5939 } |
| 5941 | 5940 |
| 5942 | 5941 |
| 5943 #undef __ | 5942 #undef __ |
| 5944 | 5943 |
| 5945 } // namespace internal | 5944 } // namespace internal |
| 5946 } // namespace v8 | 5945 } // namespace v8 |
| 5947 | 5946 |
| 5948 #endif // V8_TARGET_ARCH_X64 | 5947 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |