1class MMArch { 2 string Arch = "micromips"; 3 list<dag> Pattern = []; 4} 5 6class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch { 7 bits<5> rt; 8 bits<5> rs; 9 bits<5> rd; 10 11 bits<32> Inst; 12 13 let Inst{31-26} = op; 14 let Inst{25-21} = rt; 15 let Inst{20-16} = rs; 16 let Inst{15-11} = rd; 17 let Inst{10} = 0; 18 let Inst{9-0} = funct; 19} 20 21class ADDI_FM_MM<bits<6> op> : MMArch { 22 bits<5> rs; 23 bits<5> rt; 24 bits<16> imm16; 25 26 bits<32> Inst; 27 28 let Inst{31-26} = op; 29 let Inst{25-21} = rt; 30 let Inst{20-16} = rs; 31 let Inst{15-0} = imm16; 32} 33 34class SLTI_FM_MM<bits<6> op> : MMArch { 35 bits<5> rt; 36 bits<5> rs; 37 bits<16> imm16; 38 39 bits<32> Inst; 40 41 let Inst{31-26} = op; 42 let Inst{25-21} = rt; 43 let Inst{20-16} = rs; 44 let Inst{15-0} = imm16; 45} 46 47class LUI_FM_MM : MMArch { 48 bits<5> rt; 49 bits<16> imm16; 50 51 bits<32> Inst; 52 53 let Inst{31-26} = 0x10; 54 let Inst{25-21} = 0xd; 55 let Inst{20-16} = rt; 56 let Inst{15-0} = imm16; 57} 58 59class MULT_FM_MM<bits<10> funct> : MMArch { 60 bits<5> rs; 61 bits<5> rt; 62 63 bits<32> Inst; 64 65 let Inst{31-26} = 0x00; 66 let Inst{25-21} = rt; 67 let Inst{20-16} = rs; 68 let Inst{15-6} = funct; 69 let Inst{5-0} = 0x3c; 70} 71 72class SRA_FM_MM<bits<10> funct, bit rotate> : MMArch { 73 bits<5> rd; 74 bits<5> rt; 75 bits<5> shamt; 76 77 bits<32> Inst; 78 79 let Inst{31-26} = 0; 80 let Inst{25-21} = rd; 81 let Inst{20-16} = rt; 82 let Inst{15-11} = shamt; 83 let Inst{10} = rotate; 84 let Inst{9-0} = funct; 85} 86 87class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch { 88 bits<5> rd; 89 bits<5> rt; 90 bits<5> rs; 91 92 bits<32> Inst; 93 94 let Inst{31-26} = 0; 95 let Inst{25-21} = rt; 96 let Inst{20-16} = rs; 97 let Inst{15-11} = rd; 98 let Inst{10} = rotate; 99 let Inst{9-0} = funct; 100} 101 102class LW_FM_MM<bits<6> op> : MMArch { 103 bits<5> rt; 104 bits<21> addr; 105 106 bits<32> Inst; 107 108 let Inst{31-26} = op; 109 let Inst{25-21} = rt; 110 let Inst{20-16} = addr{20-16}; 111 let Inst{15-0} = addr{15-0}; 112} 113 114class LWL_FM_MM<bits<4> funct> { 115 bits<5> rt; 116 bits<21> addr; 117 118 bits<32> Inst; 119 120 let Inst{31-26} = 0x18; 121 let Inst{25-21} = rt; 122 let Inst{20-16} = addr{20-16}; 123 let Inst{15-12} = funct; 124 let Inst{11-0} = addr{11-0}; 125} 126 127class CMov_F_I_FM_MM<bits<7> func> : MMArch { 128 bits<5> rd; 129 bits<5> rs; 130 bits<3> fcc; 131 132 bits<32> Inst; 133 134 let Inst{31-26} = 0x15; 135 let Inst{25-21} = rd; 136 let Inst{20-16} = rs; 137 let Inst{15-13} = fcc; 138 let Inst{12-6} = func; 139 let Inst{5-0} = 0x3b; 140} 141 142class MTLO_FM_MM<bits<10> funct> : MMArch { 143 bits<5> rs; 144 145 bits<32> Inst; 146 147 let Inst{31-26} = 0x00; 148 let Inst{25-21} = 0x00; 149 let Inst{20-16} = rs; 150 let Inst{15-6} = funct; 151 let Inst{5-0} = 0x3c; 152} 153 154class MFLO_FM_MM<bits<10> funct> : MMArch { 155 bits<5> rd; 156 157 bits<32> Inst; 158 159 let Inst{31-26} = 0x00; 160 let Inst{25-21} = 0x00; 161 let Inst{20-16} = rd; 162 let Inst{15-6} = funct; 163 let Inst{5-0} = 0x3c; 164} 165 166class CLO_FM_MM<bits<10> funct> : MMArch { 167 bits<5> rd; 168 bits<5> rs; 169 170 bits<32> Inst; 171 172 let Inst{31-26} = 0x00; 173 let Inst{25-21} = rd; 174 let Inst{20-16} = rs; 175 let Inst{15-6} = funct; 176 let Inst{5-0} = 0x3c; 177} 178 179class SEB_FM_MM<bits<10> funct> : MMArch { 180 bits<5> rd; 181 bits<5> rt; 182 183 bits<32> Inst; 184 185 let Inst{31-26} = 0x00; 186 let Inst{25-21} = rd; 187 let Inst{20-16} = rt; 188 let Inst{15-6} = funct; 189 let Inst{5-0} = 0x3c; 190} 191 192class EXT_FM_MM<bits<6> funct> : MMArch { 193 bits<5> rt; 194 bits<5> rs; 195 bits<5> pos; 196 bits<5> size; 197 198 bits<32> Inst; 199 200 let Inst{31-26} = 0x00; 201 let Inst{25-21} = rt; 202 let Inst{20-16} = rs; 203 let Inst{15-11} = size; 204 let Inst{10-6} = pos; 205 let Inst{5-0} = funct; 206} 207 208class J_FM_MM<bits<6> op> : MMArch { 209 bits<26> target; 210 211 bits<32> Inst; 212 213 let Inst{31-26} = op; 214 let Inst{25-0} = target; 215} 216 217class JR_FM_MM<bits<8> funct> : MMArch { 218 bits<5> rs; 219 220 bits<32> Inst; 221 222 let Inst{31-21} = 0x00; 223 let Inst{20-16} = rs; 224 let Inst{15-14} = 0x0; 225 let Inst{13-6} = funct; 226 let Inst{5-0} = 0x3c; 227} 228 229class JALR_FM_MM<bits<10> funct> : MMArch { 230 bits<5> rs; 231 bits<5> rd; 232 233 bits<32> Inst; 234 235 let Inst{31-26} = 0x00; 236 let Inst{25-21} = rd; 237 let Inst{20-16} = rs; 238 let Inst{15-6} = funct; 239 let Inst{5-0} = 0x3c; 240} 241 242class BEQ_FM_MM<bits<6> op> : MMArch { 243 bits<5> rs; 244 bits<5> rt; 245 bits<16> offset; 246 247 bits<32> Inst; 248 249 let Inst{31-26} = op; 250 let Inst{25-21} = rt; 251 let Inst{20-16} = rs; 252 let Inst{15-0} = offset; 253} 254 255class BGEZ_FM_MM<bits<5> funct> : MMArch { 256 bits<5> rs; 257 bits<16> offset; 258 259 bits<32> Inst; 260 261 let Inst{31-26} = 0x10; 262 let Inst{25-21} = funct; 263 let Inst{20-16} = rs; 264 let Inst{15-0} = offset; 265} 266 267class BGEZAL_FM_MM<bits<5> funct> : MMArch { 268 bits<5> rs; 269 bits<16> offset; 270 271 bits<32> Inst; 272 273 let Inst{31-26} = 0x10; 274 let Inst{25-21} = funct; 275 let Inst{20-16} = rs; 276 let Inst{15-0} = offset; 277} 278 279class TEQ_FM_MM<bits<6> funct> : MMArch { 280 bits<5> rs; 281 bits<5> rt; 282 bits<4> code_; 283 284 bits<32> Inst; 285 286 let Inst{31-26} = 0x00; 287 let Inst{25-21} = rt; 288 let Inst{20-16} = rs; 289 let Inst{15-12} = code_; 290 let Inst{11-6} = funct; 291 let Inst{5-0} = 0x3c; 292} 293 294class TEQI_FM_MM<bits<5> funct> : MMArch { 295 bits<5> rs; 296 bits<16> imm16; 297 298 bits<32> Inst; 299 300 let Inst{31-26} = 0x10; 301 let Inst{25-21} = funct; 302 let Inst{20-16} = rs; 303 let Inst{15-0} = imm16; 304} 305