https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67771
--- Comment #7 from Adhemerval Zanella <adhemerval.zanella at linaro dot org>
---
(In reply to John Paul Adrian Glaubitz from comment #6)
> (In reply to Joseph S. Myers from comment #5)
> > Various glibc functions work around this using FIX_INT_FP_CONVERT_ZERO, I
> > suppose the new log10f implementation taken from CORE-MATH needs such a
> > workaround as well.
>
> @Adhemerval: Do you think you could add such a workaround for 32-bit PowerPC?
This fixes the issues on glibc for powerpc for !HAVE_PPC_FCFID:
diff --git a/sysdeps/ieee754/flt-32/e_log10f.c
b/sysdeps/ieee754/flt-32/e_log10f.c
index 03d9e281f3..46cd5edd70 100644
--- a/sysdeps/ieee754/flt-32/e_log10f.c
+++ b/sysdeps/ieee754/flt-32/e_log10f.c
@@ -27,6 +27,7 @@ SOFTWARE.
#include <math.h>
#include <stdint.h>
#include <libm-alias-finite.h>
+#include <fix-int-fp-convert-zero.h>
#include "math_config.h"
static __attribute__ ((noinline)) float
@@ -129,7 +130,12 @@ __ieee754_log10f (float x)
unsigned je = e + 1;
je = (je * 0x4d104d4) >> 28;
if (__glibc_unlikely (ux == st[je].u))
- return je;
+ {
+ float r = je;
+ if (FIX_INT_FP_CONVERT_ZERO && r == -0.0f)
+ return 0.0;
+ return r;
+ }
double tz = asdouble (((int64_t) m | ((int64_t) 1023 << 23)) << (52 - 23));
double z = tz * ix - 1, z2 = z * z;
I will send a patch.