|
15 | 15 | #include "src/__support/macros/properties/compiler.h"
|
16 | 16 | #include "src/__support/macros/properties/os.h"
|
17 | 17 |
|
18 |
| -// https://developer.arm.com/documentation/dui0491/i/C-and-C---Implementation-Details/Basic-data-types |
19 |
| -// https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms |
20 |
| -// https://docs.amd.com/bundle/HIP-Programming-Guide-v5.1/page/Programming_with_HIP.html |
21 |
| -#if defined(LIBC_TARGET_OS_IS_WINDOWS) || \ |
22 |
| - (defined(LIBC_TARGET_OS_IS_MACOS) && \ |
23 |
| - defined(LIBC_TARGET_ARCH_IS_AARCH64)) || \ |
24 |
| - defined(LIBC_TARGET_ARCH_IS_ARM) || defined(LIBC_TARGET_ARCH_IS_NVPTX) || \ |
25 |
| - defined(LIBC_TARGET_ARCH_IS_AMDGPU) |
| 18 | +#include <float.h> // LDBL_MANT_DIG |
| 19 | + |
| 20 | +// 'long double' properties. |
| 21 | +#if (LDBL_MANT_DIG == DBL_MANT_DIG) |
| 22 | +// TODO: Replace with LIBC_LONG_DOUBLE_IS_DOUBLE |
26 | 23 | #define LONG_DOUBLE_IS_DOUBLE
|
27 | 24 | #endif
|
28 |
| - |
29 |
| -#if !defined(LONG_DOUBLE_IS_DOUBLE) && defined(LIBC_TARGET_ARCH_IS_X86) |
| 25 | +#if (LDBL_MANT_DIG == 64) |
| 26 | +// TODO: Replace with LIBC_LONG_DOUBLE_IS_X86_BIN80 |
30 | 27 | #define SPECIAL_X86_LONG_DOUBLE
|
| 28 | +#elif (LDBL_MANT_DIG == 113) |
| 29 | +#define LIBC_LONG_DOUBLE_IS_IEEE754_BIN128 |
31 | 30 | #endif
|
32 | 31 |
|
33 |
| -// Check compiler features |
34 |
| -#if defined(FLT128_MANT_DIG) |
35 |
| -#define LIBC_COMPILER_HAS_FLOAT128 |
| 32 | +// float16 support. |
| 33 | +#if defined(LIBC_TARGET_ARCH_IS_X86_64) |
| 34 | +#if (defined(LIBC_COMPILER_CLANG_VER) && (LIBC_COMPILER_CLANG_VER >= 1500)) || \ |
| 35 | + (defined(LIBC_COMPILER_GCC_VER) && (LIBC_COMPILER_GCC_VER >= 1201)) |
| 36 | +#define LIBC_COMPILER_HAS_C23_FLOAT16 |
| 37 | +#endif |
| 38 | +#endif |
| 39 | +#if defined(LIBC_TARGET_ARCH_IS_AARCH64) |
| 40 | +#if (defined(LIBC_COMPILER_CLANG_VER) && (LIBC_COMPILER_CLANG_VER >= 0900)) || \ |
| 41 | + (defined(LIBC_COMPILER_GCC_VER) && (LIBC_COMPILER_GCC_VER >= 1301)) |
| 42 | +#define LIBC_COMPILER_HAS_C23_FLOAT16 |
| 43 | +#endif |
| 44 | +#endif |
| 45 | +#if defined(LIBC_TARGET_ARCH_IS_ANY_RISCV) |
| 46 | +#if (defined(LIBC_COMPILER_CLANG_VER) && (LIBC_COMPILER_CLANG_VER >= 1300)) || \ |
| 47 | + (defined(LIBC_COMPILER_GCC_VER) && (LIBC_COMPILER_GCC_VER >= 1301)) |
| 48 | +#define LIBC_COMPILER_HAS_C23_FLOAT16 |
| 49 | +#endif |
| 50 | +#endif |
| 51 | + |
| 52 | +#if defined(LIBC_COMPILER_HAS_C23_FLOAT16) |
| 53 | +using float16 = _Float16; |
| 54 | +#define LIBC_HAS_FLOAT16 |
| 55 | +#endif |
| 56 | + |
| 57 | +// float128 support. |
| 58 | +#if (defined(LIBC_COMPILER_GCC_VER) && (LIBC_COMPILER_GCC_VER >= 1301)) && \ |
| 59 | + (defined(LIBC_TARGET_ARCH_IS_AARCH64) || \ |
| 60 | + defined(LIBC_TARGET_ARCH_IS_ANY_RISCV) || \ |
| 61 | + defined(LIBC_TARGET_ARCH_IS_X86_64)) |
| 62 | +#define LIBC_COMPILER_HAS_C23_FLOAT128 |
| 63 | +#endif |
| 64 | +#if (defined(LIBC_COMPILER_CLANG_VER) && (LIBC_COMPILER_CLANG_VER >= 0500)) && \ |
| 65 | + (defined(LIBC_TARGET_ARCH_IS_X86_64)) |
| 66 | +#define LIBC_COMPILER_HAS_FLOAT128_EXTENSION |
| 67 | +#endif |
| 68 | + |
| 69 | +#if defined(LIBC_COMPILER_HAS_C23_FLOAT128) |
36 | 70 | using float128 = _Float128;
|
37 |
| -#elif defined(__SIZEOF_FLOAT128__) |
38 |
| -#define LIBC_COMPILER_HAS_FLOAT128 |
| 71 | +#elif defined(LIBC_COMPILER_HAS_FLOAT128_EXTENSION) |
39 | 72 | using float128 = __float128;
|
40 |
| -#elif (defined(__linux__) && defined(__aarch64__)) |
41 |
| -#define LIBC_COMPILER_HAS_FLOAT128 |
42 |
| -#define LIBC_FLOAT128_IS_LONG_DOUBLE |
| 73 | +#elif defined(LIBC_LONG_DOUBLE_IS_IEEE754_BIN128) |
43 | 74 | using float128 = long double;
|
44 | 75 | #endif
|
45 | 76 |
|
| 77 | +#if defined(LIBC_COMPILER_HAS_C23_FLOAT128) || \ |
| 78 | + defined(LIBC_COMPILER_HAS_FLOAT128_EXTENSION) || \ |
| 79 | + defined(LIBC_LONG_DOUBLE_IS_IEEE754_BIN128) |
| 80 | +// TODO: Replace with LIBC_HAS_FLOAT128 |
| 81 | +#define LIBC_COMPILER_HAS_FLOAT128 |
| 82 | +#endif |
| 83 | + |
46 | 84 | #endif // LLVM_LIBC_SRC___SUPPORT_MACROS_PROPERTIES_FLOAT_H
|
0 commit comments