On 8/18/2026 12:26 PM, Sam James wrote:
Jeffrey Law <[email protected]> writes:

On 8/14/2026 1:29 PM, Matt Turner wrote:
Alpha encodes the rounding mode in the instruction itself, so honoring a
rounding mode chosen at run time requires the /d qualifier, which takes the
mode from the FPCR.  alpha_fprm defaulted to ALPHA_FPRM_NORM and was only
ever changed by an explicit -mfp-rounding-mode, so -frounding-math emitted
statically rounded instructions and fesetround was silently ignored.

Default alpha_fprm to ALPHA_FPRM_DYN when -frounding-math is in effect and
-mfp-rounding-mode was not given, leaving both ordinary code generation and
an explicit -mfp-rounding-mode unaffected.  The VAX floating-point
instructions have no dynamic rounding qualifier, so -mfloat-vax keeps the
static default.

This fixes the execution failures of 
gcc.dg/torture/fp-uint64-convert-double-1.c,
fp-uint64-convert-double-2.c and fp-double-convert-float-1.c.

gcc/ChangeLog:

        * config/alpha/alpha.cc (alpha_option_override): Set alpha_fprm to
        ALPHA_FPRM_DYN when flag_rounding_math is set, -mfp-rounding-mode
        was not given explicitly and -mfloat-vax is not in effect.
        * doc/invoke.texi (Alpha Options): Document the default rounding
        mode and its interaction with -frounding-math.
THanks.  I've pushed this to the trunk as well.  My last alpha build
didn't bootstrap, so something has gone weird, but I suspect it's
generic and not anything you've done.

The last clean build I had was with:

7e0bb48cbb2654816ce2714de5b644f4d965d3db

The first failed build with:

df494ca28d75f80b4d0b4e0b93b5d23d2092131a

The failure mode is an ICE in the gimple threader:
during GIMPLE pass: thread
../../../gcc/libcpp/lex.cc: In function 'void _cpp_clean_line(cpp_reader*)':
../../../gcc/libcpp/lex.cc:970:1: internal compiler error: Segmentation fault
   970 | _cpp_clean_line (cpp_reader *pfile)
       | ^~~~~~~~~~~~~~~

I haven't tried to chase it down yet.  I usually let these things
simmer a bit since testing/bisecting bootstraps of qemu emulated
targets takes an absurdly long time.  But if you're interested in
chasing another issue, this may be good to check.
It's https://gcc.gnu.org/PR126876 which Aldy just fixed but trunk is
kind of rough at the moment, there's https://gcc.gnu.org/PR126856 too.
ACK.  Thanks for the update.  I've been effectively offline the last several days, but I do see that alpha's run yesterday was successful, so hopefully the inability is easing.

jeff

Reply via email to