qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 6/9] target/ppc: Fix vslv and vsrv


From: David Gibson
Subject: Re: [Qemu-devel] [PATCH 6/9] target/ppc: Fix vslv and vsrv
Date: Tue, 7 May 2019 15:23:58 +1000
User-agent: Mutt/1.11.4 (2019-03-13)

On Tue, May 07, 2019 at 10:48:08AM +1000, Anton Blanchard wrote:
> vslv and vsrv are broken on little endian, we append 00 to the
> high byte not the low byte. Fix it by using the VsrB() accessor.
> 
> Signed-off-by: Anton Blanchard <address@hidden>

Applied, thanks.

> ---
>  target/ppc/int_helper.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
> index f6a088ac08..fd715b4076 100644
> --- a/target/ppc/int_helper.c
> +++ b/target/ppc/int_helper.c
> @@ -1800,10 +1800,10 @@ void helper_vslv(ppc_avr_t *r, ppc_avr_t *a, 
> ppc_avr_t *b)
>  
>      size = ARRAY_SIZE(r->u8);
>      for (i = 0; i < size; i++) {
> -        shift = b->u8[i] & 0x7;             /* extract shift value */
> -        bytes = (a->u8[i] << 8) +             /* extract adjacent bytes */
> -            (((i + 1) < size) ? a->u8[i + 1] : 0);
> -        r->u8[i] = (bytes << shift) >> 8;   /* shift and store result */
> +        shift = b->VsrB(i) & 0x7;             /* extract shift value */
> +        bytes = (a->VsrB(i) << 8) +           /* extract adjacent bytes */
> +            (((i + 1) < size) ? a->VsrB(i + 1) : 0);
> +        r->VsrB(i) = (bytes << shift) >> 8;   /* shift and store result */
>      }
>  }
>  
> @@ -1818,10 +1818,10 @@ void helper_vsrv(ppc_avr_t *r, ppc_avr_t *a, 
> ppc_avr_t *b)
>       * order will guarantee that computed result is not fed back.
>       */
>      for (i = ARRAY_SIZE(r->u8) - 1; i >= 0; i--) {
> -        shift = b->u8[i] & 0x7;                 /* extract shift value */
> -        bytes = ((i ? a->u8[i - 1] : 0) << 8) + a->u8[i];
> +        shift = b->VsrB(i) & 0x7;               /* extract shift value */
> +        bytes = ((i ? a->VsrB(i - 1) : 0) << 8) + a->VsrB(i);
>                                                  /* extract adjacent bytes */
> -        r->u8[i] = (bytes >> shift) & 0xFF;     /* shift and store result */
> +        r->VsrB(i) = (bytes >> shift) & 0xFF;   /* shift and store result */
>      }
>  }
>  

-- 
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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]