xref: /openbmc/qemu/target/hexagon/gen_tcg_hvx.h (revision 800af0aae1cfa456701c5fa1ef273ce47585179c)
1d51bcabeSTaylor Simpson /*
2c2b33d0bSTaylor Simpson  *  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
3d51bcabeSTaylor Simpson  *
4d51bcabeSTaylor Simpson  *  This program is free software; you can redistribute it and/or modify
5d51bcabeSTaylor Simpson  *  it under the terms of the GNU General Public License as published by
6d51bcabeSTaylor Simpson  *  the Free Software Foundation; either version 2 of the License, or
7d51bcabeSTaylor Simpson  *  (at your option) any later version.
8d51bcabeSTaylor Simpson  *
9d51bcabeSTaylor Simpson  *  This program is distributed in the hope that it will be useful,
10d51bcabeSTaylor Simpson  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11d51bcabeSTaylor Simpson  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12d51bcabeSTaylor Simpson  *  GNU General Public License for more details.
13d51bcabeSTaylor Simpson  *
14d51bcabeSTaylor Simpson  *  You should have received a copy of the GNU General Public License
15d51bcabeSTaylor Simpson  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
16d51bcabeSTaylor Simpson  */
17d51bcabeSTaylor Simpson 
18d51bcabeSTaylor Simpson #ifndef HEXAGON_GEN_TCG_HVX_H
19d51bcabeSTaylor Simpson #define HEXAGON_GEN_TCG_HVX_H
20d51bcabeSTaylor Simpson 
217ba7657bSTaylor Simpson /*
227ba7657bSTaylor Simpson  * Histogram instructions
237ba7657bSTaylor Simpson  *
247ba7657bSTaylor Simpson  * Note that these instructions operate directly on the vector registers
257ba7657bSTaylor Simpson  * and therefore happen after commit.
267ba7657bSTaylor Simpson  *
277ba7657bSTaylor Simpson  * The generate_<tag> function is called twice
287ba7657bSTaylor Simpson  *     The first time is during the normal TCG generation
297ba7657bSTaylor Simpson  *         ctx->pre_commit is true
307ba7657bSTaylor Simpson  *         In the masked cases, we save the mask to the qtmp temporary
317ba7657bSTaylor Simpson  *         Otherwise, there is nothing to do
327ba7657bSTaylor Simpson  *     The second call is at the end of gen_commit_packet
337ba7657bSTaylor Simpson  *         ctx->pre_commit is false
347ba7657bSTaylor Simpson  *         Generate the call to the helper
357ba7657bSTaylor Simpson  */
367ba7657bSTaylor Simpson 
assert_vhist_tmp(DisasContext * ctx)377ba7657bSTaylor Simpson static inline void assert_vhist_tmp(DisasContext *ctx)
387ba7657bSTaylor Simpson {
397ba7657bSTaylor Simpson     /* vhist instructions require exactly one .tmp to be defined */
407ba7657bSTaylor Simpson     g_assert(ctx->tmp_vregs_idx == 1);
417ba7657bSTaylor Simpson }
427ba7657bSTaylor Simpson 
437ba7657bSTaylor Simpson #define fGEN_TCG_V6_vhist(SHORTCODE) \
447ba7657bSTaylor Simpson     if (!ctx->pre_commit) { \
457ba7657bSTaylor Simpson         assert_vhist_tmp(ctx); \
46*ad75a51eSRichard Henderson         gen_helper_vhist(tcg_env); \
477ba7657bSTaylor Simpson     }
487ba7657bSTaylor Simpson #define fGEN_TCG_V6_vhistq(SHORTCODE) \
497ba7657bSTaylor Simpson     do { \
507ba7657bSTaylor Simpson         if (ctx->pre_commit) { \
517ba7657bSTaylor Simpson             intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
527ba7657bSTaylor Simpson             tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
537ba7657bSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
547ba7657bSTaylor Simpson         } else { \
557ba7657bSTaylor Simpson             assert_vhist_tmp(ctx); \
56*ad75a51eSRichard Henderson             gen_helper_vhistq(tcg_env); \
577ba7657bSTaylor Simpson         } \
587ba7657bSTaylor Simpson     } while (0)
597ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist256(SHORTCODE) \
607ba7657bSTaylor Simpson     if (!ctx->pre_commit) { \
617ba7657bSTaylor Simpson         assert_vhist_tmp(ctx); \
62*ad75a51eSRichard Henderson         gen_helper_vwhist256(tcg_env); \
637ba7657bSTaylor Simpson     }
647ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist256q(SHORTCODE) \
657ba7657bSTaylor Simpson     do { \
667ba7657bSTaylor Simpson         if (ctx->pre_commit) { \
677ba7657bSTaylor Simpson             intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
687ba7657bSTaylor Simpson             tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
697ba7657bSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
707ba7657bSTaylor Simpson         } else { \
717ba7657bSTaylor Simpson             assert_vhist_tmp(ctx); \
72*ad75a51eSRichard Henderson             gen_helper_vwhist256q(tcg_env); \
737ba7657bSTaylor Simpson         } \
747ba7657bSTaylor Simpson     } while (0)
757ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist256_sat(SHORTCODE) \
767ba7657bSTaylor Simpson     if (!ctx->pre_commit) { \
777ba7657bSTaylor Simpson         assert_vhist_tmp(ctx); \
78*ad75a51eSRichard Henderson         gen_helper_vwhist256_sat(tcg_env); \
797ba7657bSTaylor Simpson     }
807ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist256q_sat(SHORTCODE) \
817ba7657bSTaylor Simpson     do { \
827ba7657bSTaylor Simpson         if (ctx->pre_commit) { \
837ba7657bSTaylor Simpson             intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
847ba7657bSTaylor Simpson             tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
857ba7657bSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
867ba7657bSTaylor Simpson         } else { \
877ba7657bSTaylor Simpson             assert_vhist_tmp(ctx); \
88*ad75a51eSRichard Henderson             gen_helper_vwhist256q_sat(tcg_env); \
897ba7657bSTaylor Simpson         } \
907ba7657bSTaylor Simpson     } while (0)
917ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist128(SHORTCODE) \
927ba7657bSTaylor Simpson     if (!ctx->pre_commit) { \
937ba7657bSTaylor Simpson         assert_vhist_tmp(ctx); \
94*ad75a51eSRichard Henderson         gen_helper_vwhist128(tcg_env); \
957ba7657bSTaylor Simpson     }
967ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist128q(SHORTCODE) \
977ba7657bSTaylor Simpson     do { \
987ba7657bSTaylor Simpson         if (ctx->pre_commit) { \
997ba7657bSTaylor Simpson             intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
1007ba7657bSTaylor Simpson             tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
1017ba7657bSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
1027ba7657bSTaylor Simpson         } else { \
1037ba7657bSTaylor Simpson             assert_vhist_tmp(ctx); \
104*ad75a51eSRichard Henderson             gen_helper_vwhist128q(tcg_env); \
1057ba7657bSTaylor Simpson         } \
1067ba7657bSTaylor Simpson     } while (0)
1077ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist128m(SHORTCODE) \
1087ba7657bSTaylor Simpson     if (!ctx->pre_commit) { \
1097ba7657bSTaylor Simpson         TCGv tcgv_uiV = tcg_constant_tl(uiV); \
1107ba7657bSTaylor Simpson         assert_vhist_tmp(ctx); \
111*ad75a51eSRichard Henderson         gen_helper_vwhist128m(tcg_env, tcgv_uiV); \
1127ba7657bSTaylor Simpson     }
1137ba7657bSTaylor Simpson #define fGEN_TCG_V6_vwhist128qm(SHORTCODE) \
1147ba7657bSTaylor Simpson     do { \
1157ba7657bSTaylor Simpson         if (ctx->pre_commit) { \
1167ba7657bSTaylor Simpson             intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \
1177ba7657bSTaylor Simpson             tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \
1187ba7657bSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
1197ba7657bSTaylor Simpson         } else { \
1207ba7657bSTaylor Simpson             TCGv tcgv_uiV = tcg_constant_tl(uiV); \
1217ba7657bSTaylor Simpson             assert_vhist_tmp(ctx); \
122*ad75a51eSRichard Henderson             gen_helper_vwhist128qm(tcg_env, tcgv_uiV); \
1237ba7657bSTaylor Simpson         } \
1247ba7657bSTaylor Simpson     } while (0)
1257ba7657bSTaylor Simpson 
1267ba7657bSTaylor Simpson 
12732488192STaylor Simpson #define fGEN_TCG_V6_vassign(SHORTCODE) \
12832488192STaylor Simpson     tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
12932488192STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
13032488192STaylor Simpson 
131b2f20c2cSTaylor Simpson #define fGEN_TCG_V6_vassign_tmp(SHORTCODE) \
132b2f20c2cSTaylor Simpson     tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
133b2f20c2cSTaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
134b2f20c2cSTaylor Simpson 
135b2f20c2cSTaylor Simpson #define fGEN_TCG_V6_vcombine_tmp(SHORTCODE) \
136b2f20c2cSTaylor Simpson     do { \
137b2f20c2cSTaylor Simpson         tcg_gen_gvec_mov(MO_64, VddV_off, VvV_off, \
138b2f20c2cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
139b2f20c2cSTaylor Simpson         tcg_gen_gvec_mov(MO_64, VddV_off + sizeof(MMVector), VuV_off, \
140b2f20c2cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
141b2f20c2cSTaylor Simpson     } while (0)
142b2f20c2cSTaylor Simpson 
143d05d5eebSTaylor Simpson /*
144d05d5eebSTaylor Simpson  * Vector combine
145d05d5eebSTaylor Simpson  *
146d05d5eebSTaylor Simpson  * Be careful that the source and dest don't overlap
147d05d5eebSTaylor Simpson  */
148d05d5eebSTaylor Simpson #define fGEN_TCG_V6_vcombine(SHORTCODE) \
149d05d5eebSTaylor Simpson     do { \
150d05d5eebSTaylor Simpson         if (VddV_off != VuV_off) { \
151d05d5eebSTaylor Simpson             tcg_gen_gvec_mov(MO_64, VddV_off, VvV_off, \
152d05d5eebSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
153d05d5eebSTaylor Simpson             tcg_gen_gvec_mov(MO_64, VddV_off + sizeof(MMVector), VuV_off, \
154d05d5eebSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
155d05d5eebSTaylor Simpson         } else { \
156d05d5eebSTaylor Simpson             intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
157d05d5eebSTaylor Simpson             tcg_gen_gvec_mov(MO_64, tmpoff, VuV_off, \
158d05d5eebSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
159d05d5eebSTaylor Simpson             tcg_gen_gvec_mov(MO_64, VddV_off, VvV_off, \
160d05d5eebSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
161d05d5eebSTaylor Simpson             tcg_gen_gvec_mov(MO_64, VddV_off + sizeof(MMVector), tmpoff, \
162d05d5eebSTaylor Simpson                              sizeof(MMVector), sizeof(MMVector)); \
163d05d5eebSTaylor Simpson         } \
164d05d5eebSTaylor Simpson     } while (0)
165d05d5eebSTaylor Simpson 
16632488192STaylor Simpson /* Vector conditional move */
16732488192STaylor Simpson #define fGEN_TCG_VEC_CMOV(PRED) \
16832488192STaylor Simpson     do { \
16932488192STaylor Simpson         TCGv lsb = tcg_temp_new(); \
17032488192STaylor Simpson         TCGLabel *false_label = gen_new_label(); \
17132488192STaylor Simpson         tcg_gen_andi_tl(lsb, PsV, 1); \
17232488192STaylor Simpson         tcg_gen_brcondi_tl(TCG_COND_NE, lsb, PRED, false_label); \
17332488192STaylor Simpson         tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
17432488192STaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
17532488192STaylor Simpson         gen_set_label(false_label); \
17632488192STaylor Simpson     } while (0)
17732488192STaylor Simpson 
17832488192STaylor Simpson 
17932488192STaylor Simpson /* Vector conditional move (true) */
18032488192STaylor Simpson #define fGEN_TCG_V6_vcmov(SHORTCODE) \
18132488192STaylor Simpson     fGEN_TCG_VEC_CMOV(1)
18232488192STaylor Simpson 
18332488192STaylor Simpson /* Vector conditional move (false) */
18432488192STaylor Simpson #define fGEN_TCG_V6_vncmov(SHORTCODE) \
18532488192STaylor Simpson     fGEN_TCG_VEC_CMOV(0)
18632488192STaylor Simpson 
187928f0ce4STaylor Simpson /* Vector add - various forms */
188928f0ce4STaylor Simpson #define fGEN_TCG_V6_vaddb(SHORTCODE) \
189928f0ce4STaylor Simpson     tcg_gen_gvec_add(MO_8, VdV_off, VuV_off, VvV_off, \
190928f0ce4STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
191928f0ce4STaylor Simpson 
192928f0ce4STaylor Simpson #define fGEN_TCG_V6_vaddh(SHORTCYDE) \
193928f0ce4STaylor Simpson     tcg_gen_gvec_add(MO_16, VdV_off, VuV_off, VvV_off, \
194928f0ce4STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
195928f0ce4STaylor Simpson 
196928f0ce4STaylor Simpson #define fGEN_TCG_V6_vaddw(SHORTCODE) \
197928f0ce4STaylor Simpson     tcg_gen_gvec_add(MO_32, VdV_off, VuV_off, VvV_off, \
198928f0ce4STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
199928f0ce4STaylor Simpson 
200928f0ce4STaylor Simpson #define fGEN_TCG_V6_vaddb_dv(SHORTCODE) \
201928f0ce4STaylor Simpson     tcg_gen_gvec_add(MO_8, VddV_off, VuuV_off, VvvV_off, \
202928f0ce4STaylor Simpson                      sizeof(MMVector) * 2, sizeof(MMVector) * 2)
203928f0ce4STaylor Simpson 
204928f0ce4STaylor Simpson #define fGEN_TCG_V6_vaddh_dv(SHORTCYDE) \
205928f0ce4STaylor Simpson     tcg_gen_gvec_add(MO_16, VddV_off, VuuV_off, VvvV_off, \
206928f0ce4STaylor Simpson                      sizeof(MMVector) * 2, sizeof(MMVector) * 2)
207928f0ce4STaylor Simpson 
208928f0ce4STaylor Simpson #define fGEN_TCG_V6_vaddw_dv(SHORTCODE) \
209928f0ce4STaylor Simpson     tcg_gen_gvec_add(MO_32, VddV_off, VuuV_off, VvvV_off, \
210928f0ce4STaylor Simpson                      sizeof(MMVector) * 2, sizeof(MMVector) * 2)
211928f0ce4STaylor Simpson 
212928f0ce4STaylor Simpson /* Vector sub - various forms */
213928f0ce4STaylor Simpson #define fGEN_TCG_V6_vsubb(SHORTCODE) \
214928f0ce4STaylor Simpson     tcg_gen_gvec_sub(MO_8, VdV_off, VuV_off, VvV_off, \
215928f0ce4STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
216928f0ce4STaylor Simpson 
217928f0ce4STaylor Simpson #define fGEN_TCG_V6_vsubh(SHORTCODE) \
218928f0ce4STaylor Simpson     tcg_gen_gvec_sub(MO_16, VdV_off, VuV_off, VvV_off, \
219928f0ce4STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
220928f0ce4STaylor Simpson 
221928f0ce4STaylor Simpson #define fGEN_TCG_V6_vsubw(SHORTCODE) \
222928f0ce4STaylor Simpson     tcg_gen_gvec_sub(MO_32, VdV_off, VuV_off, VvV_off, \
223928f0ce4STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
224928f0ce4STaylor Simpson 
225928f0ce4STaylor Simpson #define fGEN_TCG_V6_vsubb_dv(SHORTCODE) \
226928f0ce4STaylor Simpson     tcg_gen_gvec_sub(MO_8, VddV_off, VuuV_off, VvvV_off, \
227928f0ce4STaylor Simpson                      sizeof(MMVector) * 2, sizeof(MMVector) * 2)
228928f0ce4STaylor Simpson 
229928f0ce4STaylor Simpson #define fGEN_TCG_V6_vsubh_dv(SHORTCODE) \
230928f0ce4STaylor Simpson     tcg_gen_gvec_sub(MO_16, VddV_off, VuuV_off, VvvV_off, \
231928f0ce4STaylor Simpson                      sizeof(MMVector) * 2, sizeof(MMVector) * 2)
232928f0ce4STaylor Simpson 
233928f0ce4STaylor Simpson #define fGEN_TCG_V6_vsubw_dv(SHORTCODE) \
234928f0ce4STaylor Simpson     tcg_gen_gvec_sub(MO_32, VddV_off, VuuV_off, VvvV_off, \
235928f0ce4STaylor Simpson                      sizeof(MMVector) * 2, sizeof(MMVector) * 2)
236928f0ce4STaylor Simpson 
2378866635cSTaylor Simpson /* Vector shift right - various forms */
2388866635cSTaylor Simpson #define fGEN_TCG_V6_vasrh(SHORTCODE) \
2398866635cSTaylor Simpson     do { \
2408866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2418866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 15); \
2428866635cSTaylor Simpson         tcg_gen_gvec_sars(MO_16, VdV_off, VuV_off, shift, \
2438866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2448866635cSTaylor Simpson     } while (0)
2458866635cSTaylor Simpson 
2468866635cSTaylor Simpson #define fGEN_TCG_V6_vasrh_acc(SHORTCODE) \
2478866635cSTaylor Simpson     do { \
2488866635cSTaylor Simpson         intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
2498866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2508866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 15); \
2518866635cSTaylor Simpson         tcg_gen_gvec_sars(MO_16, tmpoff, VuV_off, shift, \
2528866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2538866635cSTaylor Simpson         tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
2548866635cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
2558866635cSTaylor Simpson     } while (0)
2568866635cSTaylor Simpson 
2578866635cSTaylor Simpson #define fGEN_TCG_V6_vasrw(SHORTCODE) \
2588866635cSTaylor Simpson     do { \
2598866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2608866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 31); \
2618866635cSTaylor Simpson         tcg_gen_gvec_sars(MO_32, VdV_off, VuV_off, shift, \
2628866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2638866635cSTaylor Simpson     } while (0)
2648866635cSTaylor Simpson 
2658866635cSTaylor Simpson #define fGEN_TCG_V6_vasrw_acc(SHORTCODE) \
2668866635cSTaylor Simpson     do { \
2678866635cSTaylor Simpson         intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
2688866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2698866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 31); \
2708866635cSTaylor Simpson         tcg_gen_gvec_sars(MO_32, tmpoff, VuV_off, shift, \
2718866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2728866635cSTaylor Simpson         tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
2738866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2748866635cSTaylor Simpson     } while (0)
2758866635cSTaylor Simpson 
2768866635cSTaylor Simpson #define fGEN_TCG_V6_vlsrb(SHORTCODE) \
2778866635cSTaylor Simpson     do { \
2788866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2798866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 7); \
2808866635cSTaylor Simpson         tcg_gen_gvec_shrs(MO_8, VdV_off, VuV_off, shift, \
2818866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2828866635cSTaylor Simpson     } while (0)
2838866635cSTaylor Simpson 
2848866635cSTaylor Simpson #define fGEN_TCG_V6_vlsrh(SHORTCODE) \
2858866635cSTaylor Simpson     do { \
2868866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2878866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 15); \
2888866635cSTaylor Simpson         tcg_gen_gvec_shrs(MO_16, VdV_off, VuV_off, shift, \
2898866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2908866635cSTaylor Simpson     } while (0)
2918866635cSTaylor Simpson 
2928866635cSTaylor Simpson #define fGEN_TCG_V6_vlsrw(SHORTCODE) \
2938866635cSTaylor Simpson     do { \
2948866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
2958866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 31); \
2968866635cSTaylor Simpson         tcg_gen_gvec_shrs(MO_32, VdV_off, VuV_off, shift, \
2978866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
2988866635cSTaylor Simpson     } while (0)
2998866635cSTaylor Simpson 
3008866635cSTaylor Simpson /* Vector shift left - various forms */
3018866635cSTaylor Simpson #define fGEN_TCG_V6_vaslb(SHORTCODE) \
3028866635cSTaylor Simpson     do { \
3038866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
3048866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 7); \
3058866635cSTaylor Simpson         tcg_gen_gvec_shls(MO_8, VdV_off, VuV_off, shift, \
3068866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
3078866635cSTaylor Simpson     } while (0)
3088866635cSTaylor Simpson 
3098866635cSTaylor Simpson #define fGEN_TCG_V6_vaslh(SHORTCODE) \
3108866635cSTaylor Simpson     do { \
3118866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
3128866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 15); \
3138866635cSTaylor Simpson         tcg_gen_gvec_shls(MO_16, VdV_off, VuV_off, shift, \
3148866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
3158866635cSTaylor Simpson     } while (0)
3168866635cSTaylor Simpson 
3178866635cSTaylor Simpson #define fGEN_TCG_V6_vaslh_acc(SHORTCODE) \
3188866635cSTaylor Simpson     do { \
3198866635cSTaylor Simpson         intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
3208866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
3218866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 15); \
3228866635cSTaylor Simpson         tcg_gen_gvec_shls(MO_16, tmpoff, VuV_off, shift, \
3238866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
3248866635cSTaylor Simpson         tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
3258866635cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
3268866635cSTaylor Simpson     } while (0)
3278866635cSTaylor Simpson 
3288866635cSTaylor Simpson #define fGEN_TCG_V6_vaslw(SHORTCODE) \
3298866635cSTaylor Simpson     do { \
3308866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
3318866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 31); \
3328866635cSTaylor Simpson         tcg_gen_gvec_shls(MO_32, VdV_off, VuV_off, shift, \
3338866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
3348866635cSTaylor Simpson     } while (0)
3358866635cSTaylor Simpson 
3368866635cSTaylor Simpson #define fGEN_TCG_V6_vaslw_acc(SHORTCODE) \
3378866635cSTaylor Simpson     do { \
3388866635cSTaylor Simpson         intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
3398866635cSTaylor Simpson         TCGv shift = tcg_temp_new(); \
3408866635cSTaylor Simpson         tcg_gen_andi_tl(shift, RtV, 31); \
3418866635cSTaylor Simpson         tcg_gen_gvec_shls(MO_32, tmpoff, VuV_off, shift, \
3428866635cSTaylor Simpson                           sizeof(MMVector), sizeof(MMVector)); \
3438866635cSTaylor Simpson         tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
3448866635cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
3458866635cSTaylor Simpson     } while (0)
3468866635cSTaylor Simpson 
3472c8ffa8fSTaylor Simpson /* Vector max - various forms */
3482c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vmaxw(SHORTCODE) \
3492c8ffa8fSTaylor Simpson     tcg_gen_gvec_smax(MO_32, VdV_off, VuV_off, VvV_off, \
3502c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3512c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vmaxh(SHORTCODE) \
3522c8ffa8fSTaylor Simpson     tcg_gen_gvec_smax(MO_16, VdV_off, VuV_off, VvV_off, \
3532c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3542c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vmaxuh(SHORTCODE) \
3552c8ffa8fSTaylor Simpson     tcg_gen_gvec_umax(MO_16, VdV_off, VuV_off, VvV_off, \
3562c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3572c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vmaxb(SHORTCODE) \
3582c8ffa8fSTaylor Simpson     tcg_gen_gvec_smax(MO_8, VdV_off, VuV_off, VvV_off, \
3592c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3602c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vmaxub(SHORTCODE) \
3612c8ffa8fSTaylor Simpson     tcg_gen_gvec_umax(MO_8, VdV_off, VuV_off, VvV_off, \
3622c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3632c8ffa8fSTaylor Simpson 
3642c8ffa8fSTaylor Simpson /* Vector min - various forms */
3652c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vminw(SHORTCODE) \
3662c8ffa8fSTaylor Simpson     tcg_gen_gvec_smin(MO_32, VdV_off, VuV_off, VvV_off, \
3672c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3682c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vminh(SHORTCODE) \
3692c8ffa8fSTaylor Simpson     tcg_gen_gvec_smin(MO_16, VdV_off, VuV_off, VvV_off, \
3702c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3712c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vminuh(SHORTCODE) \
3722c8ffa8fSTaylor Simpson     tcg_gen_gvec_umin(MO_16, VdV_off, VuV_off, VvV_off, \
3732c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3742c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vminb(SHORTCODE) \
3752c8ffa8fSTaylor Simpson     tcg_gen_gvec_smin(MO_8, VdV_off, VuV_off, VvV_off, \
3762c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3772c8ffa8fSTaylor Simpson #define fGEN_TCG_V6_vminub(SHORTCODE) \
3782c8ffa8fSTaylor Simpson     tcg_gen_gvec_umin(MO_8, VdV_off, VuV_off, VvV_off, \
3792c8ffa8fSTaylor Simpson                       sizeof(MMVector), sizeof(MMVector))
3802c8ffa8fSTaylor Simpson 
3817f4808ecSTaylor Simpson /* Vector logical ops */
3827f4808ecSTaylor Simpson #define fGEN_TCG_V6_vxor(SHORTCODE) \
3837f4808ecSTaylor Simpson     tcg_gen_gvec_xor(MO_64, VdV_off, VuV_off, VvV_off, \
3847f4808ecSTaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
3857f4808ecSTaylor Simpson 
3867f4808ecSTaylor Simpson #define fGEN_TCG_V6_vand(SHORTCODE) \
3877f4808ecSTaylor Simpson     tcg_gen_gvec_and(MO_64, VdV_off, VuV_off, VvV_off, \
3887f4808ecSTaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
3897f4808ecSTaylor Simpson 
3907f4808ecSTaylor Simpson #define fGEN_TCG_V6_vor(SHORTCODE) \
3917f4808ecSTaylor Simpson     tcg_gen_gvec_or(MO_64, VdV_off, VuV_off, VvV_off, \
3927f4808ecSTaylor Simpson                     sizeof(MMVector), sizeof(MMVector))
3937f4808ecSTaylor Simpson 
3947f4808ecSTaylor Simpson #define fGEN_TCG_V6_vnot(SHORTCODE) \
3957f4808ecSTaylor Simpson     tcg_gen_gvec_not(MO_64, VdV_off, VuV_off, \
3967f4808ecSTaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
3977f4808ecSTaylor Simpson 
3987f4808ecSTaylor Simpson /* Q register logical ops */
3997f4808ecSTaylor Simpson #define fGEN_TCG_V6_pred_or(SHORTCODE) \
4007f4808ecSTaylor Simpson     tcg_gen_gvec_or(MO_64, QdV_off, QsV_off, QtV_off, \
4017f4808ecSTaylor Simpson                     sizeof(MMQReg), sizeof(MMQReg))
4027f4808ecSTaylor Simpson 
4037f4808ecSTaylor Simpson #define fGEN_TCG_V6_pred_and(SHORTCODE) \
4047f4808ecSTaylor Simpson     tcg_gen_gvec_and(MO_64, QdV_off, QsV_off, QtV_off, \
4057f4808ecSTaylor Simpson                      sizeof(MMQReg), sizeof(MMQReg))
4067f4808ecSTaylor Simpson 
4077f4808ecSTaylor Simpson #define fGEN_TCG_V6_pred_xor(SHORTCODE) \
4087f4808ecSTaylor Simpson     tcg_gen_gvec_xor(MO_64, QdV_off, QsV_off, QtV_off, \
4097f4808ecSTaylor Simpson                      sizeof(MMQReg), sizeof(MMQReg))
4107f4808ecSTaylor Simpson 
4117f4808ecSTaylor Simpson #define fGEN_TCG_V6_pred_or_n(SHORTCODE) \
4127f4808ecSTaylor Simpson     tcg_gen_gvec_orc(MO_64, QdV_off, QsV_off, QtV_off, \
4137f4808ecSTaylor Simpson                      sizeof(MMQReg), sizeof(MMQReg))
4147f4808ecSTaylor Simpson 
4157f4808ecSTaylor Simpson #define fGEN_TCG_V6_pred_and_n(SHORTCODE) \
4167f4808ecSTaylor Simpson     tcg_gen_gvec_andc(MO_64, QdV_off, QsV_off, QtV_off, \
4177f4808ecSTaylor Simpson                       sizeof(MMQReg), sizeof(MMQReg))
4187f4808ecSTaylor Simpson 
4197f4808ecSTaylor Simpson #define fGEN_TCG_V6_pred_not(SHORTCODE) \
4207f4808ecSTaylor Simpson     tcg_gen_gvec_not(MO_64, QdV_off, QsV_off, \
4217f4808ecSTaylor Simpson                      sizeof(MMQReg), sizeof(MMQReg))
4227f4808ecSTaylor Simpson 
423242a2c2cSTaylor Simpson /* Vector compares */
424242a2c2cSTaylor Simpson #define fGEN_TCG_VEC_CMP(COND, TYPE, SIZE) \
425242a2c2cSTaylor Simpson     do { \
426242a2c2cSTaylor Simpson         intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
427242a2c2cSTaylor Simpson         tcg_gen_gvec_cmp(COND, TYPE, tmpoff, VuV_off, VvV_off, \
428242a2c2cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
429242a2c2cSTaylor Simpson         vec_to_qvec(SIZE, QdV_off, tmpoff); \
430242a2c2cSTaylor Simpson     } while (0)
431242a2c2cSTaylor Simpson 
432242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtw(SHORTCODE) \
433242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_GT, MO_32, 4)
434242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgth(SHORTCODE) \
435242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_GT, MO_16, 2)
436242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtb(SHORTCODE) \
437242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_GT, MO_8, 1)
438242a2c2cSTaylor Simpson 
439242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuw(SHORTCODE) \
440242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_GTU, MO_32, 4)
441242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuh(SHORTCODE) \
442242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_GTU, MO_16, 2)
443242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtub(SHORTCODE) \
444242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_GTU, MO_8, 1)
445242a2c2cSTaylor Simpson 
446242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqw(SHORTCODE) \
447242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_EQ, MO_32, 4)
448242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqh(SHORTCODE) \
449242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_EQ, MO_16, 2)
450242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqb(SHORTCODE) \
451242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP(TCG_COND_EQ, MO_8, 1)
452242a2c2cSTaylor Simpson 
453242a2c2cSTaylor Simpson #define fGEN_TCG_VEC_CMP_OP(COND, TYPE, SIZE, OP) \
454242a2c2cSTaylor Simpson     do { \
455242a2c2cSTaylor Simpson         intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
456242a2c2cSTaylor Simpson         intptr_t qoff = offsetof(CPUHexagonState, qtmp); \
457242a2c2cSTaylor Simpson         tcg_gen_gvec_cmp(COND, TYPE, tmpoff, VuV_off, VvV_off, \
458242a2c2cSTaylor Simpson                          sizeof(MMVector), sizeof(MMVector)); \
459242a2c2cSTaylor Simpson         vec_to_qvec(SIZE, qoff, tmpoff); \
460242a2c2cSTaylor Simpson         OP(MO_64, QxV_off, QxV_off, qoff, sizeof(MMQReg), sizeof(MMQReg)); \
461242a2c2cSTaylor Simpson     } while (0)
462242a2c2cSTaylor Simpson 
463242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtw_and(SHORTCODE) \
464242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_32, 4, tcg_gen_gvec_and)
465242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtw_or(SHORTCODE) \
466242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_32, 4, tcg_gen_gvec_or)
467242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtw_xor(SHORTCODE) \
468242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_32, 4, tcg_gen_gvec_xor)
469242a2c2cSTaylor Simpson 
470242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuw_and(SHORTCODE) \
471242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_32, 4, tcg_gen_gvec_and)
472242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuw_or(SHORTCODE) \
473242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_32, 4, tcg_gen_gvec_or)
474242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuw_xor(SHORTCODE) \
475242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_32, 4, tcg_gen_gvec_xor)
476242a2c2cSTaylor Simpson 
477242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgth_and(SHORTCODE) \
478242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_16, 2, tcg_gen_gvec_and)
479242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgth_or(SHORTCODE) \
480242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_16, 2, tcg_gen_gvec_or)
481242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgth_xor(SHORTCODE) \
482242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_16, 2, tcg_gen_gvec_xor)
483242a2c2cSTaylor Simpson 
484242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuh_and(SHORTCODE) \
485242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_16, 2, tcg_gen_gvec_and)
486242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuh_or(SHORTCODE) \
487242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_16, 2, tcg_gen_gvec_or)
488242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtuh_xor(SHORTCODE) \
489242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_16, 2, tcg_gen_gvec_xor)
490242a2c2cSTaylor Simpson 
491242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtb_and(SHORTCODE) \
492242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_8, 1, tcg_gen_gvec_and)
493242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtb_or(SHORTCODE) \
494242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_8, 1, tcg_gen_gvec_or)
495242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtb_xor(SHORTCODE) \
496242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GT, MO_8, 1, tcg_gen_gvec_xor)
497242a2c2cSTaylor Simpson 
498242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtub_and(SHORTCODE) \
499242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_8, 1, tcg_gen_gvec_and)
500242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtub_or(SHORTCODE) \
501242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_8, 1, tcg_gen_gvec_or)
502242a2c2cSTaylor Simpson #define fGEN_TCG_V6_vgtub_xor(SHORTCODE) \
503242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_GTU, MO_8, 1, tcg_gen_gvec_xor)
504242a2c2cSTaylor Simpson 
505242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqw_and(SHORTCODE) \
506242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_32, 4, tcg_gen_gvec_and)
507242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqw_or(SHORTCODE) \
508242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_32, 4, tcg_gen_gvec_or)
509242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqw_xor(SHORTCODE) \
510242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_32, 4, tcg_gen_gvec_xor)
511242a2c2cSTaylor Simpson 
512242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqh_and(SHORTCODE) \
513242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_16, 2, tcg_gen_gvec_and)
514242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqh_or(SHORTCODE) \
515242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_16, 2, tcg_gen_gvec_or)
516242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqh_xor(SHORTCODE) \
517242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_16, 2, tcg_gen_gvec_xor)
518242a2c2cSTaylor Simpson 
519242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqb_and(SHORTCODE) \
520242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_8, 1, tcg_gen_gvec_and)
521242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqb_or(SHORTCODE) \
522242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_8, 1, tcg_gen_gvec_or)
523242a2c2cSTaylor Simpson #define fGEN_TCG_V6_veqb_xor(SHORTCODE) \
524242a2c2cSTaylor Simpson     fGEN_TCG_VEC_CMP_OP(TCG_COND_EQ, MO_8, 1, tcg_gen_gvec_xor)
525242a2c2cSTaylor Simpson 
526b0c2c182STaylor Simpson /* Vector splat - various forms */
527b0c2c182STaylor Simpson #define fGEN_TCG_V6_lvsplatw(SHORTCODE) \
528b0c2c182STaylor Simpson     tcg_gen_gvec_dup_i32(MO_32, VdV_off, \
529b0c2c182STaylor Simpson                          sizeof(MMVector), sizeof(MMVector), RtV)
530b0c2c182STaylor Simpson 
531b0c2c182STaylor Simpson #define fGEN_TCG_V6_lvsplath(SHORTCODE) \
532b0c2c182STaylor Simpson     tcg_gen_gvec_dup_i32(MO_16, VdV_off, \
533b0c2c182STaylor Simpson                          sizeof(MMVector), sizeof(MMVector), RtV)
534b0c2c182STaylor Simpson 
535b0c2c182STaylor Simpson #define fGEN_TCG_V6_lvsplatb(SHORTCODE) \
536b0c2c182STaylor Simpson     tcg_gen_gvec_dup_i32(MO_8, VdV_off, \
537b0c2c182STaylor Simpson                          sizeof(MMVector), sizeof(MMVector), RtV)
538b0c2c182STaylor Simpson 
539b0c2c182STaylor Simpson /* Vector absolute value - various forms */
540b0c2c182STaylor Simpson #define fGEN_TCG_V6_vabsb(SHORTCODE) \
541b0c2c182STaylor Simpson     tcg_gen_gvec_abs(MO_8, VdV_off, VuV_off, \
542b0c2c182STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
543b0c2c182STaylor Simpson 
544b0c2c182STaylor Simpson #define fGEN_TCG_V6_vabsh(SHORTCODE) \
545b0c2c182STaylor Simpson     tcg_gen_gvec_abs(MO_16, VdV_off, VuV_off, \
546b0c2c182STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
547b0c2c182STaylor Simpson 
548b0c2c182STaylor Simpson #define fGEN_TCG_V6_vabsw(SHORTCODE) \
549b0c2c182STaylor Simpson     tcg_gen_gvec_abs(MO_32, VdV_off, VuV_off, \
550b0c2c182STaylor Simpson                      sizeof(MMVector), sizeof(MMVector))
551b0c2c182STaylor Simpson 
5525d67ff6cSTaylor Simpson /* Vector loads */
5535d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_pi(SHORTCODE)                    SHORTCODE
5545d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32Ub_pi(SHORTCODE)                   SHORTCODE
5555d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_pi(SHORTCODE)                SHORTCODE
5565d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_pi(SHORTCODE)                SHORTCODE
5575d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_pi(SHORTCODE)                 SHORTCODE
5585d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_pi(SHORTCODE)             SHORTCODE
5595d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_pi(SHORTCODE)             SHORTCODE
5605d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_ai(SHORTCODE)                    SHORTCODE
5615d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32Ub_ai(SHORTCODE)                   SHORTCODE
5625d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_ai(SHORTCODE)                SHORTCODE
5635d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_ai(SHORTCODE)                SHORTCODE
5645d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_ai(SHORTCODE)                 SHORTCODE
5655d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_ai(SHORTCODE)             SHORTCODE
5665d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_ai(SHORTCODE)             SHORTCODE
5675d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_ppu(SHORTCODE)                   SHORTCODE
5685d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32Ub_ppu(SHORTCODE)                  SHORTCODE
5695d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_ppu(SHORTCODE)               SHORTCODE
5705d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_ppu(SHORTCODE)               SHORTCODE
5715d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_ppu(SHORTCODE)                SHORTCODE
5725d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_ppu(SHORTCODE)            SHORTCODE
5735d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_ppu(SHORTCODE)            SHORTCODE
5745d67ff6cSTaylor Simpson 
5755d67ff6cSTaylor Simpson /* Predicated vector loads */
5765d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD(GET_EA, PRED, DSTOFF, INC) \
5775d67ff6cSTaylor Simpson     do { \
5785d67ff6cSTaylor Simpson         TCGv LSB = tcg_temp_new(); \
5795d67ff6cSTaylor Simpson         TCGLabel *false_label = gen_new_label(); \
5805d67ff6cSTaylor Simpson         GET_EA; \
5815d67ff6cSTaylor Simpson         PRED; \
5825d67ff6cSTaylor Simpson         tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, false_label); \
5835d67ff6cSTaylor Simpson         gen_vreg_load(ctx, DSTOFF, EA, true); \
5845d67ff6cSTaylor Simpson         INC; \
5855d67ff6cSTaylor Simpson         gen_set_label(false_label); \
5865d67ff6cSTaylor Simpson     } while (0)
5875d67ff6cSTaylor Simpson 
5885d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD_pred_pi \
5895d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD(fLSBOLD(PvV), \
5905d67ff6cSTaylor Simpson                            fEA_REG(RxV), \
5915d67ff6cSTaylor Simpson                            VdV_off, \
5925d67ff6cSTaylor Simpson                            fPM_I(RxV, siV * sizeof(MMVector)))
5935d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD_npred_pi \
5945d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD(fLSBOLDNOT(PvV), \
5955d67ff6cSTaylor Simpson                            fEA_REG(RxV), \
5965d67ff6cSTaylor Simpson                            VdV_off, \
5975d67ff6cSTaylor Simpson                            fPM_I(RxV, siV * sizeof(MMVector)))
5985d67ff6cSTaylor Simpson 
5995d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_pred_pi(SHORTCODE) \
6005d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_pi
6015d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_npred_pi(SHORTCODE) \
6025d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_pi
6035d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_pred_pi(SHORTCODE) \
6045d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_pi
6055d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_npred_pi(SHORTCODE) \
6065d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_pi
6075d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_pred_pi(SHORTCODE) \
6085d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_pi
6095d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_npred_pi(SHORTCODE) \
6105d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_pi
6115d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_pred_pi(SHORTCODE) \
6125d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_pi
6135d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_npred_pi(SHORTCODE) \
6145d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_pi
6155d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_pred_pi(SHORTCODE) \
6165d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_pi
6175d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_npred_pi(SHORTCODE) \
6185d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_pi
6195d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_pred_pi(SHORTCODE) \
6205d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_pi
6215d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_npred_pi(SHORTCODE) \
6225d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_pi
6235d67ff6cSTaylor Simpson 
6245d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD_pred_ai \
6255d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD(fLSBOLD(PvV), \
6265d67ff6cSTaylor Simpson                            fEA_RI(RtV, siV * sizeof(MMVector)), \
6275d67ff6cSTaylor Simpson                            VdV_off, \
6285d67ff6cSTaylor Simpson                            do {} while (0))
6295d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD_npred_ai \
6305d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD(fLSBOLDNOT(PvV), \
6315d67ff6cSTaylor Simpson                            fEA_RI(RtV, siV * sizeof(MMVector)), \
6325d67ff6cSTaylor Simpson                            VdV_off, \
6335d67ff6cSTaylor Simpson                            do {} while (0))
6345d67ff6cSTaylor Simpson 
6355d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_pred_ai(SHORTCODE) \
6365d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ai
6375d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_npred_ai(SHORTCODE) \
6385d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ai
6395d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_pred_ai(SHORTCODE) \
6405d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ai
6415d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_npred_ai(SHORTCODE) \
6425d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ai
6435d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_pred_ai(SHORTCODE) \
6445d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ai
6455d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_npred_ai(SHORTCODE) \
6465d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ai
6475d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_pred_ai(SHORTCODE) \
6485d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ai
6495d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_npred_ai(SHORTCODE) \
6505d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ai
6515d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_pred_ai(SHORTCODE) \
6525d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ai
6535d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_npred_ai(SHORTCODE) \
6545d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ai
6555d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_pred_ai(SHORTCODE) \
6565d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ai
6575d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_npred_ai(SHORTCODE) \
6585d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ai
6595d67ff6cSTaylor Simpson 
6605d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD_pred_ppu \
6615d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD(fLSBOLD(PvV), \
6625d67ff6cSTaylor Simpson                            fEA_REG(RxV), \
6635d67ff6cSTaylor Simpson                            VdV_off, \
6645d67ff6cSTaylor Simpson                            fPM_M(RxV, MuV))
6655d67ff6cSTaylor Simpson #define fGEN_TCG_PRED_VEC_LOAD_npred_ppu \
6665d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD(fLSBOLDNOT(PvV), \
6675d67ff6cSTaylor Simpson                            fEA_REG(RxV), \
6685d67ff6cSTaylor Simpson                            VdV_off, \
6695d67ff6cSTaylor Simpson                            fPM_M(RxV, MuV))
6705d67ff6cSTaylor Simpson 
6715d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_pred_ppu(SHORTCODE) \
6725d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ppu
6735d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_npred_ppu(SHORTCODE) \
6745d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ppu
6755d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_pred_ppu(SHORTCODE) \
6765d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ppu
6775d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_cur_npred_ppu(SHORTCODE) \
6785d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ppu
6795d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_pred_ppu(SHORTCODE) \
6805d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ppu
6815d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_tmp_npred_ppu(SHORTCODE) \
6825d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ppu
6835d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_pred_ppu(SHORTCODE) \
6845d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ppu
6855d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_npred_ppu(SHORTCODE) \
6865d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ppu
6875d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_pred_ppu(SHORTCODE) \
6885d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ppu
6895d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_cur_npred_ppu(SHORTCODE) \
6905d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ppu
6915d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_pred_ppu(SHORTCODE) \
6925d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_pred_ppu
6935d67ff6cSTaylor Simpson #define fGEN_TCG_V6_vL32b_nt_tmp_npred_ppu(SHORTCODE) \
6945d67ff6cSTaylor Simpson     fGEN_TCG_PRED_VEC_LOAD_npred_ppu
6955d67ff6cSTaylor Simpson 
6966b4f7597STaylor Simpson /* Vector stores */
6976b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_pi(SHORTCODE)                    SHORTCODE
6986b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_pi(SHORTCODE)                   SHORTCODE
6996b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_pi(SHORTCODE)                 SHORTCODE
7006b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_ai(SHORTCODE)                    SHORTCODE
7016b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_ai(SHORTCODE)                   SHORTCODE
7026b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_ai(SHORTCODE)                 SHORTCODE
7036b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_ppu(SHORTCODE)                   SHORTCODE
7046b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_ppu(SHORTCODE)                  SHORTCODE
7056b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_ppu(SHORTCODE)                SHORTCODE
7066b4f7597STaylor Simpson 
7076b4f7597STaylor Simpson /* New value vector stores */
7086b4f7597STaylor Simpson #define fGEN_TCG_NEWVAL_VEC_STORE(GET_EA, INC) \
7096b4f7597STaylor Simpson     do { \
7106b4f7597STaylor Simpson         GET_EA; \
7111e536334STaylor Simpson         gen_vreg_store(ctx, EA, OsN_off, insn->slot, true); \
7126b4f7597STaylor Simpson         INC; \
7136b4f7597STaylor Simpson     } while (0)
7146b4f7597STaylor Simpson 
7156b4f7597STaylor Simpson #define fGEN_TCG_NEWVAL_VEC_STORE_pi \
7166b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE(fEA_REG(RxV), fPM_I(RxV, siV * sizeof(MMVector)))
7176b4f7597STaylor Simpson 
7186b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_pi(SHORTCODE) \
7196b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE_pi
7206b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_pi(SHORTCODE) \
7216b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE_pi
7226b4f7597STaylor Simpson 
7236b4f7597STaylor Simpson #define fGEN_TCG_NEWVAL_VEC_STORE_ai \
7246b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE(fEA_RI(RtV, siV * sizeof(MMVector)), \
7256b4f7597STaylor Simpson                               do { } while (0))
7266b4f7597STaylor Simpson 
7276b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_ai(SHORTCODE) \
7286b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE_ai
7296b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_ai(SHORTCODE) \
7306b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE_ai
7316b4f7597STaylor Simpson 
7326b4f7597STaylor Simpson #define fGEN_TCG_NEWVAL_VEC_STORE_ppu \
7336b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE(fEA_REG(RxV), fPM_M(RxV, MuV))
7346b4f7597STaylor Simpson 
7356b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_ppu(SHORTCODE) \
7366b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE_ppu
7376b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_ppu(SHORTCODE) \
7386b4f7597STaylor Simpson     fGEN_TCG_NEWVAL_VEC_STORE_ppu
7396b4f7597STaylor Simpson 
7406b4f7597STaylor Simpson /* Predicated vector stores */
7416b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE(GET_EA, PRED, SRCOFF, ALIGN, INC) \
7426b4f7597STaylor Simpson     do { \
7436b4f7597STaylor Simpson         TCGv LSB = tcg_temp_new(); \
7446b4f7597STaylor Simpson         TCGLabel *false_label = gen_new_label(); \
7456b4f7597STaylor Simpson         GET_EA; \
7466b4f7597STaylor Simpson         PRED; \
7476b4f7597STaylor Simpson         tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, false_label); \
7481e536334STaylor Simpson         gen_vreg_store(ctx, EA, SRCOFF, insn->slot, ALIGN); \
7496b4f7597STaylor Simpson         INC; \
7506b4f7597STaylor Simpson         gen_set_label(false_label); \
7516b4f7597STaylor Simpson     } while (0)
7526b4f7597STaylor Simpson 
7536b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_pred_pi(ALIGN) \
7546b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
7556b4f7597STaylor Simpson                             fEA_REG(RxV), \
7566b4f7597STaylor Simpson                             VsV_off, ALIGN, \
7576b4f7597STaylor Simpson                             fPM_I(RxV, siV * sizeof(MMVector)))
7586b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_npred_pi(ALIGN) \
7596b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
7606b4f7597STaylor Simpson                             fEA_REG(RxV), \
7616b4f7597STaylor Simpson                             VsV_off, ALIGN, \
7626b4f7597STaylor Simpson                             fPM_I(RxV, siV * sizeof(MMVector)))
7636b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_new_pred_pi \
7646b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
7656b4f7597STaylor Simpson                             fEA_REG(RxV), \
7666b4f7597STaylor Simpson                             OsN_off, true, \
7676b4f7597STaylor Simpson                             fPM_I(RxV, siV * sizeof(MMVector)))
7686b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_new_npred_pi \
7696b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
7706b4f7597STaylor Simpson                             fEA_REG(RxV), \
7716b4f7597STaylor Simpson                             OsN_off, true, \
7726b4f7597STaylor Simpson                             fPM_I(RxV, siV * sizeof(MMVector)))
7736b4f7597STaylor Simpson 
7746b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_pred_pi(SHORTCODE) \
7756b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_pi(true)
7766b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_npred_pi(SHORTCODE) \
7776b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_pi(true)
7786b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_pred_pi(SHORTCODE) \
7796b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_pi(false)
7806b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_npred_pi(SHORTCODE) \
7816b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_pi(false)
7826b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_pred_pi(SHORTCODE) \
7836b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_pi(true)
7846b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_npred_pi(SHORTCODE) \
7856b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_pi(true)
7866b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_pred_pi(SHORTCODE) \
7876b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_pred_pi
7886b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_npred_pi(SHORTCODE) \
7896b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_npred_pi
7906b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_pred_pi(SHORTCODE) \
7916b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_pred_pi
7926b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_npred_pi(SHORTCODE) \
7936b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_npred_pi
7946b4f7597STaylor Simpson 
7956b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_pred_ai(ALIGN) \
7966b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
7976b4f7597STaylor Simpson                             fEA_RI(RtV, siV * sizeof(MMVector)), \
7986b4f7597STaylor Simpson                             VsV_off, ALIGN, \
7996b4f7597STaylor Simpson                             do { } while (0))
8006b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_npred_ai(ALIGN) \
8016b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
8026b4f7597STaylor Simpson                             fEA_RI(RtV, siV * sizeof(MMVector)), \
8036b4f7597STaylor Simpson                             VsV_off, ALIGN, \
8046b4f7597STaylor Simpson                             do { } while (0))
8056b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_new_pred_ai \
8066b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
8076b4f7597STaylor Simpson                             fEA_RI(RtV, siV * sizeof(MMVector)), \
8086b4f7597STaylor Simpson                             OsN_off, true, \
8096b4f7597STaylor Simpson                             do { } while (0))
8106b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_new_npred_ai \
8116b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
8126b4f7597STaylor Simpson                             fEA_RI(RtV, siV * sizeof(MMVector)), \
8136b4f7597STaylor Simpson                             OsN_off, true, \
8146b4f7597STaylor Simpson                             do { } while (0))
8156b4f7597STaylor Simpson 
8166b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_pred_ai(SHORTCODE) \
8176b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_ai(true)
8186b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_npred_ai(SHORTCODE) \
8196b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_ai(true)
8206b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_pred_ai(SHORTCODE) \
8216b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_ai(false)
8226b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_npred_ai(SHORTCODE) \
8236b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_ai(false)
8246b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_pred_ai(SHORTCODE) \
8256b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_ai(true)
8266b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_npred_ai(SHORTCODE) \
8276b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_ai(true)
8286b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_pred_ai(SHORTCODE) \
8296b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_pred_ai
8306b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_npred_ai(SHORTCODE) \
8316b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_npred_ai
8326b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_pred_ai(SHORTCODE) \
8336b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_pred_ai
8346b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_npred_ai(SHORTCODE) \
8356b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_npred_ai
8366b4f7597STaylor Simpson 
8376b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_pred_ppu(ALIGN) \
8386b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
8396b4f7597STaylor Simpson                             fEA_REG(RxV), \
8406b4f7597STaylor Simpson                             VsV_off, ALIGN, \
8416b4f7597STaylor Simpson                             fPM_M(RxV, MuV))
8426b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_npred_ppu(ALIGN) \
8436b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
8446b4f7597STaylor Simpson                             fEA_REG(RxV), \
8456b4f7597STaylor Simpson                             VsV_off, ALIGN, \
8466b4f7597STaylor Simpson                             fPM_M(RxV, MuV))
8476b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_new_pred_ppu \
8486b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLD(PvV), \
8496b4f7597STaylor Simpson                             fEA_REG(RxV), \
8506b4f7597STaylor Simpson                             OsN_off, true, \
8516b4f7597STaylor Simpson                             fPM_M(RxV, MuV))
8526b4f7597STaylor Simpson #define fGEN_TCG_PRED_VEC_STORE_new_npred_ppu \
8536b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE(fLSBOLDNOT(PvV), \
8546b4f7597STaylor Simpson                             fEA_REG(RxV), \
8556b4f7597STaylor Simpson                             OsN_off, true, \
8566b4f7597STaylor Simpson                             fPM_M(RxV, MuV))
8576b4f7597STaylor Simpson 
8586b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_pred_ppu(SHORTCODE) \
8596b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_ppu(true)
8606b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_npred_ppu(SHORTCODE) \
8616b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_ppu(true)
8626b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_pred_ppu(SHORTCODE) \
8636b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_ppu(false)
8646b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32Ub_npred_ppu(SHORTCODE) \
8656b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_ppu(false)
8666b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_pred_ppu(SHORTCODE) \
8676b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_pred_ppu(true)
8686b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_npred_ppu(SHORTCODE) \
8696b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_npred_ppu(true)
8706b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_pred_ppu(SHORTCODE) \
8716b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_pred_ppu
8726b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_new_npred_ppu(SHORTCODE) \
8736b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_npred_ppu
8746b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_pred_ppu(SHORTCODE) \
8756b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_pred_ppu
8766b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_new_npred_ppu(SHORTCODE) \
8776b4f7597STaylor Simpson     fGEN_TCG_PRED_VEC_STORE_new_npred_ppu
8786b4f7597STaylor Simpson 
8796b4f7597STaylor Simpson /* Masked vector stores */
8806b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_qpred_pi(SHORTCODE)              SHORTCODE
8816b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_qpred_pi(SHORTCODE)           SHORTCODE
8826b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_qpred_ai(SHORTCODE)              SHORTCODE
8836b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_qpred_ai(SHORTCODE)           SHORTCODE
8846b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_qpred_ppu(SHORTCODE)             SHORTCODE
8856b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_qpred_ppu(SHORTCODE)          SHORTCODE
8866b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nqpred_pi(SHORTCODE)             SHORTCODE
8876b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_nqpred_pi(SHORTCODE)          SHORTCODE
8886b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nqpred_ai(SHORTCODE)             SHORTCODE
8896b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_nqpred_ai(SHORTCODE)          SHORTCODE
8906b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nqpred_ppu(SHORTCODE)            SHORTCODE
8916b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_nt_nqpred_ppu(SHORTCODE)         SHORTCODE
8926b4f7597STaylor Simpson 
8936b4f7597STaylor Simpson /* Store release not modelled in qemu, but need to suppress compiler warnings */
8946b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_srls_pi(SHORTCODE) \
8956b4f7597STaylor Simpson     do { \
8966b4f7597STaylor Simpson         siV = siV; \
8976b4f7597STaylor Simpson     } while (0)
8986b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_srls_ai(SHORTCODE) \
8996b4f7597STaylor Simpson     do { \
9006b4f7597STaylor Simpson         RtV = RtV; \
9016b4f7597STaylor Simpson         siV = siV; \
9026b4f7597STaylor Simpson     } while (0)
9036b4f7597STaylor Simpson #define fGEN_TCG_V6_vS32b_srls_ppu(SHORTCODE) \
9046b4f7597STaylor Simpson     do { \
9056b4f7597STaylor Simpson         MuV = MuV; \
9066b4f7597STaylor Simpson     } while (0)
9076b4f7597STaylor Simpson 
908d51bcabeSTaylor Simpson #endif
909