1*9880d681SAndroid Build Coastguard Worker//===-- MipsRegisterInfo.td - Mips Register defs -----------*- tablegen -*-===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 11*9880d681SAndroid Build Coastguard Worker// Declarations that describe the MIPS register file 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Workerlet Namespace = "Mips" in { 14*9880d681SAndroid Build Coastguard Workerdef sub_32 : SubRegIndex<32>; 15*9880d681SAndroid Build Coastguard Workerdef sub_64 : SubRegIndex<64>; 16*9880d681SAndroid Build Coastguard Workerdef sub_lo : SubRegIndex<32>; 17*9880d681SAndroid Build Coastguard Workerdef sub_hi : SubRegIndex<32, 32>; 18*9880d681SAndroid Build Coastguard Workerdef sub_dsp16_19 : SubRegIndex<4, 16>; 19*9880d681SAndroid Build Coastguard Workerdef sub_dsp20 : SubRegIndex<1, 20>; 20*9880d681SAndroid Build Coastguard Workerdef sub_dsp21 : SubRegIndex<1, 21>; 21*9880d681SAndroid Build Coastguard Workerdef sub_dsp22 : SubRegIndex<1, 22>; 22*9880d681SAndroid Build Coastguard Workerdef sub_dsp23 : SubRegIndex<1, 23>; 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerclass Unallocatable { 26*9880d681SAndroid Build Coastguard Worker bit isAllocatable = 0; 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker// We have banks of 32 registers each. 30*9880d681SAndroid Build Coastguard Workerclass MipsReg<bits<16> Enc, string n> : Register<n> { 31*9880d681SAndroid Build Coastguard Worker let HWEncoding = Enc; 32*9880d681SAndroid Build Coastguard Worker let Namespace = "Mips"; 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerclass MipsRegWithSubRegs<bits<16> Enc, string n, list<Register> subregs> 36*9880d681SAndroid Build Coastguard Worker : RegisterWithSubRegs<n, subregs> { 37*9880d681SAndroid Build Coastguard Worker let HWEncoding = Enc; 38*9880d681SAndroid Build Coastguard Worker let Namespace = "Mips"; 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker// Mips CPU Registers 42*9880d681SAndroid Build Coastguard Workerclass MipsGPRReg<bits<16> Enc, string n> : MipsReg<Enc, n>; 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker// Mips 64-bit CPU Registers 45*9880d681SAndroid Build Coastguard Workerclass Mips64GPRReg<bits<16> Enc, string n, list<Register> subregs> 46*9880d681SAndroid Build Coastguard Worker : MipsRegWithSubRegs<Enc, n, subregs> { 47*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_32]; 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker// Mips 32-bit FPU Registers 51*9880d681SAndroid Build Coastguard Workerclass FPR<bits<16> Enc, string n> : MipsReg<Enc, n>; 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker// Mips 64-bit (aliased) FPU Registers 54*9880d681SAndroid Build Coastguard Workerclass AFPR<bits<16> Enc, string n, list<Register> subregs> 55*9880d681SAndroid Build Coastguard Worker : MipsRegWithSubRegs<Enc, n, subregs> { 56*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_lo, sub_hi]; 57*9880d681SAndroid Build Coastguard Worker let CoveredBySubRegs = 1; 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerclass AFPR64<bits<16> Enc, string n, list<Register> subregs> 61*9880d681SAndroid Build Coastguard Worker : MipsRegWithSubRegs<Enc, n, subregs> { 62*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_lo, sub_hi]; 63*9880d681SAndroid Build Coastguard Worker let CoveredBySubRegs = 1; 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker// Mips 128-bit (aliased) MSA Registers 67*9880d681SAndroid Build Coastguard Workerclass AFPR128<bits<16> Enc, string n, list<Register> subregs> 68*9880d681SAndroid Build Coastguard Worker : MipsRegWithSubRegs<Enc, n, subregs> { 69*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_64]; 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker// Accumulator Registers 73*9880d681SAndroid Build Coastguard Workerclass ACCReg<bits<16> Enc, string n, list<Register> subregs> 74*9880d681SAndroid Build Coastguard Worker : MipsRegWithSubRegs<Enc, n, subregs> { 75*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_lo, sub_hi]; 76*9880d681SAndroid Build Coastguard Worker let CoveredBySubRegs = 1; 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker// Mips Hardware Registers 80*9880d681SAndroid Build Coastguard Workerclass HWR<bits<16> Enc, string n> : MipsReg<Enc, n>; 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 83*9880d681SAndroid Build Coastguard Worker// Registers 84*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerlet Namespace = "Mips" in { 87*9880d681SAndroid Build Coastguard Worker // General Purpose Registers 88*9880d681SAndroid Build Coastguard Worker def ZERO : MipsGPRReg< 0, "zero">, DwarfRegNum<[0]>; 89*9880d681SAndroid Build Coastguard Worker def AT : MipsGPRReg< 1, "1">, DwarfRegNum<[1]>; 90*9880d681SAndroid Build Coastguard Worker def V0 : MipsGPRReg< 2, "2">, DwarfRegNum<[2]>; 91*9880d681SAndroid Build Coastguard Worker def V1 : MipsGPRReg< 3, "3">, DwarfRegNum<[3]>; 92*9880d681SAndroid Build Coastguard Worker def A0 : MipsGPRReg< 4, "4">, DwarfRegNum<[4]>; 93*9880d681SAndroid Build Coastguard Worker def A1 : MipsGPRReg< 5, "5">, DwarfRegNum<[5]>; 94*9880d681SAndroid Build Coastguard Worker def A2 : MipsGPRReg< 6, "6">, DwarfRegNum<[6]>; 95*9880d681SAndroid Build Coastguard Worker def A3 : MipsGPRReg< 7, "7">, DwarfRegNum<[7]>; 96*9880d681SAndroid Build Coastguard Worker def T0 : MipsGPRReg< 8, "8">, DwarfRegNum<[8]>; 97*9880d681SAndroid Build Coastguard Worker def T1 : MipsGPRReg< 9, "9">, DwarfRegNum<[9]>; 98*9880d681SAndroid Build Coastguard Worker def T2 : MipsGPRReg< 10, "10">, DwarfRegNum<[10]>; 99*9880d681SAndroid Build Coastguard Worker def T3 : MipsGPRReg< 11, "11">, DwarfRegNum<[11]>; 100*9880d681SAndroid Build Coastguard Worker def T4 : MipsGPRReg< 12, "12">, DwarfRegNum<[12]>; 101*9880d681SAndroid Build Coastguard Worker def T5 : MipsGPRReg< 13, "13">, DwarfRegNum<[13]>; 102*9880d681SAndroid Build Coastguard Worker def T6 : MipsGPRReg< 14, "14">, DwarfRegNum<[14]>; 103*9880d681SAndroid Build Coastguard Worker def T7 : MipsGPRReg< 15, "15">, DwarfRegNum<[15]>; 104*9880d681SAndroid Build Coastguard Worker def S0 : MipsGPRReg< 16, "16">, DwarfRegNum<[16]>; 105*9880d681SAndroid Build Coastguard Worker def S1 : MipsGPRReg< 17, "17">, DwarfRegNum<[17]>; 106*9880d681SAndroid Build Coastguard Worker def S2 : MipsGPRReg< 18, "18">, DwarfRegNum<[18]>; 107*9880d681SAndroid Build Coastguard Worker def S3 : MipsGPRReg< 19, "19">, DwarfRegNum<[19]>; 108*9880d681SAndroid Build Coastguard Worker def S4 : MipsGPRReg< 20, "20">, DwarfRegNum<[20]>; 109*9880d681SAndroid Build Coastguard Worker def S5 : MipsGPRReg< 21, "21">, DwarfRegNum<[21]>; 110*9880d681SAndroid Build Coastguard Worker def S6 : MipsGPRReg< 22, "22">, DwarfRegNum<[22]>; 111*9880d681SAndroid Build Coastguard Worker def S7 : MipsGPRReg< 23, "23">, DwarfRegNum<[23]>; 112*9880d681SAndroid Build Coastguard Worker def T8 : MipsGPRReg< 24, "24">, DwarfRegNum<[24]>; 113*9880d681SAndroid Build Coastguard Worker def T9 : MipsGPRReg< 25, "25">, DwarfRegNum<[25]>; 114*9880d681SAndroid Build Coastguard Worker def K0 : MipsGPRReg< 26, "26">, DwarfRegNum<[26]>; 115*9880d681SAndroid Build Coastguard Worker def K1 : MipsGPRReg< 27, "27">, DwarfRegNum<[27]>; 116*9880d681SAndroid Build Coastguard Worker def GP : MipsGPRReg< 28, "gp">, DwarfRegNum<[28]>; 117*9880d681SAndroid Build Coastguard Worker def SP : MipsGPRReg< 29, "sp">, DwarfRegNum<[29]>; 118*9880d681SAndroid Build Coastguard Worker def FP : MipsGPRReg< 30, "fp">, DwarfRegNum<[30]>; 119*9880d681SAndroid Build Coastguard Worker def RA : MipsGPRReg< 31, "ra">, DwarfRegNum<[31]>; 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker // General Purpose 64-bit Registers 122*9880d681SAndroid Build Coastguard Worker def ZERO_64 : Mips64GPRReg< 0, "zero", [ZERO]>, DwarfRegNum<[0]>; 123*9880d681SAndroid Build Coastguard Worker def AT_64 : Mips64GPRReg< 1, "1", [AT]>, DwarfRegNum<[1]>; 124*9880d681SAndroid Build Coastguard Worker def V0_64 : Mips64GPRReg< 2, "2", [V0]>, DwarfRegNum<[2]>; 125*9880d681SAndroid Build Coastguard Worker def V1_64 : Mips64GPRReg< 3, "3", [V1]>, DwarfRegNum<[3]>; 126*9880d681SAndroid Build Coastguard Worker def A0_64 : Mips64GPRReg< 4, "4", [A0]>, DwarfRegNum<[4]>; 127*9880d681SAndroid Build Coastguard Worker def A1_64 : Mips64GPRReg< 5, "5", [A1]>, DwarfRegNum<[5]>; 128*9880d681SAndroid Build Coastguard Worker def A2_64 : Mips64GPRReg< 6, "6", [A2]>, DwarfRegNum<[6]>; 129*9880d681SAndroid Build Coastguard Worker def A3_64 : Mips64GPRReg< 7, "7", [A3]>, DwarfRegNum<[7]>; 130*9880d681SAndroid Build Coastguard Worker def T0_64 : Mips64GPRReg< 8, "8", [T0]>, DwarfRegNum<[8]>; 131*9880d681SAndroid Build Coastguard Worker def T1_64 : Mips64GPRReg< 9, "9", [T1]>, DwarfRegNum<[9]>; 132*9880d681SAndroid Build Coastguard Worker def T2_64 : Mips64GPRReg< 10, "10", [T2]>, DwarfRegNum<[10]>; 133*9880d681SAndroid Build Coastguard Worker def T3_64 : Mips64GPRReg< 11, "11", [T3]>, DwarfRegNum<[11]>; 134*9880d681SAndroid Build Coastguard Worker def T4_64 : Mips64GPRReg< 12, "12", [T4]>, DwarfRegNum<[12]>; 135*9880d681SAndroid Build Coastguard Worker def T5_64 : Mips64GPRReg< 13, "13", [T5]>, DwarfRegNum<[13]>; 136*9880d681SAndroid Build Coastguard Worker def T6_64 : Mips64GPRReg< 14, "14", [T6]>, DwarfRegNum<[14]>; 137*9880d681SAndroid Build Coastguard Worker def T7_64 : Mips64GPRReg< 15, "15", [T7]>, DwarfRegNum<[15]>; 138*9880d681SAndroid Build Coastguard Worker def S0_64 : Mips64GPRReg< 16, "16", [S0]>, DwarfRegNum<[16]>; 139*9880d681SAndroid Build Coastguard Worker def S1_64 : Mips64GPRReg< 17, "17", [S1]>, DwarfRegNum<[17]>; 140*9880d681SAndroid Build Coastguard Worker def S2_64 : Mips64GPRReg< 18, "18", [S2]>, DwarfRegNum<[18]>; 141*9880d681SAndroid Build Coastguard Worker def S3_64 : Mips64GPRReg< 19, "19", [S3]>, DwarfRegNum<[19]>; 142*9880d681SAndroid Build Coastguard Worker def S4_64 : Mips64GPRReg< 20, "20", [S4]>, DwarfRegNum<[20]>; 143*9880d681SAndroid Build Coastguard Worker def S5_64 : Mips64GPRReg< 21, "21", [S5]>, DwarfRegNum<[21]>; 144*9880d681SAndroid Build Coastguard Worker def S6_64 : Mips64GPRReg< 22, "22", [S6]>, DwarfRegNum<[22]>; 145*9880d681SAndroid Build Coastguard Worker def S7_64 : Mips64GPRReg< 23, "23", [S7]>, DwarfRegNum<[23]>; 146*9880d681SAndroid Build Coastguard Worker def T8_64 : Mips64GPRReg< 24, "24", [T8]>, DwarfRegNum<[24]>; 147*9880d681SAndroid Build Coastguard Worker def T9_64 : Mips64GPRReg< 25, "25", [T9]>, DwarfRegNum<[25]>; 148*9880d681SAndroid Build Coastguard Worker def K0_64 : Mips64GPRReg< 26, "26", [K0]>, DwarfRegNum<[26]>; 149*9880d681SAndroid Build Coastguard Worker def K1_64 : Mips64GPRReg< 27, "27", [K1]>, DwarfRegNum<[27]>; 150*9880d681SAndroid Build Coastguard Worker def GP_64 : Mips64GPRReg< 28, "gp", [GP]>, DwarfRegNum<[28]>; 151*9880d681SAndroid Build Coastguard Worker def SP_64 : Mips64GPRReg< 29, "sp", [SP]>, DwarfRegNum<[29]>; 152*9880d681SAndroid Build Coastguard Worker def FP_64 : Mips64GPRReg< 30, "fp", [FP]>, DwarfRegNum<[30]>; 153*9880d681SAndroid Build Coastguard Worker def RA_64 : Mips64GPRReg< 31, "ra", [RA]>, DwarfRegNum<[31]>; 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker /// Mips Single point precision FPU Registers 156*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 157*9880d681SAndroid Build Coastguard Worker def F#I : FPR<I, "f"#I>, DwarfRegNum<[!add(I, 32)]>; 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker // Higher half of 64-bit FP registers. 160*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 161*9880d681SAndroid Build Coastguard Worker def F_HI#I : FPR<I, "f"#I>, DwarfRegNum<[!add(I, 32)]>; 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker /// Mips Double point precision FPU Registers (aliased 164*9880d681SAndroid Build Coastguard Worker /// with the single precision to hold 64 bit values) 165*9880d681SAndroid Build Coastguard Worker foreach I = 0-15 in 166*9880d681SAndroid Build Coastguard Worker def D#I : AFPR<!shl(I, 1), "f"#!shl(I, 1), 167*9880d681SAndroid Build Coastguard Worker [!cast<FPR>("F"#!shl(I, 1)), 168*9880d681SAndroid Build Coastguard Worker !cast<FPR>("F"#!add(!shl(I, 1), 1))]>; 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker /// Mips Double point precision FPU Registers in MFP64 mode. 171*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 172*9880d681SAndroid Build Coastguard Worker def D#I#_64 : AFPR64<I, "f"#I, [!cast<FPR>("F"#I), !cast<FPR>("F_HI"#I)]>, 173*9880d681SAndroid Build Coastguard Worker DwarfRegNum<[!add(I, 32)]>; 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker /// Mips MSA registers 176*9880d681SAndroid Build Coastguard Worker /// MSA and FPU cannot both be present unless the FPU has 64-bit registers 177*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 178*9880d681SAndroid Build Coastguard Worker def W#I : AFPR128<I, "w"#I, [!cast<AFPR64>("D"#I#"_64")]>, 179*9880d681SAndroid Build Coastguard Worker DwarfRegNum<[!add(I, 32)]>; 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker // Hi/Lo registers 182*9880d681SAndroid Build Coastguard Worker def HI0 : MipsReg<0, "ac0">, DwarfRegNum<[64]>; 183*9880d681SAndroid Build Coastguard Worker def HI1 : MipsReg<1, "ac1">, DwarfRegNum<[176]>; 184*9880d681SAndroid Build Coastguard Worker def HI2 : MipsReg<2, "ac2">, DwarfRegNum<[178]>; 185*9880d681SAndroid Build Coastguard Worker def HI3 : MipsReg<3, "ac3">, DwarfRegNum<[180]>; 186*9880d681SAndroid Build Coastguard Worker def LO0 : MipsReg<0, "ac0">, DwarfRegNum<[65]>; 187*9880d681SAndroid Build Coastguard Worker def LO1 : MipsReg<1, "ac1">, DwarfRegNum<[177]>; 188*9880d681SAndroid Build Coastguard Worker def LO2 : MipsReg<2, "ac2">, DwarfRegNum<[179]>; 189*9880d681SAndroid Build Coastguard Worker def LO3 : MipsReg<3, "ac3">, DwarfRegNum<[181]>; 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_32] in { 192*9880d681SAndroid Build Coastguard Worker def HI0_64 : RegisterWithSubRegs<"hi", [HI0]>; 193*9880d681SAndroid Build Coastguard Worker def LO0_64 : RegisterWithSubRegs<"lo", [LO0]>; 194*9880d681SAndroid Build Coastguard Worker } 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker // FP control registers. 197*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 198*9880d681SAndroid Build Coastguard Worker def FCR#I : MipsReg<#I, ""#I>; 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker // FP condition code registers. 201*9880d681SAndroid Build Coastguard Worker foreach I = 0-7 in 202*9880d681SAndroid Build Coastguard Worker def FCC#I : MipsReg<#I, "fcc"#I>; 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker // COP0 registers. 205*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 206*9880d681SAndroid Build Coastguard Worker def COP0#I : MipsReg<#I, ""#I>; 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker // COP2 registers. 209*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 210*9880d681SAndroid Build Coastguard Worker def COP2#I : MipsReg<#I, ""#I>; 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Worker // COP3 registers. 213*9880d681SAndroid Build Coastguard Worker foreach I = 0-31 in 214*9880d681SAndroid Build Coastguard Worker def COP3#I : MipsReg<#I, ""#I>; 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker // PC register 217*9880d681SAndroid Build Coastguard Worker def PC : Register<"pc">; 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker // Hardware registers 220*9880d681SAndroid Build Coastguard Worker def HWR0 : MipsReg<0, "hwr_cpunum">; 221*9880d681SAndroid Build Coastguard Worker def HWR1 : MipsReg<1, "hwr_synci_step">; 222*9880d681SAndroid Build Coastguard Worker def HWR2 : MipsReg<2, "hwr_cc">; 223*9880d681SAndroid Build Coastguard Worker def HWR3 : MipsReg<3, "hwr_ccres">; 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker foreach I = 4-31 in 226*9880d681SAndroid Build Coastguard Worker def HWR#I : MipsReg<#I, ""#I>; 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Worker // Accum registers 229*9880d681SAndroid Build Coastguard Worker foreach I = 0-3 in 230*9880d681SAndroid Build Coastguard Worker def AC#I : ACCReg<#I, "ac"#I, 231*9880d681SAndroid Build Coastguard Worker [!cast<Register>("LO"#I), !cast<Register>("HI"#I)]>; 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Worker def AC0_64 : ACCReg<0, "ac0", [LO0_64, HI0_64]>; 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Worker // DSP-ASE control register fields. 236*9880d681SAndroid Build Coastguard Worker def DSPPos : Register<"">; 237*9880d681SAndroid Build Coastguard Worker def DSPSCount : Register<"">; 238*9880d681SAndroid Build Coastguard Worker def DSPCarry : Register<"">; 239*9880d681SAndroid Build Coastguard Worker def DSPEFI : Register<"">; 240*9880d681SAndroid Build Coastguard Worker def DSPOutFlag16_19 : Register<"">; 241*9880d681SAndroid Build Coastguard Worker def DSPOutFlag20 : Register<"">; 242*9880d681SAndroid Build Coastguard Worker def DSPOutFlag21 : Register<"">; 243*9880d681SAndroid Build Coastguard Worker def DSPOutFlag22 : Register<"">; 244*9880d681SAndroid Build Coastguard Worker def DSPOutFlag23 : Register<"">; 245*9880d681SAndroid Build Coastguard Worker def DSPCCond : Register<"">; 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker let SubRegIndices = [sub_dsp16_19, sub_dsp20, sub_dsp21, sub_dsp22, 248*9880d681SAndroid Build Coastguard Worker sub_dsp23] in 249*9880d681SAndroid Build Coastguard Worker def DSPOutFlag : RegisterWithSubRegs<"", [DSPOutFlag16_19, DSPOutFlag20, 250*9880d681SAndroid Build Coastguard Worker DSPOutFlag21, DSPOutFlag22, 251*9880d681SAndroid Build Coastguard Worker DSPOutFlag23]>; 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker // MSA-ASE control registers. 254*9880d681SAndroid Build Coastguard Worker def MSAIR : MipsReg<0, "0">; 255*9880d681SAndroid Build Coastguard Worker def MSACSR : MipsReg<1, "1">; 256*9880d681SAndroid Build Coastguard Worker def MSAAccess : MipsReg<2, "2">; 257*9880d681SAndroid Build Coastguard Worker def MSASave : MipsReg<3, "3">; 258*9880d681SAndroid Build Coastguard Worker def MSAModify : MipsReg<4, "4">; 259*9880d681SAndroid Build Coastguard Worker def MSARequest : MipsReg<5, "5">; 260*9880d681SAndroid Build Coastguard Worker def MSAMap : MipsReg<6, "6">; 261*9880d681SAndroid Build Coastguard Worker def MSAUnmap : MipsReg<7, "7">; 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker // Octeon multiplier and product registers 264*9880d681SAndroid Build Coastguard Worker def MPL0 : MipsReg<0, "mpl0">; 265*9880d681SAndroid Build Coastguard Worker def MPL1 : MipsReg<1, "mpl1">; 266*9880d681SAndroid Build Coastguard Worker def MPL2 : MipsReg<2, "mpl2">; 267*9880d681SAndroid Build Coastguard Worker def P0 : MipsReg<0, "p0">; 268*9880d681SAndroid Build Coastguard Worker def P1 : MipsReg<1, "p1">; 269*9880d681SAndroid Build Coastguard Worker def P2 : MipsReg<2, "p2">; 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Worker} 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 274*9880d681SAndroid Build Coastguard Worker// Register Classes 275*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerclass GPR32Class<list<ValueType> regTypes> : 278*9880d681SAndroid Build Coastguard Worker RegisterClass<"Mips", regTypes, 32, (add 279*9880d681SAndroid Build Coastguard Worker // Reserved 280*9880d681SAndroid Build Coastguard Worker ZERO, AT, 281*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 282*9880d681SAndroid Build Coastguard Worker V0, V1, A0, A1, A2, A3, 283*9880d681SAndroid Build Coastguard Worker // Not preserved across procedure calls 284*9880d681SAndroid Build Coastguard Worker T0, T1, T2, T3, T4, T5, T6, T7, 285*9880d681SAndroid Build Coastguard Worker // Callee save 286*9880d681SAndroid Build Coastguard Worker S0, S1, S2, S3, S4, S5, S6, S7, 287*9880d681SAndroid Build Coastguard Worker // Not preserved across procedure calls 288*9880d681SAndroid Build Coastguard Worker T8, T9, 289*9880d681SAndroid Build Coastguard Worker // Reserved 290*9880d681SAndroid Build Coastguard Worker K0, K1, GP, SP, FP, RA)>; 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerdef GPR32 : GPR32Class<[i32]>; 293*9880d681SAndroid Build Coastguard Workerdef DSPR : GPR32Class<[v4i8, v2i16]>; 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerdef GPRMM16 : RegisterClass<"Mips", [i32], 32, (add 296*9880d681SAndroid Build Coastguard Worker // Callee save 297*9880d681SAndroid Build Coastguard Worker S0, S1, 298*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 299*9880d681SAndroid Build Coastguard Worker V0, V1, A0, A1, A2, A3)>; 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Workerdef GPRMM16Zero : RegisterClass<"Mips", [i32], 32, (add 302*9880d681SAndroid Build Coastguard Worker // Reserved 303*9880d681SAndroid Build Coastguard Worker ZERO, 304*9880d681SAndroid Build Coastguard Worker // Callee save 305*9880d681SAndroid Build Coastguard Worker S1, 306*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 307*9880d681SAndroid Build Coastguard Worker V0, V1, A0, A1, A2, A3)>; 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard Workerdef GPRMM16MoveP : RegisterClass<"Mips", [i32], 32, (add 310*9880d681SAndroid Build Coastguard Worker // Reserved 311*9880d681SAndroid Build Coastguard Worker ZERO, 312*9880d681SAndroid Build Coastguard Worker // Callee save 313*9880d681SAndroid Build Coastguard Worker S1, 314*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 315*9880d681SAndroid Build Coastguard Worker V0, V1, 316*9880d681SAndroid Build Coastguard Worker // Callee save 317*9880d681SAndroid Build Coastguard Worker S0, S2, S3, S4)>; 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerdef GPR64 : RegisterClass<"Mips", [i64], 64, (add 320*9880d681SAndroid Build Coastguard Worker// Reserved 321*9880d681SAndroid Build Coastguard Worker ZERO_64, AT_64, 322*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 323*9880d681SAndroid Build Coastguard Worker V0_64, V1_64, A0_64, A1_64, A2_64, A3_64, 324*9880d681SAndroid Build Coastguard Worker // Not preserved across procedure calls 325*9880d681SAndroid Build Coastguard Worker T0_64, T1_64, T2_64, T3_64, T4_64, T5_64, T6_64, T7_64, 326*9880d681SAndroid Build Coastguard Worker // Callee save 327*9880d681SAndroid Build Coastguard Worker S0_64, S1_64, S2_64, S3_64, S4_64, S5_64, S6_64, S7_64, 328*9880d681SAndroid Build Coastguard Worker // Not preserved across procedure calls 329*9880d681SAndroid Build Coastguard Worker T8_64, T9_64, 330*9880d681SAndroid Build Coastguard Worker // Reserved 331*9880d681SAndroid Build Coastguard Worker K0_64, K1_64, GP_64, SP_64, FP_64, RA_64)>; 332*9880d681SAndroid Build Coastguard Worker 333*9880d681SAndroid Build Coastguard Workerdef GPRMM16_64 : RegisterClass<"Mips", [i64], 64, (add 334*9880d681SAndroid Build Coastguard Worker // Callee save 335*9880d681SAndroid Build Coastguard Worker S0_64, S1_64, 336*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 337*9880d681SAndroid Build Coastguard Worker V0_64, V1_64, A0_64, A1_64, A2_64, A3_64)>; 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerdef CPU16Regs : RegisterClass<"Mips", [i32], 32, (add 340*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 341*9880d681SAndroid Build Coastguard Worker V0, V1, A0, A1, A2, A3, 342*9880d681SAndroid Build Coastguard Worker // Callee save 343*9880d681SAndroid Build Coastguard Worker S0, S1)>; 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Workerdef CPU16RegsPlusSP : RegisterClass<"Mips", [i32], 32, (add 346*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 347*9880d681SAndroid Build Coastguard Worker V0, V1, A0, A1, A2, A3, 348*9880d681SAndroid Build Coastguard Worker // Callee save 349*9880d681SAndroid Build Coastguard Worker S0, S1, 350*9880d681SAndroid Build Coastguard Worker SP)>; 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Workerdef CPURAReg : RegisterClass<"Mips", [i32], 32, (add RA)>, Unallocatable; 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Workerdef CPUSPReg : RegisterClass<"Mips", [i32], 32, (add SP)>, Unallocatable; 355*9880d681SAndroid Build Coastguard Worker 356*9880d681SAndroid Build Coastguard Worker// 64bit fp: 357*9880d681SAndroid Build Coastguard Worker// * FGR64 - 32 64-bit registers 358*9880d681SAndroid Build Coastguard Worker// * AFGR64 - 16 32-bit even registers (32-bit FP Mode) 359*9880d681SAndroid Build Coastguard Worker// 360*9880d681SAndroid Build Coastguard Worker// 32bit fp: 361*9880d681SAndroid Build Coastguard Worker// * FGR32 - 16 32-bit even registers 362*9880d681SAndroid Build Coastguard Worker// * FGR32 - 32 32-bit registers (single float only mode) 363*9880d681SAndroid Build Coastguard Workerdef FGR32 : RegisterClass<"Mips", [f32], 32, (sequence "F%u", 0, 31)>; 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Workerdef FGRH32 : RegisterClass<"Mips", [f32], 32, (sequence "F_HI%u", 0, 31)>, 366*9880d681SAndroid Build Coastguard Worker Unallocatable; 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Workerdef AFGR64 : RegisterClass<"Mips", [f64], 64, (add 369*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 370*9880d681SAndroid Build Coastguard Worker D0, D1, 371*9880d681SAndroid Build Coastguard Worker // Not preserved across procedure calls 372*9880d681SAndroid Build Coastguard Worker D2, D3, D4, D5, 373*9880d681SAndroid Build Coastguard Worker // Return Values and Arguments 374*9880d681SAndroid Build Coastguard Worker D6, D7, 375*9880d681SAndroid Build Coastguard Worker // Not preserved across procedure calls 376*9880d681SAndroid Build Coastguard Worker D8, D9, 377*9880d681SAndroid Build Coastguard Worker // Callee save 378*9880d681SAndroid Build Coastguard Worker D10, D11, D12, D13, D14, D15)>; 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Workerdef FGR64 : RegisterClass<"Mips", [f64], 64, (sequence "D%u_64", 0, 31)>; 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Worker// Used to reserve odd registers when given -mattr=+nooddspreg 383*9880d681SAndroid Build Coastguard Worker// FIXME: Remove double precision registers from this set. 384*9880d681SAndroid Build Coastguard Workerdef OddSP : RegisterClass<"Mips", [f32], 32, 385*9880d681SAndroid Build Coastguard Worker (add (decimate (sequence "F%u", 1, 31), 2), 386*9880d681SAndroid Build Coastguard Worker (decimate (sequence "F_HI%u", 1, 31), 2), 387*9880d681SAndroid Build Coastguard Worker (decimate (sequence "D%u", 1, 15), 2), 388*9880d681SAndroid Build Coastguard Worker (decimate (sequence "D%u_64", 1, 31), 2))>, 389*9880d681SAndroid Build Coastguard Worker Unallocatable; 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Worker// FP control registers. 392*9880d681SAndroid Build Coastguard Workerdef CCR : RegisterClass<"Mips", [i32], 32, (sequence "FCR%u", 0, 31)>, 393*9880d681SAndroid Build Coastguard Worker Unallocatable; 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Worker// FP condition code registers. 396*9880d681SAndroid Build Coastguard Workerdef FCC : RegisterClass<"Mips", [i32], 32, (sequence "FCC%u", 0, 7)>, 397*9880d681SAndroid Build Coastguard Worker Unallocatable; 398*9880d681SAndroid Build Coastguard Worker 399*9880d681SAndroid Build Coastguard Worker// MIPS32r6/MIPS64r6 store FPU condition codes in normal FGR registers. 400*9880d681SAndroid Build Coastguard Worker// This class allows us to represent this in codegen patterns. 401*9880d681SAndroid Build Coastguard Workerdef FGRCC : RegisterClass<"Mips", [i32], 32, (sequence "F%u", 0, 31)>; 402*9880d681SAndroid Build Coastguard Worker 403*9880d681SAndroid Build Coastguard Workerdef MSA128B: RegisterClass<"Mips", [v16i8], 128, 404*9880d681SAndroid Build Coastguard Worker (sequence "W%u", 0, 31)>; 405*9880d681SAndroid Build Coastguard Workerdef MSA128H: RegisterClass<"Mips", [v8i16, v8f16], 128, 406*9880d681SAndroid Build Coastguard Worker (sequence "W%u", 0, 31)>; 407*9880d681SAndroid Build Coastguard Workerdef MSA128W: RegisterClass<"Mips", [v4i32, v4f32], 128, 408*9880d681SAndroid Build Coastguard Worker (sequence "W%u", 0, 31)>; 409*9880d681SAndroid Build Coastguard Workerdef MSA128D: RegisterClass<"Mips", [v2i64, v2f64], 128, 410*9880d681SAndroid Build Coastguard Worker (sequence "W%u", 0, 31)>; 411*9880d681SAndroid Build Coastguard Workerdef MSA128WEvens: RegisterClass<"Mips", [v4i32, v4f32], 128, 412*9880d681SAndroid Build Coastguard Worker (decimate (sequence "W%u", 0, 31), 2)>; 413*9880d681SAndroid Build Coastguard Worker 414*9880d681SAndroid Build Coastguard Workerdef MSACtrl: RegisterClass<"Mips", [i32], 32, (add 415*9880d681SAndroid Build Coastguard Worker MSAIR, MSACSR, MSAAccess, MSASave, MSAModify, MSARequest, MSAMap, MSAUnmap)>; 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard Worker// Hi/Lo Registers 418*9880d681SAndroid Build Coastguard Workerdef LO32 : RegisterClass<"Mips", [i32], 32, (add LO0)>; 419*9880d681SAndroid Build Coastguard Workerdef HI32 : RegisterClass<"Mips", [i32], 32, (add HI0)>; 420*9880d681SAndroid Build Coastguard Workerdef LO32DSP : RegisterClass<"Mips", [i32], 32, (sequence "LO%u", 0, 3)>; 421*9880d681SAndroid Build Coastguard Workerdef HI32DSP : RegisterClass<"Mips", [i32], 32, (sequence "HI%u", 0, 3)>; 422*9880d681SAndroid Build Coastguard Workerdef LO64 : RegisterClass<"Mips", [i64], 64, (add LO0_64)>; 423*9880d681SAndroid Build Coastguard Workerdef HI64 : RegisterClass<"Mips", [i64], 64, (add HI0_64)>; 424*9880d681SAndroid Build Coastguard Worker 425*9880d681SAndroid Build Coastguard Worker// Hardware registers 426*9880d681SAndroid Build Coastguard Workerdef HWRegs : RegisterClass<"Mips", [i32], 32, (sequence "HWR%u", 0, 31)>, 427*9880d681SAndroid Build Coastguard Worker Unallocatable; 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Worker// Accumulator Registers 430*9880d681SAndroid Build Coastguard Workerdef ACC64 : RegisterClass<"Mips", [untyped], 64, (add AC0)> { 431*9880d681SAndroid Build Coastguard Worker let Size = 64; 432*9880d681SAndroid Build Coastguard Worker} 433*9880d681SAndroid Build Coastguard Worker 434*9880d681SAndroid Build Coastguard Workerdef ACC128 : RegisterClass<"Mips", [untyped], 128, (add AC0_64)> { 435*9880d681SAndroid Build Coastguard Worker let Size = 128; 436*9880d681SAndroid Build Coastguard Worker} 437*9880d681SAndroid Build Coastguard Worker 438*9880d681SAndroid Build Coastguard Workerdef ACC64DSP : RegisterClass<"Mips", [untyped], 64, (sequence "AC%u", 0, 3)> { 439*9880d681SAndroid Build Coastguard Worker let Size = 64; 440*9880d681SAndroid Build Coastguard Worker} 441*9880d681SAndroid Build Coastguard Worker 442*9880d681SAndroid Build Coastguard Workerdef DSPCC : RegisterClass<"Mips", [v4i8, v2i16], 32, (add DSPCCond)>; 443*9880d681SAndroid Build Coastguard Worker 444*9880d681SAndroid Build Coastguard Worker// Coprocessor 0 registers. 445*9880d681SAndroid Build Coastguard Workerdef COP0 : RegisterClass<"Mips", [i32], 32, (sequence "COP0%u", 0, 31)>, 446*9880d681SAndroid Build Coastguard Worker Unallocatable; 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker// Coprocessor 2 registers. 449*9880d681SAndroid Build Coastguard Workerdef COP2 : RegisterClass<"Mips", [i32], 32, (sequence "COP2%u", 0, 31)>, 450*9880d681SAndroid Build Coastguard Worker Unallocatable; 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Worker// Coprocessor 3 registers. 453*9880d681SAndroid Build Coastguard Workerdef COP3 : RegisterClass<"Mips", [i32], 32, (sequence "COP3%u", 0, 31)>, 454*9880d681SAndroid Build Coastguard Worker Unallocatable; 455*9880d681SAndroid Build Coastguard Worker 456*9880d681SAndroid Build Coastguard Worker// Stack pointer and global pointer classes for instructions that are limited 457*9880d681SAndroid Build Coastguard Worker// to a single register such as lwgp/lwsp in microMIPS. 458*9880d681SAndroid Build Coastguard Workerdef SP32 : RegisterClass<"Mips", [i32], 32, (add SP)>, Unallocatable; 459*9880d681SAndroid Build Coastguard Workerdef SP64 : RegisterClass<"Mips", [i64], 64, (add SP_64)>, Unallocatable; 460*9880d681SAndroid Build Coastguard Workerdef GP32 : RegisterClass<"Mips", [i32], 32, (add GP)>, Unallocatable; 461*9880d681SAndroid Build Coastguard Workerdef GP64 : RegisterClass<"Mips", [i64], 64, (add GP_64)>, Unallocatable; 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Worker// Octeon multiplier and product registers 464*9880d681SAndroid Build Coastguard Workerdef OCTEON_MPL : RegisterClass<"Mips", [i64], 64, (add MPL0, MPL1, MPL2)>, 465*9880d681SAndroid Build Coastguard Worker Unallocatable; 466*9880d681SAndroid Build Coastguard Workerdef OCTEON_P : RegisterClass<"Mips", [i64], 64, (add P0, P1, P2)>, 467*9880d681SAndroid Build Coastguard Worker Unallocatable; 468*9880d681SAndroid Build Coastguard Worker 469*9880d681SAndroid Build Coastguard Worker// Register Operands. 470*9880d681SAndroid Build Coastguard Worker 471*9880d681SAndroid Build Coastguard Workerclass MipsAsmRegOperand : AsmOperandClass { 472*9880d681SAndroid Build Coastguard Worker let ParserMethod = "parseAnyRegister"; 473*9880d681SAndroid Build Coastguard Worker} 474*9880d681SAndroid Build Coastguard Worker 475*9880d681SAndroid Build Coastguard Workerdef GPR64AsmOperand : MipsAsmRegOperand { 476*9880d681SAndroid Build Coastguard Worker let Name = "GPR64AsmReg"; 477*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isGPRAsmReg"; 478*9880d681SAndroid Build Coastguard Worker} 479*9880d681SAndroid Build Coastguard Worker 480*9880d681SAndroid Build Coastguard Workerdef GPR32AsmOperand : MipsAsmRegOperand { 481*9880d681SAndroid Build Coastguard Worker let Name = "GPR32AsmReg"; 482*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isGPRAsmReg"; 483*9880d681SAndroid Build Coastguard Worker} 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Workerdef GPRMM16AsmOperand : MipsAsmRegOperand { 486*9880d681SAndroid Build Coastguard Worker let Name = "GPRMM16AsmReg"; 487*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isMM16AsmReg"; 488*9880d681SAndroid Build Coastguard Worker} 489*9880d681SAndroid Build Coastguard Worker 490*9880d681SAndroid Build Coastguard Workerdef GPRMM16AsmOperandZero : MipsAsmRegOperand { 491*9880d681SAndroid Build Coastguard Worker let Name = "GPRMM16AsmRegZero"; 492*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isMM16AsmRegZero"; 493*9880d681SAndroid Build Coastguard Worker} 494*9880d681SAndroid Build Coastguard Worker 495*9880d681SAndroid Build Coastguard Workerdef GPRMM16AsmOperandMoveP : MipsAsmRegOperand { 496*9880d681SAndroid Build Coastguard Worker let Name = "GPRMM16AsmRegMoveP"; 497*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isMM16AsmRegMoveP"; 498*9880d681SAndroid Build Coastguard Worker} 499*9880d681SAndroid Build Coastguard Worker 500*9880d681SAndroid Build Coastguard Workerdef ACC64DSPAsmOperand : MipsAsmRegOperand { 501*9880d681SAndroid Build Coastguard Worker let Name = "ACC64DSPAsmReg"; 502*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isACCAsmReg"; 503*9880d681SAndroid Build Coastguard Worker} 504*9880d681SAndroid Build Coastguard Worker 505*9880d681SAndroid Build Coastguard Workerdef HI32DSPAsmOperand : MipsAsmRegOperand { 506*9880d681SAndroid Build Coastguard Worker let Name = "HI32DSPAsmReg"; 507*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isACCAsmReg"; 508*9880d681SAndroid Build Coastguard Worker} 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Workerdef LO32DSPAsmOperand : MipsAsmRegOperand { 511*9880d681SAndroid Build Coastguard Worker let Name = "LO32DSPAsmReg"; 512*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isACCAsmReg"; 513*9880d681SAndroid Build Coastguard Worker} 514*9880d681SAndroid Build Coastguard Worker 515*9880d681SAndroid Build Coastguard Workerdef CCRAsmOperand : MipsAsmRegOperand { 516*9880d681SAndroid Build Coastguard Worker let Name = "CCRAsmReg"; 517*9880d681SAndroid Build Coastguard Worker} 518*9880d681SAndroid Build Coastguard Worker 519*9880d681SAndroid Build Coastguard Workerdef AFGR64AsmOperand : MipsAsmRegOperand { 520*9880d681SAndroid Build Coastguard Worker let Name = "AFGR64AsmReg"; 521*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isFGRAsmReg"; 522*9880d681SAndroid Build Coastguard Worker} 523*9880d681SAndroid Build Coastguard Worker 524*9880d681SAndroid Build Coastguard Workerdef FGR64AsmOperand : MipsAsmRegOperand { 525*9880d681SAndroid Build Coastguard Worker let Name = "FGR64AsmReg"; 526*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isFGRAsmReg"; 527*9880d681SAndroid Build Coastguard Worker} 528*9880d681SAndroid Build Coastguard Worker 529*9880d681SAndroid Build Coastguard Workerdef FGR32AsmOperand : MipsAsmRegOperand { 530*9880d681SAndroid Build Coastguard Worker let Name = "FGR32AsmReg"; 531*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isFGRAsmReg"; 532*9880d681SAndroid Build Coastguard Worker} 533*9880d681SAndroid Build Coastguard Worker 534*9880d681SAndroid Build Coastguard Workerdef FGRH32AsmOperand : MipsAsmRegOperand { 535*9880d681SAndroid Build Coastguard Worker let Name = "FGRH32AsmReg"; 536*9880d681SAndroid Build Coastguard Worker let PredicateMethod = "isFGRAsmReg"; 537*9880d681SAndroid Build Coastguard Worker} 538*9880d681SAndroid Build Coastguard Worker 539*9880d681SAndroid Build Coastguard Workerdef FCCRegsAsmOperand : MipsAsmRegOperand { 540*9880d681SAndroid Build Coastguard Worker let Name = "FCCAsmReg"; 541*9880d681SAndroid Build Coastguard Worker} 542*9880d681SAndroid Build Coastguard Worker 543*9880d681SAndroid Build Coastguard Workerdef MSA128AsmOperand : MipsAsmRegOperand { 544*9880d681SAndroid Build Coastguard Worker let Name = "MSA128AsmReg"; 545*9880d681SAndroid Build Coastguard Worker} 546*9880d681SAndroid Build Coastguard Worker 547*9880d681SAndroid Build Coastguard Workerdef MSACtrlAsmOperand : MipsAsmRegOperand { 548*9880d681SAndroid Build Coastguard Worker let Name = "MSACtrlAsmReg"; 549*9880d681SAndroid Build Coastguard Worker} 550*9880d681SAndroid Build Coastguard Worker 551*9880d681SAndroid Build Coastguard Workerdef GPR32Opnd : RegisterOperand<GPR32> { 552*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = GPR32AsmOperand; 553*9880d681SAndroid Build Coastguard Worker} 554*9880d681SAndroid Build Coastguard Worker 555*9880d681SAndroid Build Coastguard Workerdef GPRMM16Opnd : RegisterOperand<GPRMM16> { 556*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = GPRMM16AsmOperand; 557*9880d681SAndroid Build Coastguard Worker} 558*9880d681SAndroid Build Coastguard Worker 559*9880d681SAndroid Build Coastguard Workerdef GPRMM16OpndZero : RegisterOperand<GPRMM16Zero> { 560*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = GPRMM16AsmOperandZero; 561*9880d681SAndroid Build Coastguard Worker} 562*9880d681SAndroid Build Coastguard Worker 563*9880d681SAndroid Build Coastguard Workerdef GPRMM16OpndMoveP : RegisterOperand<GPRMM16MoveP> { 564*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = GPRMM16AsmOperandMoveP; 565*9880d681SAndroid Build Coastguard Worker} 566*9880d681SAndroid Build Coastguard Worker 567*9880d681SAndroid Build Coastguard Workerdef GPR64Opnd : RegisterOperand<GPR64> { 568*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = GPR64AsmOperand; 569*9880d681SAndroid Build Coastguard Worker} 570*9880d681SAndroid Build Coastguard Worker 571*9880d681SAndroid Build Coastguard Workerdef DSPROpnd : RegisterOperand<DSPR> { 572*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = GPR32AsmOperand; 573*9880d681SAndroid Build Coastguard Worker} 574*9880d681SAndroid Build Coastguard Worker 575*9880d681SAndroid Build Coastguard Workerdef CCROpnd : RegisterOperand<CCR> { 576*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = CCRAsmOperand; 577*9880d681SAndroid Build Coastguard Worker} 578*9880d681SAndroid Build Coastguard Worker 579*9880d681SAndroid Build Coastguard Workerdef HWRegsAsmOperand : MipsAsmRegOperand { 580*9880d681SAndroid Build Coastguard Worker let Name = "HWRegsAsmReg"; 581*9880d681SAndroid Build Coastguard Worker} 582*9880d681SAndroid Build Coastguard Worker 583*9880d681SAndroid Build Coastguard Workerdef COP0AsmOperand : MipsAsmRegOperand { 584*9880d681SAndroid Build Coastguard Worker let Name = "COP0AsmReg"; 585*9880d681SAndroid Build Coastguard Worker} 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Workerdef COP2AsmOperand : MipsAsmRegOperand { 588*9880d681SAndroid Build Coastguard Worker let Name = "COP2AsmReg"; 589*9880d681SAndroid Build Coastguard Worker} 590*9880d681SAndroid Build Coastguard Worker 591*9880d681SAndroid Build Coastguard Workerdef COP3AsmOperand : MipsAsmRegOperand { 592*9880d681SAndroid Build Coastguard Worker let Name = "COP3AsmReg"; 593*9880d681SAndroid Build Coastguard Worker} 594*9880d681SAndroid Build Coastguard Worker 595*9880d681SAndroid Build Coastguard Workerdef HWRegsOpnd : RegisterOperand<HWRegs> { 596*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = HWRegsAsmOperand; 597*9880d681SAndroid Build Coastguard Worker} 598*9880d681SAndroid Build Coastguard Worker 599*9880d681SAndroid Build Coastguard Workerdef AFGR64Opnd : RegisterOperand<AFGR64> { 600*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = AFGR64AsmOperand; 601*9880d681SAndroid Build Coastguard Worker} 602*9880d681SAndroid Build Coastguard Worker 603*9880d681SAndroid Build Coastguard Workerdef FGR64Opnd : RegisterOperand<FGR64> { 604*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = FGR64AsmOperand; 605*9880d681SAndroid Build Coastguard Worker} 606*9880d681SAndroid Build Coastguard Worker 607*9880d681SAndroid Build Coastguard Workerdef FGR32Opnd : RegisterOperand<FGR32> { 608*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = FGR32AsmOperand; 609*9880d681SAndroid Build Coastguard Worker} 610*9880d681SAndroid Build Coastguard Worker 611*9880d681SAndroid Build Coastguard Workerdef FGRCCOpnd : RegisterOperand<FGRCC> { 612*9880d681SAndroid Build Coastguard Worker // The assembler doesn't use register classes so we can re-use 613*9880d681SAndroid Build Coastguard Worker // FGR32AsmOperand. 614*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = FGR32AsmOperand; 615*9880d681SAndroid Build Coastguard Worker} 616*9880d681SAndroid Build Coastguard Worker 617*9880d681SAndroid Build Coastguard Workerdef FGRH32Opnd : RegisterOperand<FGRH32> { 618*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = FGRH32AsmOperand; 619*9880d681SAndroid Build Coastguard Worker} 620*9880d681SAndroid Build Coastguard Worker 621*9880d681SAndroid Build Coastguard Workerdef FCCRegsOpnd : RegisterOperand<FCC> { 622*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = FCCRegsAsmOperand; 623*9880d681SAndroid Build Coastguard Worker} 624*9880d681SAndroid Build Coastguard Worker 625*9880d681SAndroid Build Coastguard Workerdef LO32DSPOpnd : RegisterOperand<LO32DSP> { 626*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = LO32DSPAsmOperand; 627*9880d681SAndroid Build Coastguard Worker} 628*9880d681SAndroid Build Coastguard Worker 629*9880d681SAndroid Build Coastguard Workerdef HI32DSPOpnd : RegisterOperand<HI32DSP> { 630*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = HI32DSPAsmOperand; 631*9880d681SAndroid Build Coastguard Worker} 632*9880d681SAndroid Build Coastguard Worker 633*9880d681SAndroid Build Coastguard Workerdef ACC64DSPOpnd : RegisterOperand<ACC64DSP> { 634*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = ACC64DSPAsmOperand; 635*9880d681SAndroid Build Coastguard Worker} 636*9880d681SAndroid Build Coastguard Worker 637*9880d681SAndroid Build Coastguard Workerdef COP0Opnd : RegisterOperand<COP0> { 638*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = COP0AsmOperand; 639*9880d681SAndroid Build Coastguard Worker} 640*9880d681SAndroid Build Coastguard Worker 641*9880d681SAndroid Build Coastguard Workerdef COP2Opnd : RegisterOperand<COP2> { 642*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = COP2AsmOperand; 643*9880d681SAndroid Build Coastguard Worker} 644*9880d681SAndroid Build Coastguard Worker 645*9880d681SAndroid Build Coastguard Workerdef COP3Opnd : RegisterOperand<COP3> { 646*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = COP3AsmOperand; 647*9880d681SAndroid Build Coastguard Worker} 648*9880d681SAndroid Build Coastguard Worker 649*9880d681SAndroid Build Coastguard Workerdef MSA128BOpnd : RegisterOperand<MSA128B> { 650*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = MSA128AsmOperand; 651*9880d681SAndroid Build Coastguard Worker} 652*9880d681SAndroid Build Coastguard Worker 653*9880d681SAndroid Build Coastguard Workerdef MSA128HOpnd : RegisterOperand<MSA128H> { 654*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = MSA128AsmOperand; 655*9880d681SAndroid Build Coastguard Worker} 656*9880d681SAndroid Build Coastguard Worker 657*9880d681SAndroid Build Coastguard Workerdef MSA128WOpnd : RegisterOperand<MSA128W> { 658*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = MSA128AsmOperand; 659*9880d681SAndroid Build Coastguard Worker} 660*9880d681SAndroid Build Coastguard Worker 661*9880d681SAndroid Build Coastguard Workerdef MSA128DOpnd : RegisterOperand<MSA128D> { 662*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = MSA128AsmOperand; 663*9880d681SAndroid Build Coastguard Worker} 664*9880d681SAndroid Build Coastguard Worker 665*9880d681SAndroid Build Coastguard Workerdef MSA128CROpnd : RegisterOperand<MSACtrl> { 666*9880d681SAndroid Build Coastguard Worker let ParserMatchClass = MSACtrlAsmOperand; 667*9880d681SAndroid Build Coastguard Worker} 668