[libc] Initial support so that libc-shared-tests can be built with pp64le (#188882)

This commit is contained in:
lntue 2026-04-01 20:55:44 -04:00 committed by GitHub
parent fd609e5d33
commit 096f9d0aa8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 2 deletions

View File

@ -184,6 +184,8 @@ elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "nvptx")
set(LIBC_TARGET_ARCHITECTURE_IS_NVPTX TRUE)
elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "spirv")
set(LIBC_TARGET_ARCHITECTURE_IS_SPIRV TRUE)
elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "power")
set(LIBC_TARGET_ARCHITECTURE_IS_POWERPC TRUE)
else()
message(FATAL_ERROR
"Unsupported libc target architecture ${LIBC_TARGET_ARCHITECTURE}")

View File

@ -0,0 +1,7 @@
{
"string": {
"LIBC_CONF_STRING_LENGTH_IMPL": {
"value": "element"
}
}
}

View File

@ -0,0 +1,14 @@
set(TARGET_LIBC_ENTRYPOINTS
libc.src.errno.errno
)
set(TARGET_LIBM_ENTRYPOINTS)
set(TARGET_LIBMVEC_ENTRYPOINTS)
set(TARGET_LLVMLIBC_ENTRYPOINTS
${TARGET_LIBC_ENTRYPOINTS}
${TARGET_LIBM_ENTRYPOINTS}
${TARGET_LIBMVEC_ENTRYPOINTS}
)

View File

@ -0,0 +1 @@
set(TARGET_PUBLIC_HEADERS)

View File

@ -9,7 +9,6 @@
#ifndef LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_SQRT_H
#define LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_SQRT_H
#include "sqrt_80_bit_long_double.h"
#include "src/__support/CPP/bit.h" // countl_zero
#include "src/__support/CPP/type_traits.h"
#include "src/__support/FPUtil/FEnvImpl.h"
@ -22,6 +21,10 @@
#include "hdr/fenv_macros.h"
#ifdef LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
#include "sqrt_80_bit_long_double.h"
#endif // !LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
namespace LIBC_NAMESPACE_DECL {
namespace fputil {
@ -52,7 +55,7 @@ template <>
LIBC_INLINE void normalize<long double>(int &exponent, uint64_t &mantissa) {
normalize<double>(exponent, mantissa);
}
#elif !defined(LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80)
#elif defined(LIBC_TYPES_LONG_DOUBLE_IS_FLOAT128)
template <>
LIBC_INLINE void normalize<long double>(int &exponent, UInt128 &mantissa) {
const uint64_t hi_bits = static_cast<uint64_t>(mantissa >> 64);
@ -76,8 +79,10 @@ LIBC_INLINE static constexpr cpp::enable_if_t<
sqrt(InType x) {
if constexpr (internal::SpecialLongDouble<OutType>::VALUE &&
internal::SpecialLongDouble<InType>::VALUE) {
#ifdef LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
// Special 80-bit long double.
return x86::sqrt(x);
#endif // !LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
} else {
// IEEE floating points formats.
using OutFPBits = FPBits<OutType>;