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/arm64/frames-arm64.h" | 5 #include "src/arm64/frames-arm64.h" |
6 #include "src/codegen.h" | 6 #include "src/codegen.h" |
7 #include "src/deoptimizer.h" | 7 #include "src/deoptimizer.h" |
8 #include "src/full-codegen/full-codegen.h" | 8 #include "src/full-codegen/full-codegen.h" |
9 #include "src/register-configuration.h" | 9 #include "src/register-configuration.h" |
10 #include "src/safepoint-table.h" | 10 #include "src/safepoint-table.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 Register fp_to_sp = x4; | 124 Register fp_to_sp = x4; |
125 // Get the address of the location in the code object. This is the return | 125 // Get the address of the location in the code object. This is the return |
126 // address for lazy deoptimization. | 126 // address for lazy deoptimization. |
127 __ Mov(code_object, lr); | 127 __ Mov(code_object, lr); |
128 // Compute the fp-to-sp delta, and correct one word for bailout id. | 128 // Compute the fp-to-sp delta, and correct one word for bailout id. |
129 __ Add(fp_to_sp, masm()->StackPointer(), | 129 __ Add(fp_to_sp, masm()->StackPointer(), |
130 kSavedRegistersAreaSize + (1 * kPointerSize)); | 130 kSavedRegistersAreaSize + (1 * kPointerSize)); |
131 __ Sub(fp_to_sp, fp, fp_to_sp); | 131 __ Sub(fp_to_sp, fp, fp_to_sp); |
132 | 132 |
133 // Allocate a new deoptimizer object. | 133 // Allocate a new deoptimizer object. |
| 134 __ Mov(x0, 0); |
| 135 Label context_check; |
| 136 __ Ldr(x1, MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset)); |
| 137 __ JumpIfSmi(x1, &context_check); |
134 __ Ldr(x0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 138 __ Ldr(x0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 139 __ bind(&context_check); |
135 __ Mov(x1, type()); | 140 __ Mov(x1, type()); |
136 // Following arguments are already loaded: | 141 // Following arguments are already loaded: |
137 // - x2: bailout id | 142 // - x2: bailout id |
138 // - x3: code object address | 143 // - x3: code object address |
139 // - x4: fp-to-sp delta | 144 // - x4: fp-to-sp delta |
140 __ Mov(x5, ExternalReference::isolate_address(isolate())); | 145 __ Mov(x5, ExternalReference::isolate_address(isolate())); |
141 | 146 |
142 { | 147 { |
143 // Call Deoptimizer::New(). | 148 // Call Deoptimizer::New(). |
144 AllowExternalCallThatCantCauseGC scope(masm()); | 149 AllowExternalCallThatCantCauseGC scope(masm()); |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 void FrameDescription::SetCallerConstantPool(unsigned offset, intptr_t value) { | 335 void FrameDescription::SetCallerConstantPool(unsigned offset, intptr_t value) { |
331 // No embedded constant pool support. | 336 // No embedded constant pool support. |
332 UNREACHABLE(); | 337 UNREACHABLE(); |
333 } | 338 } |
334 | 339 |
335 | 340 |
336 #undef __ | 341 #undef __ |
337 | 342 |
338 } // namespace internal | 343 } // namespace internal |
339 } // namespace v8 | 344 } // namespace v8 |
OLD | NEW |