|  | //===-- 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]>]> | 
|  | ]>; |