| //===- SPUSchedule.td - Cell Scheduling Definitions --------*- tablegen -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| //===----------------------------------------------------------------------===// |
| // Even pipeline: |
| |
| def EVEN_UNIT : FuncUnit; // Even execution unit: (PC & 0x7 == 000) |
| def ODD_UNIT : FuncUnit; // Odd execution unit: (PC & 0x7 == 100) |
| |
| //===----------------------------------------------------------------------===// |
| // Instruction Itinerary classes used for Cell SPU |
| //===----------------------------------------------------------------------===// |
| |
| def LoadStore : InstrItinClass; // ODD_UNIT |
| def BranchHints : InstrItinClass; // ODD_UNIT |
| def BranchResolv : InstrItinClass; // ODD_UNIT |
| def ChanOpSPR : InstrItinClass; // ODD_UNIT |
| def ShuffleOp : InstrItinClass; // ODD_UNIT |
| def SelectOp : InstrItinClass; // ODD_UNIT |
| def GatherOp : InstrItinClass; // ODD_UNIT |
| def LoadNOP : InstrItinClass; // ODD_UNIT |
| def ExecNOP : InstrItinClass; // EVEN_UNIT |
| def SPrecFP : InstrItinClass; // EVEN_UNIT |
| def DPrecFP : InstrItinClass; // EVEN_UNIT |
| def FPInt : InstrItinClass; // EVEN_UNIT (FP<->integer) |
| def ByteOp : InstrItinClass; // EVEN_UNIT |
| def IntegerOp : InstrItinClass; // EVEN_UNIT |
| def IntegerMulDiv: InstrItinClass; // EVEN_UNIT |
| def RotShiftVec : InstrItinClass; // EVEN_UNIT Inter vector |
| def RotShiftQuad : InstrItinClass; // ODD_UNIT Entire quad |
| def ImmLoad : InstrItinClass; // EVEN_UNIT |
| |
| /* Note: The itinerary for the Cell SPU is somewhat contrived... */ |
| def SPUItineraries : ProcessorItineraries<[ODD_UNIT, EVEN_UNIT], [], [ |
| InstrItinData<LoadStore , [InstrStage<6, [ODD_UNIT]>]>, |
| InstrItinData<BranchHints , [InstrStage<6, [ODD_UNIT]>]>, |
| InstrItinData<BranchResolv, [InstrStage<4, [ODD_UNIT]>]>, |
| InstrItinData<ChanOpSPR , [InstrStage<6, [ODD_UNIT]>]>, |
| InstrItinData<ShuffleOp , [InstrStage<4, [ODD_UNIT]>]>, |
| InstrItinData<SelectOp , [InstrStage<4, [ODD_UNIT]>]>, |
| InstrItinData<GatherOp , [InstrStage<4, [ODD_UNIT]>]>, |
| InstrItinData<LoadNOP , [InstrStage<1, [ODD_UNIT]>]>, |
| InstrItinData<ExecNOP , [InstrStage<1, [EVEN_UNIT]>]>, |
| InstrItinData<SPrecFP , [InstrStage<6, [EVEN_UNIT]>]>, |
| InstrItinData<DPrecFP , [InstrStage<13, [EVEN_UNIT]>]>, |
| InstrItinData<FPInt , [InstrStage<2, [EVEN_UNIT]>]>, |
| InstrItinData<ByteOp , [InstrStage<4, [EVEN_UNIT]>]>, |
| InstrItinData<IntegerOp , [InstrStage<2, [EVEN_UNIT]>]>, |
| InstrItinData<RotShiftVec , [InstrStage<4, [EVEN_UNIT]>]>, |
| InstrItinData<RotShiftQuad, [InstrStage<4, [ODD_UNIT]>]>, |
| InstrItinData<IntegerMulDiv,[InstrStage<7, [EVEN_UNIT]>]>, |
| InstrItinData<ImmLoad , [InstrStage<2, [EVEN_UNIT]>]> |
| ]>; |