qemu-ppc
[Top][All Lists]
Advanced

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

Re: [PATCH 1/1] target/ppc: add vmsumudm vmsumcud instructions


From: Richard Henderson
Subject: Re: [PATCH 1/1] target/ppc: add vmsumudm vmsumcud instructions
Date: Fri, 5 Jun 2020 23:04:13 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0

On 6/4/20 10:14 PM, Lijun Pan wrote:
> +static void vmsumcudm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b,
> +                     ppc_avr_t *c, bool ca)
> +{
> +#ifdef CONFIG_INT128
> +     __uint128_t prod[2];
> +     int i;
> +
> +     for (i = 0; i < 2; i++) {
> +             prod[i] = (__uint128_t)(a->VsrD(i)) * (__uint128_t)(b->VsrD(i));
> +     }
> +     if (ca)
> +             r->u128 = (~prod[0] < prod[1]) + (~c->u128 < (prod[0] + 
> prod[1]));
> +     else
> +             r->u128 = prod[0] + prod[1] + c->u128;
> +#else
> +     uint64_t ah64, al64, bh64, bl64, ch64, cl64, rh64, rl64, th64, tl64, 
> ca1, ca2;
> +
> +     ch64 = c->VsrD(0);
> +     cl64 = c->VsrD(1);
> +     mulu64(&al64, &ah64, a->VsrD(0), b->VsrD(0));
> +     mulu64(&bl64, &bh64, a->VsrD(1), b->VsrD(1));
> +     addu128(ah64, al64, bh64, bl64, &rh64, &rl64, &ca1);
> +     addu128(rh64, rl64, ch64, cl64, &th64, &tl64, &ca2);
> +     if (ca) {
> +             r->VsrD(0) = 0;
> +             r->VsrD(1) = ca1 + ca2;
> +     } else {
> +             r->VsrD(0) = th64;
> +             r->VsrD(1) = tl64;
> +     }
> +#endif
> +}

I encourage you to enhance qemu/int128.h as needed, and not ifdef this.


r~



reply via email to

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