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. */
