about summary refs log tree commit diff
path: root/sysdeps/powerpc/powerpc64le
Commit message (Collapse)AuthorAgeFilesLines
* Provide a C++ version of iseqsig (bug 22377)Gabriel F. T. Gomes2017-12-191-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | In C++ mode, __MATH_TG cannot be used for defining iseqsig, because __MATH_TG relies on __builtin_types_compatible_p, which is a C-only builtin. This is true when float128 is provided as an ABI-distinct type from long double. Moreover, the comparison macros from ISO C take two floating-point arguments, which need not have the same type. Choosing what underlying function to call requires evaluating the formats of the arguments, then selecting which is wider. The macro __MATH_EVAL_FMT2 provides this information, however, only the type of the macro expansion is relevant (actually evaluating the expression would be incorrect). This patch provides a C++ version of iseqsig, in which only the type of __MATH_EVAL_FMT2 (__typeof or decltype) is used as a template parameter for __iseqsig_type. This function calls the appropriate underlying function. Tested for powerpc64le and x86_64. [BZ #22377] * math/Makefile [C++] (tests): Add test for iseqsig. * math/math.h [C++] (iseqsig): New implementation, which does not rely on __MATH_TG/__builtin_types_compatible_p. * math/test-math-iseqsig.cc: New file. * sysdeps/powerpc/powerpc64le/Makefile (CFLAGS-test-math-iseqsig.cc): New variable.
* Use -mfloat128 for _Float64x tests for powerpc64le.Joseph Myers2017-11-241-1/+5
| | | | | | | | | | | | | | | | | | | Supporting _Float64x on powerpc64le means that tests of that type need to use -mfloat128 just like tests of _Float128. This patch adds the necessary uses of that option. Tested (compilation only) for powerpc64le with build-many-glibcs.py, in conjunction with _Float64x support patches. * sysdeps/powerpc/powerpc64le/Makefile ($(foreach suf,$(all-object-suffixes),$(objpfx)test-float64x%$(suf))): Add -mfloat128 to CFLAGS. ($(foreach suf,$(all-object-suffixes),$(objpfx)test-ifloat64x%$(suf))): Likewise. (CFLAGS-libm-test-support-float64x.c): New variable. ($(objpfx)test-float64x% $(objpfx)test-ifloat64x%): Add $(f128-loader-link) to gnulib-tests.
* Add C++ versions of iscanonical for ldbl-96 and ldbl-128ibm (bug 22235)Gabriel F. T. Gomes2017-10-031-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All representations of floating-point numbers in types with IEC 60559 binary exchange format are canonical. On the other hand, types with IEC 60559 extended formats, such as those implemented under ldbl-96 and ldbl-128ibm, contain representations that are not canonical. TS 18661-1 introduced the type-generic macro iscanonical, which returns whether a floating-point value is canonical or not. In Glibc, this type-generic macro is implemented using the macro __MATH_TG, which, when support for float128 is enabled, relies on __builtin_types_compatible_p to select between floating-point types. However, this use of iscanonical breaks C++ applications, because the builtin is only available in C mode. This patch provides a C++ implementation of iscanonical that relies on function overloading, rather than builtins, to select between floating-point types. Unlike the C++ implementations for iszero and issignaling, this implementation ignores __NO_LONG_DOUBLE_MATH. The double type always matches IEC 60559 double format, which is always canonical. Thus, when double and long double are the same (__NO_LONG_DOUBLE_MATH), iscanonical always returns 1 and is not implemented with __MATH_TG. Tested for powerpc64, powerpc64le and x86_64. [BZ #22235] * math/math.h: Trivial fix for unbalanced parentheses in comment. * math/Makefile [CXX] (tests): Add test-math-iscanonical.cc. (CFLAGS-test-math-iscanonical.cc): New variable. * math/test-math-iscanonical.cc: New file. * sysdeps/ieee754/ldbl-96/bits/iscanonical.h (iscanonical): Provide a C++ implementation based on function overloading, rather than using __MATH_TG, which uses C-only builtins. * sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h (iscanonical): Likewise. * sysdeps/powerpc/powerpc64le/Makefile (CFLAGS-test-math-iscanonical.cc): New variable.
* powerpc64le: Add -mfloat128 to tst-strtod-nan-locale testcaseGabriel F. T. Gomes2017-09-211-0/+3
| | | | | | | | | | | | | | | | On powerpc64le, not all files can have the flag -mfloat128 passed as an option on the compile command, since that could conflict with other flags, such as -mno-vsx. Each file that needs the flag, gets it through a CFLAGS-filename variable on sysdeps/powerpc/powerpc64le/Makefile. The test cases tst-strtod-nan-locale and tst-wcstod-nan-locale are missing this flag. Tested for powerpc64le. * sysdeps/powerpc/powerpc64le/Makefile (CFLAGS-tst-strtod-nan-locale.c): New variable. (CFLAGS-tst-wcstod-nan-locale.c): New variable.
* Provide a C++ version of iszero that does not use __MATH_TG (bug 21930)Gabriel F. T. Gomes2017-08-281-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When signaling nans are enabled (with -fsignaling-nans), the C++ version of iszero uses the fpclassify macro, which is defined with __MATH_TG. However, when support for float128 is available, __MATH_TG uses the builtin __builtin_types_compatible_p, which is only available in C mode. This patch refactors the C++ version of iszero so that it uses function overloading to select between the floating-point types, instead of relying on fpclassify and __MATH_TG. Tested for powerpc64le, s390x, x86_64, and with build-many-glibcs.py. [BZ #21930] * math/math.h [defined __cplusplus && defined __SUPPORT_SNAN__] (iszero): New C++ implementation that does not use fpclassify/__MATH_TG/__builtin_types_compatible_p, when signaling nans are enabled, since __builtin_types_compatible_p is a C-only feature. * math/test-math-iszero.cc: When __HAVE_DISTINCT_FLOAT128 is defined, include ieee754_float128.h for access to the union and member ieee854_float128.ieee. [__HAVE_DISTINCT_FLOAT128] (do_test): Call check_float128. [__HAVE_DISTINCT_FLOAT128] (check_float128): New function. * sysdeps/powerpc/powerpc64le/Makefile [subdir == math] (CXXFLAGS-test-math-iszero.cc): Add -mfloat128 to the build options of test-math-zero on powerpc64le.
* Provide a C++ version of issignaling that does not use __MATH_TGGabriel F. T. Gomes2017-08-221-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | The macro __MATH_TG contains the logic to select between long double and _Float128, when these types are ABI-distinct. This logic relies on __builtin_types_compatible_p, which is not available in C++ mode. On the other hand, C++ function overloading provides the means to distinguish between the floating-point types. The overloading resolution will match the correct parameter regardless of type qualifiers, i.e.: const and volatile. Tested for powerpc64le, s390x, and x86_64. * math/math.h [defined __cplusplus] (issignaling): Provide a C++ definition for issignaling that does not rely on __MATH_TG, since __MATH_TG uses __builtin_types_compatible_p, which is only available in C mode. (CFLAGS-test-math-issignaling.cc): New variable. * math/Makefile [CXX] (tests): Add test-math-issignaling. * math/test-math-issignaling.cc: New test for C++ implementation of type-generic issignaling. * sysdeps/powerpc/powerpc64le/Makefile [subdir == math] (CXXFLAGS-test-math-issignaling.cc): Add -mfloat128 to the build options of test-math-issignaling on powerpc64le.
* powerpc: Restrict xssqrtqp operands to Vector Registers (bug 21941)Gabriel F. T. Gomes2017-08-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | POWER ISA 3.0 introduces the xssqrtqp instructions, which expects operands to be in Vector Registers (Altivec/VMX), even though this instruction belongs to the Vector-Scalar Instruction Set. In GCC's Extended Assembly for POWER, the 'wq' register constraint is provided for use with IEEE 754 128-bit floating-point values. However, this constraint does not limit the register allocation to Vector Registers (Altivec/VMX) and could assign a Vector-Scalar Register (VSX) to the operands of the instruction. This patch changes the register constraint used in sqrtf128 from 'wq' to 'v', in order to request a Vector Register (Altivec/VMX) for use with the xssqrtqp instruction. Tested for powerpc64le and --with-cpu=power9. [BZ #21941] * sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrtf128): Since xssqrtqp requires operands to be in Vector Registers (Altivec/VMX), replace the register constraint 'wq' with 'v'. * sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c (__ieee754_sqrtf128): Likewise.
* powerpc: Fix float128 IFUNC relocations [BZ #21707]Tulio Magno Quites Machado Filho2017-07-171-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The patch proposed by Peter Bergner [1] to libgcc in order to fix [BZ #21707] adds a dependency on a symbol provided by the loader, forcing the loader to be linked to tests after libgcc was linked. It also requires to read the thread pointer during IRELA relocations. Tested on powerpc, powerpc64, powerpc64le, s390x and x86_64. [1] https://sourceware.org/ml/libc-alpha/2017-06/msg01383.html [BZ #21707] * csu/libc-start.c (LIBC_START_MAIN): Perform IREL{,A} relocations before or after initializing the TCB on statically linked executables. That's a per-architecture definition. * elf/rtld.c (dl_main): Add a comment about thread-local variables initialization. * sysdeps/generic/libc-start.h: New file. Define ARCH_APPLY_IREL and ARCH_SETUP_IREL. * sysdeps/powerpc/Makefile: [$(subdir) = elf && $(multi-arch) != no] (tests-static-internal): Add tst-tlsifunc-static. [$(subdir) = elf && $(multi-arch) != no && $(build-shared) == yes] (tests-internal): Add tst-tlsifunc. * sysdeps/powerpc/tst-tlsifunc.c: New file. * sysdeps/powerpc/tst-tlsifunc-static.c: Likewise. * sysdeps/powerpc/powerpc64le/Makefile (f128-loader-link): New variable. [$(subdir) = math] (test-float128% test-ifloat128%): Force linking to the loader after linking to libgcc. [$(subdir) = wcsmbs || $(subdir) = stdlib] (bug-strtod bug-strtod2) (bug-strtod2 tst-strtod-round tst-wcstod-round tst-strtod6 tst-strrom) (tst-strfrom-locale strfrom-skeleton): Likewise. * sysdeps/unix/sysv/linux/powerpc/libc-start.h: New file. Define ARCH_APPLY_IREL and ARCH_SETUP_IREL.
* powerpc64le: Iterate over all object suffixes when appending -mfloat128Gabriel F. T. Gomes2017-07-111-4/+10
| | | | | | | | | | | | | On powerpc64le, the compilation of the files related to float128 support requires the option -mfloat128 to be passed to gcc. However, not all possible object suffixes were covered in the Makefile. This patch uses $(all-object-suffixes) in all remaining rules. Tested for powerpc64le. * sysdeps/powerpc/powerpc64le/Makefile: Use $(all-object-suffixes) to iterate over all possible object suffixes. Add a comment explaining the use of sysdep-CFLAGS instead of CFLAGS.
* powerpc64le: Enable float128Paul E. Murphy2017-06-265-0/+248
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds ULPs for the float128 type, updates the abilist for libc and libm, and adds the files bits/floatn.h and float128-abi.h, in order to enable the new type for powerpc64le. This patch also adds the implementation of sqrtf128 for powerpc64le, since it is not implemented in libgcc. The sfp-machine.h header is taken from libgcc. Tested for powerpc64le (GCC 6.2 and GCC 7.1), powerpc64 and s390x. * manual/math.texi (Mathematics): Mention the enabling of float128 for powerpc64le. * sysdeps/powerpc/bits/floatn.h: New file. * sysdeps/powerpc/fpu/libm-test-ulps: Regenerated. * sysdeps/powerpc/fpu/math_private.h: (__ieee754_sqrtf128): New inline override. * sysdeps/powerpc/powerpc64le/Implies-before: New file. * sysdeps/powerpc/powerpc64le/Makefile: New file. * sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c: New file. * sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h: New file. * sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Updated. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h: New file.
* powerpc64le: Require at least POWER8 for powerpc64leGabriel F. T. Gomes2017-06-262-0/+46
| | | | | | | | | Support for powerpc64le requires POWER8 or newer processors. Builds for older processors are not tested. Require at least POWER8 to avoid unintentional builds. * sysdeps/powerpc/powerpc64le/configure.ac: Check for POWER8. * sysdeps/powerpc/powerpc64le/configure: Update.
* powerpc64le: Check for compiler features for float128Gabriel F. T. Gomes2017-06-262-0/+77
| | | | | | | | | | | | | | | On powerpc64le, support for float128 will be enabled, which requires some compiler features to be present. This patch adds a configure test to check for such features, which are provided for powerpc64le since GCC 6.2. Tested for powerpc64 and powerpc64le. * INSTALL: Regenerate. * manual/install.texi (Recommended Tools for Compilation): Mention the powerpc64le-specific requirement in the manual. * sysdeps/powerpc/powerpc64le/configure.ac: New file with checks for the compiler features required for building float128. * sysdeps/powerpc/powerpc64le/configure: New, auto-generated file.
* powerpc64le: Create divergent sysdep directory for powerpc64le.Paul E. Murphy2017-04-2816-0/+16
float128 on powerpc64le requires the addition of the ieee754/float128 sysdep, whereas powerpc64 doesn't. This requires creating a bunch of submachine and cpu directories and Implies files which just point towards their powerpc64 equivalent. Tested on P7, P8, and generic powerpc64le targets with and without multiarch. * sysdeps/powerpc/powerpc64le/Implies: New file. * sysdeps/powerpc/powerpc64le/fpu/Implies: New file. * sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/power7/Implies: New file. * sysdeps/powerpc/powerpc64le/power7/fpu/Implies: New file. * sysdeps/powerpc/powerpc64le/power7/fpu/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/power7/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/power8/Implies: New file. * sysdeps/powerpc/powerpc64le/power8/fpu/Implies: New file. * sysdeps/powerpc/powerpc64le/power8/fpu/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/power8/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/power9/Implies: New file. * sysdeps/powerpc/powerpc64le/power9/fpu/Implies: New file. * sysdeps/powerpc/powerpc64le/power9/fpu/multiarch/Implies: New file. * sysdeps/powerpc/powerpc64le/power9/multiarch/Implies: New file. * sysdeps/powerpc/preconfigure: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64le/Implies: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64le/fpu/Implies: New file.