Browse Source

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.
master
Szabolcs Nagy 8 years ago
committed by Rich Felker
parent
commit
7c5f3bb955
  1. 15
      src/math/powerpc/fabs.c
  2. 15
      src/math/powerpc/fabsf.c
  3. 15
      src/math/powerpc/fma.c
  4. 15
      src/math/powerpc/fmaf.c
  5. 15
      src/math/powerpc/sqrt.c
  6. 15
      src/math/powerpc/sqrtf.c

15
src/math/powerpc/fabs.c

@ -0,0 +1,15 @@
#include <math.h>
#ifdef _SOFT_FLOAT
#include "../fabs.c"
#else
double fabs(double x)
{
__asm__ ("fabs %0, %1" : "=d"(x) : "d"(x));
return x;
}
#endif

15
src/math/powerpc/fabsf.c

@ -0,0 +1,15 @@
#include <math.h>
#ifdef _SOFT_FLOAT
#include "../fabsf.c"
#else
float fabsf(float x)
{
__asm__ ("fabs %0, %1" : "=f"(x) : "f"(x));
return x;
}
#endif

15
src/math/powerpc/fma.c

@ -0,0 +1,15 @@
#include <math.h>
#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

15
src/math/powerpc/fmaf.c

@ -0,0 +1,15 @@
#include <math.h>
#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

15
src/math/powerpc/sqrt.c

@ -0,0 +1,15 @@
#include <math.h>
#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

15
src/math/powerpc/sqrtf.c

@ -0,0 +1,15 @@
#include <math.h>
#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
Loading…
Cancel
Save