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