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 0cdbd5f6d0c4438791c2042361b4d7e5f8ea6c76..beb0c7669e2b34c77b499aa71e39629229fa0a16 100644 |
--- a/src/compiler/ppc/code-generator-ppc.cc |
+++ b/src/compiler/ppc/code-generator-ppc.cc |
@@ -972,7 +972,11 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
break; |
#endif |
case kPPC_Push: |
- __ Push(i.InputRegister(0)); |
+ if (instr->InputAt(0)->IsDoubleRegister()) { |
+ __ stfdu(i.InputDoubleRegister(0), MemOperand(sp, -kDoubleSize)); |
+ } else { |
+ __ Push(i.InputRegister(0)); |
+ } |
DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
break; |
case kPPC_PushFrame: { |
@@ -982,7 +986,11 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
} |
case kPPC_StoreToStackSlot: { |
int slot = i.InputInt32(1); |
- __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); |
+ if (instr->InputAt(0)->IsDoubleRegister()) { |
+ __ stfd(i.InputDoubleRegister(0), MemOperand(sp, slot * kPointerSize)); |
+ } else { |
+ __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); |
+ } |
break; |
} |
case kPPC_ExtendSignWord8: |