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