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 d7b038394d937df00b565316c08ecec98352f597..f4fac6daff93403497dc4ef202896e9aab0a8098 100644 |
--- a/src/compiler/ppc/code-generator-ppc.cc |
+++ b/src/compiler/ppc/code-generator-ppc.cc |
@@ -1269,8 +1269,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--) { |
@@ -1323,6 +1331,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); |