mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
[mips][sched] Split IILoad into II_L[BHWD], II_L[BHW]U, II_L[WD][LR], and II_RESTORE
No functional change since the InstrItinData's have been duplicated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2b9c11c071
commit
f862a4aefe
@ -145,7 +145,7 @@ let DecoderNamespace = "MicroMips", Predicates = [InMicroMips] in {
|
||||
def SW_MM : Store<"sw", GPR32Opnd>, MMRel, LW_FM_MM<0x3e>;
|
||||
}
|
||||
|
||||
def LWU_MM : LoadMM<"lwu", GPR32Opnd, zextloadi32, IILoad>, LL_FM_MM<0xe>;
|
||||
def LWU_MM : LoadMM<"lwu", GPR32Opnd, zextloadi32, II_LWU>, LL_FM_MM<0xe>;
|
||||
|
||||
/// Load and Store Instructions - unaligned
|
||||
def LWL_MM : LoadLeftRightMM<"lwl", MipsLWL, GPR32Opnd, mem_mm_12>,
|
||||
|
@ -787,7 +787,7 @@ def JrcRx16: FRR16_JALRC_ins<1, 1, 0, "jrc", IIAlu> {
|
||||
// Purpose: Load Byte (Extended)
|
||||
// To load a byte from memory as a signed value.
|
||||
//
|
||||
def LbRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10011, "lb", mem16, IILoad>, MayLoad{
|
||||
def LbRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10011, "lb", mem16, II_LB>, MayLoad{
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
@ -797,7 +797,7 @@ def LbRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10011, "lb", mem16, IILoad>, MayLoad{
|
||||
// To load a byte from memory as a unsigned value.
|
||||
//
|
||||
def LbuRxRyOffMemX16:
|
||||
FEXT_RRI16_mem_ins<0b10100, "lbu", mem16, IILoad>, MayLoad {
|
||||
FEXT_RRI16_mem_ins<0b10100, "lbu", mem16, II_LBU>, MayLoad {
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
@ -806,7 +806,7 @@ def LbuRxRyOffMemX16:
|
||||
// Purpose: Load Halfword signed (Extended)
|
||||
// To load a halfword from memory as a signed value.
|
||||
//
|
||||
def LhRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10100, "lh", mem16, IILoad>, MayLoad{
|
||||
def LhRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10100, "lh", mem16, II_LH>, MayLoad{
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
@ -816,7 +816,7 @@ def LhRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10100, "lh", mem16, IILoad>, MayLoad{
|
||||
// To load a halfword from memory as an unsigned value.
|
||||
//
|
||||
def LhuRxRyOffMemX16:
|
||||
FEXT_RRI16_mem_ins<0b10100, "lhu", mem16, IILoad>, MayLoad {
|
||||
FEXT_RRI16_mem_ins<0b10100, "lhu", mem16, II_LHU>, MayLoad {
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
@ -843,7 +843,7 @@ def LiRxImmAlignX16: FEXT_RI16_ins<0b01101, ".align 2\n\tli", IIAlu> {
|
||||
// Purpose: Load Word (Extended)
|
||||
// To load a word from memory as a signed value.
|
||||
//
|
||||
def LwRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10011, "lw", mem16, IILoad>, MayLoad{
|
||||
def LwRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10011, "lw", mem16, II_LW>, MayLoad{
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
@ -851,13 +851,13 @@ def LwRxRyOffMemX16: FEXT_RRI16_mem_ins<0b10011, "lw", mem16, IILoad>, MayLoad{
|
||||
// Purpose: Load Word (SP-Relative, Extended)
|
||||
// To load an SP-relative word from memory as a signed value.
|
||||
//
|
||||
def LwRxSpImmX16: FEXT_RI16_SP_explicit_ins<0b10010, "lw", IILoad>, MayLoad{
|
||||
def LwRxSpImmX16: FEXT_RI16_SP_explicit_ins<0b10010, "lw", II_LW>, MayLoad{
|
||||
let Uses = [SP];
|
||||
}
|
||||
|
||||
def LwRxPcTcp16: FRI16_TCP_ins<0b10110, "lw", IILoad>, MayLoad;
|
||||
def LwRxPcTcp16: FRI16_TCP_ins<0b10110, "lw", II_LW>, MayLoad;
|
||||
|
||||
def LwRxPcTcpX16: FEXT_RI16_TCP_ins<0b10110, "lw", IILoad>, MayLoad;
|
||||
def LwRxPcTcpX16: FEXT_RI16_TCP_ins<0b10110, "lw", II_LW>, MayLoad;
|
||||
//
|
||||
// Format: MOVE r32, rz MIPS16e
|
||||
// Purpose: Move
|
||||
@ -961,7 +961,7 @@ def OrRxRxRy16: FRxRxRy16_ins<0b01101, "or", IIAlu>, ArithLogic16Defs<1>;
|
||||
|
||||
def Restore16:
|
||||
FI8_SVRS16<0b1, (outs), (ins variable_ops),
|
||||
"", [], IILoad >, MayLoad {
|
||||
"", [], II_RESTORE >, MayLoad {
|
||||
let isCodeGenOnly = 1;
|
||||
let Defs = [SP];
|
||||
let Uses = [SP];
|
||||
@ -970,7 +970,7 @@ def Restore16:
|
||||
|
||||
def RestoreX16:
|
||||
FI8_SVRS16<0b1, (outs), (ins variable_ops),
|
||||
"", [], IILoad >, MayLoad {
|
||||
"", [], II_RESTORE >, MayLoad {
|
||||
let isCodeGenOnly = 1;
|
||||
let Defs = [SP];
|
||||
let Uses = [SP];
|
||||
|
@ -121,30 +121,30 @@ let Predicates = [HasMips64r2, HasStdEnc] in {
|
||||
/// Load and Store Instructions
|
||||
/// aligned
|
||||
let isCodeGenOnly = 1 in {
|
||||
def LB64 : Load<"lb", GPR64Opnd, sextloadi8, IILoad>, LW_FM<0x20>;
|
||||
def LBu64 : Load<"lbu", GPR64Opnd, zextloadi8, IILoad>, LW_FM<0x24>;
|
||||
def LH64 : Load<"lh", GPR64Opnd, sextloadi16, IILoad>, LW_FM<0x21>;
|
||||
def LHu64 : Load<"lhu", GPR64Opnd, zextloadi16, IILoad>, LW_FM<0x25>;
|
||||
def LW64 : Load<"lw", GPR64Opnd, sextloadi32, IILoad>, LW_FM<0x23>;
|
||||
def LB64 : Load<"lb", GPR64Opnd, sextloadi8, II_LB>, LW_FM<0x20>;
|
||||
def LBu64 : Load<"lbu", GPR64Opnd, zextloadi8, II_LBU>, LW_FM<0x24>;
|
||||
def LH64 : Load<"lh", GPR64Opnd, sextloadi16, II_LH>, LW_FM<0x21>;
|
||||
def LHu64 : Load<"lhu", GPR64Opnd, zextloadi16, II_LHU>, LW_FM<0x25>;
|
||||
def LW64 : Load<"lw", GPR64Opnd, sextloadi32, II_LW>, LW_FM<0x23>;
|
||||
def SB64 : Store<"sb", GPR64Opnd, truncstorei8, IIStore>, LW_FM<0x28>;
|
||||
def SH64 : Store<"sh", GPR64Opnd, truncstorei16, IIStore>, LW_FM<0x29>;
|
||||
def SW64 : Store<"sw", GPR64Opnd, truncstorei32, IIStore>, LW_FM<0x2b>;
|
||||
}
|
||||
|
||||
def LWu : Load<"lwu", GPR64Opnd, zextloadi32, IILoad>, LW_FM<0x27>;
|
||||
def LD : Load<"ld", GPR64Opnd, load, IILoad>, LW_FM<0x37>;
|
||||
def LWu : Load<"lwu", GPR64Opnd, zextloadi32, II_LWU>, LW_FM<0x27>;
|
||||
def LD : Load<"ld", GPR64Opnd, load, II_LD>, LW_FM<0x37>;
|
||||
def SD : Store<"sd", GPR64Opnd, store, IIStore>, LW_FM<0x3f>;
|
||||
|
||||
/// load/store left/right
|
||||
let isCodeGenOnly = 1 in {
|
||||
def LWL64 : LoadLeftRight<"lwl", MipsLWL, GPR64Opnd, IILoad>, LW_FM<0x22>;
|
||||
def LWR64 : LoadLeftRight<"lwr", MipsLWR, GPR64Opnd, IILoad>, LW_FM<0x26>;
|
||||
def LWL64 : LoadLeftRight<"lwl", MipsLWL, GPR64Opnd, II_LWL>, LW_FM<0x22>;
|
||||
def LWR64 : LoadLeftRight<"lwr", MipsLWR, GPR64Opnd, II_LWR>, LW_FM<0x26>;
|
||||
def SWL64 : StoreLeftRight<"swl", MipsSWL, GPR64Opnd, IIStore>, LW_FM<0x2a>;
|
||||
def SWR64 : StoreLeftRight<"swr", MipsSWR, GPR64Opnd, IIStore>, LW_FM<0x2e>;
|
||||
}
|
||||
|
||||
def LDL : LoadLeftRight<"ldl", MipsLDL, GPR64Opnd, IILoad>, LW_FM<0x1a>;
|
||||
def LDR : LoadLeftRight<"ldr", MipsLDR, GPR64Opnd, IILoad>, LW_FM<0x1b>;
|
||||
def LDL : LoadLeftRight<"ldl", MipsLDL, GPR64Opnd, II_LDL>, LW_FM<0x1a>;
|
||||
def LDR : LoadLeftRight<"ldr", MipsLDR, GPR64Opnd, II_LDR>, LW_FM<0x1b>;
|
||||
def SDL : StoreLeftRight<"sdl", MipsSDL, GPR64Opnd, IIStore>, LW_FM<0x2c>;
|
||||
def SDR : StoreLeftRight<"sdr", MipsSDR, GPR64Opnd, IIStore>, LW_FM<0x2d>;
|
||||
|
||||
|
@ -968,13 +968,13 @@ let Predicates = [HasMips32r2, HasStdEnc] in {
|
||||
|
||||
/// Load and Store Instructions
|
||||
/// aligned
|
||||
def LB : Load<"lb", GPR32Opnd, sextloadi8, IILoad>, MMRel, LW_FM<0x20>;
|
||||
def LBu : Load<"lbu", GPR32Opnd, zextloadi8, IILoad, addrDefault>, MMRel,
|
||||
def LB : Load<"lb", GPR32Opnd, sextloadi8, II_LB>, MMRel, LW_FM<0x20>;
|
||||
def LBu : Load<"lbu", GPR32Opnd, zextloadi8, II_LBU, addrDefault>, MMRel,
|
||||
LW_FM<0x24>;
|
||||
def LH : Load<"lh", GPR32Opnd, sextloadi16, IILoad, addrDefault>, MMRel,
|
||||
def LH : Load<"lh", GPR32Opnd, sextloadi16, II_LH, addrDefault>, MMRel,
|
||||
LW_FM<0x21>;
|
||||
def LHu : Load<"lhu", GPR32Opnd, zextloadi16, IILoad>, MMRel, LW_FM<0x25>;
|
||||
def LW : Load<"lw", GPR32Opnd, load, IILoad, addrDefault>, MMRel,
|
||||
def LHu : Load<"lhu", GPR32Opnd, zextloadi16, II_LHU>, MMRel, LW_FM<0x25>;
|
||||
def LW : Load<"lw", GPR32Opnd, load, II_LW, addrDefault>, MMRel,
|
||||
LW_FM<0x23>;
|
||||
def SB : Store<"sb", GPR32Opnd, truncstorei8, IIStore>, MMRel, LW_FM<0x28>;
|
||||
def SH : Store<"sh", GPR32Opnd, truncstorei16, IIStore>, MMRel, LW_FM<0x29>;
|
||||
@ -982,8 +982,8 @@ def SW : Store<"sw", GPR32Opnd, store, IIStore>, MMRel, LW_FM<0x2b>;
|
||||
|
||||
/// load/store left/right
|
||||
let Predicates = [NotInMicroMips] in {
|
||||
def LWL : LoadLeftRight<"lwl", MipsLWL, GPR32Opnd, IILoad>, LW_FM<0x22>;
|
||||
def LWR : LoadLeftRight<"lwr", MipsLWR, GPR32Opnd, IILoad>, LW_FM<0x26>;
|
||||
def LWL : LoadLeftRight<"lwl", MipsLWL, GPR32Opnd, II_LWL>, LW_FM<0x22>;
|
||||
def LWR : LoadLeftRight<"lwr", MipsLWR, GPR32Opnd, II_LWR>, LW_FM<0x26>;
|
||||
def SWL : StoreLeftRight<"swl", MipsSWL, GPR32Opnd, IIStore>, LW_FM<0x2a>;
|
||||
def SWR : StoreLeftRight<"swr", MipsSWR, GPR32Opnd, IIStore>, LW_FM<0x2e>;
|
||||
}
|
||||
|
@ -17,7 +17,6 @@ def IMULDIV : FuncUnit;
|
||||
// Instruction Itinerary classes used for Mips
|
||||
//===----------------------------------------------------------------------===//
|
||||
def IIAlu : InstrItinClass;
|
||||
def IILoad : InstrItinClass;
|
||||
def IIStore : InstrItinClass;
|
||||
def IIBranch : InstrItinClass;
|
||||
def IIPseudo : InstrItinClass;
|
||||
@ -64,11 +63,22 @@ def II_DSRL32 : InstrItinClass;
|
||||
def II_DSRLV : InstrItinClass;
|
||||
def II_DSUBU : InstrItinClass;
|
||||
def II_FLOOR : InstrItinClass;
|
||||
def II_LB : InstrItinClass;
|
||||
def II_LBU : InstrItinClass;
|
||||
def II_LD : InstrItinClass;
|
||||
def II_LDC1 : InstrItinClass;
|
||||
def II_LDL : InstrItinClass;
|
||||
def II_LDR : InstrItinClass;
|
||||
def II_LDXC1 : InstrItinClass;
|
||||
def II_LH : InstrItinClass;
|
||||
def II_LHU : InstrItinClass;
|
||||
def II_LUI : InstrItinClass;
|
||||
def II_LUXC1 : InstrItinClass;
|
||||
def II_LW : InstrItinClass;
|
||||
def II_LWU : InstrItinClass;
|
||||
def II_LWC1 : InstrItinClass;
|
||||
def II_LWL : InstrItinClass;
|
||||
def II_LWR : InstrItinClass;
|
||||
def II_LWXC1 : InstrItinClass;
|
||||
def II_MADD : InstrItinClass;
|
||||
def II_MADDU : InstrItinClass;
|
||||
@ -111,6 +121,7 @@ def II_NMSUB_S : InstrItinClass;
|
||||
def II_NOR : InstrItinClass;
|
||||
def II_OR : InstrItinClass;
|
||||
def II_ORI : InstrItinClass;
|
||||
def II_RESTORE : InstrItinClass;
|
||||
def II_RDHWR : InstrItinClass;
|
||||
def II_ROTR : InstrItinClass;
|
||||
def II_ROTRV : InstrItinClass;
|
||||
@ -184,7 +195,17 @@ def MipsGenericItineraries : ProcessorItineraries<[ALU, IMULDIV], [], [
|
||||
InstrItinData<II_ANDI , [InstrStage<1, [ALU]>]>,
|
||||
InstrItinData<II_ORI , [InstrStage<1, [ALU]>]>,
|
||||
InstrItinData<II_XORI , [InstrStage<1, [ALU]>]>,
|
||||
InstrItinData<IILoad , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LB , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LBU , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LH , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LHU , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LW , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LWL , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LWR , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LD , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LDL , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_LDR , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<II_RESTORE , [InstrStage<3, [ALU]>]>,
|
||||
InstrItinData<IIStore , [InstrStage<1, [ALU]>]>,
|
||||
InstrItinData<IIBranch , [InstrStage<1, [ALU]>]>,
|
||||
InstrItinData<II_DMULT , [InstrStage<17, [IMULDIV]>]>,
|
||||
|
Loading…
Reference in New Issue
Block a user