From: Fangrui Song Date: Tue, 22 Nov 2022 21:33:34 +0000 (-0800) Subject: [libc++] Replace __ppc64__ with __powerpc64__ and fix is_iec559 for non-ibm128 X-Git-Tag: upstream/17.0.6~26793 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=23023654be6c3c77a2a90611d19ea76788492704;p=platform%2Fupstream%2Fllvm.git [libc++] Replace __ppc64__ with __powerpc64__ and fix is_iec559 for non-ibm128 The lowercase `__ppc64__` is not defined by non-darwin powerpc64 GCC, therefore it lures users to write code which is not portable to GCC. Migrate to `__powerpc64__` in preparation for undefining `__ppc64__`. `__powerpc64__` is much more common than `__PPC64__`. Update alignment_of.pass.cpp to use 1 unconditionally: on powerpc-unknown-linux-gnu `alignof(bool) = _Alignof(bool) = __alignof(bool) = 1`. The value 4 might be derived from an ancient Clang. Change is_iec559 to true when long double uses uses IEEE 754 quadruple or double precision (i.e. not ibm128). Reviewed By: #libc, thesamesam, ldionne Differential Revision: https://reviews.llvm.org/D137513 --- diff --git a/libcxx/include/limits b/libcxx/include/limits index 3e074185..ee8249f 100644 --- a/libcxx/include/limits +++ b/libcxx/include/limits @@ -428,7 +428,7 @@ protected: _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");} _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;} -#if (defined(__ppc__) || defined(__ppc64__)) +#if defined(__powerpc__) && defined(__LONG_DOUBLE_IBM128__) static _LIBCPP_CONSTEXPR const bool is_iec559 = false; #else static _LIBCPP_CONSTEXPR const bool is_iec559 = true; diff --git a/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp b/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp index 37f217e..4fb19fe 100644 --- a/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp @@ -50,7 +50,7 @@ int main(int, char**) #endif test(); test(); -#if (defined(__ppc__) || defined(__ppc64__)) +#if defined(__powerpc__) && defined(__LONG_DOUBLE_IBM128__) test(); #else test(); diff --git a/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp index 9f93e1f..a1c24b7 100644 --- a/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp @@ -47,15 +47,8 @@ int main(int, char**) test_alignment_of(); test_alignment_of(); test_alignment_of(); - // The test case below is a hack. It's hard to detect what golden value - // we should expect. In most cases it should be 8. But in i386 builds - // with Clang >= 8 or GCC >= 8 the value is '4'. test_alignment_of(); -#if (defined(__ppc__) && !defined(__ppc64__) && !defined(_AIX)) - test_alignment_of(); // 32-bit PPC has four byte bool, except on AIX. -#else test_alignment_of(); -#endif test_alignment_of(); return 0;