Thank you! Are all parts with `#if defined __powerpc__` 32-bit specific? If yes, then `__ppc__` will do. If no, then we either need to add also `__ppc64__` or use `__POWERPC__` instead (which includes both 32- and 64-bit Darwin).
On Thu, Oct 30, 2025 at 5:27 AM Bruno Haible <[email protected]> wrote: > Sergey Fedorov wrote: > > That macro indeed seems to be defined: > > ``` > > $ gcc -arch ppc -E -dM - < /dev/null | grep -i '\(ppc\|powerpc\)' | sort > > #define _ARCH_PPC 1 > > #define _ARCH_PPCGR 1 > > #define __POWERPC__ 1 > > #define __ppc__ 1 > > ``` > > And for gcc14: > > ``` > > $ /opt/local/bin/gcc-mp-14 -arch ppc -E -dM - < /dev/null | grep -i > > '\(ppc\|powerpc\)' | sort > > #define PPC 1 > > #define _ARCH_PPC 1 > > #define _ARCH_PPCGR 1 > > #define __POWERPC__ 1 > > #define __PPC 1 > > #define __PPC__ 1 > > #define __ppc__ 1 > > ``` > > Good. So, we have the choice among > - _ARCH_PPC (which is also defined on AIX), > - __POWERPC__ > - __ppc__ > > Since __ppc__ is already being tested in other code (such as > tests/test-frexpl.c), I'm going with that one. > > Alternatively, one could add a dependency to module 'host-cpu-c-abi'. > But I think that would be overkill here. > > > 2025-10-29 Bruno Haible <[email protected]> > > Fix support for Mac OS X/PowerPC. > Reported by Sergey Fedorov <[email protected]> in > < > https://lists.gnu.org/archive/html/bug-gnulib/2025-10/msg00097.html>. > * lib/fenv.in.h: Whenever we test __powerpc__ and the OS could be > Mac OS X, test also __ppc__. > * lib/fenv-private.h: Likewise. > * lib/fenv-env.c: Likewise. > * lib/fenv-except-state-get.c: Likewise. > * lib/fenv-except-state-set.c: Likewise. > * lib/fenv-except-state-test.c: Likewise. > * lib/fenv-except-tracking-clear.c: Likewise. > * lib/fenv-except-tracking-raise.c: Likewise. > * lib/fenv-except-tracking-set.c: Likewise. > * lib/fenv-except-tracking-test.c: Likewise. > * lib/fenv-except-trapping.c: Likewise. > * lib/fenv-round.c: Likewise. > * lib/float.in.h: Likewise. > * lib/snan.h: Likewise. > * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Likewise. > * tests/qemu.h: Likewise. > * tests/test-fenv-except-state-3.c: Likewise. > * tests/test-fenv-except-tracking-5.c: Likewise. > * tests/test-getpayloadl.c: Likewise. > * tests/test-setpayloadl.c: Likewise. > * tests/test-setpayloadsigl.c: Likewise. > > diff --git a/lib/fenv-env.c b/lib/fenv-env.c > index 637bc3e8c8..cba1fa9e92 100644 > --- a/lib/fenv-env.c > +++ b/lib/fenv-env.c > @@ -813,7 +813,7 @@ fesetenv (fenv_t const *envp) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > /* On all OSes except *BSD and AIX, fenv_t is a 'double'. > On *BSD, it's an 'unsigned int'. > diff --git a/lib/fenv-except-state-get.c b/lib/fenv-except-state-get.c > index 9f2c695386..cc27ebc744 100644 > --- a/lib/fenv-except-state-get.c > +++ b/lib/fenv-except-state-get.c > @@ -192,7 +192,7 @@ fegetexceptflag (fexcept_t *saved_flags, int > exceptions) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > /* On all OSes, fexcept_t is binary-equivalent to an 'unsigned int'. */ > > diff --git a/lib/fenv-except-state-set.c b/lib/fenv-except-state-set.c > index 2b7fb1a9ff..7ec74a3cfe 100644 > --- a/lib/fenv-except-state-set.c > +++ b/lib/fenv-except-state-set.c > @@ -268,7 +268,7 @@ fesetexceptflag (fexcept_t const *saved_flags, int > exceptions) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > /* On all OSes, fexcept_t is binary-equivalent to an 'unsigned int'. */ > > diff --git a/lib/fenv-except-state-test.c b/lib/fenv-except-state-test.c > index 92d9d863b4..9dc61d08b6 100644 > --- a/lib/fenv-except-state-test.c > +++ b/lib/fenv-except-state-test.c > @@ -103,7 +103,7 @@ fetestexceptflag (fexcept_t const *saved_flags, int > exceptions) > return flags & FE_ALL_EXCEPT & exceptions; > } > > -#elif defined __powerpc__ > +#elif (defined __ppc__ || defined __powerpc__) > > int > fetestexceptflag (fexcept_t const *saved_flags, int exceptions) > diff --git a/lib/fenv-except-tracking-clear.c > b/lib/fenv-except-tracking-clear.c > index 7da0fcd6e9..0b20c23c59 100644 > --- a/lib/fenv-except-tracking-clear.c > +++ b/lib/fenv-except-tracking-clear.c > @@ -211,7 +211,7 @@ feclearexcept (int exceptions) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > int > feclearexcept (int exceptions) > diff --git a/lib/fenv-except-tracking-raise.c > b/lib/fenv-except-tracking-raise.c > index 12550ac976..0df878fe45 100644 > --- a/lib/fenv-except-tracking-raise.c > +++ b/lib/fenv-except-tracking-raise.c > @@ -314,7 +314,7 @@ feraiseexcept (int exceptions) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > int > feraiseexcept (int exceptions) > diff --git a/lib/fenv-except-tracking-set.c > b/lib/fenv-except-tracking-set.c > index c251814884..f56b813489 100644 > --- a/lib/fenv-except-tracking-set.c > +++ b/lib/fenv-except-tracking-set.c > @@ -228,7 +228,7 @@ fesetexcept (int exceptions) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > int > fesetexcept (int exceptions) > diff --git a/lib/fenv-except-tracking-test.c > b/lib/fenv-except-tracking-test.c > index b9dd07fdee..baa65de450 100644 > --- a/lib/fenv-except-tracking-test.c > +++ b/lib/fenv-except-tracking-test.c > @@ -158,7 +158,7 @@ fetestexcept (int exceptions) > return fcsr & FE_ALL_EXCEPT & exceptions; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > int > fetestexcept (int exceptions) > diff --git a/lib/fenv-except-trapping.c b/lib/fenv-except-trapping.c > index 8ccdbe34ac..82c50ca394 100644 > --- a/lib/fenv-except-trapping.c > +++ b/lib/fenv-except-trapping.c > @@ -487,7 +487,7 @@ fegetexcept (void) > return FE_ALL_EXCEPT & (fcsr << 16); > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > # if defined __linux__ > # include <sys/prctl.h> > diff --git a/lib/fenv-private.h b/lib/fenv-private.h > index 772d8dce9d..5e44975ae6 100644 > --- a/lib/fenv-private.h > +++ b/lib/fenv-private.h > @@ -278,7 +278,7 @@ extern void __ieee_set_fp_control (unsigned long); > # define _FPU_GETCW(cw) __asm__ __volatile__ ("movfcsr2gr %0,$r0" : "=r" > (cw)) > # define _FPU_SETCW(cw) __asm__ __volatile__ ("movgr2fcsr $r0,%0" : : "r" > (cw)) > > -#elif defined __powerpc__ > +#elif (defined __ppc__ || defined __powerpc__) > > /* fpscr bits 28..25 indicate which floating-point exceptions, other than > FE_INVALID, have occurred since the respective bit was last set to > zero. > diff --git a/lib/fenv-round.c b/lib/fenv-round.c > index 3db8ba8ec1..ff76713418 100644 > --- a/lib/fenv-round.c > +++ b/lib/fenv-round.c > @@ -315,7 +315,7 @@ fesetround (int rounding_direction) > return 0; > } > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > /* The AIX header files have different values for the rounding directions > than all the other platforms: The values 0 and 1 are swapped. > diff --git a/lib/fenv.in.h b/lib/fenv.in.h > index 887ec57130..7f71ab5b9c 100644 > --- a/lib/fenv.in.h > +++ b/lib/fenv.in.h > @@ -125,7 +125,7 @@ typedef struct > } > fenv_t; > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > typedef double /* yuck! */ fenv_t; /* fpscr register */ > > @@ -328,7 +328,7 @@ _GL_CXXALIASWARN (feholdexcept); > # define FE_UPWARD (2 << 8) > # define FE_DOWNWARD (3 << 8) > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > /* Attention: AIX has different values for these macros! */ > # define FE_TONEAREST 0 > @@ -497,7 +497,7 @@ _GL_CXXALIASWARN (fesetround); > # define FE_DIVBYZERO (1U << 19) > # define FE_INVALID (1U << 20) > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > # define FE_INEXACT (1U << 25) > # define FE_DIVBYZERO (1U << 26) > @@ -764,7 +764,7 @@ typedef unsigned short fexcept_t; > > typedef unsigned int fexcept_t; > > -# elif defined __powerpc__ > +# elif (defined __ppc__ || defined __powerpc__) > > typedef unsigned int fexcept_t; > > diff --git a/lib/float.in.h b/lib/float.in.h > index 3093f9a01d..c3f89b8b36 100644 > --- a/lib/float.in.h > +++ b/lib/float.in.h > @@ -119,7 +119,7 @@ extern const union gl_long_double_union gl_LDBL_MAX; > wrong. > Assume these bugs are fixed in any GCC new enough > to define __LDBL_NORM_MAX__. */ > -#if (defined __powerpc__ && LDBL_MANT_DIG == 106 \ > +#if ((defined __ppc__ || defined __powerpc__) && LDBL_MANT_DIG == 106 \ > && defined __GNUC__ && !defined __LDBL_NORM_MAX__) > # undef LDBL_MIN_EXP > # define LDBL_MIN_EXP (-968) > diff --git a/lib/snan.h b/lib/snan.h > index 2d955abc7f..635201fa49 100644 > --- a/lib/snan.h > +++ b/lib/snan.h > @@ -216,7 +216,7 @@ construct_memory_SNaNl (long double quiet_value) > { > memory_long_double m; > m.value = quiet_value; > - #if defined __powerpc__ && LDBL_MANT_DIG == 106 > + #if (defined __ppc__ || defined __powerpc__) && LDBL_MANT_DIG == 106 > /* This is PowerPC "double double", a pair of two doubles. Inf and > NaN are > represented as the corresponding 64-bit IEEE values in the first > double; > the second is ignored. Manipulate only the first double. */ > diff --git a/m4/isfinite.m4 b/m4/isfinite.m4 > index af3cf73ca6..56abe8f49e 100644 > --- a/m4/isfinite.m4 > +++ b/m4/isfinite.m4 > @@ -1,5 +1,5 @@ > # isfinite.m4 > -# serial 21 > +# serial 22 > dnl Copyright (C) 2007-2025 Free Software Foundation, Inc. > dnl This file is free software; the Free Software Foundation > dnl gives unlimited permission to copy and/or distribute it, > @@ -84,7 +84,7 @@ AC_DEFUN([gl_ISFINITEL_WORKS] > #if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT > /* Another NaN, more precisely crafted. */ > m.value = NaNl (); > - #if defined __powerpc__ && LDBL_MANT_DIG == 106 > + #if (defined __ppc__ || defined __powerpc__) && LDBL_MANT_DIG == 106 > /* This is PowerPC "double double", a pair of two doubles. Inf and > NaN are > represented as the corresponding 64-bit IEEE values in the first > double; > the second is ignored. Manipulate only the first double. */ > diff --git a/tests/qemu.h b/tests/qemu.h > index 88dbfbf38e..6188f796ee 100644 > --- a/tests/qemu.h > +++ b/tests/qemu.h > @@ -83,7 +83,7 @@ is_running_under_qemu_user (void) > if (strcasestr (buf, "SPARC") != NULL) > return true; > # endif > -# if !defined __powerpc__ > +# if !(defined __ppc__ || defined __powerpc__) > if (strstr (buf, "POWER") != NULL) > return true; > # endif > diff --git a/tests/test-fenv-except-state-3.c > b/tests/test-fenv-except-state-3.c > index c00bdff209..992f1f9123 100644 > --- a/tests/test-fenv-except-state-3.c > +++ b/tests/test-fenv-except-state-3.c > @@ -71,7 +71,7 @@ main () > /* On older i386 and on PowerPC, there is no way to implement > fesetexceptflag() such that it does not trigger a trap. > fesetexceptflag() > is expected to fail in this case. */ > -# if !((defined __i386 || defined _M_IX86) || defined __powerpc__) > +# if !((defined __i386 || defined _M_IX86) || (defined __ppc__ || defined > __powerpc__)) > ASSERT (rc == 0); > # endif > > diff --git a/tests/test-fenv-except-tracking-5.c > b/tests/test-fenv-except-tracking-5.c > index cb834e0dcb..df9a989d35 100644 > --- a/tests/test-fenv-except-tracking-5.c > +++ b/tests/test-fenv-except-tracking-5.c > @@ -55,7 +55,7 @@ main () > /* On older i386 and on PowerPC, there is no way to implement > fesetexcept() such that it does not trigger a trap. fesetexcept() > is expected to fail in this case. */ > -# if !((defined __i386 || defined _M_IX86) || defined __powerpc__) > +# if !((defined __i386 || defined _M_IX86) || (defined __ppc__ || defined > __powerpc__)) > ASSERT (rc == 0); > # endif > > diff --git a/tests/test-getpayloadl.c b/tests/test-getpayloadl.c > index 6fd6f6fbe4..6c83a18d1a 100644 > --- a/tests/test-getpayloadl.c > +++ b/tests/test-getpayloadl.c > @@ -28,7 +28,7 @@ SIGNATURE_CHECK (getpayloadl, long double, (const long > double *)); > #include "signed-snan.h" > #include "macros.h" > > -#if defined __powerpc__ && LDBL_MANT_DIG == 106 > +#if (defined __ppc__ || defined __powerpc__) && LDBL_MANT_DIG == 106 > /* This is PowerPC "double double", a pair of two doubles. NaN is > represented > as the corresponding 64-bit IEEE value in the first double; the > second is > irrelevant and therefore does not contain a payload. */ > diff --git a/tests/test-setpayloadl.c b/tests/test-setpayloadl.c > index b1ab041c50..bd990f2852 100644 > --- a/tests/test-setpayloadl.c > +++ b/tests/test-setpayloadl.c > @@ -28,7 +28,7 @@ SIGNATURE_CHECK (setpayloadl, int, (long double *, long > double)); > #include "isnanl-nolibm.h" > #include "macros.h" > > -#if defined __powerpc__ && LDBL_MANT_DIG == 106 > +#if (defined __ppc__ || defined __powerpc__) && LDBL_MANT_DIG == 106 > /* This is PowerPC "double double", a pair of two doubles. NaN is > represented > as the corresponding 64-bit IEEE value in the first double; the > second is > irrelevant and therefore does not contain a payload. */ > diff --git a/tests/test-setpayloadsigl.c b/tests/test-setpayloadsigl.c > index 2512585ce8..678fdf1c1a 100644 > --- a/tests/test-setpayloadsigl.c > +++ b/tests/test-setpayloadsigl.c > @@ -28,7 +28,7 @@ SIGNATURE_CHECK (setpayloadsigl, int, (long double *, > long double)); > #include "isnanl-nolibm.h" > #include "macros.h" > > -#if defined __powerpc__ && LDBL_MANT_DIG == 106 > +#if (defined __ppc__ || defined __powerpc__) && LDBL_MANT_DIG == 106 > /* This is PowerPC "double double", a pair of two doubles. NaN is > represented > as the corresponding 64-bit IEEE value in the first double; the > second is > irrelevant and therefore does not contain a payload. */ > > > >
