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 #include "src/codegen.h" | 7 #include "src/codegen.h" |
8 #include "src/deoptimizer.h" | 8 #include "src/deoptimizer.h" |
9 #include "src/full-codegen.h" | 9 #include "src/full-codegen.h" |
10 #include "src/safepoint-table.h" | 10 #include "src/safepoint-table.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 // If d16-d31 are not pushed, decrease the stack pointer instead. | 158 // If d16-d31 are not pushed, decrease the stack pointer instead. |
159 __ vstm(db_w, sp, d16, d31, ne); | 159 __ vstm(db_w, sp, d16, d31, ne); |
160 __ sub(sp, sp, Operand(16 * kDoubleSize), LeaveCC, eq); | 160 __ sub(sp, sp, Operand(16 * kDoubleSize), LeaveCC, eq); |
161 __ vstm(db_w, sp, d0, d13); | 161 __ vstm(db_w, sp, d0, d13); |
162 | 162 |
163 // Push all 16 registers (needed to populate FrameDescription::registers_). | 163 // Push all 16 registers (needed to populate FrameDescription::registers_). |
164 // TODO(1588) Note that using pc with stm is deprecated, so we should perhaps | 164 // TODO(1588) Note that using pc with stm is deprecated, so we should perhaps |
165 // handle this a bit differently. | 165 // handle this a bit differently. |
166 __ stm(db_w, sp, restored_regs | sp.bit() | lr.bit() | pc.bit()); | 166 __ stm(db_w, sp, restored_regs | sp.bit() | lr.bit() | pc.bit()); |
167 | 167 |
| 168 __ mov(ip, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); |
| 169 __ str(fp, MemOperand(ip)); |
| 170 |
168 const int kSavedRegistersAreaSize = | 171 const int kSavedRegistersAreaSize = |
169 (kNumberOfRegisters * kPointerSize) + kDoubleRegsSize; | 172 (kNumberOfRegisters * kPointerSize) + kDoubleRegsSize; |
170 | 173 |
171 // Get the bailout id from the stack. | 174 // Get the bailout id from the stack. |
172 __ ldr(r2, MemOperand(sp, kSavedRegistersAreaSize)); | 175 __ ldr(r2, MemOperand(sp, kSavedRegistersAreaSize)); |
173 | 176 |
174 // Get the address of the location in the code object (r3) (return | 177 // Get the address of the location in the code object (r3) (return |
175 // address for lazy deoptimization) and compute the fp-to-sp delta in | 178 // address for lazy deoptimization) and compute the fp-to-sp delta in |
176 // register r4. | 179 // register r4. |
177 __ mov(r3, lr); | 180 __ mov(r3, lr); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 | 354 |
352 void FrameDescription::SetCallerConstantPool(unsigned offset, intptr_t value) { | 355 void FrameDescription::SetCallerConstantPool(unsigned offset, intptr_t value) { |
353 DCHECK(FLAG_enable_ool_constant_pool); | 356 DCHECK(FLAG_enable_ool_constant_pool); |
354 SetFrameSlot(offset, value); | 357 SetFrameSlot(offset, value); |
355 } | 358 } |
356 | 359 |
357 | 360 |
358 #undef __ | 361 #undef __ |
359 | 362 |
360 } } // namespace v8::internal | 363 } } // namespace v8::internal |
OLD | NEW |