From: Szabolcs Nagy Date: Thu, 20 Sep 2018 23:14:11 +0000 (+0000) Subject: powerpc: add single instruction fabs, fabsf, fma, fmaf, sqrt, sqrtf X-Git-Tag: v1.1.21~57 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7c5f3bb955123ba65bbdedee0e4499ef78a5747c;p=oweals%2Fmusl.git powerpc: add single instruction fabs, fabsf, fma, fmaf, sqrt, sqrtf These are only available on hard float target and sqrt is not available in the base ISA, so further check is used. --- diff --git a/src/math/powerpc/fabs.c b/src/math/powerpc/fabs.c new file mode 100644 index 00000000..f6ec4433 --- /dev/null +++ b/src/math/powerpc/fabs.c @@ -0,0 +1,15 @@ +#include + +#ifdef _SOFT_FLOAT + +#include "../fabs.c" + +#else + +double fabs(double x) +{ + __asm__ ("fabs %0, %1" : "=d"(x) : "d"(x)); + return x; +} + +#endif diff --git a/src/math/powerpc/fabsf.c b/src/math/powerpc/fabsf.c new file mode 100644 index 00000000..d88b5911 --- /dev/null +++ b/src/math/powerpc/fabsf.c @@ -0,0 +1,15 @@ +#include + +#ifdef _SOFT_FLOAT + +#include "../fabsf.c" + +#else + +float fabsf(float x) +{ + __asm__ ("fabs %0, %1" : "=f"(x) : "f"(x)); + return x; +} + +#endif diff --git a/src/math/powerpc/fma.c b/src/math/powerpc/fma.c new file mode 100644 index 00000000..fd268f5f --- /dev/null +++ b/src/math/powerpc/fma.c @@ -0,0 +1,15 @@ +#include + +#ifdef _SOFT_FLOAT + +#include "../fma.c" + +#else + +double fma(double x, double y, double z) +{ + __asm__("fmadd %0, %1, %2, %3" : "=d"(x) : "d"(x), "d"(y), "d"(z)); + return x; +} + +#endif diff --git a/src/math/powerpc/fmaf.c b/src/math/powerpc/fmaf.c new file mode 100644 index 00000000..a99a2a3b --- /dev/null +++ b/src/math/powerpc/fmaf.c @@ -0,0 +1,15 @@ +#include + +#ifdef _SOFT_FLOAT + +#include "../fmaf.c" + +#else + +float fmaf(float x, float y, float z) +{ + __asm__("fmadds %0, %1, %2, %3" : "=f"(x) : "f"(x), "f"(y), "f"(z)); + return x; +} + +#endif diff --git a/src/math/powerpc/sqrt.c b/src/math/powerpc/sqrt.c new file mode 100644 index 00000000..8718dbd0 --- /dev/null +++ b/src/math/powerpc/sqrt.c @@ -0,0 +1,15 @@ +#include + +#if !defined _SOFT_FLOAT && defined _ARCH_PPCSQ + +double sqrt(double x) +{ + __asm__ ("fsqrt %0, %1\n" : "=d" (x) : "d" (x)); + return x; +} + +#else + +#include "../sqrt.c" + +#endif diff --git a/src/math/powerpc/sqrtf.c b/src/math/powerpc/sqrtf.c new file mode 100644 index 00000000..3431b672 --- /dev/null +++ b/src/math/powerpc/sqrtf.c @@ -0,0 +1,15 @@ +#include + +#if !defined _SOFT_FLOAT && defined _ARCH_PPCSQ + +float sqrtf(float x) +{ + __asm__ ("fsqrts %0, %1\n" : "=f" (x) : "f" (x)); + return x; +} + +#else + +#include "../sqrtf.c" + +#endif