mirror of https://git.musl-libc.org/git/musl
committed by
Rich Felker
14 changed files with 239 additions and 0 deletions
@ -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 |
|||
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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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