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~