RE: [PATCH v8 15/35] Hexagon (target/hexagon/arch.[ch]) utility functions

2021-03-17 Thread Taylor Simpson


> -Original Message-
> From: Richard Henderson 
> Sent: Sunday, February 14, 2021 2:13 PM
> To: Taylor Simpson ; qemu-devel@nongnu.org
> Cc: phi...@redhat.com; alex.ben...@linaro.org; laur...@vivier.eu;
> a...@rev.ng; Brian Cain 
> Subject: Re: [PATCH v8 15/35] Hexagon (target/hexagon/arch.[ch]) utility
> functions
>
> On 2/7/21 9:46 PM, Taylor Simpson wrote:
> > +uint32_t carry_from_add64(uint64_t a, uint64_t b, uint32_t c)
> > +{
> > +uint64_t tmpa, tmpb, tmpc;
> > +tmpa = fGETUWORD(0, a);
> > +tmpb = fGETUWORD(0, b);
> > +tmpc = tmpa + tmpb + c;
> > +tmpa = fGETUWORD(1, a);
> > +tmpb = fGETUWORD(1, b);
> > +tmpc = tmpa + tmpb + fGETUWORD(1, tmpc);
> > +tmpc = fGETUWORD(1, tmpc);
> > +return tmpc;
> > +}
>
> I presume this is intended to compute carry-out from 64-bit addition with
> carry-in?
>
> uint64_t r = a + b;
> return c ? r <= a : r < a;

Actually, I can remove this because the instructions that use it have TCG 
overrides (i.e., there isn't a helper that references it).


>
> > +static const int softfloat_roundingmodes[] = {
>
> FloatRoundMode

OK

> > +static float32 float32_mul_pow2(float32 a, uint32_t p, float_status
> *fp_status)
> > +{
> > +float32 b = make_float32((SF_BIAS + p) << SF_MANTBITS);
> > +return float32_mul(a, b, fp_status);
> > +}
>
> This is float32_scalbn.

OK


Thanks,
Taylor


Re: [PATCH v8 15/35] Hexagon (target/hexagon/arch.[ch]) utility functions

2021-02-14 Thread Richard Henderson
On 2/7/21 9:46 PM, Taylor Simpson wrote:
> +uint32_t carry_from_add64(uint64_t a, uint64_t b, uint32_t c)
> +{
> +uint64_t tmpa, tmpb, tmpc;
> +tmpa = fGETUWORD(0, a);
> +tmpb = fGETUWORD(0, b);
> +tmpc = tmpa + tmpb + c;
> +tmpa = fGETUWORD(1, a);
> +tmpb = fGETUWORD(1, b);
> +tmpc = tmpa + tmpb + fGETUWORD(1, tmpc);
> +tmpc = fGETUWORD(1, tmpc);
> +return tmpc;
> +}

I presume this is intended to compute carry-out from 64-bit addition with 
carry-in?

uint64_t r = a + b;
return c ? r <= a : r < a;

> +static const int softfloat_roundingmodes[] = {

FloatRoundMode

> +static float32 float32_mul_pow2(float32 a, uint32_t p, float_status 
> *fp_status)
> +{
> +float32 b = make_float32((SF_BIAS + p) << SF_MANTBITS);
> +return float32_mul(a, b, fp_status);
> +}

This is float32_scalbn.


r~