mirror of
https://git.musl-libc.org/git/musl
synced 2025-01-21 21:52:04 +03:00
riscv32: add fenv and math
These are identical to riscv64.
This commit is contained in:
parent
01d9fe4d9f
commit
b4f7b2ca35
3
src/fenv/riscv32/fenv-sf.c
Normal file
3
src/fenv/riscv32/fenv-sf.c
Normal file
@ -0,0 +1,3 @@
|
||||
#ifndef __riscv_flen
|
||||
#include "../fenv.c"
|
||||
#endif
|
56
src/fenv/riscv32/fenv.S
Normal file
56
src/fenv/riscv32/fenv.S
Normal file
@ -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
|
||||
li a0, 0
|
||||
ret
|
||||
|
||||
.global fetestexcept
|
||||
.type fetestexcept, %function
|
||||
fetestexcept:
|
||||
frflags t0
|
||||
and a0, t0, a0
|
||||
ret
|
||||
|
||||
.global fegetround
|
||||
.type fegetround, %function
|
||||
fegetround:
|
||||
frrm a0
|
||||
ret
|
||||
|
||||
.global __fesetround
|
||||
.type __fesetround, %function
|
||||
__fesetround:
|
||||
fsrm t0, a0
|
||||
li a0, 0
|
||||
ret
|
||||
|
||||
.global fegetenv
|
||||
.type fegetenv, %function
|
||||
fegetenv:
|
||||
frcsr t0
|
||||
sw t0, 0(a0)
|
||||
li a0, 0
|
||||
ret
|
||||
|
||||
.global fesetenv
|
||||
.type fesetenv, %function
|
||||
fesetenv:
|
||||
li t2, -1
|
||||
li t1, 0
|
||||
beq a0, t2, 1f
|
||||
lw t1, 0(a0)
|
||||
1: fscsr t1
|
||||
li a0, 0
|
||||
ret
|
||||
|
||||
#endif
|
15
src/math/riscv32/copysign.c
Normal file
15
src/math/riscv32/copysign.c
Normal file
@ -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"
|
||||
|
||||
#endif
|
15
src/math/riscv32/copysignf.c
Normal file
15
src/math/riscv32/copysignf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 32
|
||||
|
||||
float copysignf(float x, float y)
|
||||
{
|
||||
__asm__ ("fsgnj.s %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../copysignf.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fabs.c
Normal file
15
src/math/riscv32/fabs.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 64
|
||||
|
||||
double fabs(double x)
|
||||
{
|
||||
__asm__ ("fabs.d %0, %1" : "=f"(x) : "f"(x));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fabs.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fabsf.c
Normal file
15
src/math/riscv32/fabsf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 32
|
||||
|
||||
float fabsf(float x)
|
||||
{
|
||||
__asm__ ("fabs.s %0, %1" : "=f"(x) : "f"(x));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fabsf.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fma.c
Normal file
15
src/math/riscv32/fma.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 64
|
||||
|
||||
double fma(double x, double y, double z)
|
||||
{
|
||||
__asm__ ("fmadd.d %0, %1, %2, %3" : "=f"(x) : "f"(x), "f"(y), "f"(z));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fma.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fmaf.c
Normal file
15
src/math/riscv32/fmaf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 32
|
||||
|
||||
float fmaf(float x, float y, float z)
|
||||
{
|
||||
__asm__ ("fmadd.s %0, %1, %2, %3" : "=f"(x) : "f"(x), "f"(y), "f"(z));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fmaf.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fmax.c
Normal file
15
src/math/riscv32/fmax.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 64
|
||||
|
||||
double fmax(double x, double y)
|
||||
{
|
||||
__asm__ ("fmax.d %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fmax.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fmaxf.c
Normal file
15
src/math/riscv32/fmaxf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 32
|
||||
|
||||
float fmaxf(float x, float y)
|
||||
{
|
||||
__asm__ ("fmax.s %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fmaxf.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fmin.c
Normal file
15
src/math/riscv32/fmin.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 64
|
||||
|
||||
double fmin(double x, double y)
|
||||
{
|
||||
__asm__ ("fmin.d %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fmin.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/fminf.c
Normal file
15
src/math/riscv32/fminf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 32
|
||||
|
||||
float fminf(float x, float y)
|
||||
{
|
||||
__asm__ ("fmin.s %0, %1, %2" : "=f"(x) : "f"(x), "f"(y));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../fminf.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/sqrt.c
Normal file
15
src/math/riscv32/sqrt.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 64
|
||||
|
||||
double sqrt(double x)
|
||||
{
|
||||
__asm__ ("fsqrt.d %0, %1" : "=f"(x) : "f"(x));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../sqrt.c"
|
||||
|
||||
#endif
|
15
src/math/riscv32/sqrtf.c
Normal file
15
src/math/riscv32/sqrtf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <math.h>
|
||||
|
||||
#if __riscv_flen >= 32
|
||||
|
||||
float sqrtf(float x)
|
||||
{
|
||||
__asm__ ("fsqrt.s %0, %1" : "=f"(x) : "f"(x));
|
||||
return x;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "../sqrtf.c"
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user