https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98140

--- Comment #1 from Alexander Grund <alexander.gr...@tu-dresden.de> ---
It looks like this was fixed in 10.1 by this commit
https://github.com/gcc-mirror/gcc/commit/37e0df8a9be5a8232f4ccb73cdadb02121ba523f

However the codegen looks worse:

     390:       20 00 9e c3     lfs     f28,32(r30)
     394:       00 e0 9e ff     fcmpu   cr7,f30,f28
     398:       10 00 9c 41     blt     cr7,3a8
     39c:       40 00 9e c3     lfs     f28,64(r30)
     3a0:       58 e0 1e f0     xscmpgtdp vs0,vs30,vs28
     3a4:       30 e0 9e f3     xxsel   vs28,vs30,vs28,vs0

When switching an (a > b) ? b : a to an xsmincdp, the arguments must be swapped
to honor the NaN rules. This would allow this to be used for the `HONOR_NANS
(compare_mode)` case. However it still ignores signed zeros. Maybe xsmindp
would be a better fit as it preserves the signed zeros. Only downside I see is
that it converts sNan to qNan which may be an issue.

Reply via email to