diff --git a/libc/src/__support/FPUtil/riscv/FMA.h b/libc/src/__support/FPUtil/riscv/FMA.h index 32bef1ea8843e1..f01962174f16f9 100644 --- a/libc/src/__support/FPUtil/riscv/FMA.h +++ b/libc/src/__support/FPUtil/riscv/FMA.h @@ -26,6 +26,7 @@ namespace LIBC_NAMESPACE { namespace fputil { +#ifdef __riscv_flen template LIBC_INLINE cpp::enable_if_t, T> fma(T x, T y, T z) { float result; @@ -35,6 +36,7 @@ LIBC_INLINE cpp::enable_if_t, T> fma(T x, T y, T z) { return result; } +#if __riscv_flen >= 64 template LIBC_INLINE cpp::enable_if_t, T> fma(T x, T y, T z) { double result; @@ -43,6 +45,8 @@ LIBC_INLINE cpp::enable_if_t, T> fma(T x, T y, T z) { : "f"(x), "f"(y), "f"(z)); return result; } +#endif // __riscv_flen >= 64 +#endif // __riscv_flen } // namespace fputil } // namespace LIBC_NAMESPACE diff --git a/libc/src/__support/FPUtil/riscv/sqrt.h b/libc/src/__support/FPUtil/riscv/sqrt.h index a42687004639b4..a1c436d0ebb1d0 100644 --- a/libc/src/__support/FPUtil/riscv/sqrt.h +++ b/libc/src/__support/FPUtil/riscv/sqrt.h @@ -21,17 +21,21 @@ namespace LIBC_NAMESPACE { namespace fputil { +#ifdef __riscv_flen template <> LIBC_INLINE float sqrt(float x) { float result; __asm__ __volatile__("fsqrt.s %0, %1\n\t" : "=f"(result) : "f"(x)); return result; } +#if __riscv_flen >= 64 template <> LIBC_INLINE double sqrt(double x) { double result; __asm__ __volatile__("fsqrt.d %0, %1\n\t" : "=f"(result) : "f"(x)); return result; } +#endif // __riscv_flen >= 64 +#endif // __riscv_flen } // namespace fputil } // namespace LIBC_NAMESPACE