These are identical to riscv64.
@@ -0,0 +1,3 @@
+#ifndef __riscv_flen
+#include "../fenv.c"
+#endif
@@ -0,0 +1,56 @@
+#ifdef __riscv_flen
+
+.global feclearexcept
+.type feclearexcept, %function
+feclearexcept:
+ csrc fflags, a0
+ li a0, 0
+ ret
+.global feraiseexcept
+.type feraiseexcept, %function
+feraiseexcept:
+ csrs fflags, a0
+.global fetestexcept
+.type fetestexcept, %function
+fetestexcept:
+ frflags t0
+ and a0, t0, a0
+.global fegetround
+.type fegetround, %function
+fegetround:
+ frrm a0
+.global __fesetround
+.type __fesetround, %function
+__fesetround:
+ fsrm t0, a0
+.global fegetenv
+.type fegetenv, %function
+fegetenv:
+ frcsr t0
+ sw t0, 0(a0)
+.global fesetenv
+.type fesetenv, %function
+fesetenv:
+ li t2, -1
+ li t1, 0
+ beq a0, t2, 1f
+ lw t1, 0(a0)
+1: fscsr t1
@@ -0,0 +1,15 @@
+#include <math.h>
+#if __riscv_flen >= 64
+double copysign(double x, double y)
+{
+ __asm__ ("fsgnj.d %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
+ return x;
+}
+#else
+#include "../copysign.c"
+#if __riscv_flen >= 32
+float copysignf(float x, float y)
+ __asm__ ("fsgnj.s %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
+#include "../copysignf.c"
+double fabs(double x)
+ __asm__ ("fabs.d %0, %1" : "=f"(x) : "f"(x));
+#include "../fabs.c"
+float fabsf(float x)
+ __asm__ ("fabs.s %0, %1" : "=f"(x) : "f"(x));
+#include "../fabsf.c"
+double fma(double x, double y, double z)
+ __asm__ ("fmadd.d %0, %1, %2, %3" : "=f"(x) : "f"(x), "f"(y), "f"(z));
+#include "../fma.c"
+float fmaf(float x, float y, float z)
+ __asm__ ("fmadd.s %0, %1, %2, %3" : "=f"(x) : "f"(x), "f"(y), "f"(z));
+#include "../fmaf.c"
+double fmax(double x, double y)
+ __asm__ ("fmax.d %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
+#include "../fmax.c"
+float fmaxf(float x, float y)
+ __asm__ ("fmax.s %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
+#include "../fmaxf.c"
+double fmin(double x, double y)
+ __asm__ ("fmin.d %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
+#include "../fmin.c"
+float fminf(float x, float y)
+ __asm__ ("fmin.s %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
+#include "../fminf.c"
+double sqrt(double x)
+ __asm__ ("fsqrt.d %0, %1" : "=f"(x) : "f"(x));
+#include "../sqrt.c"
+float sqrtf(float x)
+ __asm__ ("fsqrt.s %0, %1" : "=f"(x) : "f"(x));
+#include "../sqrtf.c"