]> git.proxmox.com Git - mirror_qemu.git/blame - target/hexagon/gen_tcg_hvx.h
Hexagon (tests/tcg/hexagon) Add v68 HVX tests
[mirror_qemu.git] / target / hexagon / gen_tcg_hvx.h
CommitLineData
d51bcabe 1/*
c2b33d0b 2 * Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
d51bcabe
TS
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef HEXAGON_GEN_TCG_HVX_H
19#define HEXAGON_GEN_TCG_HVX_H
20
7ba7657b
TS
21/*
22 * Histogram instructions
23 *
24 * Note that these instructions operate directly on the vector registers
25 * and therefore happen after commit.
26 *
27 * The generate_<tag> function is called twice
28 * The first time is during the normal TCG generation
29 * ctx->pre_commit is true
30 * In the masked cases, we save the mask to the qtmp temporary
31 * Otherwise, there is nothing to do
32 * The second call is at the end of gen_commit_packet
33 * ctx->pre_commit is false
34 * Generate the call to the helper
35 */
36
37static inline void assert_vhist_tmp(DisasContext *ctx)
38{
39 /* vhist instructions require exactly one .tmp to be defined */
40 g_assert(ctx->tmp_vregs_idx == 1);
41}
42
43#define fGEN_TCG_V6_vhist(SHORTCODE) \
44 if (!ctx->pre_commit) { \
45 assert_vhist_tmp(ctx); \
46 gen_helper_vhist(cpu_env); \
47 }
48#define fGEN_TCG_V6_vhistq(SHORTCODE) \
49 do { \
50 if (ctx->pre_commit) { \
51 intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
52 tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
53 sizeof(MMVector), sizeof(MMVector)); \
54 } else { \
55 assert_vhist_tmp(ctx); \
56 gen_helper_vhistq(cpu_env); \
57 } \
58 } while (0)
59#define fGEN_TCG_V6_vwhist256(SHORTCODE) \
60 if (!ctx->pre_commit) { \
61 assert_vhist_tmp(ctx); \
62 gen_helper_vwhist256(cpu_env); \
63 }
64#define fGEN_TCG_V6_vwhist256q(SHORTCODE) \
65 do { \
66 if (ctx->pre_commit) { \
67 intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
68 tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
69 sizeof(MMVector), sizeof(MMVector)); \
70 } else { \
71 assert_vhist_tmp(ctx); \
72 gen_helper_vwhist256q(cpu_env); \
73 } \
74 } while (0)
75#define fGEN_TCG_V6_vwhist256_sat(SHORTCODE) \
76 if (!ctx->pre_commit) { \
77 assert_vhist_tmp(ctx); \
78 gen_helper_vwhist256_sat(cpu_env); \
79 }
80#define fGEN_TCG_V6_vwhist256q_sat(SHORTCODE) \
81 do { \
82 if (ctx->pre_commit) { \
83 intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
84 tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
85 sizeof(MMVector), sizeof(MMVector)); \
86 } else { \
87 assert_vhist_tmp(ctx); \
88 gen_helper_vwhist256q_sat(cpu_env); \
89 } \
90 } while (0)
91#define fGEN_TCG_V6_vwhist128(SHORTCODE) \
92 if (!ctx->pre_commit) { \
93 assert_vhist_tmp(ctx); \
94 gen_helper_vwhist128(cpu_env); \
95 }
96#define fGEN_TCG_V6_vwhist128q(SHORTCODE) \
97 do { \
98 if (ctx->pre_commit) { \
99 intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
100 tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
101 sizeof(MMVector), sizeof(MMVector)); \
102 } else { \
103 assert_vhist_tmp(ctx); \
104 gen_helper_vwhist128q(cpu_env); \
105 } \
106 } while (0)
107#define fGEN_TCG_V6_vwhist128m(SHORTCODE) \
108 if (!ctx->pre_commit) { \
109 TCGv tcgv_uiV = tcg_constant_tl(uiV); \
110 assert_vhist_tmp(ctx); \
111 gen_helper_vwhist128m(cpu_env, tcgv_uiV); \
112 }
113#define fGEN_TCG_V6_vwhist128qm(SHORTCODE) \
114 do { \
115 if (ctx->pre_commit) { \
116 intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
117 tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
118 sizeof(MMVector), sizeof(MMVector)); \
119 } else { \
120 TCGv tcgv_uiV = tcg_constant_tl(uiV); \
121 assert_vhist_tmp(ctx); \
122 gen_helper_vwhist128qm(cpu_env, tcgv_uiV); \
123 } \
124 } while (0)
125
126
32488192
TS
127#define fGEN_TCG_V6_vassign(SHORTCODE) \
128 tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
129 sizeof(MMVector), sizeof(MMVector))
130
131/* Vector conditional move */
132#define fGEN_TCG_VEC_CMOV(PRED) \
133 do { \
134 TCGv lsb = tcg_temp_new(); \
135 TCGLabel *false_label = gen_new_label(); \
32488192
TS
136 tcg_gen_andi_tl(lsb, PsV, 1); \
137 tcg_gen_brcondi_tl(TCG_COND_NE, lsb, PRED, false_label); \
32488192
TS
138 tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
139 sizeof(MMVector), sizeof(MMVector)); \
32488192 140 gen_set_label(false_label); \
32488192
TS
141 } while (0)
142
143
144/* Vector conditional move (true) */
145#define fGEN_TCG_V6_vcmov(SHORTCODE) \
146 fGEN_TCG_VEC_CMOV(1)
147
148/* Vector conditional move (false) */
149#define fGEN_TCG_V6_vncmov(SHORTCODE) \
150 fGEN_TCG_VEC_CMOV(0)
151
928f0ce4
TS
152/* Vector add - various forms */
153#define fGEN_TCG_V6_vaddb(SHORTCODE) \
154 tcg_gen_gvec_add(MO_8, VdV_off, VuV_off, VvV_off, \
155 sizeof(MMVector), sizeof(MMVector))
156
157#define fGEN_TCG_V6_vaddh(SHORTCYDE) \
158 tcg_gen_gvec_add(MO_16, VdV_off, VuV_off, VvV_off, \
159 sizeof(MMVector), sizeof(MMVector))
160
161#define fGEN_TCG_V6_vaddw(SHORTCODE) \
162 tcg_gen_gvec_add(MO_32, VdV_off, VuV_off, VvV_off, \
163 sizeof(MMVector), sizeof(MMVector))
164
165#define fGEN_TCG_V6_vaddb_dv(SHORTCODE) \
166 tcg_gen_gvec_add(MO_8, VddV_off, VuuV_off, VvvV_off, \
167 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
168
169#define fGEN_TCG_V6_vaddh_dv(SHORTCYDE) \
170 tcg_gen_gvec_add(MO_16, VddV_off, VuuV_off, VvvV_off, \
171 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
172
173#define fGEN_TCG_V6_vaddw_dv(SHORTCODE) \
174 tcg_gen_gvec_add(MO_32, VddV_off, VuuV_off, VvvV_off, \
175 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
176
177/* Vector sub - various forms */
178#define fGEN_TCG_V6_vsubb(SHORTCODE) \
179 tcg_gen_gvec_sub(MO_8, VdV_off, VuV_off, VvV_off, \
180 sizeof(MMVector), sizeof(MMVector))
181
182#define fGEN_TCG_V6_vsubh(SHORTCODE) \
183 tcg_gen_gvec_sub(MO_16, VdV_off, VuV_off, VvV_off, \
184 sizeof(MMVector), sizeof(MMVector))
185
186#define fGEN_TCG_V6_vsubw(SHORTCODE) \
187 tcg_gen_gvec_sub(MO_32, VdV_off, VuV_off, VvV_off, \
188 sizeof(MMVector), sizeof(MMVector))
189
190#define fGEN_TCG_V6_vsubb_dv(SHORTCODE) \
191 tcg_gen_gvec_sub(MO_8, VddV_off, VuuV_off, VvvV_off, \
192 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
193
194#define fGEN_TCG_V6_vsubh_dv(SHORTCODE) \
195 tcg_gen_gvec_sub(MO_16, VddV_off, VuuV_off, VvvV_off, \
196 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
197
198#define fGEN_TCG_V6_vsubw_dv(SHORTCODE) \
199 tcg_gen_gvec_sub(MO_32, VddV_off, VuuV_off, VvvV_off, \
200 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
201
8866635c
TS
202/* Vector shift right - various forms */
203#define fGEN_TCG_V6_vasrh(SHORTCODE) \
204 do { \
205 TCGv shift = tcg_temp_new(); \
206 tcg_gen_andi_tl(shift, RtV, 15); \
207 tcg_gen_gvec_sars(MO_16, VdV_off, VuV_off, shift, \
208 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
209 } while (0)
210
211#define fGEN_TCG_V6_vasrh_acc(SHORTCODE) \
212 do { \
213 intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
214 TCGv shift = tcg_temp_new(); \
215 tcg_gen_andi_tl(shift, RtV, 15); \
216 tcg_gen_gvec_sars(MO_16, tmpoff, VuV_off, shift, \
217 sizeof(MMVector), sizeof(MMVector)); \
218 tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
219 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
220 } while (0)
221
222#define fGEN_TCG_V6_vasrw(SHORTCODE) \
223 do { \
224 TCGv shift = tcg_temp_new(); \
225 tcg_gen_andi_tl(shift, RtV, 31); \
226 tcg_gen_gvec_sars(MO_32, VdV_off, VuV_off, shift, \
227 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
228 } while (0)
229
230#define fGEN_TCG_V6_vasrw_acc(SHORTCODE) \
231 do { \
232 intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
233 TCGv shift = tcg_temp_new(); \
234 tcg_gen_andi_tl(shift, RtV, 31); \
235 tcg_gen_gvec_sars(MO_32, tmpoff, VuV_off, shift, \
236 sizeof(MMVector), sizeof(MMVector)); \
237 tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
238 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
239 } while (0)
240
241#define fGEN_TCG_V6_vlsrb(SHORTCODE) \
242 do { \
243 TCGv shift = tcg_temp_new(); \
244 tcg_gen_andi_tl(shift, RtV, 7); \
245 tcg_gen_gvec_shrs(MO_8, VdV_off, VuV_off, shift, \
246 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
247 } while (0)
248
249#define fGEN_TCG_V6_vlsrh(SHORTCODE) \
250 do { \
251 TCGv shift = tcg_temp_new(); \
252 tcg_gen_andi_tl(shift, RtV, 15); \
253 tcg_gen_gvec_shrs(MO_16, VdV_off, VuV_off, shift, \
254 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
255 } while (0)
256
257#define fGEN_TCG_V6_vlsrw(SHORTCODE) \
258 do { \
259 TCGv shift = tcg_temp_new(); \
260 tcg_gen_andi_tl(shift, RtV, 31); \
261 tcg_gen_gvec_shrs(MO_32, VdV_off, VuV_off, shift, \
262 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
263 } while (0)
264
265/* Vector shift left - various forms */
266#define fGEN_TCG_V6_vaslb(SHORTCODE) \
267 do { \
268 TCGv shift = tcg_temp_new(); \
269 tcg_gen_andi_tl(shift, RtV, 7); \
270 tcg_gen_gvec_shls(MO_8, VdV_off, VuV_off, shift, \
271 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
272 } while (0)
273
274#define fGEN_TCG_V6_vaslh(SHORTCODE) \
275 do { \
276 TCGv shift = tcg_temp_new(); \
277 tcg_gen_andi_tl(shift, RtV, 15); \
278 tcg_gen_gvec_shls(MO_16, VdV_off, VuV_off, shift, \
279 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
280 } while (0)
281
282#define fGEN_TCG_V6_vaslh_acc(SHORTCODE) \
283 do { \
284 intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
285 TCGv shift = tcg_temp_new(); \
286 tcg_gen_andi_tl(shift, RtV, 15); \
287 tcg_gen_gvec_shls(MO_16, tmpoff, VuV_off, shift, \
288 sizeof(MMVector), sizeof(MMVector)); \
289 tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
290 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
291 } while (0)
292
293#define fGEN_TCG_V6_vaslw(SHORTCODE) \
294 do { \
295 TCGv shift = tcg_temp_new(); \
296 tcg_gen_andi_tl(shift, RtV, 31); \
297 tcg_gen_gvec_shls(MO_32, VdV_off, VuV_off, shift, \
298 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
299 } while (0)
300
301#define fGEN_TCG_V6_vaslw_acc(SHORTCODE) \
302 do { \
303 intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
304 TCGv shift = tcg_temp_new(); \
305 tcg_gen_andi_tl(shift, RtV, 31); \
306 tcg_gen_gvec_shls(MO_32, tmpoff, VuV_off, shift, \
307 sizeof(MMVector), sizeof(MMVector)); \
308 tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
309 sizeof(MMVector), sizeof(MMVector)); \
8866635c
TS
310 } while (0)
311
2c8ffa8f
TS
312/* Vector max - various forms */
313#define fGEN_TCG_V6_vmaxw(SHORTCODE) \
314 tcg_gen_gvec_smax(MO_32, VdV_off, VuV_off, VvV_off, \
315 sizeof(MMVector), sizeof(MMVector))
316#define fGEN_TCG_V6_vmaxh(SHORTCODE) \
317 tcg_gen_gvec_smax(MO_16, VdV_off, VuV_off, VvV_off, \
318 sizeof(MMVector), sizeof(MMVector))
319#define fGEN_TCG_V6_vmaxuh(SHORTCODE) \
320 tcg_gen_gvec_umax(MO_16, VdV_off, VuV_off, VvV_off, \
321 sizeof(MMVector), sizeof(MMVector))
322#define fGEN_TCG_V6_vmaxb(SHORTCODE) \
323 tcg_gen_gvec_smax(MO_8, VdV_off, VuV_off, VvV_off, \
324 sizeof(MMVector), sizeof(MMVector))
325#define fGEN_TCG_V6_vmaxub(SHORTCODE) \
326 tcg_gen_gvec_umax(MO_8, VdV_off, VuV_off, VvV_off, \
327 sizeof(MMVector), sizeof(MMVector))
328
329/* Vector min - various forms */
330#define fGEN_TCG_V6_vminw(SHORTCODE) \
331 tcg_gen_gvec_smin(MO_32, VdV_off, VuV_off, VvV_off, \
332 sizeof(MMVector), sizeof(MMVector))
333#define fGEN_TCG_V6_vminh(SHORTCODE) \
334 tcg_gen_gvec_smin(MO_16, VdV_off, VuV_off, VvV_off, \
335 sizeof(MMVector), sizeof(MMVector))
336#define fGEN_TCG_V6_vminuh(SHORTCODE) \
337 tcg_gen_gvec_umin(MO_16, VdV_off, VuV_off, VvV_off, \
338 sizeof(MMVector), sizeof(MMVector))
339#define fGEN_TCG_V6_vminb(SHORTCODE) \
340 tcg_gen_gvec_smin(MO_8, VdV_off, VuV_off, VvV_off, \
341 sizeof(MMVector), sizeof(MMVector))
342#define fGEN_TCG_V6_vminub(SHORTCODE) \
343 tcg_gen_gvec_umin(MO_8, VdV_off, VuV_off, VvV_off, \
344 sizeof(MMVector), sizeof(MMVector))
345
7f4808ec
TS
346/* Vector logical ops */
347#define fGEN_TCG_V6_vxor(SHORTCODE) \
348 tcg_gen_gvec_xor(MO_64, VdV_off, VuV_off, VvV_off, \
349 sizeof(MMVector), sizeof(MMVector))
350
351#define fGEN_TCG_V6_vand(SHORTCODE) \
352 tcg_gen_gvec_and(MO_64, VdV_off, VuV_off, VvV_off, \
353 sizeof(MMVector), sizeof(MMVector))
354
355#define fGEN_TCG_V6_vor(SHORTCODE) \
356 tcg_gen_gvec_or(MO_64, VdV_off, VuV_off, VvV_off, \
357 sizeof(MMVector), sizeof(MMVector))
358
359#define fGEN_TCG_V6_vnot(SHORTCODE) \
360 tcg_gen_gvec_not(MO_64, VdV_off, VuV_off, \
361 sizeof(MMVector), sizeof(MMVector))
362
363/* Q register logical ops */
364#define fGEN_TCG_V6_pred_or(SHORTCODE) \
365 tcg_gen_gvec_or(MO_64, QdV_off, QsV_off, QtV_off, \
366 sizeof(MMQReg), sizeof(MMQReg))
367
368#define fGEN_TCG_V6_pred_and(SHORTCODE) \
369 tcg_gen_gvec_and(MO_64, QdV_off, QsV_off, QtV_off, \
370 sizeof(MMQReg), sizeof(MMQReg))
371
372#define fGEN_TCG_V6_pred_xor(SHORTCODE) \
373 tcg_gen_gvec_xor(MO_64, QdV_off, QsV_off, QtV_off, \
374 sizeof(MMQReg), sizeof(MMQReg))
375
376#define fGEN_TCG_V6_pred_or_n(SHORTCODE) \
377 tcg_gen_gvec_orc(MO_64, QdV_off, QsV_off, QtV_off, \
378 sizeof(MMQReg), sizeof(MMQReg))
379
380#define fGEN_TCG_V6_pred_and_n(SHORTCODE) \
381 tcg_gen_gvec_andc(MO_64, QdV_off, QsV_off, QtV_off, \
382 sizeof(MMQReg), sizeof(MMQReg))
383
384#define fGEN_TCG_V6_pred_not(SHORTCODE) \
385 tcg_gen_gvec_not(MO_64, QdV_off, QsV_off, \
386 sizeof(MMQReg), sizeof(MMQReg))
387
242a2c2c
TS
388/* Vector compares */
389#define fGEN_TCG_VEC_CMP(COND, TYPE, SIZE) \
390 do { \
391 intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
392 tcg_gen_gvec_cmp(COND, TYPE, tmpoff, VuV_off, VvV_off, \
393 sizeof(MMVector), sizeof(MMVector)); \
394 vec_to_qvec(SIZE, QdV_off, tmpoff); \
395 } while (0)
396
397#define fGEN_TCG_V6_vgtw(SHORTCODE) \
398 fGEN_TCG_VEC_CMP(TCG_COND_GT, MO_32, 4)
399#define fGEN_TCG_V6_vgth(SHORTCODE) \
400 fGEN_TCG_VEC_CMP(TCG_COND_GT, MO_16, 2)
401#define fGEN_TCG_V6_vgtb(SHORTCODE) \
402 fGEN_TCG_VEC_CMP(TCG_COND_GT, MO_8, 1)
403
404#define fGEN_TCG_V6_vgtuw(SHORTCODE) \
405 fGEN_TCG_VEC_CMP(TCG_COND_GTU, MO_32, 4)
406#define fGEN_TCG_V6_vgtuh(SHORTCODE) \
407 fGEN_TCG_VEC_CMP(TCG_COND_GTU, MO_16, 2)
408#define fGEN_TCG_V6_vgtub(SHORTCODE) \
409 fGEN_TCG_VEC_CMP(TCG_COND_GTU, MO_8, 1)
410
411#define fGEN_TCG_V6_veqw(SHORTCODE) \
412 fGEN_TCG_VEC_CMP(TCG_COND_EQ, MO_32, 4)
413#define fGEN_TCG_V6_veqh(SHORTCODE) \
414 fGEN_TCG_VEC_CMP(TCG_COND_EQ, MO_16, 2)
415#define fGEN_TCG_V6_veqb(SHORTCODE) \
416 fGEN_TCG_VEC_CMP(TCG_COND_EQ, MO_8, 1)
417
418#define fGEN_TCG_VEC_CMP_OP(COND, TYPE, SIZE, OP) \
419 do { \
420 intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
421 intptr_t qoff = offsetof(CPUHexagonState, qtmp); \
422 tcg_gen_gvec_cmp(COND, TYPE, tmpoff, VuV_off, VvV_off, \
423 sizeof(MMVector), sizeof(MMVector)); \
424 vec_to_qvec(SIZE, qoff, tmpoff); \
425 OP(MO_64, QxV_off, QxV_off, qoff, sizeof(MMQReg), sizeof(MMQReg)); \
426 } while (0)
427
428#define fGEN_TCG_V6_vgtw_and(SHORTCODE) \
429 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_32, 4, tcg_gen_gvec_and)
430#define fGEN_TCG_V6_vgtw_or(SHORTCODE) \
431 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_32, 4, tcg_gen_gvec_or)
432#define fGEN_TCG_V6_vgtw_xor(SHORTCODE) \
433 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_32, 4, tcg_gen_gvec_xor)
434
435#define fGEN_TCG_V6_vgtuw_and(SHORTCODE) \
436 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_32, 4, tcg_gen_gvec_and)
437#define fGEN_TCG_V6_vgtuw_or(SHORTCODE) \
438 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_32, 4, tcg_gen_gvec_or)
439#define fGEN_TCG_V6_vgtuw_xor(SHORTCODE) \
440 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_32, 4, tcg_gen_gvec_xor)
441
442#define fGEN_TCG_V6_vgth_and(SHORTCODE) \
443 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_16, 2, tcg_gen_gvec_and)
444#define fGEN_TCG_V6_vgth_or(SHORTCODE) \
445 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_16, 2, tcg_gen_gvec_or)
446#define fGEN_TCG_V6_vgth_xor(SHORTCODE) \
447 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_16, 2, tcg_gen_gvec_xor)
448
449#define fGEN_TCG_V6_vgtuh_and(SHORTCODE) \
450 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_16, 2, tcg_gen_gvec_and)
451#define fGEN_TCG_V6_vgtuh_or(SHORTCODE) \
452 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_16, 2, tcg_gen_gvec_or)
453#define fGEN_TCG_V6_vgtuh_xor(SHORTCODE) \
454 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_16, 2, tcg_gen_gvec_xor)
455
456#define fGEN_TCG_V6_vgtb_and(SHORTCODE) \
457 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_8, 1, tcg_gen_gvec_and)
458#define fGEN_TCG_V6_vgtb_or(SHORTCODE) \
459 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_8, 1, tcg_gen_gvec_or)
460#define fGEN_TCG_V6_vgtb_xor(SHORTCODE) \
461 fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_8, 1, tcg_gen_gvec_xor)
462
463#define fGEN_TCG_V6_vgtub_and(SHORTCODE) \
464 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_8, 1, tcg_gen_gvec_and)
465#define fGEN_TCG_V6_vgtub_or(SHORTCODE) \
466 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_8, 1, tcg_gen_gvec_or)
467#define fGEN_TCG_V6_vgtub_xor(SHORTCODE) \
468 fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_8, 1, tcg_gen_gvec_xor)
469
470#define fGEN_TCG_V6_veqw_and(SHORTCODE) \
471 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_32, 4, tcg_gen_gvec_and)
472#define fGEN_TCG_V6_veqw_or(SHORTCODE) \
473 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_32, 4, tcg_gen_gvec_or)
474#define fGEN_TCG_V6_veqw_xor(SHORTCODE) \
475 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_32, 4, tcg_gen_gvec_xor)
476
477#define fGEN_TCG_V6_veqh_and(SHORTCODE) \
478 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_16, 2, tcg_gen_gvec_and)
479#define fGEN_TCG_V6_veqh_or(SHORTCODE) \
480 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_16, 2, tcg_gen_gvec_or)
481#define fGEN_TCG_V6_veqh_xor(SHORTCODE) \
482 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_16, 2, tcg_gen_gvec_xor)
483
484#define fGEN_TCG_V6_veqb_and(SHORTCODE) \
485 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_8, 1, tcg_gen_gvec_and)
486#define fGEN_TCG_V6_veqb_or(SHORTCODE) \
487 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_8, 1, tcg_gen_gvec_or)
488#define fGEN_TCG_V6_veqb_xor(SHORTCODE) \
489 fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_8, 1, tcg_gen_gvec_xor)
490
b0c2c182
TS
491/* Vector splat - various forms */
492#define fGEN_TCG_V6_lvsplatw(SHORTCODE) \
493 tcg_gen_gvec_dup_i32(MO_32, VdV_off, \
494 sizeof(MMVector), sizeof(MMVector), RtV)
495
496#define fGEN_TCG_V6_lvsplath(SHORTCODE) \
497 tcg_gen_gvec_dup_i32(MO_16, VdV_off, \
498 sizeof(MMVector), sizeof(MMVector), RtV)
499
500#define fGEN_TCG_V6_lvsplatb(SHORTCODE) \
501 tcg_gen_gvec_dup_i32(MO_8, VdV_off, \
502 sizeof(MMVector), sizeof(MMVector), RtV)
503
504/* Vector absolute value - various forms */
505#define fGEN_TCG_V6_vabsb(SHORTCODE) \
506 tcg_gen_gvec_abs(MO_8, VdV_off, VuV_off, \
507 sizeof(MMVector), sizeof(MMVector))
508
509#define fGEN_TCG_V6_vabsh(SHORTCODE) \
510 tcg_gen_gvec_abs(MO_16, VdV_off, VuV_off, \
511 sizeof(MMVector), sizeof(MMVector))
512
513#define fGEN_TCG_V6_vabsw(SHORTCODE) \
514 tcg_gen_gvec_abs(MO_32, VdV_off, VuV_off, \
515 sizeof(MMVector), sizeof(MMVector))
516
5d67ff6c
TS
517/* Vector loads */
518#define fGEN_TCG_V6_vL32b_pi(SHORTCODE) SHORTCODE
519#define fGEN_TCG_V6_vL32Ub_pi(SHORTCODE) SHORTCODE
520#define fGEN_TCG_V6_vL32b_cur_pi(SHORTCODE) SHORTCODE
521#define fGEN_TCG_V6_vL32b_tmp_pi(SHORTCODE) SHORTCODE
522#define fGEN_TCG_V6_vL32b_nt_pi(SHORTCODE) SHORTCODE
523#define fGEN_TCG_V6_vL32b_nt_cur_pi(SHORTCODE) SHORTCODE
524#define fGEN_TCG_V6_vL32b_nt_tmp_pi(SHORTCODE) SHORTCODE
525#define fGEN_TCG_V6_vL32b_ai(SHORTCODE) SHORTCODE
526#define fGEN_TCG_V6_vL32Ub_ai(SHORTCODE) SHORTCODE
527#define fGEN_TCG_V6_vL32b_cur_ai(SHORTCODE) SHORTCODE
528#define fGEN_TCG_V6_vL32b_tmp_ai(SHORTCODE) SHORTCODE
529#define fGEN_TCG_V6_vL32b_nt_ai(SHORTCODE) SHORTCODE
530#define fGEN_TCG_V6_vL32b_nt_cur_ai(SHORTCODE) SHORTCODE
531#define fGEN_TCG_V6_vL32b_nt_tmp_ai(SHORTCODE) SHORTCODE
532#define fGEN_TCG_V6_vL32b_ppu(SHORTCODE) SHORTCODE
533#define fGEN_TCG_V6_vL32Ub_ppu(SHORTCODE) SHORTCODE
534#define fGEN_TCG_V6_vL32b_cur_ppu(SHORTCODE) SHORTCODE
535#define fGEN_TCG_V6_vL32b_tmp_ppu(SHORTCODE) SHORTCODE
536#define fGEN_TCG_V6_vL32b_nt_ppu(SHORTCODE) SHORTCODE
537#define fGEN_TCG_V6_vL32b_nt_cur_ppu(SHORTCODE) SHORTCODE
538#define fGEN_TCG_V6_vL32b_nt_tmp_ppu(SHORTCODE) SHORTCODE
539
540/* Predicated vector loads */
541#define fGEN_TCG_PRED_VEC_LOAD(GET_EA, PRED, DSTOFF, INC) \
542 do { \
543 TCGv LSB = tcg_temp_new(); \
544 TCGLabel *false_label = gen_new_label(); \
5d67ff6c
TS
545 GET_EA; \
546 PRED; \
547 tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, false_label); \
5d67ff6c
TS
548 gen_vreg_load(ctx, DSTOFF, EA, true); \
549 INC; \
5d67ff6c 550 gen_set_label(false_label); \
5d67ff6c
TS
551 } while (0)
552
553#define fGEN_TCG_PRED_VEC_LOAD_pred_pi \
554 fGEN_TCG_PRED_VEC_LOAD(fLSBOLD(PvV), \
555 fEA_REG(RxV), \
556 VdV_off, \
557 fPM_I(RxV, siV * sizeof(MMVector)))
558#define fGEN_TCG_PRED_VEC_LOAD_npred_pi \
559 fGEN_TCG_PRED_VEC_LOAD(fLSBOLDNOT(PvV), \
560 fEA_REG(RxV), \
561 VdV_off, \
562 fPM_I(RxV, siV * sizeof(MMVector)))
563
564#define fGEN_TCG_V6_vL32b_pred_pi(SHORTCODE) \
565 fGEN_TCG_PRED_VEC_LOAD_pred_pi
566#define fGEN_TCG_V6_vL32b_npred_pi(SHORTCODE) \
567 fGEN_TCG_PRED_VEC_LOAD_npred_pi
568#define fGEN_TCG_V6_vL32b_cur_pred_pi(SHORTCODE) \
569 fGEN_TCG_PRED_VEC_LOAD_pred_pi
570#define fGEN_TCG_V6_vL32b_cur_npred_pi(SHORTCODE) \
571 fGEN_TCG_PRED_VEC_LOAD_npred_pi
572#define fGEN_TCG_V6_vL32b_tmp_pred_pi(SHORTCODE) \
573 fGEN_TCG_PRED_VEC_LOAD_pred_pi
574#define fGEN_TCG_V6_vL32b_tmp_npred_pi(SHORTCODE) \
575 fGEN_TCG_PRED_VEC_LOAD_npred_pi
576#define fGEN_TCG_V6_vL32b_nt_pred_pi(SHORTCODE) \
577 fGEN_TCG_PRED_VEC_LOAD_pred_pi
578#define fGEN_TCG_V6_vL32b_nt_npred_pi(SHORTCODE) \
579 fGEN_TCG_PRED_VEC_LOAD_npred_pi
580#define fGEN_TCG_V6_vL32b_nt_cur_pred_pi(SHORTCODE) \
581 fGEN_TCG_PRED_VEC_LOAD_pred_pi
582#define fGEN_TCG_V6_vL32b_nt_cur_npred_pi(SHORTCODE) \
583 fGEN_TCG_PRED_VEC_LOAD_npred_pi
584#define fGEN_TCG_V6_vL32b_nt_tmp_pred_pi(SHORTCODE) \
585 fGEN_TCG_PRED_VEC_LOAD_pred_pi
586#define fGEN_TCG_V6_vL32b_nt_tmp_npred_pi(SHORTCODE) \
587 fGEN_TCG_PRED_VEC_LOAD_npred_pi
588
589#define fGEN_TCG_PRED_VEC_LOAD_pred_ai \
590 fGEN_TCG_PRED_VEC_LOAD(fLSBOLD(PvV), \
591 fEA_RI(RtV, siV * sizeof(MMVector)), \
592 VdV_off, \
593 do {} while (0))
594#define fGEN_TCG_PRED_VEC_LOAD_npred_ai \
595 fGEN_TCG_PRED_VEC_LOAD(fLSBOLDNOT(PvV), \
596 fEA_RI(RtV, siV * sizeof(MMVector)), \
597 VdV_off, \
598 do {} while (0))
599
600#define fGEN_TCG_V6_vL32b_pred_ai(SHORTCODE) \
601 fGEN_TCG_PRED_VEC_LOAD_pred_ai
602#define fGEN_TCG_V6_vL32b_npred_ai(SHORTCODE) \
603 fGEN_TCG_PRED_VEC_LOAD_npred_ai
604#define fGEN_TCG_V6_vL32b_cur_pred_ai(SHORTCODE) \
605 fGEN_TCG_PRED_VEC_LOAD_pred_ai
606#define fGEN_TCG_V6_vL32b_cur_npred_ai(SHORTCODE) \
607 fGEN_TCG_PRED_VEC_LOAD_npred_ai
608#define fGEN_TCG_V6_vL32b_tmp_pred_ai(SHORTCODE) \
609 fGEN_TCG_PRED_VEC_LOAD_pred_ai
610#define fGEN_TCG_V6_vL32b_tmp_npred_ai(SHORTCODE) \
611 fGEN_TCG_PRED_VEC_LOAD_npred_ai
612#define fGEN_TCG_V6_vL32b_nt_pred_ai(SHORTCODE) \
613 fGEN_TCG_PRED_VEC_LOAD_pred_ai
614#define fGEN_TCG_V6_vL32b_nt_npred_ai(SHORTCODE) \
615 fGEN_TCG_PRED_VEC_LOAD_npred_ai
616#define fGEN_TCG_V6_vL32b_nt_cur_pred_ai(SHORTCODE) \
617 fGEN_TCG_PRED_VEC_LOAD_pred_ai
618#define fGEN_TCG_V6_vL32b_nt_cur_npred_ai(SHORTCODE) \
619 fGEN_TCG_PRED_VEC_LOAD_npred_ai
620#define fGEN_TCG_V6_vL32b_nt_tmp_pred_ai(SHORTCODE) \
621 fGEN_TCG_PRED_VEC_LOAD_pred_ai
622#define fGEN_TCG_V6_vL32b_nt_tmp_npred_ai(SHORTCODE) \
623 fGEN_TCG_PRED_VEC_LOAD_npred_ai
624
625#define fGEN_TCG_PRED_VEC_LOAD_pred_ppu \
626 fGEN_TCG_PRED_VEC_LOAD(fLSBOLD(PvV), \
627 fEA_REG(RxV), \
628 VdV_off, \
629 fPM_M(RxV, MuV))
630#define fGEN_TCG_PRED_VEC_LOAD_npred_ppu \
631 fGEN_TCG_PRED_VEC_LOAD(fLSBOLDNOT(PvV), \
632 fEA_REG(RxV), \
633 VdV_off, \
634 fPM_M(RxV, MuV))
635
636#define fGEN_TCG_V6_vL32b_pred_ppu(SHORTCODE) \
637 fGEN_TCG_PRED_VEC_LOAD_pred_ppu
638#define fGEN_TCG_V6_vL32b_npred_ppu(SHORTCODE) \
639 fGEN_TCG_PRED_VEC_LOAD_npred_ppu
640#define fGEN_TCG_V6_vL32b_cur_pred_ppu(SHORTCODE) \
641 fGEN_TCG_PRED_VEC_LOAD_pred_ppu
642#define fGEN_TCG_V6_vL32b_cur_npred_ppu(SHORTCODE) \
643 fGEN_TCG_PRED_VEC_LOAD_npred_ppu
644#define fGEN_TCG_V6_vL32b_tmp_pred_ppu(SHORTCODE) \
645 fGEN_TCG_PRED_VEC_LOAD_pred_ppu
646#define fGEN_TCG_V6_vL32b_tmp_npred_ppu(SHORTCODE) \
647 fGEN_TCG_PRED_VEC_LOAD_npred_ppu
648#define fGEN_TCG_V6_vL32b_nt_pred_ppu(SHORTCODE) \
649 fGEN_TCG_PRED_VEC_LOAD_pred_ppu
650#define fGEN_TCG_V6_vL32b_nt_npred_ppu(SHORTCODE) \
651 fGEN_TCG_PRED_VEC_LOAD_npred_ppu
652#define fGEN_TCG_V6_vL32b_nt_cur_pred_ppu(SHORTCODE) \
653 fGEN_TCG_PRED_VEC_LOAD_pred_ppu
654#define fGEN_TCG_V6_vL32b_nt_cur_npred_ppu(SHORTCODE) \
655 fGEN_TCG_PRED_VEC_LOAD_npred_ppu
656#define fGEN_TCG_V6_vL32b_nt_tmp_pred_ppu(SHORTCODE) \
657 fGEN_TCG_PRED_VEC_LOAD_pred_ppu
658#define fGEN_TCG_V6_vL32b_nt_tmp_npred_ppu(SHORTCODE) \
659 fGEN_TCG_PRED_VEC_LOAD_npred_ppu
660
6b4f7597
TS
661/* Vector stores */
662#define fGEN_TCG_V6_vS32b_pi(SHORTCODE) SHORTCODE
663#define fGEN_TCG_V6_vS32Ub_pi(SHORTCODE) SHORTCODE
664#define fGEN_TCG_V6_vS32b_nt_pi(SHORTCODE) SHORTCODE
665#define fGEN_TCG_V6_vS32b_ai(SHORTCODE) SHORTCODE
666#define fGEN_TCG_V6_vS32Ub_ai(SHORTCODE) SHORTCODE
667#define fGEN_TCG_V6_vS32b_nt_ai(SHORTCODE) SHORTCODE
668#define fGEN_TCG_V6_vS32b_ppu(SHORTCODE) SHORTCODE
669#define fGEN_TCG_V6_vS32Ub_ppu(SHORTCODE) SHORTCODE
670#define fGEN_TCG_V6_vS32b_nt_ppu(SHORTCODE) SHORTCODE
671
672/* New value vector stores */
673#define fGEN_TCG_NEWVAL_VEC_STORE(GET_EA, INC) \
674 do { \
675 GET_EA; \
1e536334 676 gen_vreg_store(ctx, EA, OsN_off, insn->slot, true); \
6b4f7597
TS
677 INC; \
678 } while (0)
679
680#define fGEN_TCG_NEWVAL_VEC_STORE_pi \
681 fGEN_TCG_NEWVAL_VEC_STORE(fEA_REG(RxV), fPM_I(RxV, siV * sizeof(MMVector)))
682
683#define fGEN_TCG_V6_vS32b_new_pi(SHORTCODE) \
684 fGEN_TCG_NEWVAL_VEC_STORE_pi
685#define fGEN_TCG_V6_vS32b_nt_new_pi(SHORTCODE) \
686 fGEN_TCG_NEWVAL_VEC_STORE_pi
687
688#define fGEN_TCG_NEWVAL_VEC_STORE_ai \
689 fGEN_TCG_NEWVAL_VEC_STORE(fEA_RI(RtV, siV * sizeof(MMVector)), \
690 do { } while (0))
691
692#define fGEN_TCG_V6_vS32b_new_ai(SHORTCODE) \
693 fGEN_TCG_NEWVAL_VEC_STORE_ai
694#define fGEN_TCG_V6_vS32b_nt_new_ai(SHORTCODE) \
695 fGEN_TCG_NEWVAL_VEC_STORE_ai
696
697#define fGEN_TCG_NEWVAL_VEC_STORE_ppu \
698 fGEN_TCG_NEWVAL_VEC_STORE(fEA_REG(RxV), fPM_M(RxV, MuV))
699
700#define fGEN_TCG_V6_vS32b_new_ppu(SHORTCODE) \
701 fGEN_TCG_NEWVAL_VEC_STORE_ppu
702#define fGEN_TCG_V6_vS32b_nt_new_ppu(SHORTCODE) \
703 fGEN_TCG_NEWVAL_VEC_STORE_ppu
704
705/* Predicated vector stores */
706#define fGEN_TCG_PRED_VEC_STORE(GET_EA, PRED, SRCOFF, ALIGN, INC) \
707 do { \
708 TCGv LSB = tcg_temp_new(); \
709 TCGLabel *false_label = gen_new_label(); \
6b4f7597
TS
710 GET_EA; \
711 PRED; \
712 tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, false_label); \
1e536334 713 gen_vreg_store(ctx, EA, SRCOFF, insn->slot, ALIGN); \
6b4f7597 714 INC; \
6b4f7597 715 gen_set_label(false_label); \
6b4f7597
TS
716 } while (0)
717
718#define fGEN_TCG_PRED_VEC_STORE_pred_pi(ALIGN) \
719 fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
720 fEA_REG(RxV), \
721 VsV_off, ALIGN, \
722 fPM_I(RxV, siV * sizeof(MMVector)))
723#define fGEN_TCG_PRED_VEC_STORE_npred_pi(ALIGN) \
724 fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
725 fEA_REG(RxV), \
726 VsV_off, ALIGN, \
727 fPM_I(RxV, siV * sizeof(MMVector)))
728#define fGEN_TCG_PRED_VEC_STORE_new_pred_pi \
729 fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
730 fEA_REG(RxV), \
731 OsN_off, true, \
732 fPM_I(RxV, siV * sizeof(MMVector)))
733#define fGEN_TCG_PRED_VEC_STORE_new_npred_pi \
734 fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
735 fEA_REG(RxV), \
736 OsN_off, true, \
737 fPM_I(RxV, siV * sizeof(MMVector)))
738
739#define fGEN_TCG_V6_vS32b_pred_pi(SHORTCODE) \
740 fGEN_TCG_PRED_VEC_STORE_pred_pi(true)
741#define fGEN_TCG_V6_vS32b_npred_pi(SHORTCODE) \
742 fGEN_TCG_PRED_VEC_STORE_npred_pi(true)
743#define fGEN_TCG_V6_vS32Ub_pred_pi(SHORTCODE) \
744 fGEN_TCG_PRED_VEC_STORE_pred_pi(false)
745#define fGEN_TCG_V6_vS32Ub_npred_pi(SHORTCODE) \
746 fGEN_TCG_PRED_VEC_STORE_npred_pi(false)
747#define fGEN_TCG_V6_vS32b_nt_pred_pi(SHORTCODE) \
748 fGEN_TCG_PRED_VEC_STORE_pred_pi(true)
749#define fGEN_TCG_V6_vS32b_nt_npred_pi(SHORTCODE) \
750 fGEN_TCG_PRED_VEC_STORE_npred_pi(true)
751#define fGEN_TCG_V6_vS32b_new_pred_pi(SHORTCODE) \
752 fGEN_TCG_PRED_VEC_STORE_new_pred_pi
753#define fGEN_TCG_V6_vS32b_new_npred_pi(SHORTCODE) \
754 fGEN_TCG_PRED_VEC_STORE_new_npred_pi
755#define fGEN_TCG_V6_vS32b_nt_new_pred_pi(SHORTCODE) \
756 fGEN_TCG_PRED_VEC_STORE_new_pred_pi
757#define fGEN_TCG_V6_vS32b_nt_new_npred_pi(SHORTCODE) \
758 fGEN_TCG_PRED_VEC_STORE_new_npred_pi
759
760#define fGEN_TCG_PRED_VEC_STORE_pred_ai(ALIGN) \
761 fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
762 fEA_RI(RtV, siV * sizeof(MMVector)), \
763 VsV_off, ALIGN, \
764 do { } while (0))
765#define fGEN_TCG_PRED_VEC_STORE_npred_ai(ALIGN) \
766 fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
767 fEA_RI(RtV, siV * sizeof(MMVector)), \
768 VsV_off, ALIGN, \
769 do { } while (0))
770#define fGEN_TCG_PRED_VEC_STORE_new_pred_ai \
771 fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
772 fEA_RI(RtV, siV * sizeof(MMVector)), \
773 OsN_off, true, \
774 do { } while (0))
775#define fGEN_TCG_PRED_VEC_STORE_new_npred_ai \
776 fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
777 fEA_RI(RtV, siV * sizeof(MMVector)), \
778 OsN_off, true, \
779 do { } while (0))
780
781#define fGEN_TCG_V6_vS32b_pred_ai(SHORTCODE) \
782 fGEN_TCG_PRED_VEC_STORE_pred_ai(true)
783#define fGEN_TCG_V6_vS32b_npred_ai(SHORTCODE) \
784 fGEN_TCG_PRED_VEC_STORE_npred_ai(true)
785#define fGEN_TCG_V6_vS32Ub_pred_ai(SHORTCODE) \
786 fGEN_TCG_PRED_VEC_STORE_pred_ai(false)
787#define fGEN_TCG_V6_vS32Ub_npred_ai(SHORTCODE) \
788 fGEN_TCG_PRED_VEC_STORE_npred_ai(false)
789#define fGEN_TCG_V6_vS32b_nt_pred_ai(SHORTCODE) \
790 fGEN_TCG_PRED_VEC_STORE_pred_ai(true)
791#define fGEN_TCG_V6_vS32b_nt_npred_ai(SHORTCODE) \
792 fGEN_TCG_PRED_VEC_STORE_npred_ai(true)
793#define fGEN_TCG_V6_vS32b_new_pred_ai(SHORTCODE) \
794 fGEN_TCG_PRED_VEC_STORE_new_pred_ai
795#define fGEN_TCG_V6_vS32b_new_npred_ai(SHORTCODE) \
796 fGEN_TCG_PRED_VEC_STORE_new_npred_ai
797#define fGEN_TCG_V6_vS32b_nt_new_pred_ai(SHORTCODE) \
798 fGEN_TCG_PRED_VEC_STORE_new_pred_ai
799#define fGEN_TCG_V6_vS32b_nt_new_npred_ai(SHORTCODE) \
800 fGEN_TCG_PRED_VEC_STORE_new_npred_ai
801
802#define fGEN_TCG_PRED_VEC_STORE_pred_ppu(ALIGN) \
803 fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
804 fEA_REG(RxV), \
805 VsV_off, ALIGN, \
806 fPM_M(RxV, MuV))
807#define fGEN_TCG_PRED_VEC_STORE_npred_ppu(ALIGN) \
808 fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
809 fEA_REG(RxV), \
810 VsV_off, ALIGN, \
811 fPM_M(RxV, MuV))
812#define fGEN_TCG_PRED_VEC_STORE_new_pred_ppu \
813 fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
814 fEA_REG(RxV), \
815 OsN_off, true, \
816 fPM_M(RxV, MuV))
817#define fGEN_TCG_PRED_VEC_STORE_new_npred_ppu \
818 fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
819 fEA_REG(RxV), \
820 OsN_off, true, \
821 fPM_M(RxV, MuV))
822
823#define fGEN_TCG_V6_vS32b_pred_ppu(SHORTCODE) \
824 fGEN_TCG_PRED_VEC_STORE_pred_ppu(true)
825#define fGEN_TCG_V6_vS32b_npred_ppu(SHORTCODE) \
826 fGEN_TCG_PRED_VEC_STORE_npred_ppu(true)
827#define fGEN_TCG_V6_vS32Ub_pred_ppu(SHORTCODE) \
828 fGEN_TCG_PRED_VEC_STORE_pred_ppu(false)
829#define fGEN_TCG_V6_vS32Ub_npred_ppu(SHORTCODE) \
830 fGEN_TCG_PRED_VEC_STORE_npred_ppu(false)
831#define fGEN_TCG_V6_vS32b_nt_pred_ppu(SHORTCODE) \
832 fGEN_TCG_PRED_VEC_STORE_pred_ppu(true)
833#define fGEN_TCG_V6_vS32b_nt_npred_ppu(SHORTCODE) \
834 fGEN_TCG_PRED_VEC_STORE_npred_ppu(true)
835#define fGEN_TCG_V6_vS32b_new_pred_ppu(SHORTCODE) \
836 fGEN_TCG_PRED_VEC_STORE_new_pred_ppu
837#define fGEN_TCG_V6_vS32b_new_npred_ppu(SHORTCODE) \
838 fGEN_TCG_PRED_VEC_STORE_new_npred_ppu
839#define fGEN_TCG_V6_vS32b_nt_new_pred_ppu(SHORTCODE) \
840 fGEN_TCG_PRED_VEC_STORE_new_pred_ppu
841#define fGEN_TCG_V6_vS32b_nt_new_npred_ppu(SHORTCODE) \
842 fGEN_TCG_PRED_VEC_STORE_new_npred_ppu
843
844/* Masked vector stores */
845#define fGEN_TCG_V6_vS32b_qpred_pi(SHORTCODE) SHORTCODE
846#define fGEN_TCG_V6_vS32b_nt_qpred_pi(SHORTCODE) SHORTCODE
847#define fGEN_TCG_V6_vS32b_qpred_ai(SHORTCODE) SHORTCODE
848#define fGEN_TCG_V6_vS32b_nt_qpred_ai(SHORTCODE) SHORTCODE
849#define fGEN_TCG_V6_vS32b_qpred_ppu(SHORTCODE) SHORTCODE
850#define fGEN_TCG_V6_vS32b_nt_qpred_ppu(SHORTCODE) SHORTCODE
851#define fGEN_TCG_V6_vS32b_nqpred_pi(SHORTCODE) SHORTCODE
852#define fGEN_TCG_V6_vS32b_nt_nqpred_pi(SHORTCODE) SHORTCODE
853#define fGEN_TCG_V6_vS32b_nqpred_ai(SHORTCODE) SHORTCODE
854#define fGEN_TCG_V6_vS32b_nt_nqpred_ai(SHORTCODE) SHORTCODE
855#define fGEN_TCG_V6_vS32b_nqpred_ppu(SHORTCODE) SHORTCODE
856#define fGEN_TCG_V6_vS32b_nt_nqpred_ppu(SHORTCODE) SHORTCODE
857
858/* Store release not modelled in qemu, but need to suppress compiler warnings */
859#define fGEN_TCG_V6_vS32b_srls_pi(SHORTCODE) \
860 do { \
861 siV = siV; \
862 } while (0)
863#define fGEN_TCG_V6_vS32b_srls_ai(SHORTCODE) \
864 do { \
865 RtV = RtV; \
866 siV = siV; \
867 } while (0)
868#define fGEN_TCG_V6_vS32b_srls_ppu(SHORTCODE) \
869 do { \
870 MuV = MuV; \
871 } while (0)
872
d51bcabe 873#endif