mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[Hexagon] Add new InstrItinClass to support timing classes.
This patch doesn't introduce any functionality change. Test cases will be added later when v5 support is added. llvm-svn: 208349
This commit is contained in:
parent
ccc1932aa6
commit
0b0b5038bf
@ -200,8 +200,6 @@ class Proc<string Name, SchedMachineModel Model,
|
||||
list<SubtargetFeature> Features>
|
||||
: ProcessorModel<Name, Model, Features>;
|
||||
|
||||
def : Proc<"hexagonv2", HexagonModel, [ArchV2]>;
|
||||
def : Proc<"hexagonv3", HexagonModel, [ArchV2, ArchV3]>;
|
||||
def : Proc<"hexagonv4", HexagonModelV4, [ArchV2, ArchV3, ArchV4]>;
|
||||
def : Proc<"hexagonv5", HexagonModelV4, [ArchV2, ArchV3, ArchV4, ArchV5]>;
|
||||
|
||||
|
@ -197,8 +197,8 @@ class InstHexagon<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
// LD Instruction Class in V2/V3/V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
class LDInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, LD, TypeLD>;
|
||||
string cstr = "", InstrItinClass itin = LD_tc_ld_SLOT01>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeLD>;
|
||||
|
||||
let mayLoad = 1 in
|
||||
class LDInst2<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
@ -217,16 +217,16 @@ class LDInstPost<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
|
||||
let mayLoad = 1 in
|
||||
class LD0Inst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: LDInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin=LD_tc_ld_SLOT0>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeLD>;
|
||||
|
||||
// ST Instruction Class in V2/V3 can take SLOT0 only.
|
||||
// ST Instruction Class in V4 can take SLOT0 & SLOT1.
|
||||
// Definition of the instruction class CHANGED from V2/V3 to V4.
|
||||
let mayStore = 1 in
|
||||
class STInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, ST, TypeST>;
|
||||
string cstr = "", InstrItinClass itin = ST_tc_st_SLOT01>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeST>;
|
||||
|
||||
class STInst2<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
@ -234,39 +234,39 @@ class STInst2<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
|
||||
let mayStore = 1 in
|
||||
class ST0Inst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, ST0, TypeST>;
|
||||
string cstr = "", InstrItinClass itin = ST_tc_ld_SLOT0>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeST>;
|
||||
|
||||
// ST Instruction Class in V2/V3 can take SLOT0 only.
|
||||
// ST Instruction Class in V4 can take SLOT0 & SLOT1.
|
||||
// Definition of the instruction class CHANGED from V2/V3 to V4.
|
||||
class STInstPost<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: STInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = ST_tc_st_SLOT01>
|
||||
: STInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// SYSTEM Instruction Class in V4 can take SLOT0 only
|
||||
// In V2/V3 we used ST for this but in v4 ST can take SLOT0 or SLOT1.
|
||||
class SYSInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, SYS, TypeSYSTEM>;
|
||||
string cstr = "", InstrItinClass itin = ST_tc_3stall_SLOT0>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeSYSTEM>;
|
||||
|
||||
// ALU32 Instruction Class in V2/V3/V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
class ALU32Inst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, ALU32, TypeALU32>;
|
||||
string cstr = "", InstrItinClass itin = ALU32_2op_tc_1_SLOT0123>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeALU32>;
|
||||
|
||||
// ALU64 Instruction Class in V2/V3.
|
||||
// XTYPE Instruction Class in V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
// Name of the Instruction Class changed from ALU64 to XTYPE from V2/V3 to V4.
|
||||
class ALU64Inst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, ALU64, TypeXTYPE>;
|
||||
string cstr = "", InstrItinClass itin = ALU64_tc_2_SLOT23>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeXTYPE>;
|
||||
|
||||
class ALU64_acc<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: ALU64Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = ALU64_tc_2_SLOT23>
|
||||
: ALU64Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
|
||||
// M Instruction Class in V2/V3.
|
||||
@ -274,55 +274,55 @@ class ALU64_acc<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
// Name of the Instruction Class changed from M to XTYPE from V2/V3 to V4.
|
||||
class MInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, M, TypeXTYPE>;
|
||||
string cstr = "", InstrItinClass itin = M_tc_3x_SLOT23>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeXTYPE>;
|
||||
|
||||
// M Instruction Class in V2/V3.
|
||||
// XTYPE Instruction Class in V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
// Name of the Instruction Class changed from M to XTYPE from V2/V3 to V4.
|
||||
class MInst_acc<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: MInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = M_tc_2_SLOT23>
|
||||
: MInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// S Instruction Class in V2/V3.
|
||||
// XTYPE Instruction Class in V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
// Name of the Instruction Class changed from S to XTYPE from V2/V3 to V4.
|
||||
class SInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, S, TypeXTYPE>;
|
||||
string cstr = "", InstrItinClass itin = S_2op_tc_1_SLOT23>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeXTYPE>;
|
||||
|
||||
// S Instruction Class in V2/V3.
|
||||
// XTYPE Instruction Class in V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
// Name of the Instruction Class changed from S to XTYPE from V2/V3 to V4.
|
||||
class SInst_acc<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: SInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = S_3op_tc_1_SLOT23>
|
||||
: SInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// J Instruction Class in V2/V3/V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
class JInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, J, TypeJ>;
|
||||
string cstr = "", InstrItinClass itin = J_tc_2early_SLOT23>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeJ>;
|
||||
|
||||
// JR Instruction Class in V2/V3/V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
class JRInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, JR, TypeJR>;
|
||||
string cstr = "", InstrItinClass itin = J_tc_2early_SLOT2>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeJR>;
|
||||
|
||||
// CR Instruction Class in V2/V3/V4.
|
||||
// Definition of the instruction class NOT CHANGED.
|
||||
class CRInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, CR, TypeCR>;
|
||||
string cstr = "", InstrItinClass itin = CR_tc_2early_SLOT3>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCR>;
|
||||
|
||||
let isCodeGenOnly = 1, isPseudo = 1 in
|
||||
class Endloop<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, ENDLOOP, TypeENDLOOP>;
|
||||
string cstr = "", InstrItinClass itin = J_tc_2early_SLOT0123>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeENDLOOP>;
|
||||
|
||||
let isCodeGenOnly = 1, isPseudo = 1 in
|
||||
class Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
@ -342,32 +342,33 @@ class PseudoM<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
//
|
||||
// ALU32 patterns
|
||||
//.
|
||||
class ALU32_rr<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
string cstr = "">
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
class ALU32_rr<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "", InstrItinClass itin = ALU32_2op_tc_1_SLOT0123>
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
class ALU32_ir<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
string cstr = "">
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
class ALU32_ir<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "", InstrItinClass itin = ALU32_2op_tc_1_SLOT0123>
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
class ALU32_ri<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
string cstr = "">
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
class ALU32_ri<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "", InstrItinClass itin = ALU32_2op_tc_1_SLOT0123>
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
class ALU32_ii<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "", InstrItinClass itin = ALU32_2op_tc_1_SLOT0123>
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
class ALU32_ii<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
string cstr = "">
|
||||
: ALU32Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
|
||||
//
|
||||
// ALU64 patterns.
|
||||
//
|
||||
class ALU64_rr<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
string cstr = "">
|
||||
: ALU64Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
class ALU64_rr<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "", InstrItinClass itin = ALU64_tc_1_SLOT23>
|
||||
: ALU64Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
class ALU64_ri<dag outs, dag ins, string asmstr, list<dag> pattern,
|
||||
string cstr = "">
|
||||
: ALU64Inst<outs, ins, asmstr, pattern, cstr>;
|
||||
class ALU64_ri<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "", InstrItinClass itin = ALU64_tc_1_SLOT23>
|
||||
: ALU64Inst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// Post increment ST Instruction.
|
||||
class STInstPI<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
|
@ -12,7 +12,7 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
//----------------------------------------------------------------------------//
|
||||
// Hexagon Intruction Flags +
|
||||
// Hexagon Instruction Flags
|
||||
//
|
||||
// *** Must match BaseInfo.h ***
|
||||
//----------------------------------------------------------------------------//
|
||||
@ -22,30 +22,30 @@ def TypeNV : IType<10>;
|
||||
def TypePREFIX : IType<30>;
|
||||
|
||||
//----------------------------------------------------------------------------//
|
||||
// Intruction Classes Definitions +
|
||||
// Instruction Classes Definitions
|
||||
//----------------------------------------------------------------------------//
|
||||
|
||||
//
|
||||
// NV type instructions.
|
||||
//
|
||||
class NVInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, NV_V4, TypeNV>;
|
||||
string cstr = "", InstrItinClass itin = NCJ_tc_3or4stall_SLOT0>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeNV>;
|
||||
|
||||
class NVInst_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: NVInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = NCJ_tc_3or4stall_SLOT0>
|
||||
: NVInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// Definition of Post increment new value store.
|
||||
class NVInstPost_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: NVInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = ST_tc_st_SLOT0>
|
||||
: NVInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// Post increment ST Instruction.
|
||||
let mayStore = 1 in
|
||||
class NVInstPI_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: NVInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = ST_tc_st_SLOT0>
|
||||
: NVInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
// New-value conditional branch.
|
||||
class NCJInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
@ -54,13 +54,14 @@ class NCJInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
|
||||
let mayLoad = 1, mayStore = 1 in
|
||||
class MEMInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, MEM_V4, TypeMEMOP>;
|
||||
string cstr = "", InstrItinClass itin = V4LDST_tc_st_SLOT0>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeMEMOP>;
|
||||
|
||||
class MEMInst_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
|
||||
string cstr = "">
|
||||
: MEMInst<outs, ins, asmstr, pattern, cstr>;
|
||||
string cstr = "", InstrItinClass itin = V4LDST_tc_st_SLOT0>
|
||||
: MEMInst<outs, ins, asmstr, pattern, cstr, itin>;
|
||||
|
||||
let isCodeGenOnly = 1 in
|
||||
class EXTENDERInst<dag outs, dag ins, string asmstr, list<dag> pattern = []>
|
||||
: InstHexagon<outs, ins, asmstr, pattern, "", PREFIX, TypePREFIX>;
|
||||
: InstHexagon<outs, ins, asmstr, pattern, "", EXTENDER_tc_1_SLOT0123,
|
||||
TypePREFIX>;
|
||||
|
@ -7,57 +7,6 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Functional Units
|
||||
def LSUNIT : FuncUnit; // SLOT0
|
||||
def LUNIT : FuncUnit; // SLOT1
|
||||
def MUNIT : FuncUnit; // SLOT2
|
||||
def SUNIT : FuncUnit; // SLOT3
|
||||
def LOOPUNIT : FuncUnit;
|
||||
|
||||
// Itinerary classes
|
||||
def ALU32 : InstrItinClass;
|
||||
def ALU64 : InstrItinClass;
|
||||
def CR : InstrItinClass;
|
||||
def J : InstrItinClass;
|
||||
def JR : InstrItinClass;
|
||||
def LD : InstrItinClass;
|
||||
def LD0 : InstrItinClass;
|
||||
def M : InstrItinClass;
|
||||
def ST : InstrItinClass;
|
||||
def ST0 : InstrItinClass;
|
||||
def S : InstrItinClass;
|
||||
def SYS : InstrItinClass;
|
||||
def ENDLOOP : InstrItinClass;
|
||||
def PSEUDO : InstrItinClass;
|
||||
def PSEUDOM : InstrItinClass;
|
||||
|
||||
def HexagonItineraries :
|
||||
ProcessorItineraries<[LSUNIT, LUNIT, MUNIT, SUNIT, LOOPUNIT], [], [
|
||||
InstrItinData<ALU32 , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
|
||||
InstrItinData<ALU64 , [InstrStage<1, [MUNIT, SUNIT]>]>,
|
||||
InstrItinData<CR , [InstrStage<1, [SUNIT]>]>,
|
||||
InstrItinData<J , [InstrStage<1, [SUNIT, MUNIT]>]>,
|
||||
InstrItinData<JR , [InstrStage<1, [MUNIT]>]>,
|
||||
InstrItinData<LD , [InstrStage<1, [LUNIT, LSUNIT]>]>,
|
||||
InstrItinData<LD0 , [InstrStage<1, [LSUNIT]>]>,
|
||||
InstrItinData<M , [InstrStage<1, [MUNIT, SUNIT]>]>,
|
||||
InstrItinData<ST , [InstrStage<1, [LSUNIT]>]>,
|
||||
InstrItinData<ST0 , [InstrStage<1, [LSUNIT]>]>,
|
||||
InstrItinData<S , [InstrStage<1, [SUNIT, MUNIT]>]>,
|
||||
InstrItinData<SYS , [InstrStage<1, [LSUNIT]>]>,
|
||||
InstrItinData<ENDLOOP, [InstrStage<1, [LOOPUNIT]>]>,
|
||||
InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
|
||||
InstrItinData<PSEUDOM, [InstrStage<1, [MUNIT, SUNIT], 0>,
|
||||
InstrStage<1, [MUNIT, SUNIT]>]>
|
||||
]>;
|
||||
|
||||
def HexagonModel : SchedMachineModel {
|
||||
// Max issue per cycle == bundle width.
|
||||
let IssueWidth = 4;
|
||||
let Itineraries = HexagonItineraries;
|
||||
let LoadLatency = 1;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// V4 Machine Info +
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -34,29 +34,158 @@ def SLOT3 : FuncUnit;
|
||||
def SLOT_ENDLOOP: FuncUnit;
|
||||
|
||||
// Itinerary classes.
|
||||
def NV_V4 : InstrItinClass;
|
||||
def MEM_V4 : InstrItinClass;
|
||||
def PSEUDO : InstrItinClass;
|
||||
def PSEUDOM : InstrItinClass;
|
||||
// ALU64/M/S Instruction classes of V2 are collectively knownn as XTYPE in V4.
|
||||
def DUPLEX : InstrItinClass;
|
||||
def PREFIX : InstrItinClass;
|
||||
def COMPOUND : InstrItinClass;
|
||||
|
||||
def ALU32_2op_tc_1_SLOT0123 : InstrItinClass;
|
||||
def ALU32_2op_tc_2early_SLOT0123 : InstrItinClass;
|
||||
def ALU32_3op_tc_2early_SLOT0123 : InstrItinClass;
|
||||
def ALU32_3op_tc_1_SLOT0123 : InstrItinClass;
|
||||
def ALU32_3op_tc_2_SLOT0123 : InstrItinClass;
|
||||
def ALU32_ADDI_tc_1_SLOT0123 : InstrItinClass;
|
||||
def ALU64_tc_1_SLOT23 : InstrItinClass;
|
||||
def ALU64_tc_1or2_SLOT23 : InstrItinClass;
|
||||
def ALU64_tc_2_SLOT23 : InstrItinClass;
|
||||
def ALU64_tc_2early_SLOT23 : InstrItinClass;
|
||||
def ALU64_tc_3x_SLOT23 : InstrItinClass;
|
||||
def CR_tc_2_SLOT3 : InstrItinClass;
|
||||
def CR_tc_2early_SLOT23 : InstrItinClass;
|
||||
def CR_tc_2early_SLOT3 : InstrItinClass;
|
||||
def CR_tc_3x_SLOT23 : InstrItinClass;
|
||||
def CR_tc_3x_SLOT3 : InstrItinClass;
|
||||
def J_tc_2early_SLOT23 : InstrItinClass;
|
||||
def J_tc_2early_SLOT2 : InstrItinClass;
|
||||
def LD_tc_ld_SLOT01 : InstrItinClass;
|
||||
def LD_tc_ld_SLOT0 : InstrItinClass;
|
||||
def LD_tc_3or4stall_SLOT0 : InstrItinClass;
|
||||
def M_tc_1_SLOT23 : InstrItinClass;
|
||||
def M_tc_1or2_SLOT23 : InstrItinClass;
|
||||
def M_tc_2_SLOT23 : InstrItinClass;
|
||||
def M_tc_3_SLOT23 : InstrItinClass;
|
||||
def M_tc_3x_SLOT23 : InstrItinClass;
|
||||
def M_tc_3or4x_SLOT23 : InstrItinClass;
|
||||
def ST_tc_st_SLOT01 : InstrItinClass;
|
||||
def ST_tc_st_SLOT0 : InstrItinClass;
|
||||
def ST_tc_ld_SLOT0 : InstrItinClass;
|
||||
def ST_tc_3stall_SLOT0 : InstrItinClass;
|
||||
def S_2op_tc_1_SLOT23 : InstrItinClass;
|
||||
def S_2op_tc_2_SLOT23 : InstrItinClass;
|
||||
def S_2op_tc_2early_SLOT23 : InstrItinClass;
|
||||
def S_2op_tc_3or4x_SLOT23 : InstrItinClass;
|
||||
def S_3op_tc_1_SLOT23 : InstrItinClass;
|
||||
def S_3op_tc_1or2_SLOT23 : InstrItinClass;
|
||||
def S_3op_tc_2_SLOT23 : InstrItinClass;
|
||||
def S_3op_tc_2early_SLOT23 : InstrItinClass;
|
||||
def S_3op_tc_3_SLOT23 : InstrItinClass;
|
||||
def S_3op_tc_3x_SLOT23 : InstrItinClass;
|
||||
def NCJ_tc_3or4stall_SLOT0 : InstrItinClass;
|
||||
def V2LDST_tc_ld_SLOT01 : InstrItinClass;
|
||||
def V2LDST_tc_st_SLOT0 : InstrItinClass;
|
||||
def V2LDST_tc_st_SLOT01 : InstrItinClass;
|
||||
def V4LDST_tc_ld_SLOT01 : InstrItinClass;
|
||||
def V4LDST_tc_st_SLOT0 : InstrItinClass;
|
||||
def V4LDST_tc_st_SLOT01 : InstrItinClass;
|
||||
def J_tc_2early_SLOT0123 : InstrItinClass;
|
||||
def EXTENDER_tc_1_SLOT0123 : InstrItinClass;
|
||||
|
||||
|
||||
def HexagonItinerariesV4 :
|
||||
ProcessorItineraries<[SLOT0, SLOT1, SLOT2, SLOT3, SLOT_ENDLOOP], [], [
|
||||
InstrItinData<ALU32 , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU64 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<CR , [InstrStage<1, [SLOT3]>]>,
|
||||
InstrItinData<J , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<JR , [InstrStage<1, [SLOT2]>]>,
|
||||
InstrItinData<LD , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
InstrItinData<LD0 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<M , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ST , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
InstrItinData<ST0 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<S , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<SYS , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<NV_V4 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<MEM_V4 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<ENDLOOP, [InstrStage<1, [SLOT_ENDLOOP]>]>,
|
||||
InstrItinData<PREFIX , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
// ALU32
|
||||
InstrItinData<ALU32_2op_tc_1_SLOT0123 ,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU32_2op_tc_2early_SLOT0123,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU32_3op_tc_1_SLOT0123 ,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU32_3op_tc_2early_SLOT0123,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU32_3op_tc_2_SLOT0123 ,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU32_ADDI_tc_1_SLOT0123 ,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
|
||||
// ALU64
|
||||
InstrItinData<ALU64_tc_1_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU64_tc_1or2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU64_tc_2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU64_tc_2early_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<ALU64_tc_3x_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
|
||||
// CR -> System
|
||||
InstrItinData<CR_tc_2_SLOT3 , [InstrStage<1, [SLOT3]>]>,
|
||||
InstrItinData<CR_tc_2early_SLOT3 , [InstrStage<1, [SLOT3]>]>,
|
||||
InstrItinData<CR_tc_3x_SLOT3 , [InstrStage<1, [SLOT3]>]>,
|
||||
|
||||
// Jump (conditional/unconditional/return etc)
|
||||
// CR
|
||||
InstrItinData<CR_tc_2early_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<CR_tc_3x_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
// J
|
||||
InstrItinData<J_tc_2early_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
// JR
|
||||
InstrItinData<J_tc_2early_SLOT2 , [InstrStage<1, [SLOT2]>]>,
|
||||
|
||||
//Load
|
||||
InstrItinData<LD_tc_ld_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
InstrItinData<LD_tc_ld_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<LD_tc_3or4stall_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
|
||||
// M
|
||||
InstrItinData<M_tc_1_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<M_tc_1or2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<M_tc_2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<M_tc_3_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<M_tc_3x_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<M_tc_3or4x_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
|
||||
// Store
|
||||
// ST
|
||||
InstrItinData<ST_tc_st_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
// ST0
|
||||
InstrItinData<ST_tc_st_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<ST_tc_ld_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
|
||||
// S
|
||||
InstrItinData<S_2op_tc_1_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_2op_tc_2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_2op_tc_2early_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_2op_tc_3or4x_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_3op_tc_1_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_3op_tc_1or2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_3op_tc_2early_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_3op_tc_2_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_3op_tc_3_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<S_3op_tc_3x_SLOT23 , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
|
||||
// SYS
|
||||
InstrItinData<ST_tc_3stall_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
|
||||
// New Value Compare Jump
|
||||
InstrItinData<NCJ_tc_3or4stall_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
|
||||
// Mem ops - MEM_V4
|
||||
InstrItinData<V2LDST_tc_st_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<V2LDST_tc_ld_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
InstrItinData<V2LDST_tc_st_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
InstrItinData<V4LDST_tc_st_SLOT0 , [InstrStage<1, [SLOT0]>]>,
|
||||
InstrItinData<V4LDST_tc_ld_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
InstrItinData<V4LDST_tc_st_SLOT01 , [InstrStage<1, [SLOT0, SLOT1]>]>,
|
||||
|
||||
InstrItinData<DUPLEX , [InstrStage<1, [SLOT0]>]>,
|
||||
|
||||
// ENDLOOP
|
||||
InstrItinData<J_tc_2early_SLOT0123 , [InstrStage<1, [SLOT_ENDLOOP]>]>,
|
||||
|
||||
// Extender/PREFIX
|
||||
InstrItinData<EXTENDER_tc_1_SLOT0123,
|
||||
[InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
|
||||
InstrItinData<COMPOUND , [InstrStage<1, [SLOT2, SLOT3]>]>,
|
||||
InstrItinData<PSEUDO , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
|
||||
InstrItinData<PSEUDOM, [InstrStage<1, [SLOT2, SLOT3], 0>,
|
||||
InstrStage<1, [SLOT2, SLOT3]>]>
|
||||
|
Loading…
x
Reference in New Issue
Block a user