#ifndef _MATH_PRIVATE_H_ #error "Never use directly; include instead." #endif /* GCC does not optimize the default ldbl_pack code to not spill register in the stack. The following optimization tells gcc that pack/unpack is really a nop. We use fr1/fr2 because those are the regs used to pass/return a single long double arg. */ static inline long double ldbl_pack_ppc (double a, double aa) { register long double x __asm__ ("fr1"); register double xh __asm__ ("fr1"); register double xl __asm__ ("fr2"); xh = a; xl = aa; __asm__ ("" : "=f" (x) : "f" (xh), "f" (xl)); return x; } static inline void ldbl_unpack_ppc (long double l, double *a, double *aa) { register long double x __asm__ ("fr1"); register double xh __asm__ ("fr1"); register double xl __asm__ ("fr2"); x = l; __asm__ ("" : "=f" (xh), "=f" (xl) : "f" (x)); *a = xh; *aa = xl; } #define ldbl_pack ldbl_pack_ppc #define ldbl_unpack ldbl_unpack_ppc #include