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 63ebfc89804c32ed48341cb004cd950e00b3f733..b1fc707bca6c99b8fc02ba0323129b65670163df 100644 |
--- a/src/compiler/ppc/code-generator-ppc.cc |
+++ b/src/compiler/ppc/code-generator-ppc.cc |
@@ -657,6 +657,22 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
break; |
} |
+ case kArchPrepareCallCFunction: { |
+ int const num_parameters = MiscField::decode(instr->opcode()); |
+ __ PrepareCallCFunction(num_parameters, kScratchReg); |
+ break; |
+ } |
+ case kArchCallCFunction: { |
+ int const num_parameters = MiscField::decode(instr->opcode()); |
+ if (instr->InputAt(0)->IsImmediate()) { |
+ ExternalReference ref = i.InputExternalReference(0); |
+ __ CallCFunction(ref, num_parameters); |
+ } else { |
+ Register func = i.InputRegister(0); |
+ __ CallCFunction(func, num_parameters); |
+ } |
+ break; |
+ } |
case kArchJmp: |
AssembleArchJump(i.InputRpo(0)); |
DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
@@ -962,6 +978,16 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
__ Push(i.InputRegister(0)); |
DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
break; |
+ case kPPC_PushFrame: { |
+ int num_slots = i.InputInt32(1); |
+ __ StorePU(i.InputRegister(0), MemOperand(sp, -num_slots * kPointerSize)); |
+ break; |
+ } |
+ case kPPC_StoreToStackSlot: { |
+ int slot = i.InputInt32(1); |
+ __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); |
+ break; |
+ } |
case kPPC_ExtendSignWord8: |
__ extsb(i.OutputRegister(), i.InputRegister(0)); |
DCHECK_EQ(LeaveRC, i.OutputRCBit()); |