On 07/05/2019 01:48, Anton Blanchard wrote:
> A recent cleanup changed the pre zeroing of the result from 64 bit
> to 32 bit operations:
>
> - result.u64[i] = 0;
> + result.VsrW(i) = 0;
>
> This corrupts the result.
>
> Fixes: 60594fea298d ("target/ppc: remove various HOST_WORDS_BIGENDIAN hacks
> in int_helper.c")
> Signed-off-by: Anton Blanchard <[email protected]>
> ---
> target/ppc/int_helper.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
> index 111586c981..b8b3279f71 100644
> --- a/target/ppc/int_helper.c
> +++ b/target/ppc/int_helper.c
> @@ -2038,7 +2038,7 @@ void helper_vsum2sws(CPUPPCState *env, ppc_avr_t *r,
> ppc_avr_t *a, ppc_avr_t *b)
> for (i = 0; i < ARRAY_SIZE(r->u64); i++) {
> int64_t t = (int64_t)b->VsrSW(upper + i * 2);
>
> - result.VsrW(i) = 0;
> + result.VsrD(i) = 0;
> for (j = 0; j < ARRAY_SIZE(r->u64); j++) {
> t += a->VsrSW(2 * i + j);
> }
Reviewed-by: Mark Cave-Ayland <[email protected]>
ATB,
Mark.