1//===----------------------------------------------------------------------===// 2// MicroMIPS Base Classes 3//===----------------------------------------------------------------------===// 4 5// 6// Base class for MicroMips instructions. 7// This class does not depend on the instruction size. 8// 9class MicroMipsInstBase<dag outs, dag ins, string asmstr, list<dag> pattern, 10 InstrItinClass itin, Format f> : Instruction 11{ 12 let Namespace = "Mips"; 13 let DecoderNamespace = "MicroMips"; 14 15 let OutOperandList = outs; 16 let InOperandList = ins; 17 18 let AsmString = asmstr; 19 let Pattern = pattern; 20 let Itinerary = itin; 21 22 let Predicates = [InMicroMips]; 23 24 Format Form = f; 25} 26 27// 28// Base class for MicroMIPS 16-bit instructions. 29// 30class MicroMipsInst16<dag outs, dag ins, string asmstr, list<dag> pattern, 31 InstrItinClass itin, Format f> : 32 MicroMipsInstBase<outs, ins, asmstr, pattern, itin, f> 33{ 34 let Size = 2; 35 field bits<16> Inst; 36 field bits<16> SoftFail = 0; 37 bits<6> Opcode = 0x0; 38} 39 40//===----------------------------------------------------------------------===// 41// MicroMIPS 16-bit Instruction Formats 42//===----------------------------------------------------------------------===// 43 44class ARITH_FM_MM16<bit funct> { 45 bits<3> rd; 46 bits<3> rt; 47 bits<3> rs; 48 49 bits<16> Inst; 50 51 let Inst{15-10} = 0x01; 52 let Inst{9-7} = rd; 53 let Inst{6-4} = rt; 54 let Inst{3-1} = rs; 55 let Inst{0} = funct; 56} 57 58class ANDI_FM_MM16<bits<6> funct> { 59 bits<3> rd; 60 bits<3> rs; 61 bits<4> imm; 62 63 bits<16> Inst; 64 65 let Inst{15-10} = funct; 66 let Inst{9-7} = rd; 67 let Inst{6-4} = rs; 68 let Inst{3-0} = imm; 69} 70 71class LOGIC_FM_MM16<bits<4> funct> { 72 bits<3> rt; 73 bits<3> rs; 74 75 bits<16> Inst; 76 77 let Inst{15-10} = 0x11; 78 let Inst{9-6} = funct; 79 let Inst{5-3} = rt; 80 let Inst{2-0} = rs; 81} 82 83class SHIFT_FM_MM16<bits<1> funct> { 84 bits<3> rd; 85 bits<3> rt; 86 bits<3> shamt; 87 88 bits<16> Inst; 89 90 let Inst{15-10} = 0x09; 91 let Inst{9-7} = rd; 92 let Inst{6-4} = rt; 93 let Inst{3-1} = shamt; 94 let Inst{0} = funct; 95} 96 97class ADDIUR2_FM_MM16 { 98 bits<3> rd; 99 bits<3> rs; 100 bits<3> imm; 101 102 bits<16> Inst; 103 104 let Inst{15-10} = 0x1b; 105 let Inst{9-7} = rd; 106 let Inst{6-4} = rs; 107 let Inst{3-1} = imm; 108 let Inst{0} = 0; 109} 110 111class LOAD_STORE_FM_MM16<bits<6> op> { 112 bits<3> rt; 113 bits<7> addr; 114 115 bits<16> Inst; 116 117 let Inst{15-10} = op; 118 let Inst{9-7} = rt; 119 let Inst{6-4} = addr{6-4}; 120 let Inst{3-0} = addr{3-0}; 121} 122 123class LOAD_STORE_SP_FM_MM16<bits<6> op> { 124 bits<5> rt; 125 bits<5> offset; 126 127 bits<16> Inst; 128 129 let Inst{15-10} = op; 130 let Inst{9-5} = rt; 131 let Inst{4-0} = offset; 132} 133 134class ADDIUS5_FM_MM16 { 135 bits<5> rd; 136 bits<4> imm; 137 138 bits<16> Inst; 139 140 let Inst{15-10} = 0x13; 141 let Inst{9-5} = rd; 142 let Inst{4-1} = imm; 143 let Inst{0} = 0; 144} 145 146class ADDIUSP_FM_MM16 { 147 bits<9> imm; 148 149 bits<16> Inst; 150 151 let Inst{15-10} = 0x13; 152 let Inst{9-1} = imm; 153 let Inst{0} = 1; 154} 155 156class MOVE_FM_MM16<bits<6> funct> { 157 bits<5> rs; 158 bits<5> rd; 159 160 bits<16> Inst; 161 162 let Inst{15-10} = funct; 163 let Inst{9-5} = rd; 164 let Inst{4-0} = rs; 165} 166 167class LI_FM_MM16 { 168 bits<3> rd; 169 bits<7> imm; 170 171 bits<16> Inst; 172 173 let Inst{15-10} = 0x3b; 174 let Inst{9-7} = rd; 175 let Inst{6-0} = imm; 176} 177 178class JALR_FM_MM16<bits<5> op> { 179 bits<5> rs; 180 181 bits<16> Inst; 182 183 let Inst{15-10} = 0x11; 184 let Inst{9-5} = op; 185 let Inst{4-0} = rs; 186} 187 188class MFHILO_FM_MM16<bits<5> funct> { 189 bits<5> rd; 190 191 bits<16> Inst; 192 193 let Inst{15-10} = 0x11; 194 let Inst{9-5} = funct; 195 let Inst{4-0} = rd; 196} 197 198class JRADDIUSP_FM_MM16<bits<5> op> { 199 bits<5> rs; 200 bits<5> imm; 201 202 bits<16> Inst; 203 204 let Inst{15-10} = 0x11; 205 let Inst{9-5} = op; 206 let Inst{4-0} = imm; 207} 208 209class ADDIUR1SP_FM_MM16 { 210 bits<3> rd; 211 bits<6> imm; 212 213 bits<16> Inst; 214 215 let Inst{15-10} = 0x1b; 216 let Inst{9-7} = rd; 217 let Inst{6-1} = imm; 218 let Inst{0} = 1; 219} 220 221class BRKSDBBP16_FM_MM<bits<6> op> { 222 bits<4> code_; 223 bits<16> Inst; 224 225 let Inst{15-10} = 0x11; 226 let Inst{9-4} = op; 227 let Inst{3-0} = code_; 228} 229 230class BEQNEZ_FM_MM16<bits<6> op> { 231 bits<3> rs; 232 bits<7> offset; 233 234 bits<16> Inst; 235 236 let Inst{15-10} = op; 237 let Inst{9-7} = rs; 238 let Inst{6-0} = offset; 239} 240 241//===----------------------------------------------------------------------===// 242// MicroMIPS 32-bit Instruction Formats 243//===----------------------------------------------------------------------===// 244 245class MMArch { 246 string Arch = "micromips"; 247 list<dag> Pattern = []; 248} 249 250class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch { 251 bits<5> rt; 252 bits<5> rs; 253 bits<5> rd; 254 255 bits<32> Inst; 256 257 let Inst{31-26} = op; 258 let Inst{25-21} = rt; 259 let Inst{20-16} = rs; 260 let Inst{15-11} = rd; 261 let Inst{10} = 0; 262 let Inst{9-0} = funct; 263} 264 265class ADDI_FM_MM<bits<6> op> : MMArch { 266 bits<5> rs; 267 bits<5> rt; 268 bits<16> imm16; 269 270 bits<32> Inst; 271 272 let Inst{31-26} = op; 273 let Inst{25-21} = rt; 274 let Inst{20-16} = rs; 275 let Inst{15-0} = imm16; 276} 277 278class SLTI_FM_MM<bits<6> op> : MMArch { 279 bits<5> rt; 280 bits<5> rs; 281 bits<16> imm16; 282 283 bits<32> Inst; 284 285 let Inst{31-26} = op; 286 let Inst{25-21} = rt; 287 let Inst{20-16} = rs; 288 let Inst{15-0} = imm16; 289} 290 291class LUI_FM_MM : MMArch { 292 bits<5> rt; 293 bits<16> imm16; 294 295 bits<32> Inst; 296 297 let Inst{31-26} = 0x10; 298 let Inst{25-21} = 0xd; 299 let Inst{20-16} = rt; 300 let Inst{15-0} = imm16; 301} 302 303class MULT_FM_MM<bits<10> funct> : MMArch { 304 bits<5> rs; 305 bits<5> rt; 306 307 bits<32> Inst; 308 309 let Inst{31-26} = 0x00; 310 let Inst{25-21} = rt; 311 let Inst{20-16} = rs; 312 let Inst{15-6} = funct; 313 let Inst{5-0} = 0x3c; 314} 315 316class SRA_FM_MM<bits<10> funct, bit rotate> : MMArch { 317 bits<5> rd; 318 bits<5> rt; 319 bits<5> shamt; 320 321 bits<32> Inst; 322 323 let Inst{31-26} = 0; 324 let Inst{25-21} = rd; 325 let Inst{20-16} = rt; 326 let Inst{15-11} = shamt; 327 let Inst{10} = rotate; 328 let Inst{9-0} = funct; 329} 330 331class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch { 332 bits<5> rd; 333 bits<5> rt; 334 bits<5> rs; 335 336 bits<32> Inst; 337 338 let Inst{31-26} = 0; 339 let Inst{25-21} = rt; 340 let Inst{20-16} = rs; 341 let Inst{15-11} = rd; 342 let Inst{10} = rotate; 343 let Inst{9-0} = funct; 344} 345 346class LW_FM_MM<bits<6> op> : MMArch { 347 bits<5> rt; 348 bits<21> addr; 349 350 bits<32> Inst; 351 352 let Inst{31-26} = op; 353 let Inst{25-21} = rt; 354 let Inst{20-16} = addr{20-16}; 355 let Inst{15-0} = addr{15-0}; 356} 357 358class LWL_FM_MM<bits<4> funct> { 359 bits<5> rt; 360 bits<21> addr; 361 362 bits<32> Inst; 363 364 let Inst{31-26} = 0x18; 365 let Inst{25-21} = rt; 366 let Inst{20-16} = addr{20-16}; 367 let Inst{15-12} = funct; 368 let Inst{11-0} = addr{11-0}; 369} 370 371class CMov_F_I_FM_MM<bits<7> func> : MMArch { 372 bits<5> rd; 373 bits<5> rs; 374 bits<3> fcc; 375 376 bits<32> Inst; 377 378 let Inst{31-26} = 0x15; 379 let Inst{25-21} = rd; 380 let Inst{20-16} = rs; 381 let Inst{15-13} = fcc; 382 let Inst{12-6} = func; 383 let Inst{5-0} = 0x3b; 384} 385 386class MTLO_FM_MM<bits<10> funct> : MMArch { 387 bits<5> rs; 388 389 bits<32> Inst; 390 391 let Inst{31-26} = 0x00; 392 let Inst{25-21} = 0x00; 393 let Inst{20-16} = rs; 394 let Inst{15-6} = funct; 395 let Inst{5-0} = 0x3c; 396} 397 398class MFLO_FM_MM<bits<10> funct> : MMArch { 399 bits<5> rd; 400 401 bits<32> Inst; 402 403 let Inst{31-26} = 0x00; 404 let Inst{25-21} = 0x00; 405 let Inst{20-16} = rd; 406 let Inst{15-6} = funct; 407 let Inst{5-0} = 0x3c; 408} 409 410class CLO_FM_MM<bits<10> funct> : MMArch { 411 bits<5> rd; 412 bits<5> rs; 413 414 bits<32> Inst; 415 416 let Inst{31-26} = 0x00; 417 let Inst{25-21} = rd; 418 let Inst{20-16} = rs; 419 let Inst{15-6} = funct; 420 let Inst{5-0} = 0x3c; 421} 422 423class SEB_FM_MM<bits<10> funct> : MMArch { 424 bits<5> rd; 425 bits<5> rt; 426 427 bits<32> Inst; 428 429 let Inst{31-26} = 0x00; 430 let Inst{25-21} = rd; 431 let Inst{20-16} = rt; 432 let Inst{15-6} = funct; 433 let Inst{5-0} = 0x3c; 434} 435 436class EXT_FM_MM<bits<6> funct> : MMArch { 437 bits<5> rt; 438 bits<5> rs; 439 bits<5> pos; 440 bits<5> size; 441 442 bits<32> Inst; 443 444 let Inst{31-26} = 0x00; 445 let Inst{25-21} = rt; 446 let Inst{20-16} = rs; 447 let Inst{15-11} = size; 448 let Inst{10-6} = pos; 449 let Inst{5-0} = funct; 450} 451 452class J_FM_MM<bits<6> op> : MMArch { 453 bits<26> target; 454 455 bits<32> Inst; 456 457 let Inst{31-26} = op; 458 let Inst{25-0} = target; 459} 460 461class JR_FM_MM<bits<8> funct> : MMArch { 462 bits<5> rs; 463 464 bits<32> Inst; 465 466 let Inst{31-21} = 0x00; 467 let Inst{20-16} = rs; 468 let Inst{15-14} = 0x0; 469 let Inst{13-6} = funct; 470 let Inst{5-0} = 0x3c; 471} 472 473class JALR_FM_MM<bits<10> funct> { 474 bits<5> rs; 475 bits<5> rd; 476 477 bits<32> Inst; 478 479 let Inst{31-26} = 0x00; 480 let Inst{25-21} = rd; 481 let Inst{20-16} = rs; 482 let Inst{15-6} = funct; 483 let Inst{5-0} = 0x3c; 484} 485 486class BEQ_FM_MM<bits<6> op> : MMArch { 487 bits<5> rs; 488 bits<5> rt; 489 bits<16> offset; 490 491 bits<32> Inst; 492 493 let Inst{31-26} = op; 494 let Inst{25-21} = rt; 495 let Inst{20-16} = rs; 496 let Inst{15-0} = offset; 497} 498 499class BGEZ_FM_MM<bits<5> funct> : MMArch { 500 bits<5> rs; 501 bits<16> offset; 502 503 bits<32> Inst; 504 505 let Inst{31-26} = 0x10; 506 let Inst{25-21} = funct; 507 let Inst{20-16} = rs; 508 let Inst{15-0} = offset; 509} 510 511class BGEZAL_FM_MM<bits<5> funct> : MMArch { 512 bits<5> rs; 513 bits<16> offset; 514 515 bits<32> Inst; 516 517 let Inst{31-26} = 0x10; 518 let Inst{25-21} = funct; 519 let Inst{20-16} = rs; 520 let Inst{15-0} = offset; 521} 522 523class SYNC_FM_MM : MMArch { 524 bits<5> stype; 525 526 bits<32> Inst; 527 528 let Inst{31-26} = 0x00; 529 let Inst{25-21} = 0x0; 530 let Inst{20-16} = stype; 531 let Inst{15-6} = 0x1ad; 532 let Inst{5-0} = 0x3c; 533} 534 535class BRK_FM_MM : MMArch { 536 bits<10> code_1; 537 bits<10> code_2; 538 bits<32> Inst; 539 let Inst{31-26} = 0x0; 540 let Inst{25-16} = code_1; 541 let Inst{15-6} = code_2; 542 let Inst{5-0} = 0x07; 543} 544 545class SYS_FM_MM : MMArch { 546 bits<10> code_; 547 bits<32> Inst; 548 let Inst{31-26} = 0x0; 549 let Inst{25-16} = code_; 550 let Inst{15-6} = 0x22d; 551 let Inst{5-0} = 0x3c; 552} 553 554class WAIT_FM_MM { 555 bits<10> code_; 556 bits<32> Inst; 557 558 let Inst{31-26} = 0x00; 559 let Inst{25-16} = code_; 560 let Inst{15-6} = 0x24d; 561 let Inst{5-0} = 0x3c; 562} 563 564class ER_FM_MM<bits<10> funct> : MMArch { 565 bits<32> Inst; 566 567 let Inst{31-26} = 0x00; 568 let Inst{25-16} = 0x00; 569 let Inst{15-6} = funct; 570 let Inst{5-0} = 0x3c; 571} 572 573class EI_FM_MM<bits<10> funct> : MMArch { 574 bits<32> Inst; 575 bits<5> rt; 576 577 let Inst{31-26} = 0x00; 578 let Inst{25-21} = 0x00; 579 let Inst{20-16} = rt; 580 let Inst{15-6} = funct; 581 let Inst{5-0} = 0x3c; 582} 583 584class TEQ_FM_MM<bits<6> funct> : MMArch { 585 bits<5> rs; 586 bits<5> rt; 587 bits<4> code_; 588 589 bits<32> Inst; 590 591 let Inst{31-26} = 0x00; 592 let Inst{25-21} = rt; 593 let Inst{20-16} = rs; 594 let Inst{15-12} = code_; 595 let Inst{11-6} = funct; 596 let Inst{5-0} = 0x3c; 597} 598 599class TEQI_FM_MM<bits<5> funct> : MMArch { 600 bits<5> rs; 601 bits<16> imm16; 602 603 bits<32> Inst; 604 605 let Inst{31-26} = 0x10; 606 let Inst{25-21} = funct; 607 let Inst{20-16} = rs; 608 let Inst{15-0} = imm16; 609} 610 611class LL_FM_MM<bits<4> funct> { 612 bits<5> rt; 613 bits<21> addr; 614 615 bits<32> Inst; 616 617 let Inst{31-26} = 0x18; 618 let Inst{25-21} = rt; 619 let Inst{20-16} = addr{20-16}; 620 let Inst{15-12} = funct; 621 let Inst{11-0} = addr{11-0}; 622} 623 624class ADDS_FM_MM<bits<2> fmt, bits<8> funct> : MMArch { 625 bits<5> ft; 626 bits<5> fs; 627 bits<5> fd; 628 629 bits<32> Inst; 630 631 let Inst{31-26} = 0x15; 632 let Inst{25-21} = ft; 633 let Inst{20-16} = fs; 634 let Inst{15-11} = fd; 635 let Inst{10} = 0; 636 let Inst{9-8} = fmt; 637 let Inst{7-0} = funct; 638 639 list<dag> Pattern = []; 640} 641 642class LWXC1_FM_MM<bits<9> funct> : MMArch { 643 bits<5> fd; 644 bits<5> base; 645 bits<5> index; 646 647 bits<32> Inst; 648 649 let Inst{31-26} = 0x15; 650 let Inst{25-21} = index; 651 let Inst{20-16} = base; 652 let Inst{15-11} = fd; 653 let Inst{10-9} = 0x0; 654 let Inst{8-0} = funct; 655} 656 657class SWXC1_FM_MM<bits<9> funct> : MMArch { 658 bits<5> fs; 659 bits<5> base; 660 bits<5> index; 661 662 bits<32> Inst; 663 664 let Inst{31-26} = 0x15; 665 let Inst{25-21} = index; 666 let Inst{20-16} = base; 667 let Inst{15-11} = fs; 668 let Inst{10-9} = 0x0; 669 let Inst{8-0} = funct; 670} 671 672class CEQS_FM_MM<bits<2> fmt> : MMArch { 673 bits<5> fs; 674 bits<5> ft; 675 bits<4> cond; 676 677 bits<32> Inst; 678 679 let Inst{31-26} = 0x15; 680 let Inst{25-21} = ft; 681 let Inst{20-16} = fs; 682 let Inst{15-13} = 0x0; // cc 683 let Inst{12} = 0; 684 let Inst{11-10} = fmt; 685 let Inst{9-6} = cond; 686 let Inst{5-0} = 0x3c; 687} 688 689class BC1F_FM_MM<bits<5> tf> : MMArch { 690 bits<16> offset; 691 692 bits<32> Inst; 693 694 let Inst{31-26} = 0x10; 695 let Inst{25-21} = tf; 696 let Inst{20-18} = 0x0; // cc 697 let Inst{17-16} = 0x0; 698 let Inst{15-0} = offset; 699} 700 701class ROUND_W_FM_MM<bits<1> fmt, bits<8> funct> : MMArch { 702 bits<5> fd; 703 bits<5> fs; 704 705 bits<32> Inst; 706 707 let Inst{31-26} = 0x15; 708 let Inst{25-21} = fd; 709 let Inst{20-16} = fs; 710 let Inst{15} = 0; 711 let Inst{14} = fmt; 712 let Inst{13-6} = funct; 713 let Inst{5-0} = 0x3b; 714} 715 716class ABS_FM_MM<bits<2> fmt, bits<7> funct> : MMArch { 717 bits<5> fd; 718 bits<5> fs; 719 720 bits<32> Inst; 721 722 let Inst{31-26} = 0x15; 723 let Inst{25-21} = fd; 724 let Inst{20-16} = fs; 725 let Inst{15} = 0; 726 let Inst{14-13} = fmt; 727 let Inst{12-6} = funct; 728 let Inst{5-0} = 0x3b; 729} 730 731class CMov_F_F_FM_MM<bits<9> func, bits<2> fmt> : MMArch { 732 bits<5> fd; 733 bits<5> fs; 734 735 bits<32> Inst; 736 737 let Inst{31-26} = 0x15; 738 let Inst{25-21} = fd; 739 let Inst{20-16} = fs; 740 let Inst{15-13} = 0x0; //cc 741 let Inst{12-11} = 0x0; 742 let Inst{10-9} = fmt; 743 let Inst{8-0} = func; 744} 745 746class CMov_I_F_FM_MM<bits<8> funct, bits<2> fmt> : MMArch { 747 bits<5> fd; 748 bits<5> fs; 749 bits<5> rt; 750 751 bits<32> Inst; 752 753 let Inst{31-26} = 0x15; 754 let Inst{25-21} = rt; 755 let Inst{20-16} = fs; 756 let Inst{15-11} = fd; 757 let Inst{9-8} = fmt; 758 let Inst{7-0} = funct; 759} 760 761class MFC1_FM_MM<bits<8> funct> : MMArch { 762 bits<5> rt; 763 bits<5> fs; 764 765 bits<32> Inst; 766 767 let Inst{31-26} = 0x15; 768 let Inst{25-21} = rt; 769 let Inst{20-16} = fs; 770 let Inst{15-14} = 0x0; 771 let Inst{13-6} = funct; 772 let Inst{5-0} = 0x3b; 773} 774 775class MADDS_FM_MM<bits<6> funct>: MMArch { 776 bits<5> ft; 777 bits<5> fs; 778 bits<5> fd; 779 bits<5> fr; 780 781 bits<32> Inst; 782 783 let Inst{31-26} = 0x15; 784 let Inst{25-21} = ft; 785 let Inst{20-16} = fs; 786 let Inst{15-11} = fd; 787 let Inst{10-6} = fr; 788 let Inst{5-0} = funct; 789} 790 791class COMPACT_BRANCH_FM_MM<bits<5> funct> { 792 bits<5> rs; 793 bits<16> offset; 794 795 bits<32> Inst; 796 797 let Inst{31-26} = 0x10; 798 let Inst{25-21} = funct; 799 let Inst{20-16} = rs; 800 let Inst{15-0} = offset; 801} 802 803class COP0_TLB_FM_MM<bits<10> op> : MMArch { 804 bits<32> Inst; 805 806 let Inst{31-26} = 0x0; 807 let Inst{25-16} = 0x0; 808 let Inst{15-6} = op; 809 let Inst{5-0} = 0x3c; 810} 811 812class SDBBP_FM_MM : MMArch { 813 bits<10> code_; 814 815 bits<32> Inst; 816 817 let Inst{31-26} = 0x0; 818 let Inst{25-16} = code_; 819 let Inst{15-6} = 0x36d; 820 let Inst{5-0} = 0x3c; 821} 822 823class RDHWR_FM_MM : MMArch { 824 bits<5> rt; 825 bits<5> rd; 826 827 bits<32> Inst; 828 829 let Inst{31-26} = 0x0; 830 let Inst{25-21} = rt; 831 let Inst{20-16} = rd; 832 let Inst{15-6} = 0x1ac; 833 let Inst{5-0} = 0x3c; 834} 835 836class LWXS_FM_MM<bits<10> funct> { 837 bits<5> rd; 838 bits<5> base; 839 bits<5> index; 840 841 bits<32> Inst; 842 843 let Inst{31-26} = 0x0; 844 let Inst{25-21} = index; 845 let Inst{20-16} = base; 846 let Inst{15-11} = rd; 847 let Inst{10} = 0; 848 let Inst{9-0} = funct; 849} 850 851class LWM_FM_MM<bits<4> funct> : MMArch { 852 bits<5> rt; 853 bits<21> addr; 854 855 bits<32> Inst; 856 857 let Inst{31-26} = 0x8; 858 let Inst{25-21} = rt; 859 let Inst{20-16} = addr{20-16}; 860 let Inst{15-12} = funct; 861 let Inst{11-0} = addr{11-0}; 862} 863 864class LWM_FM_MM16<bits<4> funct> : MMArch { 865 bits<2> rt; 866 bits<4> addr; 867 868 bits<16> Inst; 869 870 let Inst{15-10} = 0x11; 871 let Inst{9-6} = funct; 872 let Inst{5-4} = rt; 873 let Inst{3-0} = addr; 874} 875 876class CACHE_PREF_FM_MM<bits<6> op, bits<4> funct> : MMArch { 877 bits<21> addr; 878 bits<5> hint; 879 bits<5> base = addr{20-16}; 880 bits<12> offset = addr{11-0}; 881 882 bits<32> Inst; 883 884 let Inst{31-26} = op; 885 let Inst{25-21} = hint; 886 let Inst{20-16} = base; 887 let Inst{15-12} = funct; 888 let Inst{11-0} = offset; 889} 890 891class BARRIER_FM_MM<bits<5> op> : MMArch { 892 bits<32> Inst; 893 894 let Inst{31-26} = 0x0; 895 let Inst{25-21} = 0x0; 896 let Inst{20-16} = 0x0; 897 let Inst{15-11} = op; 898 let Inst{10-6} = 0x0; 899 let Inst{5-0} = 0x0; 900} 901