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 c633394cbb9dba9ed60dfd6f7b4b29d56e3eadb9..f74a5add8d237acd76952f1681460eba01d4f967 100644 |
--- a/src/compiler/ppc/code-generator-ppc.cc |
+++ b/src/compiler/ppc/code-generator-ppc.cc |
@@ -610,14 +610,6 @@ void CodeGenerator::AssembleDeconstructActivationRecord(int stack_param_delta) { |
if (sp_slot_delta > 0) { |
__ Add(sp, sp, sp_slot_delta * kPointerSize, r0); |
} |
- if (frame()->needs_frame()) { |
- if (FLAG_enable_embedded_constant_pool) { |
- __ Pop(r0, fp, kConstantPoolRegister); |
- } else { |
- __ Pop(r0, fp); |
- } |
- __ mtlr(r0); |
- } |
frame_access_state()->SetFrameAccessToDefault(); |
} |
@@ -628,6 +620,15 @@ void CodeGenerator::AssemblePrepareTailCall(int stack_param_delta) { |
__ Add(sp, sp, sp_slot_delta * kPointerSize, r0); |
frame_access_state()->IncreaseSPDelta(-sp_slot_delta); |
} |
+ if (frame()->needs_frame()) { |
+ if (FLAG_enable_embedded_constant_pool) { |
+ __ LoadP(kConstantPoolRegister, |
+ MemOperand(fp, StandardFrameConstants::kConstantPoolOffset)); |
+ } |
+ __ LoadP(r0, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); |
+ __ LoadP(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); |
+ __ mtlr(r0); |
+ } |
frame_access_state()->SetFrameAccessToSP(); |
} |