Index: src/compiler/ppc/code-generator-ppc.cc |
diff --git a/src/compiler/ppc/code-generator-ppc.cc b/src/compiler/ppc/code-generator-ppc.cc |
index b843ad698536d045bc8ce1a0345864d78464f50d..1b0a9cc9ed156e53965b0a76158332f6e2b6f815 100644 |
--- a/src/compiler/ppc/code-generator-ppc.cc |
+++ b/src/compiler/ppc/code-generator-ppc.cc |
@@ -1190,8 +1190,16 @@ void CodeGenerator::AssemblePrologue() { |
int register_save_area_size = 0; |
RegList frame_saves = fp.bit(); |
__ mflr(r0); |
- __ Push(r0, fp); |
- __ mr(fp, sp); |
+ if (FLAG_enable_embedded_constant_pool) { |
+ __ Push(r0, fp, kConstantPoolRegister); |
+ // Adjust FP to point to saved FP. |
+ __ subi(fp, sp, Operand(StandardFrameConstants::kConstantPoolOffset)); |
+ register_save_area_size += kPointerSize; |
+ frame_saves |= kConstantPoolRegister.bit(); |
+ } else { |
+ __ Push(r0, fp); |
+ __ mr(fp, sp); |
+ } |
// Save callee-saved registers. |
const RegList saves = descriptor->CalleeSavedRegisters() & ~frame_saves; |
for (int i = Register::kNumRegisters - 1; i >= 0; i--) { |
@@ -1242,6 +1250,9 @@ void CodeGenerator::AssembleReturn() { |
} |
// Restore registers. |
RegList frame_saves = fp.bit(); |
+ if (FLAG_enable_embedded_constant_pool) { |
+ frame_saves |= kConstantPoolRegister.bit(); |
+ } |
const RegList saves = descriptor->CalleeSavedRegisters() & ~frame_saves; |
if (saves != 0) { |
__ MultiPop(saves); |