Message ID | 20210824201105.2303789-3-matheus.ferst@eldorado.org.br (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/ppc: Fix vextu[bhw][lr]x on big endian hosts | expand |
On Tue, Aug 24, 2021 at 05:11:05PM -0300, matheus.ferst@eldorado.org.br wrote: > From: Matheus Ferst <matheus.ferst@eldorado.org.br> > > These helpers shouldn't depend on the host endianness, as they only use > shifts, &s, and int128_* methods. > > Fixes: 60caf2216bf0 ("target-ppc: add vextu[bhw][lr]x instructions") > Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > target/ppc/int_helper.c | 38 ++++++++++---------------------------- > 1 file changed, 10 insertions(+), 28 deletions(-) > > diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c > index efa833ef64..c2d3248d1e 100644 > --- a/target/ppc/int_helper.c > +++ b/target/ppc/int_helper.c > @@ -1492,34 +1492,16 @@ void helper_vlogefp(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *b) > } > } > > -#if defined(HOST_WORDS_BIGENDIAN) > -#define VEXTU_X_DO(name, size, left) \ > - target_ulong glue(helper_, name)(target_ulong a, ppc_avr_t *b) \ > - { \ > - int index; \ > - if (left) { \ > - index = (a & 0xf) * 8; \ > - } else { \ > - index = ((15 - (a & 0xf) + 1) * 8) - size; \ > - } \ > - return int128_getlo(int128_rshift(b->s128, index)) & \ > - MAKE_64BIT_MASK(0, size); \ > - } > -#else > -#define VEXTU_X_DO(name, size, left) \ > - target_ulong glue(helper_, name)(target_ulong a, ppc_avr_t *b) \ > - { \ > - int index; \ > - if (left) { \ > - index = ((15 - (a & 0xf) + 1) * 8) - size; \ > - } else { \ > - index = (a & 0xf) * 8; \ > - } \ > - return int128_getlo(int128_rshift(b->s128, index)) & \ > - MAKE_64BIT_MASK(0, size); \ > - } > -#endif > - > +#define VEXTU_X_DO(name, size, left) \ > +target_ulong glue(helper_, name)(target_ulong a, ppc_avr_t *b) \ > +{ \ > + int index = (a & 0xf) * 8; \ > + if (left) { \ > + index = 128 - index - size; \ > + } \ > + return int128_getlo(int128_rshift(b->s128, index)) & \ > + MAKE_64BIT_MASK(0, size); \ > +} > VEXTU_X_DO(vextublx, 8, 1) > VEXTU_X_DO(vextuhlx, 16, 1) > VEXTU_X_DO(vextuwlx, 32, 1)
diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index efa833ef64..c2d3248d1e 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -1492,34 +1492,16 @@ void helper_vlogefp(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *b) } } -#if defined(HOST_WORDS_BIGENDIAN) -#define VEXTU_X_DO(name, size, left) \ - target_ulong glue(helper_, name)(target_ulong a, ppc_avr_t *b) \ - { \ - int index; \ - if (left) { \ - index = (a & 0xf) * 8; \ - } else { \ - index = ((15 - (a & 0xf) + 1) * 8) - size; \ - } \ - return int128_getlo(int128_rshift(b->s128, index)) & \ - MAKE_64BIT_MASK(0, size); \ - } -#else -#define VEXTU_X_DO(name, size, left) \ - target_ulong glue(helper_, name)(target_ulong a, ppc_avr_t *b) \ - { \ - int index; \ - if (left) { \ - index = ((15 - (a & 0xf) + 1) * 8) - size; \ - } else { \ - index = (a & 0xf) * 8; \ - } \ - return int128_getlo(int128_rshift(b->s128, index)) & \ - MAKE_64BIT_MASK(0, size); \ - } -#endif - +#define VEXTU_X_DO(name, size, left) \ +target_ulong glue(helper_, name)(target_ulong a, ppc_avr_t *b) \ +{ \ + int index = (a & 0xf) * 8; \ + if (left) { \ + index = 128 - index - size; \ + } \ + return int128_getlo(int128_rshift(b->s128, index)) & \ + MAKE_64BIT_MASK(0, size); \ +} VEXTU_X_DO(vextublx, 8, 1) VEXTU_X_DO(vextuhlx, 16, 1) VEXTU_X_DO(vextuwlx, 32, 1)