[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 34/34] target/ppc: convert vmin* and vmax* to ve
From: |
David Gibson |
Subject: |
Re: [Qemu-devel] [PATCH 34/34] target/ppc: convert vmin* and vmax* to vector operations |
Date: |
Wed, 19 Dec 2018 17:42:55 +1100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Mon, Dec 17, 2018 at 10:39:11PM -0800, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <address@hidden>
Acked-by: David Gibson <address@hidden>
> ---
> target/ppc/helper.h | 16 ---------------
> target/ppc/int_helper.c | 27 ------------------------
> target/ppc/translate/vmx-impl.inc.c | 32 ++++++++++++++---------------
> 3 files changed, 16 insertions(+), 59 deletions(-)
>
> diff --git a/target/ppc/helper.h b/target/ppc/helper.h
> index 3daf6bf863..18910d18a4 100644
> --- a/target/ppc/helper.h
> +++ b/target/ppc/helper.h
> @@ -117,22 +117,6 @@ DEF_HELPER_3(vabsduw, void, avr, avr, avr)
> DEF_HELPER_3(vavgsb, void, avr, avr, avr)
> DEF_HELPER_3(vavgsh, void, avr, avr, avr)
> DEF_HELPER_3(vavgsw, void, avr, avr, avr)
> -DEF_HELPER_3(vminsb, void, avr, avr, avr)
> -DEF_HELPER_3(vminsh, void, avr, avr, avr)
> -DEF_HELPER_3(vminsw, void, avr, avr, avr)
> -DEF_HELPER_3(vminsd, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxsb, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxsh, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxsw, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxsd, void, avr, avr, avr)
> -DEF_HELPER_3(vminub, void, avr, avr, avr)
> -DEF_HELPER_3(vminuh, void, avr, avr, avr)
> -DEF_HELPER_3(vminuw, void, avr, avr, avr)
> -DEF_HELPER_3(vminud, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxub, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxuh, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxuw, void, avr, avr, avr)
> -DEF_HELPER_3(vmaxud, void, avr, avr, avr)
> DEF_HELPER_4(vcmpequb, void, env, avr, avr, avr)
> DEF_HELPER_4(vcmpequh, void, env, avr, avr, avr)
> DEF_HELPER_4(vcmpequw, void, env, avr, avr, avr)
> diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
> index 22671c71e5..b9793364fd 100644
> --- a/target/ppc/int_helper.c
> +++ b/target/ppc/int_helper.c
> @@ -937,33 +937,6 @@ void helper_vmhraddshs(CPUPPCState *env, ppc_avr_t *r,
> ppc_avr_t *a,
> }
> }
>
> -#define VMINMAX_DO(name, compare, element) \
> - void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
> - { \
> - int i; \
> - \
> - for (i = 0; i < ARRAY_SIZE(r->element); i++) { \
> - if (a->element[i] compare b->element[i]) { \
> - r->element[i] = b->element[i]; \
> - } else { \
> - r->element[i] = a->element[i]; \
> - } \
> - } \
> - }
> -#define VMINMAX(suffix, element) \
> - VMINMAX_DO(min##suffix, >, element) \
> - VMINMAX_DO(max##suffix, <, element)
> -VMINMAX(sb, s8)
> -VMINMAX(sh, s16)
> -VMINMAX(sw, s32)
> -VMINMAX(sd, s64)
> -VMINMAX(ub, u8)
> -VMINMAX(uh, u16)
> -VMINMAX(uw, u32)
> -VMINMAX(ud, u64)
> -#undef VMINMAX_DO
> -#undef VMINMAX
> -
> void helper_vmladduhm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
> {
> int i;
> diff --git a/target/ppc/translate/vmx-impl.inc.c
> b/target/ppc/translate/vmx-impl.inc.c
> index c6a53a9f63..399d18707f 100644
> --- a/target/ppc/translate/vmx-impl.inc.c
> +++ b/target/ppc/translate/vmx-impl.inc.c
> @@ -412,22 +412,22 @@ GEN_VXFORM_V(vsububm, MO_8, tcg_gen_gvec_sub, 0, 16);
> GEN_VXFORM_V(vsubuhm, MO_16, tcg_gen_gvec_sub, 0, 17);
> GEN_VXFORM_V(vsubuwm, MO_32, tcg_gen_gvec_sub, 0, 18);
> GEN_VXFORM_V(vsubudm, MO_64, tcg_gen_gvec_sub, 0, 19);
> -GEN_VXFORM(vmaxub, 1, 0);
> -GEN_VXFORM(vmaxuh, 1, 1);
> -GEN_VXFORM(vmaxuw, 1, 2);
> -GEN_VXFORM(vmaxud, 1, 3);
> -GEN_VXFORM(vmaxsb, 1, 4);
> -GEN_VXFORM(vmaxsh, 1, 5);
> -GEN_VXFORM(vmaxsw, 1, 6);
> -GEN_VXFORM(vmaxsd, 1, 7);
> -GEN_VXFORM(vminub, 1, 8);
> -GEN_VXFORM(vminuh, 1, 9);
> -GEN_VXFORM(vminuw, 1, 10);
> -GEN_VXFORM(vminud, 1, 11);
> -GEN_VXFORM(vminsb, 1, 12);
> -GEN_VXFORM(vminsh, 1, 13);
> -GEN_VXFORM(vminsw, 1, 14);
> -GEN_VXFORM(vminsd, 1, 15);
> +GEN_VXFORM_V(vmaxub, MO_8, tcg_gen_gvec_umax, 1, 0);
> +GEN_VXFORM_V(vmaxuh, MO_16, tcg_gen_gvec_umax, 1, 1);
> +GEN_VXFORM_V(vmaxuw, MO_32, tcg_gen_gvec_umax, 1, 2);
> +GEN_VXFORM_V(vmaxud, MO_64, tcg_gen_gvec_umax, 1, 3);
> +GEN_VXFORM_V(vmaxsb, MO_8, tcg_gen_gvec_smax, 1, 4);
> +GEN_VXFORM_V(vmaxsh, MO_16, tcg_gen_gvec_smax, 1, 5);
> +GEN_VXFORM_V(vmaxsw, MO_32, tcg_gen_gvec_smax, 1, 6);
> +GEN_VXFORM_V(vmaxsd, MO_64, tcg_gen_gvec_smax, 1, 7);
> +GEN_VXFORM_V(vminub, MO_8, tcg_gen_gvec_umin, 1, 8);
> +GEN_VXFORM_V(vminuh, MO_16, tcg_gen_gvec_umin, 1, 9);
> +GEN_VXFORM_V(vminuw, MO_32, tcg_gen_gvec_umin, 1, 10);
> +GEN_VXFORM_V(vminud, MO_64, tcg_gen_gvec_umin, 1, 11);
> +GEN_VXFORM_V(vminsb, MO_8, tcg_gen_gvec_smin, 1, 12);
> +GEN_VXFORM_V(vminsh, MO_16, tcg_gen_gvec_smin, 1, 13);
> +GEN_VXFORM_V(vminsw, MO_32, tcg_gen_gvec_smin, 1, 14);
> +GEN_VXFORM_V(vminsd, MO_64, tcg_gen_gvec_smin, 1, 15);
> GEN_VXFORM(vavgub, 1, 16);
> GEN_VXFORM(vabsdub, 1, 16);
> GEN_VXFORM_DUAL(vavgub, PPC_ALTIVEC, PPC_NONE, \
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
- Re: [Qemu-devel] [PATCH 31/34] target/ppc: Add set_vscr_sat, (continued)
- [Qemu-devel] [PATCH 22/34] target/ppc: convert VSX logical operations to vector operations, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 30/34] target/ppc: Use mtvscr/mfvscr for vmstate, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 18/34] target/ppc: convert vaddu[b, h, w, d] and vsubu[b, h, w, d] over to use vector operations, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 32/34] target/ppc: Split out VSCR_SAT to a vector field, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 34/34] target/ppc: convert vmin* and vmax* to vector operations, Richard Henderson, 2018/12/18
- Re: [Qemu-devel] [PATCH 34/34] target/ppc: convert vmin* and vmax* to vector operations,
David Gibson <=
- [Qemu-devel] [PATCH 02/34] target/arm: Rely on optimization within tcg_gen_gvec_or, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 14/34] target/ppc: switch FPR, VMX and VSX helpers to access data directly from cpu_env, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 27/34] target/ppc: Use helper_mtvscr for reset and gdb, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 29/34] target/ppc: Add helper_mfvscr, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 07/34] tcg: Add opcodes for vector minmax arithmetic, Richard Henderson, 2018/12/18
- [Qemu-devel] [PATCH 33/34] target/ppc: convert vadd*s and vsub*s to vector operations, Richard Henderson, 2018/12/18