| Index: src/compiler/ppc/instruction-scheduler-ppc.cc
|
| diff --git a/src/compiler/ppc/instruction-scheduler-ppc.cc b/src/compiler/ppc/instruction-scheduler-ppc.cc
|
| index af86a87ad78690241c2a6d4d0023f58547cd6456..fc90cdd628ea01464f0769c95245a22f23f9df15 100644
|
| --- a/src/compiler/ppc/instruction-scheduler-ppc.cc
|
| +++ b/src/compiler/ppc/instruction-scheduler-ppc.cc
|
| @@ -8,17 +8,134 @@ namespace v8 {
|
| namespace internal {
|
| namespace compiler {
|
|
|
| -bool InstructionScheduler::SchedulerSupported() { return false; }
|
| +bool InstructionScheduler::SchedulerSupported() { return true; }
|
|
|
|
|
| int InstructionScheduler::GetTargetInstructionFlags(
|
| const Instruction* instr) const {
|
| - UNIMPLEMENTED();
|
| + switch (instr->arch_opcode()) {
|
| + case kPPC_And:
|
| + case kPPC_AndComplement:
|
| + case kPPC_Or:
|
| + case kPPC_OrComplement:
|
| + case kPPC_Xor:
|
| + case kPPC_ShiftLeft32:
|
| + case kPPC_ShiftLeft64:
|
| + case kPPC_ShiftRight32:
|
| + case kPPC_ShiftRight64:
|
| + case kPPC_ShiftRightAlg32:
|
| + case kPPC_ShiftRightAlg64:
|
| + case kPPC_RotRight32:
|
| + case kPPC_RotRight64:
|
| + case kPPC_Not:
|
| + case kPPC_RotLeftAndMask32:
|
| + case kPPC_RotLeftAndClear64:
|
| + case kPPC_RotLeftAndClearLeft64:
|
| + case kPPC_RotLeftAndClearRight64:
|
| + case kPPC_Add:
|
| + case kPPC_AddWithOverflow32:
|
| + case kPPC_AddDouble:
|
| + case kPPC_Sub:
|
| + case kPPC_SubWithOverflow32:
|
| + case kPPC_SubDouble:
|
| + case kPPC_Mul32:
|
| + case kPPC_Mul64:
|
| + case kPPC_MulHigh32:
|
| + case kPPC_MulHighU32:
|
| + case kPPC_MulDouble:
|
| + case kPPC_Div32:
|
| + case kPPC_Div64:
|
| + case kPPC_DivU32:
|
| + case kPPC_DivU64:
|
| + case kPPC_DivDouble:
|
| + case kPPC_Mod32:
|
| + case kPPC_Mod64:
|
| + case kPPC_ModU32:
|
| + case kPPC_ModU64:
|
| + case kPPC_ModDouble:
|
| + case kPPC_Neg:
|
| + case kPPC_NegDouble:
|
| + case kPPC_SqrtDouble:
|
| + case kPPC_FloorDouble:
|
| + case kPPC_CeilDouble:
|
| + case kPPC_TruncateDouble:
|
| + case kPPC_RoundDouble:
|
| + case kPPC_MaxDouble:
|
| + case kPPC_MinDouble:
|
| + case kPPC_AbsDouble:
|
| + case kPPC_Cntlz32:
|
| + case kPPC_Cntlz64:
|
| + case kPPC_Popcnt32:
|
| + case kPPC_Popcnt64:
|
| + case kPPC_Cmp32:
|
| + case kPPC_Cmp64:
|
| + case kPPC_CmpDouble:
|
| + case kPPC_Tst32:
|
| + case kPPC_Tst64:
|
| + case kPPC_ExtendSignWord8:
|
| + case kPPC_ExtendSignWord16:
|
| + case kPPC_ExtendSignWord32:
|
| + case kPPC_Uint32ToUint64:
|
| + case kPPC_Int64ToInt32:
|
| + case kPPC_Int64ToFloat32:
|
| + case kPPC_Int64ToDouble:
|
| + case kPPC_Uint64ToFloat32:
|
| + case kPPC_Uint64ToDouble:
|
| + case kPPC_Int32ToDouble:
|
| + case kPPC_Uint32ToDouble:
|
| + case kPPC_Float32ToDouble:
|
| + case kPPC_DoubleToInt32:
|
| + case kPPC_DoubleToUint32:
|
| + case kPPC_DoubleToInt64:
|
| + case kPPC_DoubleToUint64:
|
| + case kPPC_DoubleToFloat32:
|
| + case kPPC_DoubleExtractLowWord32:
|
| + case kPPC_DoubleExtractHighWord32:
|
| + case kPPC_DoubleInsertLowWord32:
|
| + case kPPC_DoubleInsertHighWord32:
|
| + case kPPC_DoubleConstruct:
|
| + case kPPC_BitcastInt32ToFloat32:
|
| + case kPPC_BitcastFloat32ToInt32:
|
| + case kPPC_BitcastInt64ToDouble:
|
| + case kPPC_BitcastDoubleToInt64:
|
| + return kNoOpcodeFlags;
|
| +
|
| + case kPPC_LoadWordS8:
|
| + case kPPC_LoadWordU8:
|
| + case kPPC_LoadWordS16:
|
| + case kPPC_LoadWordU16:
|
| + case kPPC_LoadWordS32:
|
| + case kPPC_LoadWord64:
|
| + case kPPC_LoadFloat32:
|
| + case kPPC_LoadDouble:
|
| + return kIsLoadOperation;
|
| +
|
| + case kPPC_StoreWord8:
|
| + case kPPC_StoreWord16:
|
| + case kPPC_StoreWord32:
|
| + case kPPC_StoreWord64:
|
| + case kPPC_StoreFloat32:
|
| + case kPPC_StoreDouble:
|
| + case kPPC_Push:
|
| + case kPPC_PushFrame:
|
| + case kPPC_StoreToStackSlot:
|
| + return kHasSideEffect;
|
| +
|
| +#define CASE(Name) case k##Name:
|
| + COMMON_ARCH_OPCODE_LIST(CASE)
|
| +#undef CASE
|
| + // Already covered in architecture independent code.
|
| + UNREACHABLE();
|
| + }
|
| +
|
| + UNREACHABLE();
|
| + return kNoOpcodeFlags;
|
| }
|
|
|
|
|
| int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
|
| - UNIMPLEMENTED();
|
| + // TODO(all): Add instruction cost modeling.
|
| + return 1;
|
| }
|
|
|
| } // namespace compiler
|
|
|