2007-12-05 02:24:05 +01:00
|
|
|
//===- SPUSchedule.td - Cell Scheduling Definitions --------*- tablegen -*-===//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
2007-12-29 21:36:04 +01:00
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
2007-12-05 02:24:05 +01:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// 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
|
2011-01-17 14:33:19 +01:00
|
|
|
def RotShiftVec : InstrItinClass; // EVEN_UNIT Inter vector
|
|
|
|
def RotShiftQuad : InstrItinClass; // ODD_UNIT Entire quad
|
2007-12-05 02:24:05 +01:00
|
|
|
def ImmLoad : InstrItinClass; // EVEN_UNIT
|
|
|
|
|
|
|
|
/* Note: The itinerary for the Cell SPU is somewhat contrived... */
|
2010-09-29 01:50:49 +02:00
|
|
|
def SPUItineraries : ProcessorItineraries<[ODD_UNIT, EVEN_UNIT], [], [
|
2007-12-05 02:24:05 +01:00
|
|
|
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]>]>,
|
2011-01-17 14:33:19 +01:00
|
|
|
InstrItinData<RotShiftVec , [InstrStage<4, [EVEN_UNIT]>]>,
|
|
|
|
InstrItinData<RotShiftQuad, [InstrStage<4, [ODD_UNIT]>]>,
|
2007-12-05 02:24:05 +01:00
|
|
|
InstrItinData<IntegerMulDiv,[InstrStage<7, [EVEN_UNIT]>]>,
|
|
|
|
InstrItinData<ImmLoad , [InstrStage<2, [EVEN_UNIT]>]>
|
|
|
|
]>;
|