[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH v2 02/15] target/ppc: remove getVSR()/putVSR() fro
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [PATCH v2 02/15] target/ppc: remove getVSR()/putVSR() from mem_helper.c |
Date: |
Wed, 12 Jun 2019 11:04:59 +1000 |
User-agent: |
Mutt/1.11.4 (2019-03-13) |
On Sun, Jun 02, 2019 at 12:08:50PM +0100, Mark Cave-Ayland wrote:
> Since commit 8a14d31b00 "target/ppc: switch fpr/vsrl registers so all VSX
> registers are in host endian order" functions getVSR() and putVSR() which used
> to convert the VSR registers into host endian order are no longer required.
>
> Signed-off-by: Mark Cave-Ayland <address@hidden>
> ---
> target/ppc/mem_helper.c | 25 ++++++++++++++-----------
> 1 file changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/target/ppc/mem_helper.c b/target/ppc/mem_helper.c
> index 5b0f9ee50d..17a3c931a9 100644
> --- a/target/ppc/mem_helper.c
> +++ b/target/ppc/mem_helper.c
> @@ -417,26 +417,27 @@ STVE(stvewx, cpu_stl_data_ra, bswap32, u32)
> void helper_##name(CPUPPCState *env, target_ulong addr, \
> target_ulong xt_num, target_ulong rb) \
> { \
> - int i; \
> - ppc_vsr_t xt; \
> + ppc_vsr_t *xt = &env->vsr[xt_num]; \
> + ppc_vsr_t t; \
> uint64_t nb = GET_NB(rb); \
> + int i; \
> \
> - xt.s128 = int128_zero(); \
> + t.s128 = int128_zero(); \
> if (nb) { \
> nb = (nb >= 16) ? 16 : nb; \
> if (msr_le && !lj) { \
> for (i = 16; i > 16 - nb; i--) { \
> - xt.VsrB(i - 1) = cpu_ldub_data_ra(env, addr, GETPC()); \
> + t.VsrB(i - 1) = cpu_ldub_data_ra(env, addr, GETPC()); \
> addr = addr_add(env, addr, 1); \
> } \
> } else { \
> for (i = 0; i < nb; i++) { \
> - xt.VsrB(i) = cpu_ldub_data_ra(env, addr, GETPC()); \
> + t.VsrB(i) = cpu_ldub_data_ra(env, addr, GETPC()); \
> addr = addr_add(env, addr, 1); \
> } \
> } \
> } \
> - putVSR(xt_num, &xt, env); \
> + *xt = t; \
> }
>
> VSX_LXVL(lxvl, 0)
> @@ -447,26 +448,28 @@ VSX_LXVL(lxvll, 1)
> void helper_##name(CPUPPCState *env, target_ulong addr, \
> target_ulong xt_num, target_ulong rb) \
> { \
> - int i; \
> - ppc_vsr_t xt; \
> + ppc_vsr_t *xt = &env->vsr[xt_num]; \
> + ppc_vsr_t t = *xt; \
> target_ulong nb = GET_NB(rb); \
> + int i; \
> \
> if (!nb) { \
> return; \
> } \
> - getVSR(xt_num, &xt, env); \
> + \
> nb = (nb >= 16) ? 16 : nb; \
> if (msr_le && !lj) { \
> for (i = 16; i > 16 - nb; i--) { \
> - cpu_stb_data_ra(env, addr, xt.VsrB(i - 1), GETPC()); \
> + cpu_stb_data_ra(env, addr, t.VsrB(i - 1), GETPC()); \
> addr = addr_add(env, addr, 1); \
> } \
> } else { \
> for (i = 0; i < nb; i++) { \
> - cpu_stb_data_ra(env, addr, xt.VsrB(i), GETPC()); \
> + cpu_stb_data_ra(env, addr, t.VsrB(i), GETPC()) ; \
> addr = addr_add(env, addr, 1); \
> } \
> } \
> + *xt = t; \
Is this correct? AFAICT the original wasn't writing back, so why does
the new version?
> }
>
> VSX_STXVL(stxvl, 0)
--
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
[Qemu-ppc] [PATCH v2 03/15] target/ppc: remove getVSR()/putVSR() from int_helper.c, Mark Cave-Ayland, 2019/06/02
[Qemu-ppc] [PATCH v2 02/15] target/ppc: remove getVSR()/putVSR() from mem_helper.c, Mark Cave-Ayland, 2019/06/02
[Qemu-ppc] [PATCH v2 09/15] target/ppc: introduce GEN_VSX_HELPER_X1 macro to fpu_helper.c, Mark Cave-Ayland, 2019/06/02
[Qemu-ppc] [PATCH v2 08/15] target/ppc: introduce GEN_VSX_HELPER_X2_AB macro to fpu_helper.c, Mark Cave-Ayland, 2019/06/02
[Qemu-ppc] [PATCH v2 05/15] target/ppc: introduce GEN_VSX_HELPER_X3 macro to fpu_helper.c, Mark Cave-Ayland, 2019/06/02
[Qemu-ppc] [PATCH v2 07/15] target/ppc: introduce GEN_VSX_HELPER_X2 macro to fpu_helper.c, Mark Cave-Ayland, 2019/06/02