1*9880d681SAndroid Build Coastguard Worker//=- MicroMips32r6InstrFormats.td - Mips32r6 Instruction Formats -*- 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// This file describes microMIPS32r6 instruction formats. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerclass MMR6Arch<string opstr> { 15*9880d681SAndroid Build Coastguard Worker string Arch = "micromipsr6"; 16*9880d681SAndroid Build Coastguard Worker string BaseOpcode = opstr; 17*9880d681SAndroid Build Coastguard Worker string DecoderNamespace = "MicroMipsR6"; 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker// Class used for microMIPS32r6 and microMIPS64r6 instructions. 21*9880d681SAndroid Build Coastguard Workerclass MicroMipsR6Inst16 : PredicateControl { 22*9880d681SAndroid Build Coastguard Worker string DecoderNamespace = "MicroMipsR6"; 23*9880d681SAndroid Build Coastguard Worker let InsnPredicates = [HasMicroMips32r6]; 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 27*9880d681SAndroid Build Coastguard Worker// 28*9880d681SAndroid Build Coastguard Worker// Disambiguators 29*9880d681SAndroid Build Coastguard Worker// 30*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 31*9880d681SAndroid Build Coastguard Worker// 32*9880d681SAndroid Build Coastguard Worker// Some encodings are ambiguous except by comparing field values. 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerclass MMDecodeDisambiguatedBy<string Name> : DecodeDisambiguates<Name> { 35*9880d681SAndroid Build Coastguard Worker string DecoderNamespace = "MicroMipsR6_Ambiguous"; 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 39*9880d681SAndroid Build Coastguard Worker// 40*9880d681SAndroid Build Coastguard Worker// Encoding Formats 41*9880d681SAndroid Build Coastguard Worker// 42*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerclass BC16_FM_MM16R6 { 45*9880d681SAndroid Build Coastguard Worker bits<10> offset; 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0x33; 50*9880d681SAndroid Build Coastguard Worker let Inst{9-0} = offset; 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerclass BEQZC_BNEZC_FM_MM16R6<bits<6> op> : MicroMipsR6Inst16 { 54*9880d681SAndroid Build Coastguard Worker bits<3> rs; 55*9880d681SAndroid Build Coastguard Worker bits<7> offset; 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = op; 60*9880d681SAndroid Build Coastguard Worker let Inst{9-7} = rs; 61*9880d681SAndroid Build Coastguard Worker let Inst{6-0} = offset; 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerclass POOL16C_JALRC_FM_MM16R6<bits<5> op> { 65*9880d681SAndroid Build Coastguard Worker bits<5> rs; 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0x11; 70*9880d681SAndroid Build Coastguard Worker let Inst{9-5} = rs; 71*9880d681SAndroid Build Coastguard Worker let Inst{4-0} = op; 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerclass POP35_BOVC_FM_MMR6<string instr_asm> : MipsR6Inst, MMR6Arch<instr_asm> { 75*9880d681SAndroid Build Coastguard Worker bits<5> rt; 76*9880d681SAndroid Build Coastguard Worker bits<5> rs; 77*9880d681SAndroid Build Coastguard Worker bits<16> offset; 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011101; 82*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 83*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 84*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerclass POP37_BNVC_FM_MMR6<string instr_asm> : MipsR6Inst, MMR6Arch<instr_asm> { 88*9880d681SAndroid Build Coastguard Worker bits<5> rt; 89*9880d681SAndroid Build Coastguard Worker bits<5> rs; 90*9880d681SAndroid Build Coastguard Worker bits<16> offset; 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011111; 95*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 96*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 97*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerclass POOL16C_JRCADDIUSP_FM_MM16R6<bits<5> op> { 101*9880d681SAndroid Build Coastguard Worker bits<5> imm; 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0x11; 106*9880d681SAndroid Build Coastguard Worker let Inst{9-5} = imm; 107*9880d681SAndroid Build Coastguard Worker let Inst{4-0} = op; 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerclass POOL16C_LWM_SWM_FM_MM16R6<bits<4> funct> { 111*9880d681SAndroid Build Coastguard Worker bits<2> rt; 112*9880d681SAndroid Build Coastguard Worker bits<4> addr; 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0x11; 117*9880d681SAndroid Build Coastguard Worker let Inst{9-8} = rt; 118*9880d681SAndroid Build Coastguard Worker let Inst{7-4} = addr; 119*9880d681SAndroid Build Coastguard Worker let Inst{3-0} = funct; 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerclass POOL32A_BITSWAP_FM_MMR6<bits<6> funct> : MipsR6Inst { 123*9880d681SAndroid Build Coastguard Worker bits<5> rd; 124*9880d681SAndroid Build Coastguard Worker bits<5> rt; 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 129*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 130*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rd; 131*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = 0b0000; 132*9880d681SAndroid Build Coastguard Worker let Inst{11-6} = funct; 133*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerclass CACHE_PREF_FM_MMR6<bits<6> opgroup, bits<4> funct> : MipsR6Inst { 137*9880d681SAndroid Build Coastguard Worker bits<21> addr; 138*9880d681SAndroid Build Coastguard Worker bits<5> hint; 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = opgroup; 143*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = hint; 144*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = addr{20-16}; 145*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = funct; 146*9880d681SAndroid Build Coastguard Worker let Inst{11-0} = addr{11-0}; 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Workerclass ARITH_FM_MMR6<string instr_asm, bits<10> funct> : MMR6Arch<instr_asm> { 150*9880d681SAndroid Build Coastguard Worker bits<5> rd; 151*9880d681SAndroid Build Coastguard Worker bits<5> rt; 152*9880d681SAndroid Build Coastguard Worker bits<5> rs; 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 157*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 158*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 159*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 160*9880d681SAndroid Build Coastguard Worker let Inst{10} = 0; 161*9880d681SAndroid Build Coastguard Worker let Inst{9-0} = funct; 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerclass ADDI_FM_MMR6<string instr_asm, bits<6> op> : MMR6Arch<instr_asm> { 165*9880d681SAndroid Build Coastguard Worker bits<5> rt; 166*9880d681SAndroid Build Coastguard Worker bits<5> rs; 167*9880d681SAndroid Build Coastguard Worker bits<16> imm16; 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = op; 172*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 173*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 174*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm16; 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Workerclass POOL32C_ST_EVA_FM_MMR6<bits<6> op, bits<3> funct> : MipsR6Inst { 178*9880d681SAndroid Build Coastguard Worker bits<21> addr; 179*9880d681SAndroid Build Coastguard Worker bits<5> hint; 180*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 181*9880d681SAndroid Build Coastguard Worker bits<9> offset = addr{8-0}; 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = op; 186*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = hint; 187*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 188*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = 0b1010; 189*9880d681SAndroid Build Coastguard Worker let Inst{11-9} = funct; 190*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = offset; 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Workerclass LB32_FM_MMR6 : MipsR6Inst { 194*9880d681SAndroid Build Coastguard Worker bits<21> addr; 195*9880d681SAndroid Build Coastguard Worker bits<5> rt; 196*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 197*9880d681SAndroid Build Coastguard Worker bits<16> offset = addr{15-0}; 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000111; 202*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 203*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 204*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerclass LBU32_FM_MMR6 : MipsR6Inst { 208*9880d681SAndroid Build Coastguard Worker bits<21> addr; 209*9880d681SAndroid Build Coastguard Worker bits<5> rt; 210*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 211*9880d681SAndroid Build Coastguard Worker bits<16> offset = addr{15-0}; 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000101; 216*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 217*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 218*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerclass POOL32C_LB_LBU_FM_MMR6<bits<3> funct> : MipsR6Inst { 222*9880d681SAndroid Build Coastguard Worker bits<21> addr; 223*9880d681SAndroid Build Coastguard Worker bits<5> rt; 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011000; 228*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 229*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = addr{20-16}; 230*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = 0b0110; 231*9880d681SAndroid Build Coastguard Worker let Inst{11-9} = funct; 232*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = addr{8-0}; 233*9880d681SAndroid Build Coastguard Worker} 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Workerclass SIGN_EXTEND_FM_MMR6<string instr_asm, bits<10> funct> 236*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 237*9880d681SAndroid Build Coastguard Worker bits<5> rd; 238*9880d681SAndroid Build Coastguard Worker bits<5> rt; 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 243*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rd; 244*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 245*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 246*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerclass PCREL19_FM_MMR6<bits<2> funct> : MipsR6Inst { 250*9880d681SAndroid Build Coastguard Worker bits<5> rt; 251*9880d681SAndroid Build Coastguard Worker bits<19> imm; 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011110; 256*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 257*9880d681SAndroid Build Coastguard Worker let Inst{20-19} = funct; 258*9880d681SAndroid Build Coastguard Worker let Inst{18-0} = imm; 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerclass PCREL16_FM_MMR6<bits<5> funct> : MipsR6Inst { 262*9880d681SAndroid Build Coastguard Worker bits<5> rt; 263*9880d681SAndroid Build Coastguard Worker bits<16> imm; 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011110; 268*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 269*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = funct; 270*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm; 271*9880d681SAndroid Build Coastguard Worker} 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Workerclass POOL32A_FM_MMR6<bits<10> funct> : MipsR6Inst { 274*9880d681SAndroid Build Coastguard Worker bits<5> rd; 275*9880d681SAndroid Build Coastguard Worker bits<5> rs; 276*9880d681SAndroid Build Coastguard Worker bits<5> rt; 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 281*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 282*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 283*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 284*9880d681SAndroid Build Coastguard Worker let Inst{10} = 0; 285*9880d681SAndroid Build Coastguard Worker let Inst{9-0} = funct; 286*9880d681SAndroid Build Coastguard Worker} 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Workerclass POOL32A_PAUSE_FM_MMR6<string instr_asm, bits<5> op> : MMR6Arch<instr_asm> { 289*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 292*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0; 293*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0; 294*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = op; 295*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = 0; 296*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0; 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerclass POOL32A_RDPGPR_FM_MMR6<bits<10> funct> { 300*9880d681SAndroid Build Coastguard Worker bits<5> rt; 301*9880d681SAndroid Build Coastguard Worker bits<5> rd; 302*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 305*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 306*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rd; 307*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 308*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Workerclass POOL32A_RDHWR_FM_MMR6 { 312*9880d681SAndroid Build Coastguard Worker bits<5> rt; 313*9880d681SAndroid Build Coastguard Worker bits<5> rs; 314*9880d681SAndroid Build Coastguard Worker bits<3> sel; 315*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 318*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 319*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 320*9880d681SAndroid Build Coastguard Worker let Inst{15-14} = 0; 321*9880d681SAndroid Build Coastguard Worker let Inst{13-11} = sel; 322*9880d681SAndroid Build Coastguard Worker let Inst{10} = 0; 323*9880d681SAndroid Build Coastguard Worker let Inst{9-0} = 0b0111000000; 324*9880d681SAndroid Build Coastguard Worker} 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Workerclass POOL32A_SYNC_FM_MMR6 { 327*9880d681SAndroid Build Coastguard Worker bits<5> stype; 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 332*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0; 333*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = stype; 334*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = 0b0110101101; 335*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerclass POOL32I_SYNCI_FM_MMR6 { 339*9880d681SAndroid Build Coastguard Worker bits<21> addr; 340*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 341*9880d681SAndroid Build Coastguard Worker bits<16> immediate = addr{15-0}; 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010000; 346*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0b01100; 347*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 348*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = immediate; 349*9880d681SAndroid Build Coastguard Worker} 350*9880d681SAndroid Build Coastguard Worker 351*9880d681SAndroid Build Coastguard Workerclass POOL32A_2R_FM_MMR6<bits<10> funct> : MipsR6Inst { 352*9880d681SAndroid Build Coastguard Worker bits<5> rs; 353*9880d681SAndroid Build Coastguard Worker bits<5> rt; 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 358*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 359*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 360*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 361*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Workerclass SPECIAL_2R_FM_MMR6<bits<6> funct> : MipsR6Inst { 365*9880d681SAndroid Build Coastguard Worker bits<5> rs; 366*9880d681SAndroid Build Coastguard Worker bits<5> rt; 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 371*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 372*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0b00000; 373*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rt; 374*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = 0b00001; 375*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 376*9880d681SAndroid Build Coastguard Worker} 377*9880d681SAndroid Build Coastguard Worker 378*9880d681SAndroid Build Coastguard Workerclass POOL32A_ALIGN_FM_MMR6<bits<6> funct> : MipsR6Inst { 379*9880d681SAndroid Build Coastguard Worker bits<5> rd; 380*9880d681SAndroid Build Coastguard Worker bits<5> rs; 381*9880d681SAndroid Build Coastguard Worker bits<5> rt; 382*9880d681SAndroid Build Coastguard Worker bits<2> bp; 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 387*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 388*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 389*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 390*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = bp; 391*9880d681SAndroid Build Coastguard Worker let Inst{8-6} = 0b000; 392*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Workerclass AUI_FM_MMR6 : MipsR6Inst { 396*9880d681SAndroid Build Coastguard Worker bits<5> rs; 397*9880d681SAndroid Build Coastguard Worker bits<5> rt; 398*9880d681SAndroid Build Coastguard Worker bits<16> imm; 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000100; 403*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 404*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 405*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm; 406*9880d681SAndroid Build Coastguard Worker} 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Workerclass POOL32A_LSA_FM<bits<6> funct> : MipsR6Inst { 409*9880d681SAndroid Build Coastguard Worker bits<5> rd; 410*9880d681SAndroid Build Coastguard Worker bits<5> rs; 411*9880d681SAndroid Build Coastguard Worker bits<5> rt; 412*9880d681SAndroid Build Coastguard Worker bits<2> imm2; 413*9880d681SAndroid Build Coastguard Worker 414*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 417*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 418*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 419*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 420*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = imm2; 421*9880d681SAndroid Build Coastguard Worker let Inst{8-6} = 0b000; 422*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 423*9880d681SAndroid Build Coastguard Worker} 424*9880d681SAndroid Build Coastguard Worker 425*9880d681SAndroid Build Coastguard Workerclass SB32_SH32_STORE_FM_MMR6<bits<6> op> { 426*9880d681SAndroid Build Coastguard Worker bits<5> rt; 427*9880d681SAndroid Build Coastguard Worker bits<21> addr; 428*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 429*9880d681SAndroid Build Coastguard Worker bits<16> offset = addr{15-0}; 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = op; 434*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 435*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 436*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 437*9880d681SAndroid Build Coastguard Worker} 438*9880d681SAndroid Build Coastguard Worker 439*9880d681SAndroid Build Coastguard Workerclass POOL32C_STORE_EVA_FM_MMR6<bits<3> funct> { 440*9880d681SAndroid Build Coastguard Worker bits<5> rt; 441*9880d681SAndroid Build Coastguard Worker bits<21> addr; 442*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 443*9880d681SAndroid Build Coastguard Worker bits<9> offset = addr{8-0}; 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 446*9880d681SAndroid Build Coastguard Worker 447*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011000; 448*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 449*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 450*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = 0b1010; 451*9880d681SAndroid Build Coastguard Worker let Inst{11-9} = funct; 452*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = offset; 453*9880d681SAndroid Build Coastguard Worker} 454*9880d681SAndroid Build Coastguard Worker 455*9880d681SAndroid Build Coastguard Workerclass LOAD_WORD_EVA_FM_MMR6<bits<3> funct> { 456*9880d681SAndroid Build Coastguard Worker bits<5> rt; 457*9880d681SAndroid Build Coastguard Worker bits<21> addr; 458*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 459*9880d681SAndroid Build Coastguard Worker bits<9> offset = addr{8-0}; 460*9880d681SAndroid Build Coastguard Worker 461*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011000; 464*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 465*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 466*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = 0b0110; 467*9880d681SAndroid Build Coastguard Worker let Inst{11-9} = funct; 468*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = offset; 469*9880d681SAndroid Build Coastguard Worker} 470*9880d681SAndroid Build Coastguard Worker 471*9880d681SAndroid Build Coastguard Workerclass LOAD_WORD_FM_MMR6 { 472*9880d681SAndroid Build Coastguard Worker bits<5> rt; 473*9880d681SAndroid Build Coastguard Worker bits<21> addr; 474*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 475*9880d681SAndroid Build Coastguard Worker bits<16> offset = addr{15-0}; 476*9880d681SAndroid Build Coastguard Worker 477*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 478*9880d681SAndroid Build Coastguard Worker 479*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b111111; 480*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 481*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 482*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 483*9880d681SAndroid Build Coastguard Worker} 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Workerclass LOAD_UPPER_IMM_FM_MMR6 { 486*9880d681SAndroid Build Coastguard Worker bits<5> rt; 487*9880d681SAndroid Build Coastguard Worker bits<16> imm16; 488*9880d681SAndroid Build Coastguard Worker 489*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 490*9880d681SAndroid Build Coastguard Worker 491*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000100; 492*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 493*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0; 494*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm16; 495*9880d681SAndroid Build Coastguard Worker} 496*9880d681SAndroid Build Coastguard Worker 497*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_1R_RT_OFF16_FM_MMR6<string instr_asm, bits<6> funct> 498*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 499*9880d681SAndroid Build Coastguard Worker bits<5> rt; 500*9880d681SAndroid Build Coastguard Worker bits<16> offset; 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 503*9880d681SAndroid Build Coastguard Worker 504*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = funct; 505*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 506*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0b00000; 507*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 508*9880d681SAndroid Build Coastguard Worker} 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_1R_BOTH_OFF16_FM_MMR6<string instr_asm, bits<6> funct> 511*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 512*9880d681SAndroid Build Coastguard Worker bits<5> rt; 513*9880d681SAndroid Build Coastguard Worker bits<16> offset; 514*9880d681SAndroid Build Coastguard Worker 515*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 516*9880d681SAndroid Build Coastguard Worker 517*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = funct; 518*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 519*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 520*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 521*9880d681SAndroid Build Coastguard Worker} 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Workerclass POOL32A_JALRC_FM_MMR6<string instr_asm, bits<10> funct> 524*9880d681SAndroid Build Coastguard Worker : MipsR6Inst, MMR6Arch<instr_asm> { 525*9880d681SAndroid Build Coastguard Worker bits<5> rt; 526*9880d681SAndroid Build Coastguard Worker bits<5> rs; 527*9880d681SAndroid Build Coastguard Worker 528*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 529*9880d681SAndroid Build Coastguard Worker 530*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 531*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 532*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 533*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 534*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 535*9880d681SAndroid Build Coastguard Worker} 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Workerclass POOL32A_EXT_INS_FM_MMR6<string instr_asm, bits<6> funct> 538*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 539*9880d681SAndroid Build Coastguard Worker bits<5> rt; 540*9880d681SAndroid Build Coastguard Worker bits<5> rs; 541*9880d681SAndroid Build Coastguard Worker bits<5> size; 542*9880d681SAndroid Build Coastguard Worker bits<5> pos; 543*9880d681SAndroid Build Coastguard Worker 544*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 545*9880d681SAndroid Build Coastguard Worker 546*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 547*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 548*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 549*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = size; 550*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = pos; 551*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 552*9880d681SAndroid Build Coastguard Worker} 553*9880d681SAndroid Build Coastguard Worker 554*9880d681SAndroid Build Coastguard Workerclass POOL32A_ERET_FM_MMR6<string instr_asm, bits<10> funct> 555*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 556*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 557*9880d681SAndroid Build Coastguard Worker 558*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x00; 559*9880d681SAndroid Build Coastguard Worker let Inst{25-16} = 0x00; 560*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 561*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0x3c; 562*9880d681SAndroid Build Coastguard Worker} 563*9880d681SAndroid Build Coastguard Worker 564*9880d681SAndroid Build Coastguard Workerclass ERETNC_FM_MMR6<string instr_asm> : MMR6Arch<instr_asm> { 565*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 566*9880d681SAndroid Build Coastguard Worker 567*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x00; 568*9880d681SAndroid Build Coastguard Worker let Inst{25-17} = 0x00; 569*9880d681SAndroid Build Coastguard Worker let Inst{16-16} = 0x01; 570*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = 0x3cd; 571*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0x3c; 572*9880d681SAndroid Build Coastguard Worker} 573*9880d681SAndroid Build Coastguard Worker 574*9880d681SAndroid Build Coastguard Workerclass BREAK_MMR6_ENC<string instr_asm> : MMR6Arch<instr_asm> { 575*9880d681SAndroid Build Coastguard Worker bits<10> code_1; 576*9880d681SAndroid Build Coastguard Worker bits<10> code_2; 577*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 578*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x0; 579*9880d681SAndroid Build Coastguard Worker let Inst{25-16} = code_1; 580*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = code_2; 581*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0x07; 582*9880d681SAndroid Build Coastguard Worker} 583*9880d681SAndroid Build Coastguard Worker 584*9880d681SAndroid Build Coastguard Workerclass BARRIER_MMR6_ENC<string instr_asm, bits<5> op> : MMR6Arch<instr_asm> { 585*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x0; 588*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0x0; 589*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0x0; 590*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = op; 591*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = 0x0; 592*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0x0; 593*9880d681SAndroid Build Coastguard Worker} 594*9880d681SAndroid Build Coastguard Worker 595*9880d681SAndroid Build Coastguard Workerclass POOL32A_EIDI_MMR6_ENC<string instr_asm, bits<10> funct> 596*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 597*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 598*9880d681SAndroid Build Coastguard Worker bits<5> rt; // Actually rs but we're sharing code with the standard encodings which call it rt 599*9880d681SAndroid Build Coastguard Worker 600*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x00; 601*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0x00; 602*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 603*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 604*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0x3c; 605*9880d681SAndroid Build Coastguard Worker} 606*9880d681SAndroid Build Coastguard Worker 607*9880d681SAndroid Build Coastguard Workerclass SHIFT_MMR6_ENC<string instr_asm, bits<10> funct, bit rotate> : MMR6Arch<instr_asm> { 608*9880d681SAndroid Build Coastguard Worker bits<5> rd; 609*9880d681SAndroid Build Coastguard Worker bits<5> rt; 610*9880d681SAndroid Build Coastguard Worker bits<5> shamt; 611*9880d681SAndroid Build Coastguard Worker 612*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 613*9880d681SAndroid Build Coastguard Worker 614*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 615*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rd; 616*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 617*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = shamt; 618*9880d681SAndroid Build Coastguard Worker let Inst{10} = rotate; 619*9880d681SAndroid Build Coastguard Worker let Inst{9-0} = funct; 620*9880d681SAndroid Build Coastguard Worker} 621*9880d681SAndroid Build Coastguard Worker 622*9880d681SAndroid Build Coastguard Workerclass SW32_FM_MMR6<string instr_asm, bits<6> op> : MMR6Arch<instr_asm> { 623*9880d681SAndroid Build Coastguard Worker bits<5> rt; 624*9880d681SAndroid Build Coastguard Worker bits<21> addr; 625*9880d681SAndroid Build Coastguard Worker 626*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = op; 629*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 630*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = addr{20-16}; 631*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = addr{15-0}; 632*9880d681SAndroid Build Coastguard Worker} 633*9880d681SAndroid Build Coastguard Worker 634*9880d681SAndroid Build Coastguard Workerclass POOL32C_SWE_FM_MMR6<string instr_asm, bits<6> op, bits<4> fmt, 635*9880d681SAndroid Build Coastguard Worker bits<3> funct> : MMR6Arch<instr_asm> { 636*9880d681SAndroid Build Coastguard Worker bits<5> rt; 637*9880d681SAndroid Build Coastguard Worker bits<21> addr; 638*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 639*9880d681SAndroid Build Coastguard Worker bits<9> offset = addr{8-0}; 640*9880d681SAndroid Build Coastguard Worker 641*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 642*9880d681SAndroid Build Coastguard Worker 643*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = op; 644*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 645*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 646*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = fmt; 647*9880d681SAndroid Build Coastguard Worker let Inst{11-9} = funct; 648*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = offset; 649*9880d681SAndroid Build Coastguard Worker} 650*9880d681SAndroid Build Coastguard Worker 651*9880d681SAndroid Build Coastguard Workerclass POOL32F_ARITH_FM_MMR6<string instr_asm, bits<2> fmt, bits<8> funct> 652*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 653*9880d681SAndroid Build Coastguard Worker bits<5> ft; 654*9880d681SAndroid Build Coastguard Worker bits<5> fs; 655*9880d681SAndroid Build Coastguard Worker bits<5> fd; 656*9880d681SAndroid Build Coastguard Worker 657*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 658*9880d681SAndroid Build Coastguard Worker 659*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 660*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 661*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 662*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = fd; 663*9880d681SAndroid Build Coastguard Worker let Inst{10} = 0; 664*9880d681SAndroid Build Coastguard Worker let Inst{9-8} = fmt; 665*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = funct; 666*9880d681SAndroid Build Coastguard Worker} 667*9880d681SAndroid Build Coastguard Worker 668*9880d681SAndroid Build Coastguard Workerclass POOL32F_ARITHF_FM_MMR6<string instr_asm, bits<2> fmt, bits<9> funct> 669*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 670*9880d681SAndroid Build Coastguard Worker bits<5> ft; 671*9880d681SAndroid Build Coastguard Worker bits<5> fs; 672*9880d681SAndroid Build Coastguard Worker bits<5> fd; 673*9880d681SAndroid Build Coastguard Worker 674*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 675*9880d681SAndroid Build Coastguard Worker 676*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 677*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 678*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 679*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = fd; 680*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = fmt; 681*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 682*9880d681SAndroid Build Coastguard Worker} 683*9880d681SAndroid Build Coastguard Worker 684*9880d681SAndroid Build Coastguard Workerclass POOL32F_MOV_NEG_FM_MMR6<string instr_asm, bits<2> fmt, bits<7> funct> 685*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 686*9880d681SAndroid Build Coastguard Worker bits<5> ft; 687*9880d681SAndroid Build Coastguard Worker bits<5> fs; 688*9880d681SAndroid Build Coastguard Worker 689*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 690*9880d681SAndroid Build Coastguard Worker 691*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 692*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 693*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 694*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 695*9880d681SAndroid Build Coastguard Worker let Inst{14-13} = fmt; 696*9880d681SAndroid Build Coastguard Worker let Inst{12-6} = funct; 697*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 698*9880d681SAndroid Build Coastguard Worker} 699*9880d681SAndroid Build Coastguard Worker 700*9880d681SAndroid Build Coastguard Workerclass POOL32F_MINMAX_FM<string instr_asm, bits<2> fmt, bits<9> funct> 701*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 702*9880d681SAndroid Build Coastguard Worker bits<5> ft; 703*9880d681SAndroid Build Coastguard Worker bits<5> fs; 704*9880d681SAndroid Build Coastguard Worker bits<5> fd; 705*9880d681SAndroid Build Coastguard Worker 706*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 707*9880d681SAndroid Build Coastguard Worker 708*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 709*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 710*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 711*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = fd; 712*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = fmt; 713*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 714*9880d681SAndroid Build Coastguard Worker} 715*9880d681SAndroid Build Coastguard Worker 716*9880d681SAndroid Build Coastguard Workerclass POOL32F_CMP_FM<string instr_asm, bits<6> format, FIELD_CMP_COND Cond> 717*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 718*9880d681SAndroid Build Coastguard Worker bits<5> ft; 719*9880d681SAndroid Build Coastguard Worker bits<5> fs; 720*9880d681SAndroid Build Coastguard Worker bits<5> fd; 721*9880d681SAndroid Build Coastguard Worker 722*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 723*9880d681SAndroid Build Coastguard Worker 724*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 725*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 726*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 727*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = fd; 728*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = Cond.Value; 729*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = format; 730*9880d681SAndroid Build Coastguard Worker} 731*9880d681SAndroid Build Coastguard Worker 732*9880d681SAndroid Build Coastguard Workerclass POOL32F_CVT_LW_FM<string instr_asm, bit fmt, bits<8> funct> 733*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 734*9880d681SAndroid Build Coastguard Worker bits<5> ft; 735*9880d681SAndroid Build Coastguard Worker bits<5> fs; 736*9880d681SAndroid Build Coastguard Worker 737*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 738*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 739*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 740*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 741*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 742*9880d681SAndroid Build Coastguard Worker let Inst{14} = fmt; 743*9880d681SAndroid Build Coastguard Worker let Inst{13-6} = funct; 744*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 745*9880d681SAndroid Build Coastguard Worker} 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Workerclass POOL32F_CVT_DS_FM<string instr_asm, bits<2> fmt, bits<7> funct> 748*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 749*9880d681SAndroid Build Coastguard Worker bits<5> ft; 750*9880d681SAndroid Build Coastguard Worker bits<5> fs; 751*9880d681SAndroid Build Coastguard Worker 752*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 753*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 754*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 755*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 756*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 757*9880d681SAndroid Build Coastguard Worker let Inst{14-13} = fmt; 758*9880d681SAndroid Build Coastguard Worker let Inst{12-6} = funct; 759*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 760*9880d681SAndroid Build Coastguard Worker} 761*9880d681SAndroid Build Coastguard Worker 762*9880d681SAndroid Build Coastguard Workerclass POOL32F_ABS_FM_MMR6<string instr_asm, bits<2> fmt, bits<7> funct> 763*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 764*9880d681SAndroid Build Coastguard Worker bits<5> ft; 765*9880d681SAndroid Build Coastguard Worker bits<5> fs; 766*9880d681SAndroid Build Coastguard Worker 767*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 768*9880d681SAndroid Build Coastguard Worker 769*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 770*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 771*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 772*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 773*9880d681SAndroid Build Coastguard Worker let Inst{14-13} = fmt; 774*9880d681SAndroid Build Coastguard Worker let Inst{12-6} = funct; 775*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 776*9880d681SAndroid Build Coastguard Worker} 777*9880d681SAndroid Build Coastguard Worker 778*9880d681SAndroid Build Coastguard Workerclass POOL32F_MATH_FM_MMR6<string instr_asm, bits<1> fmt, bits<8> funct> 779*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 780*9880d681SAndroid Build Coastguard Worker bits<5> ft; 781*9880d681SAndroid Build Coastguard Worker bits<5> fs; 782*9880d681SAndroid Build Coastguard Worker 783*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 786*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 787*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 788*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 789*9880d681SAndroid Build Coastguard Worker let Inst{14} = fmt; 790*9880d681SAndroid Build Coastguard Worker let Inst{13-6} = funct; 791*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 792*9880d681SAndroid Build Coastguard Worker} 793*9880d681SAndroid Build Coastguard Worker 794*9880d681SAndroid Build Coastguard Workerclass POOL16A_ADDU16_FM_MMR6 : MicroMipsR6Inst16 { 795*9880d681SAndroid Build Coastguard Worker bits<3> rs; 796*9880d681SAndroid Build Coastguard Worker bits<3> rt; 797*9880d681SAndroid Build Coastguard Worker bits<3> rd; 798*9880d681SAndroid Build Coastguard Worker 799*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 800*9880d681SAndroid Build Coastguard Worker 801*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0b000001; 802*9880d681SAndroid Build Coastguard Worker let Inst{9-7} = rs; 803*9880d681SAndroid Build Coastguard Worker let Inst{6-4} = rt; 804*9880d681SAndroid Build Coastguard Worker let Inst{3-1} = rd; 805*9880d681SAndroid Build Coastguard Worker let Inst{0} = 0; 806*9880d681SAndroid Build Coastguard Worker} 807*9880d681SAndroid Build Coastguard Worker 808*9880d681SAndroid Build Coastguard Workerclass POOL16C_AND16_FM_MMR6 : MicroMipsR6Inst16 { 809*9880d681SAndroid Build Coastguard Worker bits<3> rt; 810*9880d681SAndroid Build Coastguard Worker bits<3> rs; 811*9880d681SAndroid Build Coastguard Worker 812*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 813*9880d681SAndroid Build Coastguard Worker 814*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0b010001; 815*9880d681SAndroid Build Coastguard Worker let Inst{9-7} = rt; 816*9880d681SAndroid Build Coastguard Worker let Inst{6-4} = rs; 817*9880d681SAndroid Build Coastguard Worker let Inst{3-0} = 0b0001; 818*9880d681SAndroid Build Coastguard Worker} 819*9880d681SAndroid Build Coastguard Worker 820*9880d681SAndroid Build Coastguard Workerclass POOL16C_NOT16_FM_MMR6 : MicroMipsR6Inst16 { 821*9880d681SAndroid Build Coastguard Worker bits<3> rt; 822*9880d681SAndroid Build Coastguard Worker bits<3> rs; 823*9880d681SAndroid Build Coastguard Worker 824*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 825*9880d681SAndroid Build Coastguard Worker 826*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0x11; 827*9880d681SAndroid Build Coastguard Worker let Inst{9-7} = rt; 828*9880d681SAndroid Build Coastguard Worker let Inst{6-4} = rs; 829*9880d681SAndroid Build Coastguard Worker let Inst{3-0} = 0b0000; 830*9880d681SAndroid Build Coastguard Worker} 831*9880d681SAndroid Build Coastguard Worker 832*9880d681SAndroid Build Coastguard Workerclass POOL16C_OR16_XOR16_FM_MMR6<bits<4> op> : MicroMipsR6Inst16 { 833*9880d681SAndroid Build Coastguard Worker bits<3> rt; 834*9880d681SAndroid Build Coastguard Worker bits<3> rs; 835*9880d681SAndroid Build Coastguard Worker 836*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 837*9880d681SAndroid Build Coastguard Worker 838*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0b010001; 839*9880d681SAndroid Build Coastguard Worker let Inst{9-7} = rt; 840*9880d681SAndroid Build Coastguard Worker let Inst{6-4} = rs; 841*9880d681SAndroid Build Coastguard Worker let Inst{3-0} = op; 842*9880d681SAndroid Build Coastguard Worker} 843*9880d681SAndroid Build Coastguard Worker 844*9880d681SAndroid Build Coastguard Workerclass POOL16C_BREAKPOINT_FM_MMR6<bits<6> op> { 845*9880d681SAndroid Build Coastguard Worker bits<4> code_; 846*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 847*9880d681SAndroid Build Coastguard Worker 848*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0b010001; 849*9880d681SAndroid Build Coastguard Worker let Inst{9-6} = code_; 850*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = op; 851*9880d681SAndroid Build Coastguard Worker} 852*9880d681SAndroid Build Coastguard Worker 853*9880d681SAndroid Build Coastguard Workerclass POOL16A_SUBU16_FM_MMR6 { 854*9880d681SAndroid Build Coastguard Worker bits<3> rs; 855*9880d681SAndroid Build Coastguard Worker bits<3> rt; 856*9880d681SAndroid Build Coastguard Worker bits<3> rd; 857*9880d681SAndroid Build Coastguard Worker 858*9880d681SAndroid Build Coastguard Worker bits<16> Inst; 859*9880d681SAndroid Build Coastguard Worker 860*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = 0b000001; 861*9880d681SAndroid Build Coastguard Worker let Inst{9-7} = rs; 862*9880d681SAndroid Build Coastguard Worker let Inst{6-4} = rt; 863*9880d681SAndroid Build Coastguard Worker let Inst{3-1} = rd; 864*9880d681SAndroid Build Coastguard Worker let Inst{0} = 0b1; 865*9880d681SAndroid Build Coastguard Worker} 866*9880d681SAndroid Build Coastguard Worker 867*9880d681SAndroid Build Coastguard Workerclass POOL32A_WRPGPR_WSBH_FM_MMR6<bits<10> funct> : MipsR6Inst { 868*9880d681SAndroid Build Coastguard Worker bits<5> rt; 869*9880d681SAndroid Build Coastguard Worker bits<5> rs; 870*9880d681SAndroid Build Coastguard Worker 871*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 872*9880d681SAndroid Build Coastguard Worker 873*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x00; 874*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 875*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 876*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 877*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0x3c; 878*9880d681SAndroid Build Coastguard Worker} 879*9880d681SAndroid Build Coastguard Worker 880*9880d681SAndroid Build Coastguard Workerclass POOL32F_RECIP_ROUND_FM_MMR6<string instr_asm, bits<1> fmt, bits<8> funct> 881*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 882*9880d681SAndroid Build Coastguard Worker bits<5> ft; 883*9880d681SAndroid Build Coastguard Worker bits<5> fs; 884*9880d681SAndroid Build Coastguard Worker 885*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 886*9880d681SAndroid Build Coastguard Worker 887*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 888*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 889*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 890*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 891*9880d681SAndroid Build Coastguard Worker let Inst{14} = fmt; 892*9880d681SAndroid Build Coastguard Worker let Inst{13-6} = funct; 893*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 894*9880d681SAndroid Build Coastguard Worker} 895*9880d681SAndroid Build Coastguard Worker 896*9880d681SAndroid Build Coastguard Workerclass POOL32F_RINT_FM_MMR6<string instr_asm, bits<2> fmt> 897*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 898*9880d681SAndroid Build Coastguard Worker bits<5> fs; 899*9880d681SAndroid Build Coastguard Worker bits<5> fd; 900*9880d681SAndroid Build Coastguard Worker 901*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 902*9880d681SAndroid Build Coastguard Worker 903*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 904*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = fs; 905*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fd; 906*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = 0; 907*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = fmt; 908*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = 0b000100000; 909*9880d681SAndroid Build Coastguard Worker} 910*9880d681SAndroid Build Coastguard Worker 911*9880d681SAndroid Build Coastguard Workerclass POOL32F_SEL_FM_MMR6<string instr_asm, bits<2> fmt, bits<9> funct> 912*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 913*9880d681SAndroid Build Coastguard Worker bits<5> ft; 914*9880d681SAndroid Build Coastguard Worker bits<5> fs; 915*9880d681SAndroid Build Coastguard Worker bits<5> fd; 916*9880d681SAndroid Build Coastguard Worker 917*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 918*9880d681SAndroid Build Coastguard Worker 919*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 920*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 921*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 922*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = fd; 923*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = fmt; 924*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 925*9880d681SAndroid Build Coastguard Worker} 926*9880d681SAndroid Build Coastguard Worker 927*9880d681SAndroid Build Coastguard Workerclass POOL32F_CLASS_FM_MMR6<string instr_asm, bits<2> fmt, bits<9> funct> 928*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 929*9880d681SAndroid Build Coastguard Worker bits<5> fs; 930*9880d681SAndroid Build Coastguard Worker bits<5> fd; 931*9880d681SAndroid Build Coastguard Worker 932*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 933*9880d681SAndroid Build Coastguard Worker 934*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 935*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = fs; 936*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fd; 937*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = 0b00000; 938*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = fmt; 939*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 940*9880d681SAndroid Build Coastguard Worker} 941*9880d681SAndroid Build Coastguard Worker 942*9880d681SAndroid Build Coastguard Workerclass POOL32A_TLBINV_FM_MMR6<string instr_asm, bits<10> funct> 943*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 944*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 945*9880d681SAndroid Build Coastguard Worker 946*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x0; 947*9880d681SAndroid Build Coastguard Worker let Inst{25-16} = 0x0; 948*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 949*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 950*9880d681SAndroid Build Coastguard Worker} 951*9880d681SAndroid Build Coastguard Worker 952*9880d681SAndroid Build Coastguard Workerclass POOL32A_MFTC0_FM_MMR6<string instr_asm, bits<5> funct, bits<6> opcode> 953*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 954*9880d681SAndroid Build Coastguard Worker bits<5> rt; 955*9880d681SAndroid Build Coastguard Worker bits<5> rs; 956*9880d681SAndroid Build Coastguard Worker bits<3> sel; 957*9880d681SAndroid Build Coastguard Worker 958*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 959*9880d681SAndroid Build Coastguard Worker 960*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 961*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 962*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 963*9880d681SAndroid Build Coastguard Worker let Inst{15-14} = 0; 964*9880d681SAndroid Build Coastguard Worker let Inst{13-11} = sel; 965*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = funct; 966*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = opcode; 967*9880d681SAndroid Build Coastguard Worker} 968*9880d681SAndroid Build Coastguard Worker 969*9880d681SAndroid Build Coastguard Workerclass POOL32F_MFTC1_FM_MMR6<string instr_asm, bits<8> funct> 970*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 971*9880d681SAndroid Build Coastguard Worker bits<5> rt; 972*9880d681SAndroid Build Coastguard Worker bits<5> fs; 973*9880d681SAndroid Build Coastguard Worker 974*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 975*9880d681SAndroid Build Coastguard Worker 976*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010101; 977*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 978*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = fs; 979*9880d681SAndroid Build Coastguard Worker let Inst{15-14} = 0; 980*9880d681SAndroid Build Coastguard Worker let Inst{13-6} = funct; 981*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111011; 982*9880d681SAndroid Build Coastguard Worker} 983*9880d681SAndroid Build Coastguard Worker 984*9880d681SAndroid Build Coastguard Workerclass POOL32A_MFTC2_FM_MMR6<string instr_asm, bits<10> funct> 985*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 986*9880d681SAndroid Build Coastguard Worker bits<5> rt; 987*9880d681SAndroid Build Coastguard Worker bits<5> impl; 988*9880d681SAndroid Build Coastguard Worker 989*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 990*9880d681SAndroid Build Coastguard Worker 991*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 992*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 993*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = impl; 994*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 995*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 996*9880d681SAndroid Build Coastguard Worker} 997*9880d681SAndroid Build Coastguard Worker 998*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_2R_OFF16_FM_MMR6<string opstr, bits<6> funct> 999*9880d681SAndroid Build Coastguard Worker : MipsR6Inst, MMR6Arch<opstr> { 1000*9880d681SAndroid Build Coastguard Worker bits<5> rt; 1001*9880d681SAndroid Build Coastguard Worker bits<5> rs; 1002*9880d681SAndroid Build Coastguard Worker bits<16> offset; 1003*9880d681SAndroid Build Coastguard Worker 1004*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1005*9880d681SAndroid Build Coastguard Worker 1006*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = funct; 1007*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 1008*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 1009*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 1010*9880d681SAndroid Build Coastguard Worker} 1011*9880d681SAndroid Build Coastguard Worker 1012*9880d681SAndroid Build Coastguard Workerclass POOL32A_DVPEVP_FM_MMR6<string instr_asm, bits<10> funct> 1013*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 1014*9880d681SAndroid Build Coastguard Worker bits<5> rs; 1015*9880d681SAndroid Build Coastguard Worker 1016*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1017*9880d681SAndroid Build Coastguard Worker 1018*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b000000; 1019*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0b00000; 1020*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 1021*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 1022*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 1023*9880d681SAndroid Build Coastguard Worker} 1024*9880d681SAndroid Build Coastguard Worker 1025*9880d681SAndroid Build Coastguard Workerclass POOL32B_LWP_SWP_FM_MMR6<bits<4> funct> : MipsR6Inst { 1026*9880d681SAndroid Build Coastguard Worker bits<5> rd; 1027*9880d681SAndroid Build Coastguard Worker bits<21> addr; 1028*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 1029*9880d681SAndroid Build Coastguard Worker bits<12> offset = addr{11-0}; 1030*9880d681SAndroid Build Coastguard Worker 1031*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1032*9880d681SAndroid Build Coastguard Worker 1033*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x8; 1034*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rd; 1035*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 1036*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = funct; 1037*9880d681SAndroid Build Coastguard Worker let Inst{11-0} = offset; 1038*9880d681SAndroid Build Coastguard Worker} 1039*9880d681SAndroid Build Coastguard Worker 1040*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_OFF21_FM_MMR6<string opstr, bits<6> funct> : MipsR6Inst { 1041*9880d681SAndroid Build Coastguard Worker bits<5> rs; 1042*9880d681SAndroid Build Coastguard Worker bits<21> offset; 1043*9880d681SAndroid Build Coastguard Worker 1044*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1045*9880d681SAndroid Build Coastguard Worker 1046*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = funct; 1047*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 1048*9880d681SAndroid Build Coastguard Worker let Inst{20-0} = offset; 1049*9880d681SAndroid Build Coastguard Worker} 1050*9880d681SAndroid Build Coastguard Worker 1051*9880d681SAndroid Build Coastguard Workerclass POOL32I_BRANCH_COP_1_2_FM_MMR6<string instr_asm, bits<5> funct> 1052*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 1053*9880d681SAndroid Build Coastguard Worker bits<5> rt; 1054*9880d681SAndroid Build Coastguard Worker bits<16> offset; 1055*9880d681SAndroid Build Coastguard Worker 1056*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1057*9880d681SAndroid Build Coastguard Worker 1058*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010000; 1059*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = funct; 1060*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 1061*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 1062*9880d681SAndroid Build Coastguard Worker} 1063*9880d681SAndroid Build Coastguard Worker 1064*9880d681SAndroid Build Coastguard Workerclass LDWC1_SDWC1_FM_MMR6<string instr_asm, bits<6> funct> 1065*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 1066*9880d681SAndroid Build Coastguard Worker bits<5> ft; 1067*9880d681SAndroid Build Coastguard Worker bits<21> addr; 1068*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 1069*9880d681SAndroid Build Coastguard Worker bits<16> offset = addr{15-0}; 1070*9880d681SAndroid Build Coastguard Worker 1071*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1072*9880d681SAndroid Build Coastguard Worker 1073*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = funct; 1074*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = ft; 1075*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 1076*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 1077*9880d681SAndroid Build Coastguard Worker} 1078*9880d681SAndroid Build Coastguard Worker 1079*9880d681SAndroid Build Coastguard Workerclass POOL32B_LDWC2_SDWC2_FM_MMR6<string instr_asm, bits<4> funct> 1080*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 1081*9880d681SAndroid Build Coastguard Worker bits<5> rt; 1082*9880d681SAndroid Build Coastguard Worker bits<21> addr; 1083*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 1084*9880d681SAndroid Build Coastguard Worker bits<11> offset = addr{10-0}; 1085*9880d681SAndroid Build Coastguard Worker 1086*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 1087*9880d681SAndroid Build Coastguard Worker 1088*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b001000; 1089*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 1090*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 1091*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = funct; 1092*9880d681SAndroid Build Coastguard Worker let Inst{11} = 0; 1093*9880d681SAndroid Build Coastguard Worker let Inst{10-0} = offset; 1094*9880d681SAndroid Build Coastguard Worker} 1095