1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef TCG_TCG_OP_GVEC_H
21#define TCG_TCG_OP_GVEC_H
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36typedef void gen_helper_gvec_2(TCGv_ptr, TCGv_ptr, TCGv_i32);
37void tcg_gen_gvec_2_ool(uint32_t dofs, uint32_t aofs,
38 uint32_t oprsz, uint32_t maxsz, int32_t data,
39 gen_helper_gvec_2 *fn);
40
41
42typedef void gen_helper_gvec_2i(TCGv_ptr, TCGv_ptr, TCGv_i64, TCGv_i32);
43void tcg_gen_gvec_2i_ool(uint32_t dofs, uint32_t aofs, TCGv_i64 c,
44 uint32_t oprsz, uint32_t maxsz, int32_t data,
45 gen_helper_gvec_2i *fn);
46
47
48typedef void gen_helper_gvec_2_ptr(TCGv_ptr, TCGv_ptr, TCGv_ptr, TCGv_i32);
49void tcg_gen_gvec_2_ptr(uint32_t dofs, uint32_t aofs,
50 TCGv_ptr ptr, uint32_t oprsz, uint32_t maxsz,
51 int32_t data, gen_helper_gvec_2_ptr *fn);
52
53
54typedef void gen_helper_gvec_3(TCGv_ptr, TCGv_ptr, TCGv_ptr, TCGv_i32);
55void tcg_gen_gvec_3_ool(uint32_t dofs, uint32_t aofs, uint32_t bofs,
56 uint32_t oprsz, uint32_t maxsz, int32_t data,
57 gen_helper_gvec_3 *fn);
58
59
60typedef void gen_helper_gvec_4(TCGv_ptr, TCGv_ptr, TCGv_ptr,
61 TCGv_ptr, TCGv_i32);
62void tcg_gen_gvec_4_ool(uint32_t dofs, uint32_t aofs, uint32_t bofs,
63 uint32_t cofs, uint32_t oprsz, uint32_t maxsz,
64 int32_t data, gen_helper_gvec_4 *fn);
65
66
67typedef void gen_helper_gvec_5(TCGv_ptr, TCGv_ptr, TCGv_ptr, TCGv_ptr,
68 TCGv_ptr, TCGv_i32);
69void tcg_gen_gvec_5_ool(uint32_t dofs, uint32_t aofs, uint32_t bofs,
70 uint32_t cofs, uint32_t xofs, uint32_t oprsz,
71 uint32_t maxsz, int32_t data, gen_helper_gvec_5 *fn);
72
73typedef void gen_helper_gvec_3_ptr(TCGv_ptr, TCGv_ptr, TCGv_ptr,
74 TCGv_ptr, TCGv_i32);
75void tcg_gen_gvec_3_ptr(uint32_t dofs, uint32_t aofs, uint32_t bofs,
76 TCGv_ptr ptr, uint32_t oprsz, uint32_t maxsz,
77 int32_t data, gen_helper_gvec_3_ptr *fn);
78
79typedef void gen_helper_gvec_4_ptr(TCGv_ptr, TCGv_ptr, TCGv_ptr,
80 TCGv_ptr, TCGv_ptr, TCGv_i32);
81void tcg_gen_gvec_4_ptr(uint32_t dofs, uint32_t aofs, uint32_t bofs,
82 uint32_t cofs, TCGv_ptr ptr, uint32_t oprsz,
83 uint32_t maxsz, int32_t data,
84 gen_helper_gvec_4_ptr *fn);
85
86typedef void gen_helper_gvec_5_ptr(TCGv_ptr, TCGv_ptr, TCGv_ptr, TCGv_ptr,
87 TCGv_ptr, TCGv_ptr, TCGv_i32);
88void tcg_gen_gvec_5_ptr(uint32_t dofs, uint32_t aofs, uint32_t bofs,
89 uint32_t cofs, uint32_t eofs, TCGv_ptr ptr,
90 uint32_t oprsz, uint32_t maxsz, int32_t data,
91 gen_helper_gvec_5_ptr *fn);
92
93
94
95typedef struct {
96
97
98 void (*fni8)(TCGv_i64, TCGv_i64);
99 void (*fni4)(TCGv_i32, TCGv_i32);
100
101 void (*fniv)(unsigned, TCGv_vec, TCGv_vec);
102
103 gen_helper_gvec_2 *fno;
104
105 const TCGOpcode *opt_opc;
106
107 int32_t data;
108
109 uint8_t vece;
110
111 bool prefer_i64;
112
113 bool load_dest;
114} GVecGen2;
115
116typedef struct {
117
118
119 void (*fni8)(TCGv_i64, TCGv_i64, int64_t);
120 void (*fni4)(TCGv_i32, TCGv_i32, int32_t);
121
122 void (*fniv)(unsigned, TCGv_vec, TCGv_vec, int64_t);
123
124 gen_helper_gvec_2 *fno;
125
126 gen_helper_gvec_2i *fnoi;
127
128 const TCGOpcode *opt_opc;
129
130 uint8_t vece;
131
132 bool prefer_i64;
133
134 bool load_dest;
135} GVecGen2i;
136
137typedef struct {
138
139
140 void (*fni8)(TCGv_i64, TCGv_i64, TCGv_i64);
141 void (*fni4)(TCGv_i32, TCGv_i32, TCGv_i32);
142
143 void (*fniv)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec);
144
145 gen_helper_gvec_2i *fno;
146
147 const TCGOpcode *opt_opc;
148
149 uint32_t data;
150
151 uint8_t vece;
152
153 bool prefer_i64;
154
155 bool scalar_first;
156} GVecGen2s;
157
158typedef struct {
159
160
161 void (*fni8)(TCGv_i64, TCGv_i64, TCGv_i64);
162 void (*fni4)(TCGv_i32, TCGv_i32, TCGv_i32);
163
164 void (*fniv)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec);
165
166 gen_helper_gvec_3 *fno;
167
168 const TCGOpcode *opt_opc;
169
170 int32_t data;
171
172 uint8_t vece;
173
174 bool prefer_i64;
175
176 bool load_dest;
177} GVecGen3;
178
179typedef struct {
180
181
182
183
184 void (*fni8)(TCGv_i64, TCGv_i64, TCGv_i64, int64_t);
185 void (*fni4)(TCGv_i32, TCGv_i32, TCGv_i32, int32_t);
186
187 void (*fniv)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec, int64_t);
188
189 gen_helper_gvec_3 *fno;
190
191 const TCGOpcode *opt_opc;
192
193 uint8_t vece;
194
195 bool prefer_i64;
196
197 bool load_dest;
198} GVecGen3i;
199
200typedef struct {
201
202
203 void (*fni8)(TCGv_i64, TCGv_i64, TCGv_i64, TCGv_i64);
204 void (*fni4)(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_i32);
205
206 void (*fniv)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec, TCGv_vec);
207
208 gen_helper_gvec_4 *fno;
209
210 const TCGOpcode *opt_opc;
211
212 int32_t data;
213
214 uint8_t vece;
215
216 bool prefer_i64;
217
218 bool write_aofs;
219} GVecGen4;
220
221void tcg_gen_gvec_2(uint32_t dofs, uint32_t aofs,
222 uint32_t oprsz, uint32_t maxsz, const GVecGen2 *);
223void tcg_gen_gvec_2i(uint32_t dofs, uint32_t aofs, uint32_t oprsz,
224 uint32_t maxsz, int64_t c, const GVecGen2i *);
225void tcg_gen_gvec_2s(uint32_t dofs, uint32_t aofs, uint32_t oprsz,
226 uint32_t maxsz, TCGv_i64 c, const GVecGen2s *);
227void tcg_gen_gvec_3(uint32_t dofs, uint32_t aofs, uint32_t bofs,
228 uint32_t oprsz, uint32_t maxsz, const GVecGen3 *);
229void tcg_gen_gvec_3i(uint32_t dofs, uint32_t aofs, uint32_t bofs,
230 uint32_t oprsz, uint32_t maxsz, int64_t c,
231 const GVecGen3i *);
232void tcg_gen_gvec_4(uint32_t dofs, uint32_t aofs, uint32_t bofs, uint32_t cofs,
233 uint32_t oprsz, uint32_t maxsz, const GVecGen4 *);
234
235
236
237void tcg_gen_gvec_mov(unsigned vece, uint32_t dofs, uint32_t aofs,
238 uint32_t oprsz, uint32_t maxsz);
239void tcg_gen_gvec_not(unsigned vece, uint32_t dofs, uint32_t aofs,
240 uint32_t oprsz, uint32_t maxsz);
241void tcg_gen_gvec_neg(unsigned vece, uint32_t dofs, uint32_t aofs,
242 uint32_t oprsz, uint32_t maxsz);
243void tcg_gen_gvec_abs(unsigned vece, uint32_t dofs, uint32_t aofs,
244 uint32_t oprsz, uint32_t maxsz);
245
246void tcg_gen_gvec_add(unsigned vece, uint32_t dofs, uint32_t aofs,
247 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
248void tcg_gen_gvec_sub(unsigned vece, uint32_t dofs, uint32_t aofs,
249 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
250void tcg_gen_gvec_mul(unsigned vece, uint32_t dofs, uint32_t aofs,
251 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
252
253void tcg_gen_gvec_addi(unsigned vece, uint32_t dofs, uint32_t aofs,
254 int64_t c, uint32_t oprsz, uint32_t maxsz);
255void tcg_gen_gvec_muli(unsigned vece, uint32_t dofs, uint32_t aofs,
256 int64_t c, uint32_t oprsz, uint32_t maxsz);
257
258void tcg_gen_gvec_adds(unsigned vece, uint32_t dofs, uint32_t aofs,
259 TCGv_i64 c, uint32_t oprsz, uint32_t maxsz);
260void tcg_gen_gvec_subs(unsigned vece, uint32_t dofs, uint32_t aofs,
261 TCGv_i64 c, uint32_t oprsz, uint32_t maxsz);
262void tcg_gen_gvec_muls(unsigned vece, uint32_t dofs, uint32_t aofs,
263 TCGv_i64 c, uint32_t oprsz, uint32_t maxsz);
264
265
266void tcg_gen_gvec_ssadd(unsigned vece, uint32_t dofs, uint32_t aofs,
267 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
268void tcg_gen_gvec_sssub(unsigned vece, uint32_t dofs, uint32_t aofs,
269 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
270void tcg_gen_gvec_usadd(unsigned vece, uint32_t dofs, uint32_t aofs,
271 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
272void tcg_gen_gvec_ussub(unsigned vece, uint32_t dofs, uint32_t aofs,
273 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
274
275
276void tcg_gen_gvec_smin(unsigned vece, uint32_t dofs, uint32_t aofs,
277 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
278void tcg_gen_gvec_umin(unsigned vece, uint32_t dofs, uint32_t aofs,
279 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
280void tcg_gen_gvec_smax(unsigned vece, uint32_t dofs, uint32_t aofs,
281 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
282void tcg_gen_gvec_umax(unsigned vece, uint32_t dofs, uint32_t aofs,
283 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
284
285void tcg_gen_gvec_and(unsigned vece, uint32_t dofs, uint32_t aofs,
286 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
287void tcg_gen_gvec_or(unsigned vece, uint32_t dofs, uint32_t aofs,
288 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
289void tcg_gen_gvec_xor(unsigned vece, uint32_t dofs, uint32_t aofs,
290 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
291void tcg_gen_gvec_andc(unsigned vece, uint32_t dofs, uint32_t aofs,
292 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
293void tcg_gen_gvec_orc(unsigned vece, uint32_t dofs, uint32_t aofs,
294 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
295void tcg_gen_gvec_nand(unsigned vece, uint32_t dofs, uint32_t aofs,
296 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
297void tcg_gen_gvec_nor(unsigned vece, uint32_t dofs, uint32_t aofs,
298 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
299void tcg_gen_gvec_eqv(unsigned vece, uint32_t dofs, uint32_t aofs,
300 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
301
302void tcg_gen_gvec_andi(unsigned vece, uint32_t dofs, uint32_t aofs,
303 int64_t c, uint32_t oprsz, uint32_t maxsz);
304void tcg_gen_gvec_xori(unsigned vece, uint32_t dofs, uint32_t aofs,
305 int64_t c, uint32_t oprsz, uint32_t maxsz);
306void tcg_gen_gvec_ori(unsigned vece, uint32_t dofs, uint32_t aofs,
307 int64_t c, uint32_t oprsz, uint32_t maxsz);
308
309void tcg_gen_gvec_ands(unsigned vece, uint32_t dofs, uint32_t aofs,
310 TCGv_i64 c, uint32_t oprsz, uint32_t maxsz);
311void tcg_gen_gvec_xors(unsigned vece, uint32_t dofs, uint32_t aofs,
312 TCGv_i64 c, uint32_t oprsz, uint32_t maxsz);
313void tcg_gen_gvec_ors(unsigned vece, uint32_t dofs, uint32_t aofs,
314 TCGv_i64 c, uint32_t oprsz, uint32_t maxsz);
315
316void tcg_gen_gvec_dup_mem(unsigned vece, uint32_t dofs, uint32_t aofs,
317 uint32_t s, uint32_t m);
318void tcg_gen_gvec_dup_imm(unsigned vece, uint32_t dofs, uint32_t s,
319 uint32_t m, uint64_t imm);
320void tcg_gen_gvec_dup_i32(unsigned vece, uint32_t dofs, uint32_t s,
321 uint32_t m, TCGv_i32);
322void tcg_gen_gvec_dup_i64(unsigned vece, uint32_t dofs, uint32_t s,
323 uint32_t m, TCGv_i64);
324
325#if TARGET_LONG_BITS == 64
326# define tcg_gen_gvec_dup_tl tcg_gen_gvec_dup_i64
327#else
328# define tcg_gen_gvec_dup_tl tcg_gen_gvec_dup_i32
329#endif
330
331void tcg_gen_gvec_shli(unsigned vece, uint32_t dofs, uint32_t aofs,
332 int64_t shift, uint32_t oprsz, uint32_t maxsz);
333void tcg_gen_gvec_shri(unsigned vece, uint32_t dofs, uint32_t aofs,
334 int64_t shift, uint32_t oprsz, uint32_t maxsz);
335void tcg_gen_gvec_sari(unsigned vece, uint32_t dofs, uint32_t aofs,
336 int64_t shift, uint32_t oprsz, uint32_t maxsz);
337void tcg_gen_gvec_rotli(unsigned vece, uint32_t dofs, uint32_t aofs,
338 int64_t shift, uint32_t oprsz, uint32_t maxsz);
339void tcg_gen_gvec_rotri(unsigned vece, uint32_t dofs, uint32_t aofs,
340 int64_t shift, uint32_t oprsz, uint32_t maxsz);
341
342void tcg_gen_gvec_shls(unsigned vece, uint32_t dofs, uint32_t aofs,
343 TCGv_i32 shift, uint32_t oprsz, uint32_t maxsz);
344void tcg_gen_gvec_shrs(unsigned vece, uint32_t dofs, uint32_t aofs,
345 TCGv_i32 shift, uint32_t oprsz, uint32_t maxsz);
346void tcg_gen_gvec_sars(unsigned vece, uint32_t dofs, uint32_t aofs,
347 TCGv_i32 shift, uint32_t oprsz, uint32_t maxsz);
348void tcg_gen_gvec_rotls(unsigned vece, uint32_t dofs, uint32_t aofs,
349 TCGv_i32 shift, uint32_t oprsz, uint32_t maxsz);
350
351
352
353
354
355void tcg_gen_gvec_shlv(unsigned vece, uint32_t dofs, uint32_t aofs,
356 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
357void tcg_gen_gvec_shrv(unsigned vece, uint32_t dofs, uint32_t aofs,
358 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
359void tcg_gen_gvec_sarv(unsigned vece, uint32_t dofs, uint32_t aofs,
360 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
361void tcg_gen_gvec_rotlv(unsigned vece, uint32_t dofs, uint32_t aofs,
362 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
363void tcg_gen_gvec_rotrv(unsigned vece, uint32_t dofs, uint32_t aofs,
364 uint32_t bofs, uint32_t oprsz, uint32_t maxsz);
365
366void tcg_gen_gvec_cmp(TCGCond cond, unsigned vece, uint32_t dofs,
367 uint32_t aofs, uint32_t bofs,
368 uint32_t oprsz, uint32_t maxsz);
369
370
371
372
373void tcg_gen_gvec_bitsel(unsigned vece, uint32_t dofs, uint32_t aofs,
374 uint32_t bofs, uint32_t cofs,
375 uint32_t oprsz, uint32_t maxsz);
376
377
378
379
380
381
382
383void tcg_gen_vec_neg8_i64(TCGv_i64 d, TCGv_i64 a);
384void tcg_gen_vec_neg16_i64(TCGv_i64 d, TCGv_i64 a);
385void tcg_gen_vec_neg32_i64(TCGv_i64 d, TCGv_i64 a);
386
387void tcg_gen_vec_add8_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b);
388void tcg_gen_vec_add16_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b);
389void tcg_gen_vec_add32_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b);
390
391void tcg_gen_vec_sub8_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b);
392void tcg_gen_vec_sub16_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b);
393void tcg_gen_vec_sub32_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b);
394
395void tcg_gen_vec_shl8i_i64(TCGv_i64 d, TCGv_i64 a, int64_t);
396void tcg_gen_vec_shl16i_i64(TCGv_i64 d, TCGv_i64 a, int64_t);
397void tcg_gen_vec_shr8i_i64(TCGv_i64 d, TCGv_i64 a, int64_t);
398void tcg_gen_vec_shr16i_i64(TCGv_i64 d, TCGv_i64 a, int64_t);
399void tcg_gen_vec_sar8i_i64(TCGv_i64 d, TCGv_i64 a, int64_t);
400void tcg_gen_vec_sar16i_i64(TCGv_i64 d, TCGv_i64 a, int64_t);
401void tcg_gen_vec_rotl8i_i64(TCGv_i64 d, TCGv_i64 a, int64_t c);
402void tcg_gen_vec_rotl16i_i64(TCGv_i64 d, TCGv_i64 a, int64_t c);
403
404
405void tcg_gen_vec_add8_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b);
406void tcg_gen_vec_add16_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b);
407
408void tcg_gen_vec_sub8_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b);
409void tcg_gen_vec_sub16_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b);
410
411void tcg_gen_vec_shl8i_i32(TCGv_i32 d, TCGv_i32 a, int32_t);
412void tcg_gen_vec_shl16i_i32(TCGv_i32 d, TCGv_i32 a, int32_t);
413void tcg_gen_vec_shr8i_i32(TCGv_i32 d, TCGv_i32 a, int32_t);
414void tcg_gen_vec_shr16i_i32(TCGv_i32 d, TCGv_i32 a, int32_t);
415void tcg_gen_vec_sar8i_i32(TCGv_i32 d, TCGv_i32 a, int32_t);
416void tcg_gen_vec_sar16i_i32(TCGv_i32 d, TCGv_i32 a, int32_t);
417
418#if TARGET_LONG_BITS == 64
419#define tcg_gen_vec_add8_tl tcg_gen_vec_add8_i64
420#define tcg_gen_vec_sub8_tl tcg_gen_vec_sub8_i64
421#define tcg_gen_vec_add16_tl tcg_gen_vec_add16_i64
422#define tcg_gen_vec_sub16_tl tcg_gen_vec_sub16_i64
423#define tcg_gen_vec_add32_tl tcg_gen_vec_add32_i64
424#define tcg_gen_vec_sub32_tl tcg_gen_vec_sub32_i64
425#define tcg_gen_vec_shl8i_tl tcg_gen_vec_shl8i_i64
426#define tcg_gen_vec_shr8i_tl tcg_gen_vec_shr8i_i64
427#define tcg_gen_vec_sar8i_tl tcg_gen_vec_sar8i_i64
428#define tcg_gen_vec_shl16i_tl tcg_gen_vec_shl16i_i64
429#define tcg_gen_vec_shr16i_tl tcg_gen_vec_shr16i_i64
430#define tcg_gen_vec_sar16i_tl tcg_gen_vec_sar16i_i64
431
432#else
433#define tcg_gen_vec_add8_tl tcg_gen_vec_add8_i32
434#define tcg_gen_vec_sub8_tl tcg_gen_vec_sub8_i32
435#define tcg_gen_vec_add16_tl tcg_gen_vec_add16_i32
436#define tcg_gen_vec_sub16_tl tcg_gen_vec_sub16_i32
437#define tcg_gen_vec_add32_tl tcg_gen_add_i32
438#define tcg_gen_vec_sub32_tl tcg_gen_sub_i32
439#define tcg_gen_vec_shl8i_tl tcg_gen_vec_shl8i_i32
440#define tcg_gen_vec_shr8i_tl tcg_gen_vec_shr8i_i32
441#define tcg_gen_vec_sar8i_tl tcg_gen_vec_sar8i_i32
442#define tcg_gen_vec_shl16i_tl tcg_gen_vec_shl16i_i32
443#define tcg_gen_vec_shr16i_tl tcg_gen_vec_shr16i_i32
444#define tcg_gen_vec_sar16i_tl tcg_gen_vec_sar16i_i32
445#endif
446
447#endif
448