|
20 | 20 |
|
21 | 21 | #if defined(__SSE2__) |
22 | 22 | #define LIBC_TARGET_CPU_HAS_SSE2 |
| 23 | +#define LIBC_TARGET_CPU_HAS_FPU_FLOAT |
| 24 | +#define LIBC_TARGET_CPU_HAS_FPU_DOUBLE |
23 | 25 | #endif |
24 | 26 |
|
25 | 27 | #if defined(__SSE4_2__) |
|
45 | 47 | #if defined(__ARM_FP) |
46 | 48 | #if (__ARM_FP & 0x2) |
47 | 49 | #define LIBC_TARGET_CPU_HAS_ARM_FPU_HALF |
| 50 | +#define LIBC_TARGET_CPU_HAS_FPU_HALF |
48 | 51 | #endif // LIBC_TARGET_CPU_HAS_ARM_FPU_HALF |
49 | 52 | #if (__ARM_FP & 0x4) |
50 | 53 | #define LIBC_TARGET_CPU_HAS_ARM_FPU_FLOAT |
| 54 | +#define LIBC_TARGET_CPU_HAS_FPU_FLOAT |
51 | 55 | #endif // LIBC_TARGET_CPU_HAS_ARM_FPU_FLOAT |
52 | 56 | #if (__ARM_FP & 0x8) |
53 | 57 | #define LIBC_TARGET_CPU_HAS_ARM_FPU_DOUBLE |
| 58 | +#define LIBC_TARGET_CPU_HAS_FPU_DOUBLE |
54 | 59 | #endif // LIBC_TARGET_CPU_HAS_ARM_FPU_DOUBLE |
55 | 60 | #endif // __ARM_FP |
56 | 61 |
|
| 62 | +#if defined(__riscv_flen) |
| 63 | +// https://github.com/riscv-non-isa/riscv-c-api-doc/blob/main/src/c-api.adoc |
| 64 | +#if (__riscv_flen & 0x20) |
| 65 | +#define LIBC_TARGET_CPU_HAS_RISCV_FPU_HALF |
| 66 | +#define LIBC_TARGET_CPU_HAS_FPU_HALF |
| 67 | +#endif // LIBC_TARGET_CPU_HAS_RISCV_FPU_HALF |
| 68 | +#if (__riscv_flen & 0x40) |
| 69 | +#define LIBC_TARGET_CPU_HAS_RISCV_FPU_FLOAT |
| 70 | +#define LIBC_TARGET_CPU_HAS_FPU_FLOAT |
| 71 | +#endif // LIBC_TARGET_CPU_HAS_RISCV_FPU_FLOAT |
| 72 | +#if (__riscv_flen & 0x80) |
| 73 | +#define LIBC_TARGET_CPU_HAS_RISCV_FPU_DOUBLE |
| 74 | +#define LIBC_TARGET_CPU_HAS_FPU_DOUBLE |
| 75 | +#endif // LIBC_TARGET_CPU_HAS_RISCV_FPU_DOUBLE |
| 76 | +#endif // __riscv_flen |
| 77 | + |
| 78 | +#if defined(__NVPTX__) || defined(__AMDGPU__) |
| 79 | +#define LIBC_TARGET_CPU_HAS_FPU_FLOAT |
| 80 | +#define LIBC_TARGET_CPU_HAS_FPU_DOUBLE |
| 81 | +#endif |
| 82 | + |
57 | 83 | #if defined(__ARM_FEATURE_FMA) || (defined(__AVX2__) && defined(__FMA__)) || \ |
58 | 84 | defined(__NVPTX__) || defined(__AMDGPU__) || defined(__LIBC_RISCV_USE_FMA) |
59 | 85 | #define LIBC_TARGET_CPU_HAS_FMA |
60 | 86 | // Provide a more fine-grained control of FMA instruction for ARM targets. |
61 | | -#if defined(__ARM_FP) |
62 | | -#if defined(LIBC_TARGET_CPU_HAS_ARM_FPU_HALF) |
| 87 | +#if defined(LIBC_TARGET_CPU_HAS_FPU_HALF) |
63 | 88 | #define LIBC_TARGET_CPU_HAS_FMA_HALF |
64 | 89 | #endif // LIBC_TARGET_CPU_HAS_FMA_HALF |
65 | | -#if defined(LIBC_TARGET_CPU_HAS_ARM_FPU_FLOAT) |
| 90 | +#if defined(LIBC_TARGET_CPU_HAS_FPU_FLOAT) |
66 | 91 | #define LIBC_TARGET_CPU_HAS_FMA_FLOAT |
67 | 92 | #endif // LIBC_TARGET_CPU_HAS_FMA_FLOAT |
68 | | -#if defined(LIBC_TARGET_CPU_HAS_ARM_FPU_DOUBLE) |
| 93 | +#if defined(LIBC_TARGET_CPU_HAS_FPU_DOUBLE) |
69 | 94 | #define LIBC_TARGET_CPU_HAS_FMA_DOUBLE |
70 | 95 | #endif // LIBC_TARGET_CPU_HAS_FMA_DOUBLE |
71 | | -#else |
72 | | -#define LIBC_TARGET_CPU_HAS_FMA_FLOAT |
73 | | -#define LIBC_TARGET_CPU_HAS_FMA_DOUBLE |
74 | | -#endif |
75 | 96 | #endif |
76 | 97 |
|
77 | 98 | #if defined(LIBC_TARGET_ARCH_IS_AARCH64) || \ |
|
0 commit comments