Home | History | Annotate | Download | only in Mips
      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 
     10 class MSAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>,
     11                 ASE_MSA {
     12   let EncodingPredicates = [HasStdEnc];
     13   let Inst{31-26} = 0b011110;
     14 }
     15 
     16 class MSACBranch : MSAInst {
     17   let Inst{31-26} = 0b010001;
     18 }
     19 
     20 class MSASpecial : MSAInst {
     21   let Inst{31-26} = 0b000000;
     22 }
     23 
     24 class 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 
     31 class 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 
     44 class 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 
     57 class 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 
     70 class 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 
     83 class 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 
     94 class 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 
    105 class 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 
    116 class 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 
    127 class 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 
    140 class 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 
    153 class 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 
    166 class 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 
    176 class 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 
    186 class 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 
    196 class 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 
    209 class 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 
    222 class 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 
    235 class 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 
    248 class 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 
    261 class 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 
    274 class 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 
    287 class 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 
    300 class 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 
    313 class 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 
    326 class 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 
    339 class 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 
    352 class 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 
    365 class 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 
    377 class 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 
    388 class 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 
    399 class 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 
    411 class 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 
    421 class 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 
    430 class 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 
    444 class 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