| Index: src/arm/macro-assembler-arm.cc
|
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
|
| index a9acdd5ab4783ea51318e5f29589bf71f4833154..38ab0e9a183fcf01539ae4617b73b85393bbe2a2 100644
|
| --- a/src/arm/macro-assembler-arm.cc
|
| +++ b/src/arm/macro-assembler-arm.cc
|
| @@ -967,11 +967,14 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) {
|
| Push(lr, fp);
|
| mov(fp, Operand(sp)); // Set up new frame pointer.
|
| // Reserve room for saved entry sp and code object.
|
| - sub(sp, sp, Operand(2 * kPointerSize));
|
| + sub(sp, sp, Operand(ExitFrameConstants::kFrameSize));
|
| if (emit_debug_code()) {
|
| mov(ip, Operand::Zero());
|
| str(ip, MemOperand(fp, ExitFrameConstants::kSPOffset));
|
| }
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + str(pp, MemOperand(fp, ExitFrameConstants::kConstantPoolOffset));
|
| + }
|
| mov(ip, Operand(CodeObject()));
|
| str(ip, MemOperand(fp, ExitFrameConstants::kCodeOffset));
|
|
|
| @@ -985,8 +988,10 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) {
|
| if (save_doubles) {
|
| SaveFPRegs(sp, ip);
|
| // Note that d0 will be accessible at
|
| - // fp - 2 * kPointerSize - DwVfpRegister::kMaxNumRegisters * kDoubleSize,
|
| - // since the sp slot and code slot were pushed after the fp.
|
| + // fp - ExitFrameConstants::kFrameSize -
|
| + // DwVfpRegister::kMaxNumRegisters * kDoubleSize,
|
| + // since the sp slot, code slot and constant pool slot (if
|
| + // FLAG_enable_ool_constant_pool) were pushed after the fp.
|
| }
|
|
|
| // Reserve place for the return address and stack space and align the frame
|
| @@ -1042,7 +1047,7 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles,
|
| // Optionally restore all double registers.
|
| if (save_doubles) {
|
| // Calculate the stack location of the saved doubles and restore them.
|
| - const int offset = 2 * kPointerSize;
|
| + const int offset = ExitFrameConstants::kFrameSize;
|
| sub(r3, fp,
|
| Operand(offset + DwVfpRegister::kMaxNumRegisters * kDoubleSize));
|
| RestoreFPRegs(r3, ip);
|
| @@ -1065,6 +1070,9 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles,
|
| #endif
|
|
|
| // Tear down the exit frame, pop the arguments, and return.
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + ldr(pp, MemOperand(fp, ExitFrameConstants::kConstantPoolOffset));
|
| + }
|
| mov(sp, Operand(fp));
|
| ldm(ia_w, sp, fp.bit() | lr.bit());
|
| if (argument_count.is_valid()) {
|
| @@ -1073,7 +1081,7 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles,
|
| }
|
|
|
|
|
| -void MacroAssembler::GetCFunctionDoubleResult(const DwVfpRegister dst) {
|
| +void MacroAssembler::MovFromFloatResult(const DwVfpRegister dst) {
|
| if (use_eabi_hardfloat()) {
|
| Move(dst, d0);
|
| } else {
|
| @@ -1082,6 +1090,12 @@ void MacroAssembler::GetCFunctionDoubleResult(const DwVfpRegister dst) {
|
| }
|
|
|
|
|
| +// On ARM this is just a synonym to make the purpose clear.
|
| +void MacroAssembler::MovFromFloatParameter(DwVfpRegister dst) {
|
| + MovFromFloatResult(dst);
|
| +}
|
| +
|
| +
|
| void MacroAssembler::SetCallKind(Register dst, CallKind call_kind) {
|
| // This macro takes the dst register to make the code more readable
|
| // at the call sites. However, the dst register has to be r5 to
|
| @@ -3532,33 +3546,27 @@ void MacroAssembler::PrepareCallCFunction(int num_reg_arguments,
|
| }
|
|
|
|
|
| -void MacroAssembler::SetCallCDoubleArguments(DwVfpRegister dreg) {
|
| - ASSERT(dreg.is(d0));
|
| +void MacroAssembler::MovToFloatParameter(DwVfpRegister src) {
|
| + ASSERT(src.is(d0));
|
| if (!use_eabi_hardfloat()) {
|
| - vmov(r0, r1, dreg);
|
| + vmov(r0, r1, src);
|
| }
|
| }
|
|
|
|
|
| -void MacroAssembler::SetCallCDoubleArguments(DwVfpRegister dreg1,
|
| - DwVfpRegister dreg2) {
|
| - ASSERT(dreg1.is(d0));
|
| - ASSERT(dreg2.is(d1));
|
| - if (!use_eabi_hardfloat()) {
|
| - vmov(r0, r1, dreg1);
|
| - vmov(r2, r3, dreg2);
|
| - }
|
| +// On ARM this is just a synonym to make the purpose clear.
|
| +void MacroAssembler::MovToFloatResult(DwVfpRegister src) {
|
| + MovToFloatParameter(src);
|
| }
|
|
|
|
|
| -void MacroAssembler::SetCallCDoubleArguments(DwVfpRegister dreg,
|
| - Register reg) {
|
| - ASSERT(dreg.is(d0));
|
| - if (use_eabi_hardfloat()) {
|
| - Move(r0, reg);
|
| - } else {
|
| - Move(r2, reg);
|
| - vmov(r0, r1, dreg);
|
| +void MacroAssembler::MovToFloatParameters(DwVfpRegister src1,
|
| + DwVfpRegister src2) {
|
| + ASSERT(src1.is(d0));
|
| + ASSERT(src2.is(d1));
|
| + if (!use_eabi_hardfloat()) {
|
| + vmov(r0, r1, src1);
|
| + vmov(r2, r3, src2);
|
| }
|
| }
|
|
|
|
|