|
9 | 9 | #ifndef LLVM_LIBC_TYPES_CFLOAT128_H
|
10 | 10 | #define LLVM_LIBC_TYPES_CFLOAT128_H
|
11 | 11 |
|
12 |
| -#include "../llvm-libc-macros/float-macros.h" // LDBL_MANT_DIG |
| 12 | +#include "../llvm-libc-macros/cfloat128-macros.h" |
13 | 13 |
|
14 |
| -// Currently, the complex variant of C23 `_Float128` type is only defined as a |
15 |
| -// built-in type in GCC 7 or later, for C and in GCC 13 or later, for C++. For |
16 |
| -// clang, the complex variant of `__float128` is defined instead, and only on |
17 |
| -// x86-64 targets for clang 11 or later. |
18 |
| -// |
19 |
| -// TODO: Update the complex variant of C23 `_Float128` type detection again when |
20 |
| -// clang supports it. |
21 |
| -#ifdef __clang__ |
22 |
| -#if (__clang_major__ >= 11) && \ |
23 |
| - (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)) |
24 |
| -// Use _Complex __float128 type. clang uses __SIZEOF_FLOAT128__ or __FLOAT128__ |
25 |
| -// macro to notify the availability of __float128 type: |
26 |
| -// https://reviews.llvm.org/D15120 |
27 |
| -#define LIBC_TYPES_HAS_CFLOAT128 |
| 14 | +#ifdef LIBC_TYPES_HAS_CFLOAT128 |
| 15 | +#ifndef LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE |
28 | 16 | typedef _Complex __float128 cfloat128;
|
29 |
| -#endif |
30 |
| -#elif defined(__GNUC__) |
31 |
| -#if (defined(__STDC_IEC_60559_COMPLEX__) || defined(__SIZEOF_FLOAT128__)) && \ |
32 |
| - (__GNUC__ >= 13 || (!defined(__cplusplus))) |
33 |
| -#define LIBC_TYPES_HAS_CFLOAT128 |
34 |
| -typedef _Complex _Float128 cfloat128; |
35 |
| -#endif |
36 |
| -#endif |
37 |
| - |
38 |
| -#if !defined(LIBC_TYPES_HAS_CFLOAT128) && (LDBL_MANT_DIG == 113) |
39 |
| -#define LIBC_TYPES_HAS_CFLOAT128 |
40 |
| -#define LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE |
| 17 | +#else |
41 | 18 | typedef _Complex long double cfloat128;
|
42 |
| -#endif |
| 19 | +#endif // LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE |
| 20 | +#endif // LIBC_TYPES_HAS_CFLOAT128 |
43 | 21 |
|
44 | 22 | #endif // LLVM_LIBC_TYPES_CFLOAT128_H
|
0 commit comments