Colin LeMahieu | 7c95871 | 2015-10-17 01:33:04 +0000 | [diff] [blame] | 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 | } |