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