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 #include "src/arm64/lithium-codegen-arm64.h" | 7 #include "src/arm64/lithium-codegen-arm64.h" |
8 #include "src/arm64/lithium-gap-resolver-arm64.h" | 8 #include "src/arm64/lithium-gap-resolver-arm64.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 // Generate the OSR entry prologue at the first unknown OSR value, or if there | 764 // Generate the OSR entry prologue at the first unknown OSR value, or if there |
765 // are none, at the OSR entrypoint instruction. | 765 // are none, at the OSR entrypoint instruction. |
766 if (osr_pc_offset_ >= 0) return; | 766 if (osr_pc_offset_ >= 0) return; |
767 | 767 |
768 osr_pc_offset_ = masm()->pc_offset(); | 768 osr_pc_offset_ = masm()->pc_offset(); |
769 | 769 |
770 // Adjust the frame size, subsuming the unoptimized frame into the | 770 // Adjust the frame size, subsuming the unoptimized frame into the |
771 // optimized frame. | 771 // optimized frame. |
772 int slots = GetStackSlotCount() - graph()->osr()->UnoptimizedFrameSlots(); | 772 int slots = GetStackSlotCount() - graph()->osr()->UnoptimizedFrameSlots(); |
773 DCHECK(slots >= 0); | 773 DCHECK(slots >= 0); |
| 774 __ OSRDropVectorFromStack(graph()->osr()->UnoptimizedFrameSlots(), x2, x0); |
774 __ Claim(slots); | 775 __ Claim(slots); |
775 } | 776 } |
776 | 777 |
777 | 778 |
778 void LCodeGen::GenerateBodyInstructionPre(LInstruction* instr) { | 779 void LCodeGen::GenerateBodyInstructionPre(LInstruction* instr) { |
779 if (instr->IsCall()) { | 780 if (instr->IsCall()) { |
780 EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); | 781 EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); |
781 } | 782 } |
782 if (!instr->IsLazyBailout() && !instr->IsGap()) { | 783 if (!instr->IsLazyBailout() && !instr->IsGap()) { |
783 safepoints_.BumpLastLazySafepointIndex(); | 784 safepoints_.BumpLastLazySafepointIndex(); |
(...skipping 5313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6097 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6098 Handle<ScopeInfo> scope_info = instr->scope_info(); |
6098 __ Push(scope_info); | 6099 __ Push(scope_info); |
6099 __ Push(ToRegister(instr->function())); | 6100 __ Push(ToRegister(instr->function())); |
6100 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6101 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
6101 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6102 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6102 } | 6103 } |
6103 | 6104 |
6104 | 6105 |
6105 | 6106 |
6106 } } // namespace v8::internal | 6107 } } // namespace v8::internal |
OLD | NEW |