1//===- MipsMSAInstrFormats.td - Mips Instruction Formats ---*- tablegen -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10class MSAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>, 11 ASE_MSA { 12 let EncodingPredicates = [HasStdEnc]; 13 let Inst{31-26} = 0b011110; 14} 15 16class MSACBranch : MSAInst { 17 let Inst{31-26} = 0b010001; 18} 19 20class MSASpecial : MSAInst { 21 let Inst{31-26} = 0b000000; 22} 23 24class MSAPseudo<dag outs, dag ins, list<dag> pattern, 25 InstrItinClass itin = IIPseudo>: 26 MipsPseudo<outs, ins, pattern, itin> { 27 let EncodingPredicates = [HasStdEnc]; 28 let ASEPredicate = [HasMSA]; 29} 30 31class MSA_BIT_B_FMT<bits<3> major, bits<6> minor>: MSAInst { 32 bits<5> ws; 33 bits<5> wd; 34 bits<3> m; 35 36 let Inst{25-23} = major; 37 let Inst{22-19} = 0b1110; 38 let Inst{18-16} = m; 39 let Inst{15-11} = ws; 40 let Inst{10-6} = wd; 41 let Inst{5-0} = minor; 42} 43 44class MSA_BIT_H_FMT<bits<3> major, bits<6> minor>: MSAInst { 45 bits<5> ws; 46 bits<5> wd; 47 bits<4> m; 48 49 let Inst{25-23} = major; 50 let Inst{22-20} = 0b110; 51 let Inst{19-16} = m; 52 let Inst{15-11} = ws; 53 let Inst{10-6} = wd; 54 let Inst{5-0} = minor; 55} 56 57class MSA_BIT_W_FMT<bits<3> major, bits<6> minor>: MSAInst { 58 bits<5> ws; 59 bits<5> wd; 60 bits<5> m; 61 62 let Inst{25-23} = major; 63 let Inst{22-21} = 0b10; 64 let Inst{20-16} = m; 65 let Inst{15-11} = ws; 66 let Inst{10-6} = wd; 67 let Inst{5-0} = minor; 68} 69 70class MSA_BIT_D_FMT<bits<3> major, bits<6> minor>: MSAInst { 71 bits<5> ws; 72 bits<5> wd; 73 bits<6> m; 74 75 let Inst{25-23} = major; 76 let Inst{22} = 0b0; 77 let Inst{21-16} = m; 78 let Inst{15-11} = ws; 79 let Inst{10-6} = wd; 80 let Inst{5-0} = minor; 81} 82 83class MSA_2R_FILL_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst { 84 bits<5> rs; 85 bits<5> wd; 86 87 let Inst{25-18} = major; 88 let Inst{17-16} = df; 89 let Inst{15-11} = rs; 90 let Inst{10-6} = wd; 91 let Inst{5-0} = minor; 92} 93 94class MSA_2R_FILL_D_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst { 95 bits<5> rs; 96 bits<5> wd; 97 98 let Inst{25-18} = major; 99 let Inst{17-16} = df; 100 let Inst{15-11} = rs; 101 let Inst{10-6} = wd; 102 let Inst{5-0} = minor; 103} 104 105class MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst { 106 bits<5> ws; 107 bits<5> wd; 108 109 let Inst{25-18} = major; 110 let Inst{17-16} = df; 111 let Inst{15-11} = ws; 112 let Inst{10-6} = wd; 113 let Inst{5-0} = minor; 114} 115 116class MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst { 117 bits<5> ws; 118 bits<5> wd; 119 120 let Inst{25-17} = major; 121 let Inst{16} = df; 122 let Inst{15-11} = ws; 123 let Inst{10-6} = wd; 124 let Inst{5-0} = minor; 125} 126 127class MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst { 128 bits<5> wt; 129 bits<5> ws; 130 bits<5> wd; 131 132 let Inst{25-23} = major; 133 let Inst{22-21} = df; 134 let Inst{20-16} = wt; 135 let Inst{15-11} = ws; 136 let Inst{10-6} = wd; 137 let Inst{5-0} = minor; 138} 139 140class MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst { 141 bits<5> wt; 142 bits<5> ws; 143 bits<5> wd; 144 145 let Inst{25-22} = major; 146 let Inst{21} = df; 147 let Inst{20-16} = wt; 148 let Inst{15-11} = ws; 149 let Inst{10-6} = wd; 150 let Inst{5-0} = minor; 151} 152 153class MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst { 154 bits<5> rt; 155 bits<5> ws; 156 bits<5> wd; 157 158 let Inst{25-23} = major; 159 let Inst{22-21} = df; 160 let Inst{20-16} = rt; 161 let Inst{15-11} = ws; 162 let Inst{10-6} = wd; 163 let Inst{5-0} = minor; 164} 165 166class MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst { 167 bits<5> ws; 168 bits<5> wd; 169 170 let Inst{25-16} = major; 171 let Inst{15-11} = ws; 172 let Inst{10-6} = wd; 173 let Inst{5-0} = minor; 174} 175 176class MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst { 177 bits<5> rd; 178 bits<5> cs; 179 180 let Inst{25-16} = major; 181 let Inst{15-11} = cs; 182 let Inst{10-6} = rd; 183 let Inst{5-0} = minor; 184} 185 186class MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst { 187 bits<5> rs; 188 bits<5> cd; 189 190 let Inst{25-16} = major; 191 let Inst{15-11} = rs; 192 let Inst{10-6} = cd; 193 let Inst{5-0} = minor; 194} 195 196class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst { 197 bits<4> n; 198 bits<5> ws; 199 bits<5> wd; 200 201 let Inst{25-22} = major; 202 let Inst{21-20} = 0b00; 203 let Inst{19-16} = n{3-0}; 204 let Inst{15-11} = ws; 205 let Inst{10-6} = wd; 206 let Inst{5-0} = minor; 207} 208 209class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst { 210 bits<4> n; 211 bits<5> ws; 212 bits<5> wd; 213 214 let Inst{25-22} = major; 215 let Inst{21-19} = 0b100; 216 let Inst{18-16} = n{2-0}; 217 let Inst{15-11} = ws; 218 let Inst{10-6} = wd; 219 let Inst{5-0} = minor; 220} 221 222class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst { 223 bits<4> n; 224 bits<5> ws; 225 bits<5> wd; 226 227 let Inst{25-22} = major; 228 let Inst{21-18} = 0b1100; 229 let Inst{17-16} = n{1-0}; 230 let Inst{15-11} = ws; 231 let Inst{10-6} = wd; 232 let Inst{5-0} = minor; 233} 234 235class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst { 236 bits<4> n; 237 bits<5> ws; 238 bits<5> wd; 239 240 let Inst{25-22} = major; 241 let Inst{21-17} = 0b11100; 242 let Inst{16} = n{0}; 243 let Inst{15-11} = ws; 244 let Inst{10-6} = wd; 245 let Inst{5-0} = minor; 246} 247 248class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst { 249 bits<4> n; 250 bits<5> ws; 251 bits<5> rd; 252 253 let Inst{25-22} = major; 254 let Inst{21-20} = 0b00; 255 let Inst{19-16} = n{3-0}; 256 let Inst{15-11} = ws; 257 let Inst{10-6} = rd; 258 let Inst{5-0} = minor; 259} 260 261class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst { 262 bits<4> n; 263 bits<5> ws; 264 bits<5> rd; 265 266 let Inst{25-22} = major; 267 let Inst{21-19} = 0b100; 268 let Inst{18-16} = n{2-0}; 269 let Inst{15-11} = ws; 270 let Inst{10-6} = rd; 271 let Inst{5-0} = minor; 272} 273 274class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst { 275 bits<4> n; 276 bits<5> ws; 277 bits<5> rd; 278 279 let Inst{25-22} = major; 280 let Inst{21-18} = 0b1100; 281 let Inst{17-16} = n{1-0}; 282 let Inst{15-11} = ws; 283 let Inst{10-6} = rd; 284 let Inst{5-0} = minor; 285} 286 287class MSA_ELM_COPY_D_FMT<bits<4> major, bits<6> minor>: MSAInst { 288 bits<4> n; 289 bits<5> ws; 290 bits<5> rd; 291 292 let Inst{25-22} = major; 293 let Inst{21-17} = 0b11100; 294 let Inst{16} = n{0}; 295 let Inst{15-11} = ws; 296 let Inst{10-6} = rd; 297 let Inst{5-0} = minor; 298} 299 300class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst { 301 bits<6> n; 302 bits<5> rs; 303 bits<5> wd; 304 305 let Inst{25-22} = major; 306 let Inst{21-20} = 0b00; 307 let Inst{19-16} = n{3-0}; 308 let Inst{15-11} = rs; 309 let Inst{10-6} = wd; 310 let Inst{5-0} = minor; 311} 312 313class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst { 314 bits<6> n; 315 bits<5> rs; 316 bits<5> wd; 317 318 let Inst{25-22} = major; 319 let Inst{21-19} = 0b100; 320 let Inst{18-16} = n{2-0}; 321 let Inst{15-11} = rs; 322 let Inst{10-6} = wd; 323 let Inst{5-0} = minor; 324} 325 326class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst { 327 bits<6> n; 328 bits<5> rs; 329 bits<5> wd; 330 331 let Inst{25-22} = major; 332 let Inst{21-18} = 0b1100; 333 let Inst{17-16} = n{1-0}; 334 let Inst{15-11} = rs; 335 let Inst{10-6} = wd; 336 let Inst{5-0} = minor; 337} 338 339class MSA_ELM_INSERT_D_FMT<bits<4> major, bits<6> minor>: MSAInst { 340 bits<6> n; 341 bits<5> rs; 342 bits<5> wd; 343 344 let Inst{25-22} = major; 345 let Inst{21-17} = 0b11100; 346 let Inst{16} = n{0}; 347 let Inst{15-11} = rs; 348 let Inst{10-6} = wd; 349 let Inst{5-0} = minor; 350} 351 352class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst { 353 bits<5> imm; 354 bits<5> ws; 355 bits<5> wd; 356 357 let Inst{25-23} = major; 358 let Inst{22-21} = df; 359 let Inst{20-16} = imm; 360 let Inst{15-11} = ws; 361 let Inst{10-6} = wd; 362 let Inst{5-0} = minor; 363} 364 365class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst { 366 bits<8> u8; 367 bits<5> ws; 368 bits<5> wd; 369 370 let Inst{25-24} = major; 371 let Inst{23-16} = u8; 372 let Inst{15-11} = ws; 373 let Inst{10-6} = wd; 374 let Inst{5-0} = minor; 375} 376 377class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst { 378 bits<10> s10; 379 bits<5> wd; 380 381 let Inst{25-23} = major; 382 let Inst{22-21} = df; 383 let Inst{20-11} = s10; 384 let Inst{10-6} = wd; 385 let Inst{5-0} = minor; 386} 387 388class MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst { 389 bits<21> addr; 390 bits<5> wd; 391 392 let Inst{25-16} = addr{9-0}; 393 let Inst{15-11} = addr{20-16}; 394 let Inst{10-6} = wd; 395 let Inst{5-2} = minor; 396 let Inst{1-0} = df; 397} 398 399class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst { 400 bits<5> wt; 401 bits<5> ws; 402 bits<5> wd; 403 404 let Inst{25-21} = major; 405 let Inst{20-16} = wt; 406 let Inst{15-11} = ws; 407 let Inst{10-6} = wd; 408 let Inst{5-0} = minor; 409} 410 411class MSA_CBRANCH_FMT<bits<3> major, bits<2> df>: MSACBranch { 412 bits<16> offset; 413 bits<5> wt; 414 415 let Inst{25-23} = major; 416 let Inst{22-21} = df; 417 let Inst{20-16} = wt; 418 let Inst{15-0} = offset; 419} 420 421class MSA_CBRANCH_V_FMT<bits<5> major>: MSACBranch { 422 bits<16> offset; 423 bits<5> wt; 424 425 let Inst{25-21} = major; 426 let Inst{20-16} = wt; 427 let Inst{15-0} = offset; 428} 429 430class SPECIAL_LSA_FMT<bits<6> minor>: MSASpecial { 431 bits<5> rs; 432 bits<5> rt; 433 bits<5> rd; 434 bits<2> sa; 435 436 let Inst{25-21} = rs; 437 let Inst{20-16} = rt; 438 let Inst{15-11} = rd; 439 let Inst{10-8} = 0b000; 440 let Inst{7-6} = sa; 441 let Inst{5-0} = minor; 442} 443 444class SPECIAL_DLSA_FMT<bits<6> minor>: MSASpecial { 445 bits<5> rs; 446 bits<5> rt; 447 bits<5> rd; 448 bits<2> sa; 449 450 let Inst{25-21} = rs; 451 let Inst{20-16} = rt; 452 let Inst{15-11} = rd; 453 let Inst{10-8} = 0b000; 454 let Inst{7-6} = sa; 455 let Inst{5-0} = minor; 456} 457