From d8a5fc0b49835059d3f35f4b6e105b9c360dac79 Mon Sep 17 00:00:00 2001 From: bde Date: Mon, 21 Nov 2005 04:57:12 +0000 Subject: Mess up the "kernel" float trig function .c files with ifdefs so that they can be #included in other .c files to give inline functions, and use them to inline the functions in most callers (not in e_lgammaf_r.c). __kernel_tanf() is too large and complicated for gcc to inline very well. An athlons, this gives a speed increase under favourable pipeline conditions of about 10% overall (larger for AXP, smaller for A64). E.g., on AXP, sinf() on uniformly distributed args in [-2Pi, 2Pi] now takes 30-56 cycles; it used to take 45-61 cycles; hardware fsin takes 65-129. --- lib/msun/src/k_cosf.c | 5 +++++ lib/msun/src/k_sinf.c | 5 +++++ lib/msun/src/k_tanf.c | 5 +++++ lib/msun/src/s_cosf.c | 4 ++++ lib/msun/src/s_sinf.c | 4 ++++ lib/msun/src/s_tanf.c | 2 ++ 6 files changed, 25 insertions(+) (limited to 'lib/msun/src') diff --git a/lib/msun/src/k_cosf.c b/lib/msun/src/k_cosf.c index 885af94..4e04fd8 100644 --- a/lib/msun/src/k_cosf.c +++ b/lib/msun/src/k_cosf.c @@ -14,9 +14,11 @@ * ==================================================== */ +#ifndef INLINE_KERNEL_COSF #ifndef lint static char rcsid[] = "$FreeBSD$"; #endif +#endif #include "math.h" #include "math_private.h" @@ -28,6 +30,9 @@ C1 = 0xaaaaa5.0p-28, /* 0.041666645557 */ C2 = -0xb60615.0p-33, /* -0.0013887310633 */ C3 = 0xccf47d.0p-39; /* 0.000024432542887 */ +#ifdef INLINE_KERNEL_COSF +extern inline +#endif float __kernel_cosf(float x, float y) { diff --git a/lib/msun/src/k_sinf.c b/lib/msun/src/k_sinf.c index d393db7..ad8d9de 100644 --- a/lib/msun/src/k_sinf.c +++ b/lib/msun/src/k_sinf.c @@ -14,9 +14,11 @@ * ==================================================== */ +#ifndef INLINE_KERNEL_SINF #ifndef lint static char rcsid[] = "$FreeBSD$"; #endif +#endif #include "math.h" #include "math_private.h" @@ -29,6 +31,9 @@ S2 = 0x8888bb.0p-30, /* 0.0083333803341 */ S3 = -0xd02de1.0p-36, /* -0.00019853517006 */ S4 = 0xbe6dbe.0p-42; /* 0.0000028376084629 */ +#ifdef INLINE_KERNEL_SINF +extern inline +#endif float __kernel_sinf(float x, float y, int iy) { diff --git a/lib/msun/src/k_tanf.c b/lib/msun/src/k_tanf.c index 377db78..cc498d5 100644 --- a/lib/msun/src/k_tanf.c +++ b/lib/msun/src/k_tanf.c @@ -12,9 +12,11 @@ * ==================================================== */ +#ifndef INLINE_KERNEL_TANF #ifndef lint static char rcsid[] = "$FreeBSD$"; #endif +#endif #include "math.h" #include "math_private.h" @@ -32,6 +34,9 @@ T[] = { 0xeaf97e.0p-31, /* 0.0071708550677 */ }; +#ifdef INLINE_KERNEL_TANF +extern inline +#endif float __kernel_tanf(float x, float y, int iy) { diff --git a/lib/msun/src/s_cosf.c b/lib/msun/src/s_cosf.c index ec7f0cf..ced11eb 100644 --- a/lib/msun/src/s_cosf.c +++ b/lib/msun/src/s_cosf.c @@ -18,7 +18,11 @@ static char rcsid[] = "$FreeBSD$"; #endif #include "math.h" +#define INLINE_KERNEL_COSF +#define INLINE_KERNEL_SINF #include "math_private.h" +#include "k_cosf.c" +#include "k_sinf.c" /* Small multiples of pi/2 rounded to double precision. */ static const double diff --git a/lib/msun/src/s_sinf.c b/lib/msun/src/s_sinf.c index cac6e26..1e4270e 100644 --- a/lib/msun/src/s_sinf.c +++ b/lib/msun/src/s_sinf.c @@ -18,7 +18,11 @@ static char rcsid[] = "$FreeBSD$"; #endif #include "math.h" +#define INLINE_KERNEL_COSF +#define INLINE_KERNEL_SINF #include "math_private.h" +#include "k_cosf.c" +#include "k_sinf.c" /* Small multiples of pi/2 rounded to double precision. */ static const double diff --git a/lib/msun/src/s_tanf.c b/lib/msun/src/s_tanf.c index 852dc12..470b336 100644 --- a/lib/msun/src/s_tanf.c +++ b/lib/msun/src/s_tanf.c @@ -18,7 +18,9 @@ static char rcsid[] = "$FreeBSD$"; #endif #include "math.h" +#define INLINE_KERNEL_TANF #include "math_private.h" +#include "k_tanf.c" /* Small multiples of pi/2 rounded to double precision. */ static const double -- cgit v1.1