diff options
author | Guillaume Chatelet <gchatelet@google.com> | 2024-03-09 09:43:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-09 09:43:07 +0100 |
commit | a84e66a92d7b97f68aa3ae7d2c5839f3fb0d291d (patch) | |
tree | 09120856ead510f971110fac58d8294d57b93de9 | |
parent | def038bc40fae7d6756dde9c41677d76ad0387d2 (diff) | |
download | llvm-a84e66a92d7b97f68aa3ae7d2c5839f3fb0d291d.zip llvm-a84e66a92d7b97f68aa3ae7d2c5839f3fb0d291d.tar.gz llvm-a84e66a92d7b97f68aa3ae7d2c5839f3fb0d291d.tar.bz2 |
[libc] Provide `LIBC_TYPES_HAS_INT64` (#83441)
Umbrella bug #83182
-rw-r--r-- | libc/src/__support/UInt.h | 12 | ||||
-rw-r--r-- | libc/src/__support/macros/properties/types.h | 7 | ||||
-rw-r--r-- | libc/src/string/memory_utils/op_generic.h | 9 | ||||
-rw-r--r-- | libc/test/src/string/memory_utils/op_tests.cpp | 14 |
4 files changed, 22 insertions, 20 deletions
diff --git a/libc/src/__support/UInt.h b/libc/src/__support/UInt.h index c49c831..d92d61e 100644 --- a/libc/src/__support/UInt.h +++ b/libc/src/__support/UInt.h @@ -14,10 +14,10 @@ #include "src/__support/CPP/limits.h" #include "src/__support/CPP/optional.h" #include "src/__support/CPP/type_traits.h" -#include "src/__support/macros/attributes.h" // LIBC_INLINE -#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY -#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT128 -#include "src/__support/math_extras.h" // SumCarry, DiffBorrow +#include "src/__support/macros/attributes.h" // LIBC_INLINE +#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY +#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT128, LIBC_TYPES_HAS_INT64 +#include "src/__support/math_extras.h" // SumCarry, DiffBorrow #include "src/__support/number_pair.h" #include <stddef.h> // For size_t @@ -940,11 +940,11 @@ namespace internal { // availability. template <size_t Bits> struct WordTypeSelector : cpp::type_identity< -#if defined(UINT64_MAX) +#ifdef LIBC_TYPES_HAS_INT64 uint64_t #else uint32_t -#endif +#endif // LIBC_TYPES_HAS_INT64 > { }; // Except if we request 32 bits explicitly. diff --git a/libc/src/__support/macros/properties/types.h b/libc/src/__support/macros/properties/types.h index 42345e4..d43cf99 100644 --- a/libc/src/__support/macros/properties/types.h +++ b/libc/src/__support/macros/properties/types.h @@ -17,7 +17,7 @@ #include "src/__support/macros/properties/cpu_features.h" #include "src/__support/macros/properties/os.h" -#include <stdint.h> // __SIZEOF_INT128__ +#include <stdint.h> // UINT64_MAX, __SIZEOF_INT128__ // 'long double' properties. #if (LDBL_MANT_DIG == 53) @@ -28,6 +28,11 @@ #define LIBC_TYPES_LONG_DOUBLE_IS_FLOAT128 #endif +// int64 / uint64 support +#if defined(UINT64_MAX) +#define LIBC_TYPES_HAS_INT64 +#endif // UINT64_MAX + // int128 / uint128 support #if defined(__SIZEOF_INT128__) #define LIBC_TYPES_HAS_INT128 diff --git a/libc/src/string/memory_utils/op_generic.h b/libc/src/string/memory_utils/op_generic.h index 41fc1fa..efaff80 100644 --- a/libc/src/string/memory_utils/op_generic.h +++ b/libc/src/string/memory_utils/op_generic.h @@ -28,6 +28,7 @@ #include "src/__support/common.h" #include "src/__support/endian.h" #include "src/__support/macros/optimization.h" +#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT64 #include "src/string/memory_utils/op_builtin.h" #include "src/string/memory_utils/utils.h" @@ -37,10 +38,6 @@ static_assert((UINTPTR_MAX == 4294967295U) || (UINTPTR_MAX == 18446744073709551615UL), "We currently only support 32- or 64-bit platforms"); -#if defined(UINT64_MAX) -#define LLVM_LIBC_HAS_UINT64 -#endif - namespace LIBC_NAMESPACE { // Compiler types using the vector attributes. using generic_v128 = uint8_t __attribute__((__vector_size__(16))); @@ -60,9 +57,9 @@ template <typename T> struct is_scalar : cpp::false_type {}; template <> struct is_scalar<uint8_t> : cpp::true_type {}; template <> struct is_scalar<uint16_t> : cpp::true_type {}; template <> struct is_scalar<uint32_t> : cpp::true_type {}; -#ifdef LLVM_LIBC_HAS_UINT64 +#ifdef LIBC_TYPES_HAS_INT64 template <> struct is_scalar<uint64_t> : cpp::true_type {}; -#endif // LLVM_LIBC_HAS_UINT64 +#endif // LIBC_TYPES_HAS_INT64 // Meant to match std::numeric_limits interface. // NOLINTNEXTLINE(readability-identifier-naming) template <typename T> constexpr bool is_scalar_v = is_scalar<T>::value; diff --git a/libc/test/src/string/memory_utils/op_tests.cpp b/libc/test/src/string/memory_utils/op_tests.cpp index 15ac960..95a0475 100644 --- a/libc/test/src/string/memory_utils/op_tests.cpp +++ b/libc/test/src/string/memory_utils/op_tests.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "memory_check_utils.h" +#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT64 #include "src/string/memory_utils/op_aarch64.h" #include "src/string/memory_utils/op_builtin.h" -#include "src/string/memory_utils/op_generic.h" // LLVM_LIBC_HAS_UINT64 #include "src/string/memory_utils/op_riscv.h" #include "src/string/memory_utils/op_x86.h" #include "test/UnitTest/Test.h" @@ -124,9 +124,9 @@ using MemsetImplementations = testing::TypeList< builtin::Memset<32>, // builtin::Memset<64>, #endif -#ifdef LLVM_LIBC_HAS_UINT64 +#ifdef LIBC_TYPES_HAS_INT64 generic::Memset<uint64_t>, generic::Memset<cpp::array<uint64_t, 2>>, -#endif +#endif // LIBC_TYPES_HAS_INT64 #ifdef __AVX512F__ generic::Memset<generic_v512>, generic::Memset<cpp::array<generic_v512, 2>>, #endif @@ -210,9 +210,9 @@ using BcmpImplementations = testing::TypeList< #ifndef LIBC_TARGET_ARCH_IS_ARM // Removing non uint8_t types for ARM generic::Bcmp<uint16_t>, generic::Bcmp<uint32_t>, // -#ifdef LLVM_LIBC_HAS_UINT64 +#ifdef LIBC_TYPES_HAS_INT64 generic::Bcmp<uint64_t>, -#endif // LLVM_LIBC_HAS_UINT64 +#endif // LIBC_TYPES_HAS_INT64 generic::BcmpSequence<uint16_t, uint8_t>, generic::BcmpSequence<uint32_t, uint8_t>, // generic::BcmpSequence<uint32_t, uint16_t>, // @@ -292,9 +292,9 @@ using MemcmpImplementations = testing::TypeList< #ifndef LIBC_TARGET_ARCH_IS_ARM // Removing non uint8_t types for ARM generic::Memcmp<uint16_t>, generic::Memcmp<uint32_t>, // -#ifdef LLVM_LIBC_HAS_UINT64 +#ifdef LIBC_TYPES_HAS_INT64 generic::Memcmp<uint64_t>, -#endif // LLVM_LIBC_HAS_UINT64 +#endif // LIBC_TYPES_HAS_INT64 generic::MemcmpSequence<uint16_t, uint8_t>, generic::MemcmpSequence<uint32_t, uint16_t, uint8_t>, // #endif // LIBC_TARGET_ARCH_IS_ARM |