On 8/9/2026 9:45 PM, Matt Turner wrote:
[ Big snip ]



Tracked it down. Short version: the tests are already green again on
trunk as of yesterday, but for a reason unrelated to what actually
broke them, and the real fallout is still there.
Yea, my alpha run with your patch spun a couple days ago and was successful.


It is not a codegen change in the tests — the test .o is
byte-identical across the whole range. It is libgcc. Linking the same
object against each build's libgcc.a flips the result, and it narrows
to _floatdisf.o and _floatundisf.o, i.e. __floattisf and
__floatuntisf.
I "love" these...    In fact, I'd been putting off debugging a sh4 bootstrap failure because I suspected it might fall into this bucket.  Thankfully Jakub's fixes to some recent ranger work has sh4 building again..



The chain:

6cc7df8e834 ("Remove left-overs of WIDEST_HARDWARE_FP_SIZE",
2026-07-04) deleted WIDEST_HARDWARE_FP_SIZE from alpha.h along with
every other target. libgcc/libgcc2.h still keys
AVOID_FP_TYPE_CONVERSION off that macro:

   #ifdef powerpc
   #define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE == 106)
   #elif defined(WIDEST_HARDWARE_FP_SIZE)
   #define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE > WIDEST_HARDWARE_FP_SIZE)
   #else
   #define AVOID_FP_TYPE_CONVERSION(SIZE) 0
   #endif

so it silently became 0. F_MODE_OK(LIBGCC_TF_MANT_DIG) now succeeds,
and __floattisf switched from the clz-based fallback to the TFmode
path — _OtsCvtQX, _OtsMulX, _OtsAddX, then trunctfsf2. You can see it
plainly in the disassembly: before the commit that function is the clz
sequence, after it is three _Ots calls.
Ah!   I didn't really expect your patch to fix those regressions, but happy it did.

- whether that dead #elif should just be deleted, accepting the
wide-FP path everywhere, or whether the intent should be restored
under a name libgcc can still see. The mechanism that already exists
for this is the _LIBGCC* builtin macros, so an explicit one for
libgcc's use would be the tidy version. Given the x86_64 numbers
above, "just delete it" has a real cost on the most common target, not
a hypothetical one.
Yea, we clearly have something to clean up here.



- whether alpha in particular wants the fallback back. The TF path is
correct now but it is three out-of-line calls into libc's _Ots
routines where the fallback is a handful of inline instructions.
No strong opinion there.

Thanks again for chasing this down!

Jeff

Reply via email to