Chromium Code Reviews| Index: src/arm/macro-assembler-arm.cc |
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
| index d705c90bd2edf62c953e2ea39449ada558b277e6..465743e36ceefe1cf557447bcd266fbc4c0e2752 100644 |
| --- a/src/arm/macro-assembler-arm.cc |
| +++ b/src/arm/macro-assembler-arm.cc |
| @@ -888,6 +888,16 @@ void MacroAssembler::VmovLow(DwVfpRegister dst, Register src) { |
| } |
| +void MacroAssembler::LoadConstantPoolPointerRegister() { |
| + if (FLAG_enable_ool_constant_pool) { |
| + int constant_pool_offset = |
| + Code::kConstantPoolOffset - Code::kHeaderSize - pc_offset() - 8; |
|
Rodolph Perfetta (ARM)
2014/03/11 13:28:34
8 -> kPCReadOffset
rmcilroy
2014/03/11 16:36:34
Done.
|
| + ASSERT(ImmediateFitsAddrMode2Instruction(constant_pool_offset)); |
| + ldr(pp, MemOperand(pc, constant_pool_offset)); |
| + } |
| +} |
| + |
| + |
| void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { |
| if (frame_mode == BUILD_STUB_FRAME) { |
| PushFixedFrame(); |
| @@ -912,22 +922,20 @@ void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { |
| add(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp)); |
| } |
| } |
| -} |
| - |
| - |
| -void MacroAssembler::LoadConstantPoolPointerRegister() { |
| if (FLAG_enable_ool_constant_pool) { |
| - int constant_pool_offset = |
| - Code::kConstantPoolOffset - Code::kHeaderSize - pc_offset() - 8; |
| - ASSERT(ImmediateFitsAddrMode2Instruction(constant_pool_offset)); |
| - ldr(pp, MemOperand(pc, constant_pool_offset)); |
| + LoadConstantPoolPointerRegister(); |
| + set_constant_pool_available(true); |
| } |
| } |
| -void MacroAssembler::EnterFrame(StackFrame::Type type) { |
| +void MacroAssembler::EnterFrame(StackFrame::Type type, |
| + bool load_constant_pool) { |
| // r0-r3: preserved |
| PushFixedFrame(); |
| + if (FLAG_enable_ool_constant_pool && load_constant_pool) { |
| + LoadConstantPoolPointerRegister(); |
| + } |
| mov(ip, Operand(Smi::FromInt(type))); |
| push(ip); |
| mov(ip, Operand(CodeObject())); |
| @@ -975,6 +983,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) { |
| } |
| if (FLAG_enable_ool_constant_pool) { |
| str(pp, MemOperand(fp, ExitFrameConstants::kConstantPoolOffset)); |
| + LoadConstantPoolPointerRegister(); |
| } |
| mov(ip, Operand(CodeObject())); |
| str(ip, MemOperand(fp, ExitFrameConstants::kCodeOffset)); |