|
Message-Id: <20230728061955.20156-2-zhang_fei_0403@163.com> Date: Fri, 28 Jul 2023 14:19:55 +0800 From: zhangfei <zhang_fei_0403@....com> To: musl@...ts.openwall.com Cc: dalias@...c.org, zhangfei <zhangfei@...iscas.ac.cn> Subject: [PATCH 1/1] RISC-V: Add some mathematical functions to riscv64 From: zhangfei <zhangfei@...iscas.ac.cn> Add a series of function implementations such as lrint and lround. Signed-off-by: Zhang Fei<zhangfei@...iscas.ac.cn> --- src/math/riscv64/llrint.c | 16 ++++++++++++++++ src/math/riscv64/llrintf.c | 16 ++++++++++++++++ src/math/riscv64/llround.c | 16 ++++++++++++++++ src/math/riscv64/llroundf.c | 16 ++++++++++++++++ src/math/riscv64/lrint.c | 16 ++++++++++++++++ src/math/riscv64/lrintf.c | 16 ++++++++++++++++ src/math/riscv64/lround.c | 16 ++++++++++++++++ src/math/riscv64/lroundf.c | 16 ++++++++++++++++ 8 files changed, 128 insertions(+) create mode 100644 src/math/riscv64/llrint.c create mode 100644 src/math/riscv64/llrintf.c create mode 100644 src/math/riscv64/llround.c create mode 100644 src/math/riscv64/llroundf.c create mode 100644 src/math/riscv64/lrint.c create mode 100644 src/math/riscv64/lrintf.c create mode 100644 src/math/riscv64/lround.c create mode 100644 src/math/riscv64/lroundf.c diff --git a/src/math/riscv64/llrint.c b/src/math/riscv64/llrint.c new file mode 100644 index 0000000..2b5ea25 --- /dev/null +++ b/src/math/riscv64/llrint.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 64 + +long long llrint (double x) +{ + long long res; + __asm__ ("fcvt.l.d %0, %1" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../llrint.c" + +#endif diff --git a/src/math/riscv64/llrintf.c b/src/math/riscv64/llrintf.c new file mode 100644 index 0000000..d69566b --- /dev/null +++ b/src/math/riscv64/llrintf.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 32 + +long long llrintf (float x) +{ + long long res; + __asm__ ("fcvt.l.s %0, %1" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../llrintf.c" + +#endif diff --git a/src/math/riscv64/llround.c b/src/math/riscv64/llround.c new file mode 100644 index 0000000..d6d2619 --- /dev/null +++ b/src/math/riscv64/llround.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 64 + +long long llround (double x) +{ + long long res; + __asm__ ("fcvt.l.d %0, %1, rmm" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../llround.c" + +#endif diff --git a/src/math/riscv64/llroundf.c b/src/math/riscv64/llroundf.c new file mode 100644 index 0000000..72b343a --- /dev/null +++ b/src/math/riscv64/llroundf.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 32 + +long long llroundf (float x) +{ + long long res; + __asm__ ("fcvt.l.s %0, %1, rmm" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../llroundf.c" + +#endif diff --git a/src/math/riscv64/lrint.c b/src/math/riscv64/lrint.c new file mode 100644 index 0000000..c62e306 --- /dev/null +++ b/src/math/riscv64/lrint.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 64 + +long lrint (double x) +{ + long res; + __asm__ ("fcvt.l.d %0, %1" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../lrint.c" + +#endif diff --git a/src/math/riscv64/lrintf.c b/src/math/riscv64/lrintf.c new file mode 100644 index 0000000..6f3b120 --- /dev/null +++ b/src/math/riscv64/lrintf.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 32 + +long lrintf (float x) +{ + long res; + __asm__ ("fcvt.l.s %0, %1" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../lrintf.c" + +#endif diff --git a/src/math/riscv64/lround.c b/src/math/riscv64/lround.c new file mode 100644 index 0000000..7d061e8 --- /dev/null +++ b/src/math/riscv64/lround.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 64 + +long lround (double x) +{ + long res; + __asm__ ("fcvt.l.d %0, %1, rmm" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../lround.c" + +#endif diff --git a/src/math/riscv64/lroundf.c b/src/math/riscv64/lroundf.c new file mode 100644 index 0000000..34d978b --- /dev/null +++ b/src/math/riscv64/lroundf.c @@ -0,0 +1,16 @@ +#include <math.h> + +#if __riscv_flen >= 32 + +long lroundf (float x) +{ + long res; + __asm__ ("fcvt.l.s %0, %1, rmm" : "=r" (res) : "f" (x)); + return res; +} + +#else + +#include "../lroundf.c" + +#endif -- 2.34.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.