[Hexagon] Add missing include of <cctype>
[oota-llvm.git] / lib / Target / Hexagon / HexagonInstrEnc.td
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 }