On Fri, 21 Feb 2025 at 14:42, Philippe Mathieu-Daudé <phi...@linaro.org> wrote:
>
> On 17/2/25 13:50, Peter Maydell wrote:
> > Currently we hardcode at compile time whether the floatx80 default
> > Infinity value has the explicit integer bit set or not (x86 sets it;
> > m68k does not).  To be able to compile softfloat once for all targets
> > we'd like to move this setting to runtime.
> >
> > Define a new FloatX80Behaviour enum which is a set of flags that
> > define the target's floatx80 handling.  Initially we define just one
> > flag, for whether the default Infinity has the Integer bit set or
> > not, but we will expand this in future commits to cover the other
> > floatx80 target specifics that we currently make compile-time
> > settings.
> >
> > Define a new function floatx80_default_inf() which returns the
> > appropriate default Infinity value of the given sign, and use it in
> > the code that was previously directly using the compile-time constant
> > floatx80_infinity_{low,high} values when packing an infinity into a
> > floatx80.
> >
> > Since floatx80 is highly unlikely to be supported in any new
> > architecture, and the existing code is generally written as "default
> > to like x87, with an ifdef for m68k", we make the default value for
> > the floatx80 behaviour flags be "what x87 does".  This means we only
> > need to change the m68k target to specify the behaviour flags.
> >
> > (Other users of floatx80 are the Arm NWFPE emulation, which is
> > obsolete and probably not actually doing the right thing anyway, and
> > the PPC xsrqpxp insn.  Making the default be "like x87" avoids our
> > needing to review and test for behaviour changes there.)
> >
> > We will clean up the remaining uses of the floatx80_infinity global
> > constant in subsequent commits.
> >
> > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
> > ---
> >   include/fpu/softfloat-helpers.h | 12 ++++++++++++
> >   include/fpu/softfloat-types.h   | 13 +++++++++++++
> >   include/fpu/softfloat.h         |  1 +
> >   fpu/softfloat.c                 |  7 +++----
> >   target/m68k/cpu.c               |  6 ++++++
> >   fpu/softfloat-specialize.c.inc  | 10 ++++++++++
> >   6 files changed, 45 insertions(+), 4 deletions(-)
>
>
> > diff --git a/fpu/softfloat.c b/fpu/softfloat.c
> > index f4fed9bfda9..b12ad2b42a9 100644
> > --- a/fpu/softfloat.c
> > +++ b/fpu/softfloat.c
> > @@ -1860,7 +1860,8 @@ static floatx80 
> > floatx80_round_pack_canonical(FloatParts128 *p,
> >
> >       case float_class_inf:
> >           /* x86 and m68k differ in the setting of the integer bit. */
> > -        frac = floatx80_infinity_low;
> > +        frac = s->floatx80_behaviour & 
> > floatx80_default_inf_int_bit_is_zero ?
> > +            0 : (1ULL << 63);
>
> Indent off

This is the indent emacs uses here, and it's the usual
"4 spaces in for an expression continued onto the next line"
I think.

-- PMM

Reply via email to