Home | History | Annotate | Download | only in Hexagon
      1 class Enc_COPROC_VX_3op_v<bits<15> opc> : OpcodeHexagon {
      2   bits<5> dst;
      3   bits<5> src1;
      4   bits<5> src2;
      5 
      6   let Inst{31-16} = { opc{14-4}, src2};
      7   let Inst{13-0} = { opc{3}, src1, opc{2-0}, dst};
      8 }
      9 
     10 class V6_vtmpyb_enc : Enc_COPROC_VX_3op_v<0b000110010000000>;
     11 class V6_vtmpybus_enc : Enc_COPROC_VX_3op_v<0b000110010000001>;
     12 class V6_vdmpyhb_enc : Enc_COPROC_VX_3op_v<0b000110010000010>;
     13 class V6_vrmpyub_enc : Enc_COPROC_VX_3op_v<0b000110010000011>;
     14 class V6_vrmpybus_enc : Enc_COPROC_VX_3op_v<0b000110010000100>;
     15 class V6_vdsaduh_enc : Enc_COPROC_VX_3op_v<0b000110010000101>;
     16 class V6_vdmpybus_enc : Enc_COPROC_VX_3op_v<0b000110010000110>;
     17 class V6_vdmpybus_dv_enc : Enc_COPROC_VX_3op_v<0b000110010000111>;
     18 class V6_vtmpyb_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001000>;
     19 class V6_vtmpybus_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001001>;
     20 class V6_vtmpyhb_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001010>;
     21 class V6_vdmpyhb_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001011>;
     22 class V6_vrmpyub_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001100>;
     23 class V6_vrmpybus_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001101>;
     24 class V6_vdmpybus_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001110>;
     25 class V6_vdmpybus_dv_acc_enc : Enc_COPROC_VX_3op_v<0b000110010001111>;
     26 class V6_vdmpyhsusat_enc : Enc_COPROC_VX_3op_v<0b000110010010000>;
     27 class V6_vdmpyhsuisat_enc : Enc_COPROC_VX_3op_v<0b000110010010001>;
     28 class V6_vdmpyhsat_enc : Enc_COPROC_VX_3op_v<0b000110010010010>;
     29 class V6_vdmpyhisat_enc : Enc_COPROC_VX_3op_v<0b000110010010011>;
     30 class V6_vdmpyhb_dv_enc : Enc_COPROC_VX_3op_v<0b000110010010100>;
     31 class V6_vmpybus_enc : Enc_COPROC_VX_3op_v<0b000110010010101>;
     32 class V6_vmpabus_enc : Enc_COPROC_VX_3op_v<0b000110010010110>;
     33 class V6_vmpahb_enc : Enc_COPROC_VX_3op_v<0b000110010010111>;
     34 class V6_vdmpyhsusat_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011000>;
     35 class V6_vdmpyhsuisat_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011001>;
     36 class V6_vdmpyhisat_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011010>;
     37 class V6_vdmpyhsat_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011011>;
     38 class V6_vdmpyhb_dv_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011100>;
     39 class V6_vmpybus_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011101>;
     40 class V6_vmpabus_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011110>;
     41 class V6_vmpahb_acc_enc : Enc_COPROC_VX_3op_v<0b000110010011111>;
     42 class V6_vmpyh_enc : Enc_COPROC_VX_3op_v<0b000110010100000>;
     43 class V6_vmpyhss_enc : Enc_COPROC_VX_3op_v<0b000110010100001>;
     44 class V6_vmpyhsrs_enc : Enc_COPROC_VX_3op_v<0b000110010100010>;
     45 class V6_vmpyuh_enc : Enc_COPROC_VX_3op_v<0b000110010100011>;
     46 class V6_vmpyhsat_acc_enc : Enc_COPROC_VX_3op_v<0b000110010101000>;
     47 class V6_vmpyuh_acc_enc : Enc_COPROC_VX_3op_v<0b000110010101001>;
     48 class V6_vmpyiwb_acc_enc : Enc_COPROC_VX_3op_v<0b000110010101010>;
     49 class V6_vmpyiwh_acc_enc : Enc_COPROC_VX_3op_v<0b000110010101011>;
     50 class V6_vmpyihb_enc : Enc_COPROC_VX_3op_v<0b000110010110000>;
     51 class V6_vror_enc : Enc_COPROC_VX_3op_v<0b000110010110001>;
     52 class V6_vasrw_enc : Enc_COPROC_VX_3op_v<0b000110010110101>;
     53 class V6_vasrh_enc : Enc_COPROC_VX_3op_v<0b000110010110110>;
     54 class V6_vaslw_enc : Enc_COPROC_VX_3op_v<0b000110010110111>;
     55 class V6_vdsaduh_acc_enc : Enc_COPROC_VX_3op_v<0b000110010111000>;
     56 class V6_vmpyihb_acc_enc : Enc_COPROC_VX_3op_v<0b000110010111001>;
     57 class V6_vaslw_acc_enc : Enc_COPROC_VX_3op_v<0b000110010111010>;
     58 class V6_vasrw_acc_enc : Enc_COPROC_VX_3op_v<0b000110010111101>;
     59 class V6_vaslh_enc : Enc_COPROC_VX_3op_v<0b000110011000000>;
     60 class V6_vlsrw_enc : Enc_COPROC_VX_3op_v<0b000110011000001>;
     61 class V6_vlsrh_enc : Enc_COPROC_VX_3op_v<0b000110011000010>;
     62 class V6_vmpyiwh_enc : Enc_COPROC_VX_3op_v<0b000110011000111>;
     63 class V6_vmpyub_acc_enc : Enc_COPROC_VX_3op_v<0b000110011001000>;
     64 class V6_vmpyiwb_enc : Enc_COPROC_VX_3op_v<0b000110011010000>;
     65 class V6_vtmpyhb_enc : Enc_COPROC_VX_3op_v<0b000110011010100>;
     66 class V6_vmpyub_enc : Enc_COPROC_VX_3op_v<0b000110011100000>;
     67 class V6_vrmpyubv_enc : Enc_COPROC_VX_3op_v<0b000111000000000>;
     68 class V6_vrmpybv_enc : Enc_COPROC_VX_3op_v<0b000111000000001>;
     69 class V6_vrmpybusv_enc : Enc_COPROC_VX_3op_v<0b000111000000010>;
     70 class V6_vdmpyhvsat_enc : Enc_COPROC_VX_3op_v<0b000111000000011>;
     71 class V6_vmpybv_enc : Enc_COPROC_VX_3op_v<0b000111000000100>;
     72 class V6_vmpyubv_enc : Enc_COPROC_VX_3op_v<0b000111000000101>;
     73 class V6_vmpybusv_enc : Enc_COPROC_VX_3op_v<0b000111000000110>;
     74 class V6_vmpyhv_enc : Enc_COPROC_VX_3op_v<0b000111000000111>;
     75 class V6_vrmpyubv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001000>;
     76 class V6_vrmpybv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001001>;
     77 class V6_vrmpybusv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001010>;
     78 class V6_vdmpyhvsat_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001011>;
     79 class V6_vmpybv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001100>;
     80 class V6_vmpyubv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001101>;
     81 class V6_vmpybusv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001110>;
     82 class V6_vmpyhv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000001111>;
     83 class V6_vmpyuhv_enc : Enc_COPROC_VX_3op_v<0b000111000010000>;
     84 class V6_vmpyhvsrs_enc : Enc_COPROC_VX_3op_v<0b000111000010001>;
     85 class V6_vmpyhus_enc : Enc_COPROC_VX_3op_v<0b000111000010010>;
     86 class V6_vmpabusv_enc : Enc_COPROC_VX_3op_v<0b000111000010011>;
     87 class V6_vmpyih_enc : Enc_COPROC_VX_3op_v<0b000111000010100>;
     88 class V6_vand_enc : Enc_COPROC_VX_3op_v<0b000111000010101>;
     89 class V6_vor_enc : Enc_COPROC_VX_3op_v<0b000111000010110>;
     90 class V6_vxor_enc : Enc_COPROC_VX_3op_v<0b000111000010111>;
     91 class V6_vmpyuhv_acc_enc : Enc_COPROC_VX_3op_v<0b000111000011000>;
     92 class V6_vmpyhus_acc_enc : Enc_COPROC_VX_3op_v<0b000111000011001>;
     93 class V6_vmpyih_acc_enc : Enc_COPROC_VX_3op_v<0b000111000011100>;
     94 class V6_vmpyiewuh_acc_enc : Enc_COPROC_VX_3op_v<0b000111000011101>;
     95 class V6_vmpyowh_sacc_enc : Enc_COPROC_VX_3op_v<0b000111000011110>;
     96 class V6_vmpyowh_rnd_sacc_enc : Enc_COPROC_VX_3op_v<0b000111000011111>;
     97 class V6_vaddw_enc : Enc_COPROC_VX_3op_v<0b000111000100000>;
     98 class V6_vaddubsat_enc : Enc_COPROC_VX_3op_v<0b000111000100001>;
     99 class V6_vadduhsat_enc : Enc_COPROC_VX_3op_v<0b000111000100010>;
    100 class V6_vaddhsat_enc : Enc_COPROC_VX_3op_v<0b000111000100011>;
    101 class V6_vaddwsat_enc : Enc_COPROC_VX_3op_v<0b000111000100100>;
    102 class V6_vsubb_enc : Enc_COPROC_VX_3op_v<0b000111000100101>;
    103 class V6_vsubh_enc : Enc_COPROC_VX_3op_v<0b000111000100110>;
    104 class V6_vsubw_enc : Enc_COPROC_VX_3op_v<0b000111000100111>;
    105 class V6_vmpyiewh_acc_enc : Enc_COPROC_VX_3op_v<0b000111000101000>;
    106 class V6_vsububsat_enc : Enc_COPROC_VX_3op_v<0b000111000110000>;
    107 class V6_vsubuhsat_enc : Enc_COPROC_VX_3op_v<0b000111000110001>;
    108 class V6_vsubhsat_enc : Enc_COPROC_VX_3op_v<0b000111000110010>;
    109 class V6_vsubwsat_enc : Enc_COPROC_VX_3op_v<0b000111000110011>;
    110 class V6_vaddb_dv_enc : Enc_COPROC_VX_3op_v<0b000111000110100>;
    111 class V6_vaddh_dv_enc : Enc_COPROC_VX_3op_v<0b000111000110101>;
    112 class V6_vaddw_dv_enc : Enc_COPROC_VX_3op_v<0b000111000110110>;
    113 class V6_vaddubsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111000110111>;
    114 class V6_vadduhsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000000>;
    115 class V6_vaddhsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000001>;
    116 class V6_vaddwsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000010>;
    117 class V6_vsubb_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000011>;
    118 class V6_vsubh_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000100>;
    119 class V6_vsubw_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000101>;
    120 class V6_vsububsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000110>;
    121 class V6_vsubuhsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001000111>;
    122 class V6_vsubhsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001010000>;
    123 class V6_vsubwsat_dv_enc : Enc_COPROC_VX_3op_v<0b000111001010001>;
    124 class V6_vaddubh_enc : Enc_COPROC_VX_3op_v<0b000111001010010>;
    125 class V6_vadduhw_enc : Enc_COPROC_VX_3op_v<0b000111001010011>;
    126 class V6_vaddhw_enc : Enc_COPROC_VX_3op_v<0b000111001010100>;
    127 class V6_vsububh_enc : Enc_COPROC_VX_3op_v<0b000111001010101>;
    128 class V6_vsubuhw_enc : Enc_COPROC_VX_3op_v<0b000111001010110>;
    129 class V6_vsubhw_enc : Enc_COPROC_VX_3op_v<0b000111001010111>;
    130 class V6_vabsdiffub_enc : Enc_COPROC_VX_3op_v<0b000111001100000>;
    131 class V6_vabsdiffh_enc : Enc_COPROC_VX_3op_v<0b000111001100001>;
    132 class V6_vabsdiffuh_enc : Enc_COPROC_VX_3op_v<0b000111001100010>;
    133 class V6_vabsdiffw_enc : Enc_COPROC_VX_3op_v<0b000111001100011>;
    134 class V6_vavgub_enc : Enc_COPROC_VX_3op_v<0b000111001100100>;
    135 class V6_vavguh_enc : Enc_COPROC_VX_3op_v<0b000111001100101>;
    136 class V6_vavgh_enc : Enc_COPROC_VX_3op_v<0b000111001100110>;
    137 class V6_vavgw_enc : Enc_COPROC_VX_3op_v<0b000111001100111>;
    138 class V6_vnavgub_enc : Enc_COPROC_VX_3op_v<0b000111001110000>;
    139 class V6_vnavgh_enc : Enc_COPROC_VX_3op_v<0b000111001110001>;
    140 class V6_vnavgw_enc : Enc_COPROC_VX_3op_v<0b000111001110010>;
    141 class V6_vavgubrnd_enc : Enc_COPROC_VX_3op_v<0b000111001110011>;
    142 class V6_vavguhrnd_enc : Enc_COPROC_VX_3op_v<0b000111001110100>;
    143 class V6_vavghrnd_enc : Enc_COPROC_VX_3op_v<0b000111001110101>;
    144 class V6_vavgwrnd_enc : Enc_COPROC_VX_3op_v<0b000111001110110>;
    145 class V6_vmpabuuv_enc : Enc_COPROC_VX_3op_v<0b000111001110111>;
    146 class V6_vminub_enc : Enc_COPROC_VX_3op_v<0b000111110000001>;
    147 class V6_vminuh_enc : Enc_COPROC_VX_3op_v<0b000111110000010>;
    148 class V6_vminh_enc : Enc_COPROC_VX_3op_v<0b000111110000011>;
    149 class V6_vminw_enc : Enc_COPROC_VX_3op_v<0b000111110000100>;
    150 class V6_vmaxub_enc : Enc_COPROC_VX_3op_v<0b000111110000101>;
    151 class V6_vmaxuh_enc : Enc_COPROC_VX_3op_v<0b000111110000110>;
    152 class V6_vmaxh_enc : Enc_COPROC_VX_3op_v<0b000111110000111>;
    153 class V6_vmaxw_enc : Enc_COPROC_VX_3op_v<0b000111110010000>;
    154 class V6_vdelta_enc : Enc_COPROC_VX_3op_v<0b000111110010001>;
    155 class V6_vrdelta_enc : Enc_COPROC_VX_3op_v<0b000111110010011>;
    156 class V6_vdealb4w_enc : Enc_COPROC_VX_3op_v<0b000111110010111>;
    157 class V6_vmpyowh_rnd_enc : Enc_COPROC_VX_3op_v<0b000111110100000>;
    158 class V6_vshuffeb_enc : Enc_COPROC_VX_3op_v<0b000111110100001>;
    159 class V6_vshuffob_enc : Enc_COPROC_VX_3op_v<0b000111110100010>;
    160 class V6_vshufeh_enc : Enc_COPROC_VX_3op_v<0b000111110100011>;
    161 class V6_vshufoh_enc : Enc_COPROC_VX_3op_v<0b000111110100100>;
    162 class V6_vshufoeh_enc : Enc_COPROC_VX_3op_v<0b000111110100101>;
    163 class V6_vshufoeb_enc : Enc_COPROC_VX_3op_v<0b000111110100110>;
    164 class V6_vcombine_enc : Enc_COPROC_VX_3op_v<0b000111110100111>;
    165 class V6_vmpyieoh_enc : Enc_COPROC_VX_3op_v<0b000111110110000>;
    166 class V6_vsathub_enc : Enc_COPROC_VX_3op_v<0b000111110110010>;
    167 class V6_vsatwh_enc : Enc_COPROC_VX_3op_v<0b000111110110011>;
    168 class V6_vroundwh_enc : Enc_COPROC_VX_3op_v<0b000111110110100>;
    169 class V6_vroundwuh_enc : Enc_COPROC_VX_3op_v<0b000111110110101>;
    170 class V6_vroundhb_enc : Enc_COPROC_VX_3op_v<0b000111110110110>;
    171 class V6_vroundhub_enc : Enc_COPROC_VX_3op_v<0b000111110110111>;
    172 class V6_vasrwv_enc : Enc_COPROC_VX_3op_v<0b000111111010000>;
    173 class V6_vlsrwv_enc : Enc_COPROC_VX_3op_v<0b000111111010001>;
    174 class V6_vlsrhv_enc : Enc_COPROC_VX_3op_v<0b000111111010010>;
    175 class V6_vasrhv_enc : Enc_COPROC_VX_3op_v<0b000111111010011>;
    176 class V6_vaslwv_enc : Enc_COPROC_VX_3op_v<0b000111111010100>;
    177 class V6_vaslhv_enc : Enc_COPROC_VX_3op_v<0b000111111010101>;
    178 class V6_vaddb_enc : Enc_COPROC_VX_3op_v<0b000111111010110>;
    179 class V6_vaddh_enc : Enc_COPROC_VX_3op_v<0b000111111010111>;
    180 class V6_vmpyiewuh_enc : Enc_COPROC_VX_3op_v<0b000111111100000>;
    181 class V6_vmpyiowh_enc : Enc_COPROC_VX_3op_v<0b000111111100001>;
    182 class V6_vpackeb_enc : Enc_COPROC_VX_3op_v<0b000111111100010>;
    183 class V6_vpackeh_enc : Enc_COPROC_VX_3op_v<0b000111111100011>;
    184 class V6_vpackhub_sat_enc : Enc_COPROC_VX_3op_v<0b000111111100101>;
    185 class V6_vpackhb_sat_enc : Enc_COPROC_VX_3op_v<0b000111111100110>;
    186 class V6_vpackwuh_sat_enc : Enc_COPROC_VX_3op_v<0b000111111100111>;
    187 class V6_vpackwh_sat_enc : Enc_COPROC_VX_3op_v<0b000111111110000>;
    188 class V6_vpackob_enc : Enc_COPROC_VX_3op_v<0b000111111110001>;
    189 class V6_vpackoh_enc : Enc_COPROC_VX_3op_v<0b000111111110010>;
    190 class V6_vmpyewuh_enc : Enc_COPROC_VX_3op_v<0b000111111110101>;
    191 class V6_vmpyowh_enc : Enc_COPROC_VX_3op_v<0b000111111110111>;
    192 class V6_extractw_enc : Enc_COPROC_VX_3op_v<0b100100100000001>;
    193 class M6_vabsdiffub_enc : Enc_COPROC_VX_3op_v<0b111010001010000>;
    194 class M6_vabsdiffb_enc : Enc_COPROC_VX_3op_v<0b111010001110000>;
    195 
    196 class Enc_COPROC_VX_cmp<bits<13> opc> : OpcodeHexagon {
    197   bits<2> dst;
    198   bits<5> src1;
    199   bits<5> src2;
    200 
    201   let Inst{31-16} = { 0b00011, opc{12-7}, src2{4-0} };
    202   let Inst{13-0} = { opc{6}, src1{4-0}, opc{5-0}, dst{1-0} };
    203 }
    204 
    205 class V6_vandvrt_acc_enc : Enc_COPROC_VX_cmp<0b0010111100000>;
    206 class V6_vandvrt_enc : Enc_COPROC_VX_cmp<0b0011010010010>;
    207 class V6_veqb_and_enc : Enc_COPROC_VX_cmp<0b1001001000000>;
    208 class V6_veqh_and_enc : Enc_COPROC_VX_cmp<0b1001001000001>;
    209 class V6_veqw_and_enc : Enc_COPROC_VX_cmp<0b1001001000010>;
    210 class V6_vgtb_and_enc : Enc_COPROC_VX_cmp<0b1001001000100>;
    211 class V6_vgth_and_enc : Enc_COPROC_VX_cmp<0b1001001000101>;
    212 class V6_vgtw_and_enc : Enc_COPROC_VX_cmp<0b1001001000110>;
    213 class V6_vgtub_and_enc : Enc_COPROC_VX_cmp<0b1001001001000>;
    214 class V6_vgtuh_and_enc : Enc_COPROC_VX_cmp<0b1001001001001>;
    215 class V6_vgtuw_and_enc : Enc_COPROC_VX_cmp<0b1001001001010>;
    216 class V6_veqb_or_enc : Enc_COPROC_VX_cmp<0b1001001010000>;
    217 class V6_veqh_or_enc : Enc_COPROC_VX_cmp<0b1001001010001>;
    218 class V6_veqw_or_enc : Enc_COPROC_VX_cmp<0b1001001010010>;
    219 class V6_vgtb_or_enc : Enc_COPROC_VX_cmp<0b1001001010100>;
    220 class V6_vgth_or_enc : Enc_COPROC_VX_cmp<0b1001001010101>;
    221 class V6_vgtw_or_enc : Enc_COPROC_VX_cmp<0b1001001010110>;
    222 class V6_vgtub_or_enc : Enc_COPROC_VX_cmp<0b1001001011000>;
    223 class V6_vgtuh_or_enc : Enc_COPROC_VX_cmp<0b1001001011001>;
    224 class V6_vgtuw_or_enc : Enc_COPROC_VX_cmp<0b1001001011010>;
    225 class V6_veqb_xor_enc : Enc_COPROC_VX_cmp<0b1001001100000>;
    226 class V6_veqh_xor_enc : Enc_COPROC_VX_cmp<0b1001001100001>;
    227 class V6_veqw_xor_enc : Enc_COPROC_VX_cmp<0b1001001100010>;
    228 class V6_vgtb_xor_enc : Enc_COPROC_VX_cmp<0b1001001100100>;
    229 class V6_vgth_xor_enc : Enc_COPROC_VX_cmp<0b1001001100101>;
    230 class V6_vgtw_xor_enc : Enc_COPROC_VX_cmp<0b1001001100110>;
    231 class V6_vgtub_xor_enc : Enc_COPROC_VX_cmp<0b1001001101000>;
    232 class V6_vgtuh_xor_enc : Enc_COPROC_VX_cmp<0b1001001101001>;
    233 class V6_vgtuw_xor_enc : Enc_COPROC_VX_cmp<0b1001001101010>;
    234 class V6_veqb_enc : Enc_COPROC_VX_cmp<0b1111000000000>;
    235 class V6_veqh_enc : Enc_COPROC_VX_cmp<0b1111000000001>;
    236 class V6_veqw_enc : Enc_COPROC_VX_cmp<0b1111000000010>;
    237 class V6_vgtb_enc : Enc_COPROC_VX_cmp<0b1111000000100>;
    238 class V6_vgth_enc : Enc_COPROC_VX_cmp<0b1111000000101>;
    239 class V6_vgtw_enc : Enc_COPROC_VX_cmp<0b1111000000110>;
    240 class V6_vgtub_enc : Enc_COPROC_VX_cmp<0b1111000001000>;
    241 class V6_vgtuh_enc : Enc_COPROC_VX_cmp<0b1111000001001>;
    242 class V6_vgtuw_enc : Enc_COPROC_VX_cmp<0b1111000001010>;
    243 
    244 class Enc_COPROC_VX_p2op<bits<5> opc> : OpcodeHexagon {
    245   bits<2> src1;
    246   bits<5> dst;
    247   bits<5> src2;
    248 
    249   let Inst{31-16} = { 0b00011110, src1{1-0}, 0b0000, opc{4-3} };
    250   let Inst{13-0} = { 1, src2{4-0}, opc{2-0}, dst{4-0} };
    251 }
    252 
    253 class V6_vaddbq_enc : Enc_COPROC_VX_p2op<0b01000>;
    254 class V6_vaddhq_enc : Enc_COPROC_VX_p2op<0b01001>;
    255 class V6_vaddwq_enc : Enc_COPROC_VX_p2op<0b01010>;
    256 class V6_vaddbnq_enc : Enc_COPROC_VX_p2op<0b01011>;
    257 class V6_vaddhnq_enc : Enc_COPROC_VX_p2op<0b01100>;
    258 class V6_vaddwnq_enc : Enc_COPROC_VX_p2op<0b01101>;
    259 class V6_vsubbq_enc : Enc_COPROC_VX_p2op<0b01110>;
    260 class V6_vsubhq_enc : Enc_COPROC_VX_p2op<0b01111>;
    261 class V6_vsubwq_enc : Enc_COPROC_VX_p2op<0b10000>;
    262 class V6_vsubbnq_enc : Enc_COPROC_VX_p2op<0b10001>;
    263 class V6_vsubhnq_enc : Enc_COPROC_VX_p2op<0b10010>;
    264 class V6_vsubwnq_enc : Enc_COPROC_VX_p2op<0b10011>;
    265 
    266 class Enc_COPROC_VX_2op<bits<6> opc> : OpcodeHexagon {
    267   bits<5> dst;
    268   bits<5> src1;
    269 
    270   let Inst{31-16} = { 0b00011110000000, opc{5-4} };
    271   let Inst{13-0} = { opc{3}, src1{4-0}, opc{2-0}, dst{4-0} };
    272 }
    273 
    274 class V6_vabsh_enc : Enc_COPROC_VX_2op<0b000000>;
    275 class V6_vabsh_sat_enc : Enc_COPROC_VX_2op<0b000001>;
    276 class V6_vabsw_enc : Enc_COPROC_VX_2op<0b000010>;
    277 class V6_vabsw_sat_enc : Enc_COPROC_VX_2op<0b000011>;
    278 class V6_vnot_enc : Enc_COPROC_VX_2op<0b000100>;
    279 class V6_vdealh_enc : Enc_COPROC_VX_2op<0b000110>;
    280 class V6_vdealb_enc : Enc_COPROC_VX_2op<0b000111>;
    281 class V6_vunpackob_enc : Enc_COPROC_VX_2op<0b001000>;
    282 class V6_vunpackoh_enc : Enc_COPROC_VX_2op<0b001001>;
    283 class V6_vunpackub_enc : Enc_COPROC_VX_2op<0b010000>;
    284 class V6_vunpackuh_enc : Enc_COPROC_VX_2op<0b010001>;
    285 class V6_vunpackb_enc : Enc_COPROC_VX_2op<0b010010>;
    286 class V6_vunpackh_enc : Enc_COPROC_VX_2op<0b010011>;
    287 class V6_vshuffh_enc : Enc_COPROC_VX_2op<0b010111>;
    288 class V6_vshuffb_enc : Enc_COPROC_VX_2op<0b100000>;
    289 class V6_vzb_enc : Enc_COPROC_VX_2op<0b100001>;
    290 class V6_vzh_enc : Enc_COPROC_VX_2op<0b100010>;
    291 class V6_vsb_enc : Enc_COPROC_VX_2op<0b100011>;
    292 class V6_vsh_enc : Enc_COPROC_VX_2op<0b100100>;
    293 class V6_vcl0w_enc : Enc_COPROC_VX_2op<0b100101>;
    294 class V6_vpopcounth_enc : Enc_COPROC_VX_2op<0b100110>;
    295 class V6_vcl0h_enc : Enc_COPROC_VX_2op<0b100111>;
    296 class V6_vnormamtw_enc : Enc_COPROC_VX_2op<0b110100>;
    297 class V6_vnormamth_enc : Enc_COPROC_VX_2op<0b110101>;
    298 class V6_vassign_enc : Enc_COPROC_VX_2op<0b111111>;
    299 
    300 class Enc_COPROC_VMEM_vL32_b_ai<bits<4> opc> : OpcodeHexagon {
    301   bits<5> dst;
    302   bits<5> src1;
    303   bits<10> src2;
    304   bits<4> src2_vector;
    305 
    306   let src2_vector = src2{9-6};
    307   let Inst{31-16} = { 0b001010000, opc{3}, 0, src1{4-0} };
    308   let Inst{13-0} = { src2_vector{3}, 0b00, src2_vector{2-0}, opc{2-0}, dst{4-0} };
    309 }
    310 
    311 class V6_vL32b_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b0000>;
    312 class V6_vL32b_cur_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b0001>;
    313 class V6_vL32b_tmp_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b0010>;
    314 class V6_vL32Ub_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b0111>;
    315 class V6_vL32b_nt_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b1000>;
    316 class V6_vL32b_nt_cur_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b1001>;
    317 class V6_vL32b_nt_tmp_ai_enc : Enc_COPROC_VMEM_vL32_b_ai<0b1010>;
    318 
    319 class Enc_COPROC_VMEM_vL32_b_ai_128B<bits<4> opc> : OpcodeHexagon {
    320   bits<5> dst;
    321   bits<5> src1;
    322   bits<11> src2;
    323   bits<4> src2_vector;
    324 
    325   let src2_vector = src2{10-7};
    326   let Inst{31-16} = { 0b001010000, opc{3}, 0, src1{4-0} };
    327   let Inst{13-0} = { src2_vector{3}, 0b00, src2_vector{2-0}, opc{2-0}, dst{4-0} };
    328 }
    329 
    330 class V6_vL32b_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b0000>;
    331 class V6_vL32b_cur_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b0001>;
    332 class V6_vL32b_tmp_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b0010>;
    333 class V6_vL32Ub_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b0111>;
    334 class V6_vL32b_nt_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b1000>;
    335 class V6_vL32b_nt_cur_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b1001>;
    336 class V6_vL32b_nt_tmp_ai_128B_enc : Enc_COPROC_VMEM_vL32_b_ai_128B<0b1010>;
    337 
    338 class Enc_COPROC_VMEM_vS32_b_ai_64B<bits<4> opc> : OpcodeHexagon {
    339   bits<5> src1;
    340   bits<10> src2;
    341   bits<4> src2_vector;
    342   bits<5> src3;
    343 
    344   let src2_vector = src2{9-6};
    345   let Inst{31-16} = { 0b001010000, opc{3}, 1, src1{4-0} };
    346   let Inst{13-0} = { src2_vector{3}, 0b00, src2_vector{2-0}, opc{2-0}, src3{4-0} };
    347 }
    348 
    349 class Enc_COPROC_VMEM_vS32_b_ai_128B<bits<4> opc> : OpcodeHexagon {
    350   bits<5> src1;
    351   bits<11> src2;
    352   bits<4> src2_vector;
    353   bits<5> src3;
    354 
    355   let src2_vector = src2{10-7};
    356   let Inst{31-16} = { 0b001010000, opc{3}, 1, src1{4-0} };
    357   let Inst{13-0} = { src2_vector{3}, 0b00, src2_vector{2-0}, opc{2-0}, src3{4-0} };
    358 }
    359 
    360 class V6_vS32b_ai_enc : Enc_COPROC_VMEM_vS32_b_ai_64B<0b0000>;
    361 class V6_vS32Ub_ai_enc : Enc_COPROC_VMEM_vS32_b_ai_64B<0b0111>;
    362 class V6_vS32b_nt_ai_enc : Enc_COPROC_VMEM_vS32_b_ai_64B<0b1000>;
    363 
    364 class V6_vS32b_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_ai_128B<0b0000>;
    365 class V6_vS32Ub_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_ai_128B<0b0111>;
    366 class V6_vS32b_nt_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_ai_128B<0b1000>;
    367 
    368 class Enc_COPROC_VMEM_vS32b_n_ew_ai_64B<bits<1> opc> : OpcodeHexagon {
    369   bits<5> src1;
    370   bits<10> src2;
    371   bits<4> src2_vector;
    372   bits<3> src3;
    373 
    374   let src2_vector = src2{9-6};
    375   let Inst{31-16} = { 0b001010000, opc{0}, 1, src1{4-0} };
    376   let Inst{13-0} = { src2_vector{3}, 0b00, src2_vector{2-0}, 0b00100, src3{2-0} };
    377 }
    378 
    379 class V6_vS32b_new_ai_enc : Enc_COPROC_VMEM_vS32b_n_ew_ai_64B<0>;
    380 class V6_vS32b_nt_new_ai_enc : Enc_COPROC_VMEM_vS32b_n_ew_ai_64B<1>;
    381 
    382 class Enc_COPROC_VMEM_vS32b_n_ew_ai_128B<bits<1> opc> : OpcodeHexagon {
    383   bits<5> src1;
    384   bits<11> src2;
    385   bits<4> src2_vector;
    386   bits<3> src3;
    387 
    388   let src2_vector = src2{10-7};
    389   let Inst{31-16} = { 0b001010000, opc{0}, 1, src1{4-0} };
    390   let Inst{13-0} = { src2_vector{3}, 0b00, src2_vector{2-0}, 0b00100, src3{2-0} };
    391 }
    392 
    393 class V6_vS32b_new_ai_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_ai_128B<0>;
    394 class V6_vS32b_nt_new_ai_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_ai_128B<1>;
    395 
    396 class Enc_COPROC_VMEM_vS32_b_pred_ai<bits<5> opc> : OpcodeHexagon {
    397   bits<2> src1;
    398   bits<5> src2;
    399   bits<10> src3;
    400   bits<4> src3_vector;
    401   bits<5> src4;
    402 
    403   let src3_vector = src3{9-6};
    404   let Inst{31-16} = { 0b001010001, opc{4-3}, src2{4-0} };
    405   let Inst{13-0} = { src3_vector{3}, src1{1-0}, src3_vector{2-0}, opc{2-0}, src4{4-0} };
    406 }
    407 
    408 class Enc_COPROC_VMEM_vS32_b_pred_ai_128B<bits<5> opc> : OpcodeHexagon {
    409   bits<2> src1;
    410   bits<5> src2;
    411   bits<11> src3;
    412   bits<4> src3_vector;
    413   bits<5> src4;
    414 
    415   let src3_vector = src3{10-7};
    416   let Inst{31-16} = { 0b001010001, opc{4-3}, src2{4-0} };
    417   let Inst{13-0} = { src3_vector{3}, src1{1-0}, src3_vector{2-0}, opc{2-0}, src4{4-0} };
    418 }
    419 
    420 class V6_vS32b_qpred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b00000>;
    421 class V6_vS32b_nqpred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b00001>;
    422 class V6_vS32b_pred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b01000>;
    423 class V6_vS32b_npred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b01001>;
    424 class V6_vS32Ub_pred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b01110>;
    425 class V6_vS32Ub_npred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b01111>;
    426 class V6_vS32b_nt_qpred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b10000>;
    427 class V6_vS32b_nt_nqpred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b10001>;
    428 class V6_vS32b_nt_pred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b11000>;
    429 class V6_vS32b_nt_npred_ai_enc : Enc_COPROC_VMEM_vS32_b_pred_ai<0b11001>;
    430 
    431 class V6_vS32b_qpred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b00000>;
    432 class V6_vS32b_nqpred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b00001>;
    433 class V6_vS32b_pred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b01000>;
    434 class V6_vS32b_npred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b01001>;
    435 class V6_vS32Ub_pred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b01110>;
    436 class V6_vS32Ub_npred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b01111>;
    437 class V6_vS32b_nt_qpred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b10000>;
    438 class V6_vS32b_nt_nqpred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b10001>;
    439 class V6_vS32b_nt_pred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b11000>;
    440 class V6_vS32b_nt_npred_ai_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_ai_128B<0b11001>;
    441 
    442 class Enc_COPROC_VMEM_vS32b_n_ew_pred_ai<bits<4> opc> : OpcodeHexagon {
    443   bits<2> src1;
    444   bits<5> src2;
    445   bits<10> src3;
    446   bits<4> src3_vector;
    447   bits<3> src4;
    448 
    449   let src3_vector = src3{9-6};
    450   let Inst{31-16} = { 0b001010001, opc{3}, 1, src2{4-0} };
    451   let Inst{13-0} = { src3_vector{3}, src1{1-0}, src3_vector{2-0}, 0b01, opc{2-0}, src4{2-0} };
    452 }
    453 
    454 class V6_vS32b_new_pred_ai_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai<0b0000>;
    455 class V6_vS32b_new_npred_ai_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai<0b0101>;
    456 class V6_vS32b_nt_new_pred_ai_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai<0b1010>;
    457 class V6_vS32b_nt_new_npred_ai_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai<0b1111>;
    458 
    459 class Enc_COPROC_VMEM_vS32b_n_ew_pred_ai_128B<bits<4> opc> : OpcodeHexagon {
    460   bits<2> src1;
    461   bits<5> src2;
    462   bits<11> src3;
    463   bits<4> src3_vector;
    464   bits<3> src4;
    465 
    466   let src3_vector = src3{10-7};
    467   let Inst{31-16} = { 0b001010001, opc{3}, 1, src2{4-0} };
    468   let Inst{13-0} = { src3_vector{3}, src1{1-0}, src3_vector{2-0}, 0b01, opc{2-0}, src4{2-0} };
    469 }
    470 
    471 class V6_vS32b_new_pred_ai_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai_128B<0b0000>;
    472 class V6_vS32b_new_npred_ai_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai_128B<0b0101>;
    473 class V6_vS32b_nt_new_pred_ai_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai_128B<0b1010>;
    474 class V6_vS32b_nt_new_npred_ai_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ai_128B<0b1111>;
    475 
    476 // TODO: Change script to generate dst, src1, src2 instead of
    477 // dst, dst2, src1.
    478 class Enc_COPROC_VMEM_vL32_b_pi<bits<4> opc> : OpcodeHexagon {
    479   bits<5> dst;
    480   bits<5> src1;
    481   bits<9> src2;
    482   bits<3> src2_vector;
    483 
    484   let src2_vector = src2{8-6};
    485   let Inst{31-16} = { 0b001010010, opc{3}, 0, src1{4-0} };
    486   let Inst{13-0} = { 0b000, src2_vector{2-0}, opc{2-0}, dst{4-0} };
    487 }
    488 
    489 class V6_vL32b_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b0000>;
    490 class V6_vL32b_cur_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b0001>;
    491 class V6_vL32b_tmp_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b0010>;
    492 class V6_vL32Ub_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b0111>;
    493 class V6_vL32b_nt_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b1000>;
    494 class V6_vL32b_nt_cur_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b1001>;
    495 class V6_vL32b_nt_tmp_pi_enc : Enc_COPROC_VMEM_vL32_b_pi<0b1010>;
    496 
    497 class Enc_COPROC_VMEM_vL32_b_pi_128B<bits<4> opc> : OpcodeHexagon {
    498   bits<5> dst;
    499   bits<5> src1;
    500   bits<10> src2;
    501   bits<3> src2_vector;
    502 
    503   let src2_vector = src2{9-7};
    504   let Inst{31-16} = { 0b001010010, opc{3}, 0, src1{4-0} };
    505   let Inst{13-0} = { 0b000, src2_vector{2-0}, opc{2-0}, dst{4-0} };
    506 }
    507 
    508 class V6_vL32b_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b0000>;
    509 class V6_vL32b_cur_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b0001>;
    510 class V6_vL32b_tmp_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b0010>;
    511 class V6_vL32Ub_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b0111>;
    512 class V6_vL32b_nt_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b1000>;
    513 class V6_vL32b_nt_cur_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b1001>;
    514 class V6_vL32b_nt_tmp_pi_128B_enc : Enc_COPROC_VMEM_vL32_b_pi_128B<0b1010>;
    515 
    516 
    517 // TODO: Change script to generate src1, src2 and src3 instead of
    518 // dst, src1, src2.
    519 class Enc_COPROC_VMEM_vS32_b_pi<bits<4> opc> : OpcodeHexagon {
    520   bits<5> src1;
    521   bits<9> src2;
    522   bits<3> src2_vector;
    523   bits<5> src3;
    524 
    525   let src2_vector = src2{8-6};
    526   let Inst{31-16} = { 0b001010010, opc{3}, 1, src1{4-0} };
    527   let Inst{10-0} = {src2_vector{2-0}, opc{2-0}, src3{4-0} };
    528 }
    529 
    530 class V6_vS32b_pi_enc : Enc_COPROC_VMEM_vS32_b_pi<0b0000>;
    531 class V6_vS32Ub_pi_enc : Enc_COPROC_VMEM_vS32_b_pi<0b0111>;
    532 class V6_vS32b_nt_pi_enc : Enc_COPROC_VMEM_vS32_b_pi<0b1000>;
    533 
    534 class Enc_COPROC_VMEM_vS32_b_pi_128B<bits<4> opc> : OpcodeHexagon {
    535   bits<5> src1;
    536   bits<10> src2;
    537   bits<3> src2_vector;
    538   bits<5> src3;
    539 
    540   let src2_vector = src2{9-7};
    541   let Inst{31-16} = { 0b001010010, opc{3}, 1, src1{4-0} };
    542   let Inst{10-0} = {src2_vector{2-0}, opc{2-0}, src3{4-0} };
    543 }
    544 
    545 class V6_vS32b_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pi_128B<0b0000>;
    546 class V6_vS32Ub_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pi_128B<0b0111>;
    547 class V6_vS32b_nt_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pi_128B<0b1000>;
    548 
    549 // TODO: Change script to generate src1, src2 and src3 instead of
    550 // dst, src1, src2.
    551 class Enc_COPROC_VMEM_vS32b_n_ew_pi<bits<1> opc> : OpcodeHexagon {
    552   bits<5> src1;
    553   bits<9> src2;
    554   bits<3> src2_vector;
    555   bits<3> src3;
    556 
    557   let src2_vector = src2{8-6};
    558   let Inst{31-16} = { 0b001010010, opc{0}, 1, src1{4-0} };
    559   let Inst{13-0} = { 0b000, src2_vector{2-0}, 0b00100, src3{2-0} };
    560 }
    561 
    562 class V6_vS32b_new_pi_enc : Enc_COPROC_VMEM_vS32b_n_ew_pi<0>;
    563 class V6_vS32b_nt_new_pi_enc : Enc_COPROC_VMEM_vS32b_n_ew_pi<1>;
    564 
    565 class Enc_COPROC_VMEM_vS32b_n_ew_pi_128B<bits<1> opc> : OpcodeHexagon {
    566   bits<5> src1;
    567   bits<10> src2;
    568   bits<3> src2_vector;
    569   bits<3> src3;
    570 
    571   let src2_vector = src2{9-7};
    572   let Inst{31-16} = { 0b001010010, opc{0}, 1, src1{4-0} };
    573   let Inst{13-0} = { 0b000, src2_vector{2-0}, 0b00100, src3{2-0} };
    574 }
    575 
    576 class V6_vS32b_new_pi_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pi_128B<0>;
    577 class V6_vS32b_nt_new_pi_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pi_128B<1>;
    578 
    579 // TODO: Change script to generate src1, src2,src3 and src4 instead of
    580 // dst, src1, src2, src3.
    581 class Enc_COPROC_VMEM_vS32_b_pred_pi<bits<5> opc> : OpcodeHexagon {
    582   bits<2> src1;
    583   bits<5> src2;
    584   bits<9> src3;
    585   bits<3> src3_vector;
    586   bits<5> src4;
    587 
    588   let src3_vector = src3{8-6};
    589   let Inst{31-16} = { 0b001010011, opc{4-3}, src2{4-0} };
    590   let Inst{13-0} = { 0, src1{1-0}, src3_vector{2-0}, opc{2-0}, src4{4-0} };
    591 }
    592 
    593 class V6_vS32b_qpred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b00000>;
    594 class V6_vS32b_nqpred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b00001>;
    595 class V6_vS32b_pred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b01000>;
    596 class V6_vS32b_npred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b01001>;
    597 class V6_vS32Ub_pred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b01110>;
    598 class V6_vS32Ub_npred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b01111>;
    599 class V6_vS32b_nt_qpred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b10000>;
    600 class V6_vS32b_nt_nqpred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b10001>;
    601 class V6_vS32b_nt_pred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b11000>;
    602 class V6_vS32b_nt_npred_pi_enc : Enc_COPROC_VMEM_vS32_b_pred_pi<0b11001>;
    603 
    604 // TODO: Change script to generate src1, src2,src3 and src4 instead of
    605 // dst, src1, src2, src3.
    606 class Enc_COPROC_VMEM_vS32_b_pred_pi_128B<bits<5> opc> : OpcodeHexagon {
    607   bits<2> src1;
    608   bits<5> src2;
    609   bits<10> src3;
    610   bits<3> src3_vector;
    611   bits<5> src4;
    612 
    613   let src3_vector = src3{9-7};
    614   let Inst{31-16} = { 0b001010011, opc{4-3}, src2{4-0} };
    615   let Inst{13-0} = { 0, src1{1-0}, src3_vector{2-0}, opc{2-0}, src4{4-0} };
    616 }
    617 
    618 class V6_vS32b_qpred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b00000>;
    619 class V6_vS32b_nqpred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b00001>;
    620 class V6_vS32b_pred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b01000>;
    621 class V6_vS32b_npred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b01001>;
    622 class V6_vS32Ub_pred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b01110>;
    623 class V6_vS32Ub_npred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b01111>;
    624 class V6_vS32b_nt_qpred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b10000>;
    625 class V6_vS32b_nt_nqpred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b10001>;
    626 class V6_vS32b_nt_pred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b11000>;
    627 class V6_vS32b_nt_npred_pi_128B_enc : Enc_COPROC_VMEM_vS32_b_pred_pi_128B<0b11001>;
    628 
    629 class Enc_COPROC_VMEM_vS32b_n_ew_pred_pi<bits<4> opc> : OpcodeHexagon {
    630   bits<2> src1;
    631   bits<5> src2;
    632   bits<9> src3;
    633   bits<3> src3_vector;
    634   bits<3> src4;
    635 
    636   let src3_vector = src3{8-6};
    637   let Inst{31-16} = { 0b001010011, opc{3}, 1, src2{4-0} };
    638   let Inst{13-0} = { 0, src1{1-0}, src3_vector{2-0}, 0b01, opc{2-0}, src4{2-0} };
    639 }
    640 
    641 class V6_vS32b_new_pred_pi_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi<0b0000>;
    642 class V6_vS32b_new_npred_pi_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi<0b0101>;
    643 class V6_vS32b_nt_new_pred_pi_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi<0b1010>;
    644 class V6_vS32b_nt_new_npred_pi_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi<0b1111>;
    645 
    646 class Enc_COPROC_VMEM_vS32b_n_ew_pred_pi_128B<bits<4> opc> : OpcodeHexagon {
    647   bits<2> src1;
    648   bits<5> src2;
    649   bits<10> src3;
    650   bits<3> src3_vector;
    651   bits<3> src4;
    652 
    653   let src3_vector = src3{9-7};
    654   let Inst{31-16} = { 0b001010011, opc{3}, 1, src2{4-0} };
    655   let Inst{13-0} = { 0, src1{1-0}, src3_vector{2-0}, 0b01, opc{2-0}, src4{2-0} };
    656 }
    657 
    658 class V6_vS32b_new_pred_pi_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi_128B<0b0000>;
    659 class V6_vS32b_new_npred_pi_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi_128B<0b0101>;
    660 class V6_vS32b_nt_new_pred_pi_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi_128B<0b1010>;
    661 class V6_vS32b_nt_new_npred_pi_128B_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_pi_128B<0b1111>;
    662 
    663 class Enc_LD_load_m<bits<13> opc> : OpcodeHexagon {
    664   bits<5> dst;
    665   bits<5> src1;
    666   bits<1> src2;
    667 
    668   let Inst{31-16} = { opc{12}, 0, opc{11-10}, 1, opc{9-4}, src1{4-0} };
    669   let Inst{13-0} = { src2{0}, 0b000, opc{3}, 0, opc{2-0}, dst{4-0} };
    670 }
    671 
    672 class V6_vL32b_ppu_enc : Enc_LD_load_m<0b0100110000000>;
    673 class V6_vL32b_cur_ppu_enc : Enc_LD_load_m<0b0100110000001>;
    674 class V6_vL32b_tmp_ppu_enc : Enc_LD_load_m<0b0100110000010>;
    675 class V6_vL32Ub_ppu_enc : Enc_LD_load_m<0b0100110000111>;
    676 class V6_vL32b_nt_ppu_enc : Enc_LD_load_m<0b0100110100000>;
    677 class V6_vL32b_nt_cur_ppu_enc : Enc_LD_load_m<0b0100110100001>;
    678 class V6_vL32b_nt_tmp_ppu_enc : Enc_LD_load_m<0b0100110100010>;
    679 
    680 class Enc_COPROC_VMEM_vS32_b_ppu<bits<4> opc> : OpcodeHexagon {
    681   bits<5> src1;
    682   bits<1> src2;
    683   bits<5> src3;
    684 
    685   let Inst{31-16} = { 0b001010110, opc{3}, 1, src1{4-0} };
    686   let Inst{13-0} = { src2{0}, 0b00000, opc{2-0}, src3{4-0} };
    687 }
    688 
    689 class V6_vS32b_ppu_enc : Enc_COPROC_VMEM_vS32_b_ppu<0b0000>;
    690 class V6_vS32Ub_ppu_enc : Enc_COPROC_VMEM_vS32_b_ppu<0b0111>;
    691 class V6_vS32b_nt_ppu_enc : Enc_COPROC_VMEM_vS32_b_ppu<0b1000>;
    692 
    693 class Enc_COPROC_VMEM_vS32b_new_ppu<bits<1> opc> : OpcodeHexagon {
    694   bits<5> src1;
    695   bits<1> src2;
    696   bits<3> src3;
    697 
    698   let Inst{31-16} = { 0b001010110, opc{0}, 1, src1{4-0} };
    699   let Inst{13-0} = { src2{0}, 0b0000000100, src3{2-0} };
    700 }
    701 
    702 class V6_vS32b_new_ppu_enc : Enc_COPROC_VMEM_vS32b_new_ppu<0>;
    703 class V6_vS32b_nt_new_ppu_enc : Enc_COPROC_VMEM_vS32b_new_ppu<1>;
    704 
    705 class Enc_COPROC_VMEM_vS32_b_pred_ppu<bits<5> opc> : OpcodeHexagon {
    706   bits<2> src1;
    707   bits<5> src2;
    708   bits<1> src3;
    709   bits<5> src4;
    710 
    711   let Inst{31-16} = { 0b001010111, opc{4-3}, src2{4-0} };
    712   let Inst{13-0} = { src3{0}, src1{1-0}, 0b000, opc{2-0}, src4{4-0} };
    713 }
    714 
    715 class V6_vS32b_qpred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b00000>;
    716 class V6_vS32b_nqpred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b00001>;
    717 class V6_vS32b_pred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b01000>;
    718 class V6_vS32b_npred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b01001>;
    719 class V6_vS32Ub_pred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b01110>;
    720 class V6_vS32Ub_npred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b01111>;
    721 class V6_vS32b_nt_qpred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b10000>;
    722 class V6_vS32b_nt_nqpred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b10001>;
    723 class V6_vS32b_nt_pred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b11000>;
    724 class V6_vS32b_nt_npred_ppu_enc : Enc_COPROC_VMEM_vS32_b_pred_ppu<0b11001>;
    725 
    726 class Enc_COPROC_VMEM_vS32b_n_ew_pred_ppu<bits<4> opc> : OpcodeHexagon {
    727   bits<2> src1;
    728   bits<5> src2;
    729   bits<1> src3;
    730   bits<3> src4;
    731 
    732   let Inst{31-16} = { 0b001010111, opc{3}, 1, src2{4-0} };
    733   let Inst{13-0} = { src3{0}, src1{1-0}, 0b00001, opc{2-0}, src4{2-0} };
    734 }
    735 
    736 class V6_vS32b_new_pred_ppu_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ppu<0b0000>;
    737 class V6_vS32b_new_npred_ppu_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ppu<0b0101>;
    738 class V6_vS32b_nt_new_pred_ppu_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ppu<0b1010>;
    739 class V6_vS32b_nt_new_npred_ppu_enc : Enc_COPROC_VMEM_vS32b_n_ew_pred_ppu<0b1111>;
    740 
    741 
    742 class Enc_COPROC_VX_4op_i<bits<5> opc> : OpcodeHexagon {
    743   bits<5> dst;
    744   bits<5> src1;
    745   bits<5> src2;
    746   bits<1> src3;
    747 
    748   let Inst{31-16} = { 0b00011001, opc{4-2}, src2{4-0} };
    749   let Inst{13-0} = { opc{1}, src1{4-0}, 1, opc{0}, src3{0}, dst{4-0} };
    750 }
    751 
    752 class V6_vrmpybusi_enc : Enc_COPROC_VX_4op_i<0b01000>;
    753 class V6_vrsadubi_enc : Enc_COPROC_VX_4op_i<0b01001>;
    754 class V6_vrmpybusi_acc_enc : Enc_COPROC_VX_4op_i<0b01010>;
    755 class V6_vrsadubi_acc_enc : Enc_COPROC_VX_4op_i<0b01011>;
    756 class V6_vrmpyubi_acc_enc : Enc_COPROC_VX_4op_i<0b01111>;
    757 class V6_vrmpyubi_enc : Enc_COPROC_VX_4op_i<0b10101>;
    758 
    759 class Enc_COPROC_VX_vandqrt<bits<5> opc> : OpcodeHexagon {
    760   bits<5> dst;
    761   bits<2> src1;
    762   bits<5> src2;
    763 
    764   let Inst{31-16} = { 0b00011001, opc{4-3}, 1, src2{4-0} };
    765   let Inst{13-0} = { opc{2}, 0b000, src1{1-0}, opc{1-0}, 1, dst{4-0} };
    766 }
    767 
    768 class V6_vandqrt_acc_enc : Enc_COPROC_VX_vandqrt<0b01101>;
    769 class V6_vandqrt_enc : Enc_COPROC_VX_vandqrt<0b10010>;
    770 
    771 class Enc_COPROC_VX_cards<bits<2> opc> : OpcodeHexagon {
    772   bits<5> src1;
    773   bits<5> src2;
    774   bits<5> src3;
    775 
    776   let Inst{31-16} = { 0b00011001111, src3{4-0} };
    777   let Inst{13-0} = { 1, src1{4-0}, 0, opc{1-0}, src2{4-0} };
    778 }
    779 
    780 class V6_vshuff_enc : Enc_COPROC_VX_cards<0b01>;
    781 class V6_vdeal_enc : Enc_COPROC_VX_cards<0b10>;
    782 
    783 
    784 class Enc_COPROC_VX_v_cmov<bits<1> opc> : OpcodeHexagon {
    785   bits<2> src1;
    786   bits<5> dst;
    787   bits<5> src2;
    788 
    789   let Inst{31-16} = { 0b0001101000, opc{0}, 0b00000 };
    790   let Inst{13-0} = { 0, src2{4-0}, 0, src1{1-0}, dst{4-0} };
    791 }
    792 
    793 class V6_vcmov_enc : Enc_COPROC_VX_v_cmov<0>;
    794 class V6_vncmov_enc : Enc_COPROC_VX_v_cmov<1>;
    795 
    796 class Enc_X_p3op<bits<8> opc> : OpcodeHexagon {
    797   bits<2> src1;
    798   bits<5> dst;
    799   bits<5> src2;
    800   bits<5> src3;
    801 
    802   let Inst{31-16} = { opc{7-5}, 0b1101, opc{4}, 0, opc{3-2}, src3{4-0} };
    803   let Inst{13-0} = { opc{1}, src2{4-0}, opc{0}, src1{1-0}, dst{4-0} };
    804 }
    805 
    806 class V6_vnccombine_enc : Enc_X_p3op<0b00001000>;
    807 class V6_vccombine_enc : Enc_X_p3op<0b00001100>;
    808 
    809 class Enc_COPROC_VX_4op_r<bits<4> opc> : OpcodeHexagon {
    810   bits<5> dst;
    811   bits<5> src1;
    812   bits<5> src2;
    813   bits<3> src3;
    814 
    815   let Inst{31-16} = { 0b00011011, src2{4-0}, src3{2-0} };
    816   let Inst{13-0} = { opc{3}, src1{4-0}, opc{2-0}, dst{4-0} };
    817 }
    818 
    819 class V6_valignb_enc : Enc_COPROC_VX_4op_r<0b0000>;
    820 class V6_vlalignb_enc : Enc_COPROC_VX_4op_r<0b0001>;
    821 class V6_vasrwh_enc : Enc_COPROC_VX_4op_r<0b0010>;
    822 class V6_vasrwhsat_enc : Enc_COPROC_VX_4op_r<0b0011>;
    823 class V6_vasrwhrndsat_enc : Enc_COPROC_VX_4op_r<0b0100>;
    824 class V6_vasrwuhsat_enc : Enc_COPROC_VX_4op_r<0b0101>;
    825 class V6_vasrhubsat_enc : Enc_COPROC_VX_4op_r<0b0110>;
    826 class V6_vasrhubrndsat_enc : Enc_COPROC_VX_4op_r<0b0111>;
    827 class V6_vasrhbrndsat_enc : Enc_COPROC_VX_4op_r<0b1000>;
    828 class V6_vlutvvb_enc : Enc_COPROC_VX_4op_r<0b1001>;
    829 class V6_vshuffvdd_enc : Enc_COPROC_VX_4op_r<0b1011>;
    830 class V6_vdealvdd_enc : Enc_COPROC_VX_4op_r<0b1100>;
    831 class V6_vlutvvb_oracc_enc : Enc_COPROC_VX_4op_r<0b1101>;
    832 class V6_vlutvwh_enc : Enc_COPROC_VX_4op_r<0b1110>;
    833 class V6_vlutvwh_oracc_enc : Enc_COPROC_VX_4op_r<0b1111>;
    834 
    835 class Enc_S_3op_valign_i<bits<9> opc> : OpcodeHexagon {
    836   bits<5> dst;
    837   bits<5> src1;
    838   bits<5> src2;
    839   bits<3> src3;
    840 
    841   let Inst{31-16} = { opc{8-7}, 0, opc{6-3}, 0b00, opc{2-1}, src2{4-0} };
    842   let Inst{13-0} = { opc{0}, src1{4-0}, src3{2-0}, dst{4-0} };
    843 }
    844 
    845 class V6_vlutb_enc : Enc_S_3op_valign_i<0b001100000>;
    846 class V6_vlutb_dv_enc : Enc_S_3op_valign_i<0b001100010>;
    847 class V6_vlutb_acc_enc : Enc_S_3op_valign_i<0b001100100>;
    848 class V6_vlutb_dv_acc_enc : Enc_S_3op_valign_i<0b001100110>;
    849 class V6_valignbi_enc : Enc_S_3op_valign_i<0b001111011>;
    850 class V6_vlalignbi_enc : Enc_S_3op_valign_i<0b001111111>;
    851 class S2_valignib_enc : Enc_S_3op_valign_i<0b110000000>;
    852 class S2_addasl_rrri_enc : Enc_S_3op_valign_i<0b110010000>;
    853 
    854 class Enc_COPROC_VX_3op_q<bits<3> opc> : OpcodeHexagon {
    855   bits<2> dst;
    856   bits<2> src1;
    857   bits<2> src2;
    858 
    859   let Inst{31-16} = { 0b00011110, src2{1-0}, 0b000011 };
    860   let Inst{13-0} = { 0b0000, src1{1-0}, 0b000, opc{2-0}, dst{1-0} };
    861 }
    862 
    863 class V6_pred_and_enc : Enc_COPROC_VX_3op_q<0b000>;
    864 class V6_pred_or_enc : Enc_COPROC_VX_3op_q<0b001>;
    865 class V6_pred_xor_enc : Enc_COPROC_VX_3op_q<0b011>;
    866 class V6_pred_or_n_enc : Enc_COPROC_VX_3op_q<0b100>;
    867 class V6_pred_and_n_enc : Enc_COPROC_VX_3op_q<0b101>;
    868 
    869 class V6_pred_not_enc : OpcodeHexagon {
    870   bits<2> dst;
    871   bits<2> src1;
    872 
    873   let Inst{31-16} = { 0b0001111000000011 };
    874   let Inst{13-0} = { 0b0000, src1{1-0}, 0b000010, dst{1-0} };
    875 }
    876 
    877 class Enc_COPROC_VX_4op_q<bits<1> opc> : OpcodeHexagon {
    878   bits<5> dst;
    879   bits<2> src1;
    880   bits<5> src2;
    881   bits<5> src3;
    882 
    883   let Inst{31-16} = { 0b000111101, opc{0}, 1, src3{4-0} };
    884   let Inst{13-0} = { 1, src2{4-0}, 0, src1{1-0}, dst{4-0} };
    885 }
    886 
    887 class V6_vswap_enc : Enc_COPROC_VX_4op_q<0>;
    888 class V6_vmux_enc : Enc_COPROC_VX_4op_q<1>;
    889 
    890 class Enc_X_2op<bits<16> opc> : OpcodeHexagon {
    891   bits<5> dst;
    892   bits<5> src1;
    893 
    894   let Inst{31-16} = { opc{15-5}, src1{4-0} };
    895   let Inst{13-0} = { opc{4-3}, 0b0000, opc{2-0}, dst{4-0} };
    896 }
    897 
    898 class V6_lvsplatw_enc : Enc_X_2op<0b0001100110100001>;
    899 class V6_vinsertwr_enc : Enc_X_2op<0b0001100110110001>;
    900 class S6_vsplatrbp_enc : Enc_X_2op<0b1000010001000100>;
    901 
    902 
    903 class Enc_CR_2op_r<bits<12> opc> : OpcodeHexagon {
    904   bits<2> dst;
    905   bits<5> src1;
    906 
    907   let Inst{31-16} = { opc{11}, 0, opc{10-7}, 0, opc{6-3}, src1{4-0} };
    908   let Inst{13-0} = { opc{2}, 0b000000, opc{1}, 0b000, opc{0}, dst{1-0} };
    909 }
    910 
    911 class V6_pred_scalar2_enc : Enc_CR_2op_r<0b001101101011>;
    912 class Y5_l2locka_enc : Enc_CR_2op_r<0b110000111100>;
    913 
    914 class Enc_S_3op_i6<bits<9> opc> : OpcodeHexagon {
    915   bits<5> dst;
    916   bits<5> src1;
    917   bits<6> src2;
    918 
    919   let Inst{31-16} = { 0b1000, opc{8-6}, 0, opc{5-3}, src1{4-0} };
    920   let Inst{13-0} = { src2{5-0}, opc{2-0}, dst{4-0} };
    921 }
    922 
    923 class S6_rol_i_p_enc : Enc_S_3op_i6<0b000000011>;
    924 class S6_rol_i_p_nac_enc : Enc_S_3op_i6<0b001000011>;
    925 class S6_rol_i_p_acc_enc : Enc_S_3op_i6<0b001000111>;
    926 class S6_rol_i_p_and_enc : Enc_S_3op_i6<0b001010011>;
    927 class S6_rol_i_p_or_enc : Enc_S_3op_i6<0b001010111>;
    928 class S6_rol_i_p_xacc_enc : Enc_S_3op_i6<0b001100011>;
    929 
    930 class Enc_X_3op_r<bits<15> opc> : OpcodeHexagon {
    931   bits<5> dst;
    932   bits<5> src1;
    933   bits<5> src2;
    934 
    935   let Inst{31-16} = { opc{14-4}, src1{4-0} };
    936   let Inst{13-0} = { opc{3}, src2{4-0}, opc{2-0}, dst{4-0} };
    937 }
    938 
    939 class S6_rol_i_r_enc : Enc_X_3op_r<0b100011000000011>;
    940 class S6_rol_i_r_nac_enc : Enc_X_3op_r<0b100011100000011>;
    941 class S6_rol_i_r_acc_enc : Enc_X_3op_r<0b100011100000111>;
    942 class S6_rol_i_r_and_enc : Enc_X_3op_r<0b100011100100011>;
    943 class S6_rol_i_r_or_enc : Enc_X_3op_r<0b100011100100111>;
    944 class S6_rol_i_r_xacc_enc : Enc_X_3op_r<0b100011101000011>;
    945 class S6_vtrunehb_ppp_enc : Enc_X_3op_r<0b110000011000011>;
    946 class S6_vtrunohb_ppp_enc : Enc_X_3op_r<0b110000011000101>;
    947 
    948 class Enc_no_operands<bits<25> opc> : OpcodeHexagon {
    949 
    950   let Inst{31-16} = { opc{24-10}, 0 };
    951   let Inst{13-0} = { opc{9-7}, 0b000, opc{6-0}, 0 };
    952 }
    953 
    954 class Y5_l2gunlock_enc : Enc_no_operands<0b1010100000100000010000000>;
    955 class Y5_l2gclean_enc : Enc_no_operands<0b1010100000100000100000000>;
    956 class Y5_l2gcleaninv_enc : Enc_no_operands<0b1010100000100000110000000>;
    957 class V6_vhist_enc : Enc_no_operands<0b0001111000000001001000000>;
    958 
    959 class Enc_J_jumpr<bits<13> opc> : OpcodeHexagon {
    960   bits<5> src1;
    961 
    962   let Inst{31-16} = { opc{12-6}, 0, opc{5-3}, src1{4-0} };
    963   let Inst{13-0} = { 0b00, opc{2}, 0b0000, opc{1-0}, 0b00000 };
    964 }
    965 
    966 class Y5_l2unlocka_enc : Enc_J_jumpr<0b1010011011000>;
    967 class Y2_l2cleaninvidx_enc : Enc_J_jumpr<0b1010100011000>;
    968 
    969 class Enc_ST_l2gclean_pa<bits<2> opc> : OpcodeHexagon {
    970   bits<5> src1;
    971 
    972   let Inst{31-16} = { 0b101001101, opc{1-0}, 0b00000 };
    973   let Inst{13-0} = { 0, src1{4-0}, 0b00000000 };
    974 }
    975 
    976 class Y6_l2gcleanpa_enc : Enc_ST_l2gclean_pa<0b01>;
    977 class Y6_l2gcleaninvpa_enc : Enc_ST_l2gclean_pa<0b10>;
    978 
    979 class A5_ACS_enc : OpcodeHexagon {
    980   bits<5> dst1;
    981   bits<2> dst2;
    982   bits<5> src1;
    983   bits<5> src2;
    984 
    985   let Inst{31-16} = { 0b11101010101, src1{4-0} };
    986   let Inst{13-0} = { 0, src2{4-0}, 0, dst2{1-0}, dst1{4-0} };
    987 }
    988 
    989 class Enc_X_4op_r<bits<8> opc> : OpcodeHexagon {
    990   bits<5> dst;
    991   bits<5> src1;
    992   bits<5> src2;
    993   bits<2> src3;
    994 
    995   let Inst{31-16} = { 0b11, opc{7}, 0, opc{6-5}, 1, opc{4-1}, src1{4-0} };
    996   let Inst{13-0} = { 0, src2{4-0}, opc{0}, src3{1-0}, dst{4-0} };
    997 }
    998 
    999 class S2_vsplicerb_enc : Enc_X_4op_r<0b00001000>;
   1000 class S2_cabacencbin_enc : Enc_X_4op_r<0b00001010>;
   1001 class F2_sffma_sc_enc : Enc_X_4op_r<0b11110111>;
   1002 
   1003 class V6_vhistq_enc : OpcodeHexagon {
   1004   bits<2> src1;
   1005 
   1006   let Inst{31-16} = { 0b00011110, src1{1-0}, 0b000010 };
   1007   let Inst{13-0} = { 0b10000010000000 };
   1008 }
   1009 
   1010 // TODO: Change script to generate dst1 instead of dst.
   1011 class A6_vminub_RdP_enc : OpcodeHexagon {
   1012   bits<5> dst1;
   1013   bits<2> dst2;
   1014   bits<5> src1;
   1015   bits<5> src2;
   1016 
   1017   let Inst{31-16} = { 0b11101010111, src2{4-0} };
   1018   let Inst{13-0} = { 0, src1{4-0}, 0, dst2{1-0}, dst1{4-0} };
   1019 }
   1020