|
Message-ID: <CAMKF1spZX2B7KaDoBRS6M8ZmibzYMHqFKcX7dBANqr4LpwrDKg@mail.gmail.com> Date: Fri, 28 Jul 2023 09:46:36 -0700 From: Khem Raj <raj.khem@...il.com> To: musl@...ts.openwall.com Cc: dalias@...c.org, zhangfei <zhangfei@...iscas.ac.cn> Subject: Re: [PATCH 1/1] RISC-V: Add some mathematical functions to riscv64 On Thu, Jul 27, 2023 at 11:21 PM zhangfei <zhang_fei_0403@....com> wrote: > > From: zhangfei <zhangfei@...iscas.ac.cn> > > Add a series of function implementations such as lrint and lround. > Do you have some performance numbers with these implementations to share ? > 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.