1*9880d681SAndroid Build Coastguard Worker//=- MicroMips64r6InstrFormats.td - 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 microMIPS64r6 instruction formats. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerclass DAUI_FM_MMR6 { 15*9880d681SAndroid Build Coastguard Worker bits<5> rt; 16*9880d681SAndroid Build Coastguard Worker bits<5> rs; 17*9880d681SAndroid Build Coastguard Worker bits<16> imm; 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b111100; 22*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 23*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 24*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm; 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerclass POOL32I_ADD_IMM_FM_MMR6<bits<5> funct> { 28*9880d681SAndroid Build Coastguard Worker bits<5> rs; 29*9880d681SAndroid Build Coastguard Worker bits<16> imm; 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010000; 34*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = funct; 35*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 36*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm; 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerclass POOL32S_EXTBITS_FM_MMR6<bits<6> funct> { 40*9880d681SAndroid Build Coastguard Worker bits<5> rt; 41*9880d681SAndroid Build Coastguard Worker bits<5> rs; 42*9880d681SAndroid Build Coastguard Worker bits<5> size; 43*9880d681SAndroid Build Coastguard Worker bits<5> pos; 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 48*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 49*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 50*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = size; 51*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = pos; 52*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerclass POOL32S_DALIGN_FM_MMR6 { 56*9880d681SAndroid Build Coastguard Worker bits<5> rs; 57*9880d681SAndroid Build Coastguard Worker bits<5> rt; 58*9880d681SAndroid Build Coastguard Worker bits<5> rd; 59*9880d681SAndroid Build Coastguard Worker bits<3> bp; 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 64*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 65*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 66*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 67*9880d681SAndroid Build Coastguard Worker let Inst{10-8} = bp; 68*9880d681SAndroid Build Coastguard Worker let Inst{7-6} = 0b00; 69*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b011100; 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerclass POOL32A_DIVMOD_FM_MMR6<string instr_asm, bits<9> funct> 73*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm> { 74*9880d681SAndroid Build Coastguard Worker bits<5> rt; 75*9880d681SAndroid Build Coastguard Worker bits<5> rs; 76*9880d681SAndroid Build Coastguard Worker bits<5> rd; 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 81*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 82*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 83*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 84*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = 0b00; 85*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerclass POOL32S_DMFTC0_FM_MMR6<string instr_asm, bits<5> funct> 89*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 90*9880d681SAndroid Build Coastguard Worker bits<5> rt; 91*9880d681SAndroid Build Coastguard Worker bits<5> rs; 92*9880d681SAndroid Build Coastguard Worker bits<3> sel; 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 97*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 98*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 99*9880d681SAndroid Build Coastguard Worker let Inst{15-14} = 0; 100*9880d681SAndroid Build Coastguard Worker let Inst{13-11} = sel; 101*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = funct; 102*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerclass POOL32S_ARITH_FM_MMR6<string opstr, bits<9> funct> 106*9880d681SAndroid Build Coastguard Worker : MMR6Arch<opstr> { 107*9880d681SAndroid Build Coastguard Worker bits<5> rt; 108*9880d681SAndroid Build Coastguard Worker bits<5> rs; 109*9880d681SAndroid Build Coastguard Worker bits<5> rd; 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 114*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 115*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 116*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 117*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = 0b00; 118*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerclass DADDIU_FM_MMR6<string opstr> : MMR6Arch<opstr> { 122*9880d681SAndroid Build Coastguard Worker bits<5> rt; 123*9880d681SAndroid Build Coastguard Worker bits<5> rs; 124*9880d681SAndroid Build Coastguard Worker bits<16> imm16; 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} = 0b010111; 129*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 130*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 131*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = imm16; 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerclass PCREL18_FM_MMR6<bits<3> funct> : MipsR6Inst { 135*9880d681SAndroid Build Coastguard Worker bits<5> rt; 136*9880d681SAndroid Build Coastguard Worker bits<18> imm; 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011110; 141*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 142*9880d681SAndroid Build Coastguard Worker let Inst{20-18} = funct; 143*9880d681SAndroid Build Coastguard Worker let Inst{17-0} = imm; 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerclass POOL32S_2R_FM_MMR6<string instr_asm, bits<10> funct> 147*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 148*9880d681SAndroid Build Coastguard Worker bits<5> rt; 149*9880d681SAndroid Build Coastguard Worker bits<5> rs; 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 154*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 155*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 156*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = funct; 157*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111100; 158*9880d681SAndroid Build Coastguard Worker} 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerclass POOL32S_2RSA5B0_FM_MMR6<string instr_asm, bits<9> funct> 161*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 162*9880d681SAndroid Build Coastguard Worker bits<5> rt; 163*9880d681SAndroid Build Coastguard Worker bits<5> rs; 164*9880d681SAndroid Build Coastguard Worker bits<5> sa; 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b010110; 169*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 170*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 171*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = sa; 172*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = 0b00; 173*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerclass LD_SD_32_2R_OFFSET16_FM_MMR6<string instr_asm, bits<6> op> 177*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 178*9880d681SAndroid Build Coastguard Worker bits<5> rt; 179*9880d681SAndroid Build Coastguard Worker bits<21> addr; 180*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 181*9880d681SAndroid Build Coastguard Worker bits<16> offset = addr{15-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} = rt; 187*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 188*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerclass POOL32C_2R_OFFSET12_FM_MMR6<string instr_asm, bits<4> funct> 192*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 193*9880d681SAndroid Build Coastguard Worker bits<5> rt; 194*9880d681SAndroid Build Coastguard Worker bits<21> addr; 195*9880d681SAndroid Build Coastguard Worker bits<5> base = addr{20-16}; 196*9880d681SAndroid Build Coastguard Worker bits<12> offset = addr{11-0}; 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard Worker bits<32> Inst; 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0b011000; 201*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 202*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = base; 203*9880d681SAndroid Build Coastguard Worker let Inst{15-12} = funct; 204*9880d681SAndroid Build Coastguard Worker let Inst{11-0} = offset; 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerclass POOL32S_3R_FM_MMR6<string instr_asm, bits<9> funct> 208*9880d681SAndroid Build Coastguard Worker : MMR6Arch<instr_asm>, MipsR6Inst { 209*9880d681SAndroid Build Coastguard Worker bits<5> rt; 210*9880d681SAndroid Build Coastguard Worker bits<5> rs; 211*9880d681SAndroid Build Coastguard Worker bits<5> rd; 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} = 0b010110; 216*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rt; 217*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rs; 218*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 219*9880d681SAndroid Build Coastguard Worker let Inst{10-9} = 0b00; 220*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = funct; 221*9880d681SAndroid Build Coastguard Worker} 222