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/codegen.h" | 5 #include "src/codegen.h" |
6 #include "src/deoptimizer.h" | 6 #include "src/deoptimizer.h" |
7 #include "src/full-codegen/full-codegen.h" | 7 #include "src/full-codegen/full-codegen.h" |
8 #include "src/register-configuration.h" | 8 #include "src/register-configuration.h" |
9 #include "src/safepoint-table.h" | 9 #include "src/safepoint-table.h" |
10 | 10 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
258 __ b(ne, &inner_push_loop); // test for gt? | 258 __ b(ne, &inner_push_loop); // test for gt? |
259 __ add(r4, r4, Operand(kPointerSize)); | 259 __ add(r4, r4, Operand(kPointerSize)); |
260 __ bind(&outer_loop_header); | 260 __ bind(&outer_loop_header); |
261 __ cmp(r4, r1); | 261 __ cmp(r4, r1); |
262 __ b(lt, &outer_push_loop); | 262 __ b(lt, &outer_push_loop); |
263 | 263 |
264 // Check CPU flags for number of registers, setting the Z condition flag. | 264 // Check CPU flags for number of registers, setting the Z condition flag. |
265 __ CheckFor32DRegs(ip); | 265 __ CheckFor32DRegs(ip); |
266 | 266 |
267 __ ldr(r1, MemOperand(r0, Deoptimizer::input_offset())); | 267 __ ldr(r1, MemOperand(r0, Deoptimizer::input_offset())); |
268 int src_offset = FrameDescription::double_registers_offset(); | 268 for (int i = 0; i < config->num_allocatable_double_registers(); ++i) { |
Jakob Kummerow
2016/03/09 11:07:24
cf. lines 194ff above. Both loops should follow th
| |
269 for (int i = 0; i < DwVfpRegister::kMaxNumRegisters; ++i) { | 269 int code = config->GetAllocatableDoubleCode(i); |
270 if (i == kDoubleRegZero.code()) continue; | 270 DwVfpRegister reg = DwVfpRegister::from_code(code); |
271 if (i == kScratchDoubleReg.code()) continue; | 271 int src_offset = code * kDoubleSize + double_regs_offset; |
272 | 272 __ vldr(reg, r1, src_offset); |
273 const DwVfpRegister reg = DwVfpRegister::from_code(i); | |
274 __ vldr(reg, r1, src_offset, i < 16 ? al : ne); | |
275 src_offset += kDoubleSize; | |
276 } | 273 } |
277 | 274 |
278 // Push state, pc, and continuation from the last output frame. | 275 // Push state, pc, and continuation from the last output frame. |
279 __ ldr(r6, MemOperand(r2, FrameDescription::state_offset())); | 276 __ ldr(r6, MemOperand(r2, FrameDescription::state_offset())); |
280 __ push(r6); | 277 __ push(r6); |
281 __ ldr(r6, MemOperand(r2, FrameDescription::pc_offset())); | 278 __ ldr(r6, MemOperand(r2, FrameDescription::pc_offset())); |
282 __ push(r6); | 279 __ push(r6); |
283 __ ldr(r6, MemOperand(r2, FrameDescription::continuation_offset())); | 280 __ ldr(r6, MemOperand(r2, FrameDescription::continuation_offset())); |
284 __ push(r6); | 281 __ push(r6); |
285 | 282 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
334 void FrameDescription::SetCallerConstantPool(unsigned offset, intptr_t value) { | 331 void FrameDescription::SetCallerConstantPool(unsigned offset, intptr_t value) { |
335 DCHECK(FLAG_enable_embedded_constant_pool); | 332 DCHECK(FLAG_enable_embedded_constant_pool); |
336 SetFrameSlot(offset, value); | 333 SetFrameSlot(offset, value); |
337 } | 334 } |
338 | 335 |
339 | 336 |
340 #undef __ | 337 #undef __ |
341 | 338 |
342 } // namespace internal | 339 } // namespace internal |
343 } // namespace v8 | 340 } // namespace v8 |
OLD | NEW |