#ifndef __FP_PRIVATE__
#define __FP_PRIVATE__
#include "stdint.h"
double copysign ( double arg2, double arg1 );
double fabs ( double x );
double nan ( const char *string );
#define __FABS(x) __builtin_fabs(x)
#define __FABSF(x) __builtin_fabsf(x)
#if defined(__APPLE_CC__)
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect((x), 0)
#else
#define likely(x) (x)
#define unlikely(x) (x)
#endif
#include "ppc_intrinsics.h"
#define __FMADD __fmadd
#define __FMADDS __fmadds
#define __FMSUB __fmsub
#define __FNMSUB __fnmsub
#define __FMUL __fmul
#define __FADD __fadd
#define __FSUB __fsub
static inline double __fadd (double a, double b) __attribute__((always_inline));
static inline double
__fadd (double a, double b)
{
double result;
__asm__ ("fadd %0, %1, %2"
: "=f" (result)
: "f" (a), "f" (b));
return result;
}
static inline double __fsub (double a, double b) __attribute__((always_inline));
static inline double
__fsub (double a, double b)
{
double result;
__asm__ ("fsub %0, %1, %2"
: "=f" (result)
: "f" (a), "f" (b));
return result;
}
#define __NOOP \
({ __label__ L1, L2; L1: (void)&&L1;\
asm volatile ( "nop" ); \
L2: (void)&&L2; \
})
#define __ENSURE(x, y, z) \
({ \
double __value, __argx = (x), __argy = (y), __argz = (z); \
asm volatile ("fmadd %0,%1,%2,%3" : "=f" (__value): "f" (__argx), "f" (__argy), "f" (__argz)); \
__value; \
})
#define __PROD(x, y) \
({ \
double __value, __argx = (x), __argy = (y); \
asm volatile ("fmul %0,%1,%2" : "=f" (__value): "f" (__argx), "f" (__argy)); \
__value; \
})
#define __PROG_INEXACT( x ) (void)__PROD( x, x )
#define __PROG_UF_INEXACT( x ) (void)__PROD( x, x )
#define __PROG_OF_INEXACT( x ) (void)__PROD( x, x )
#define fQuietNan 0x00400000
typedef union {
int32_t lval;
float fval;
} hexsingle;
#define dQuietNan 0x00080000
#if defined(__BIG_ENDIAN__)
typedef union {
struct {
uint32_t hi;
uint32_t lo;
} i;
double d;
} hexdouble;
#define HEXDOUBLE(hi, lo) { { hi, lo } }
#elif defined(__LITTLE_ENDIAN__)
typedef union {
struct {
uint32_t lo;
uint32_t hi;
} i;
double d;
} hexdouble;
#define HEXDOUBLE(hi, lo) { { lo, hi } }
#else
#error Unknown endianness
#endif
typedef union {
uint32_t i[4];
struct {
hexdouble hexhead;
hexdouble hextail;
} hh;
struct {
double head;
double tail;
} dd;
long double ld;
} hexdbldbl;
#endif