提交 eca1c35e 编写于 作者: N nsz

remove long double const workarounds

Some long double consts were stored in two doubles as a workaround
for x86_64 and i386 with the following comment:
/* Long double constants are slow on these arches, and broken on i386. */
This is most likely old gcc bug related to the default x87 fpu
precision setting (it's double instead of double extended on BSD).
上级 9a810cb6
......@@ -43,17 +43,8 @@
*/
static const double one = 1.0;
// FIXME
/* Long double constants are slow on these arches, and broken on i386. */
static const volatile double
C1hi = 0.041666666666666664, /* 0x15555555555555.0p-57 */
C1lo = 2.2598839032744733e-18; /* 0x14d80000000000.0p-111 */
#define C1 ((long double)C1hi + C1lo)
#if 0
static const long double
C1 = 0.0416666666666666666136L; /* 0xaaaaaaaaaaaaaa9b.0p-68 */
#endif
static const double
C2 = -0.0013888888888888874, /* -0x16c16c16c16c10.0p-62 */
......
......@@ -38,30 +38,11 @@ pio2_1 = 1.57079632679597125389e+00, /* 0x3FF921FB, 0x54444000 */
pio2_2 = -1.07463465549783099519e-12, /* -0x12e7b967674000.0p-92 */
pio2_3 = 6.36831716351370313614e-25; /* 0x18a2e037074000.0p-133 */
// FIXME: this should be verified (maybe old gcc specific hack)
//#if defined(__amd64__) || defined(__i386__)
/* Long double constants are slow on these arches, and broken on i386. */
static const volatile double
invpio2hi = 6.3661977236758138e-01, /* 0x145f306dc9c883.0p-53 */
invpio2lo = -3.9356538861223811e-17, /* -0x16b00000000000.0p-107 */
pio2_1thi = -1.0746346554971943e-12, /* -0x12e7b9676733af.0p-92 */
pio2_1tlo = 8.8451028997905949e-29, /* 0x1c080000000000.0p-146 */
pio2_2thi = 6.3683171635109499e-25, /* 0x18a2e03707344a.0p-133 */
pio2_2tlo = 2.3183081793789774e-41, /* 0x10280000000000.0p-187 */
pio2_3thi = -2.7529965190440717e-37, /* -0x176b7ed8fbbacc.0p-174 */
pio2_3tlo = -4.2006647512740502e-54; /* -0x19c00000000000.0p-230 */
#define invpio2 ((long double)invpio2hi + invpio2lo)
#define pio2_1t ((long double)pio2_1thi + pio2_1tlo)
#define pio2_2t ((long double)pio2_2thi + pio2_2tlo)
#define pio2_3t ((long double)pio2_3thi + pio2_3tlo)
//#else
#if 0
static const long double
invpio2 = 6.36619772367581343076e-01L, /* 0xa2f9836e4e44152a.0p-64 */
pio2_1t = -1.07463465549719416346e-12L, /* -0x973dcb3b399d747f.0p-103 */
pio2_2t = 6.36831716351095013979e-25L, /* 0xc51701b839a25205.0p-144 */
pio2_3t = -2.75299651904407171810e-37L; /* -0xbb5bf6c7ddd660ce.0p-185 */
#endif
static inline int __rem_pio2l(long double x, long double *y)
{
......
......@@ -26,17 +26,8 @@
static const double half = 0.5;
// FIXME
/* Long double constants are slow on these arches, and broken on i386. */
static const volatile double
S1hi = -0.16666666666666666, /* -0x15555555555555.0p-55 */
S1lo = -9.2563760475949941e-18; /* -0x15580000000000.0p-109 */
#define S1 ((long double)S1hi + S1lo)
#if 0
static const long double
S1 = -0.166666666666666666671L; /* -0xaaaaaaaaaaaaaaab.0p-66 */
#endif
static const double
S2 = 0.0083333333333333332, /* 0x11111111111111.0p-59 */
......
......@@ -23,32 +23,12 @@
* See __cosl.c for more details about the polynomial.
*/
/* Long double constants are slow on these arches, and broken on i386. */
static const volatile double
T3hi = 0.33333333333333331, /* 0x15555555555555.0p-54 */
T3lo = 1.8350121769317163e-17, /* 0x15280000000000.0p-108 */
T5hi = 0.13333333333333336, /* 0x11111111111112.0p-55 */
T5lo = 1.3051083651294260e-17, /* 0x1e180000000000.0p-109 */
T7hi = 0.053968253968250494, /* 0x1ba1ba1ba1b827.0p-57 */
T7lo = 3.1509625637859973e-18, /* 0x1d100000000000.0p-111 */
pio4_hi = 0.78539816339744828, /* 0x1921fb54442d18.0p-53 */
pio4_lo = 3.0628711372715500e-17, /* 0x11a80000000000.0p-107 */
pio4lo_hi = -1.2541394031670831e-20, /* -0x1d9cceba3f91f2.0p-119 */
pio4lo_lo = 6.1493048227390915e-37; /* 0x1a280000000000.0p-173 */
#define T3 ((long double)T3hi + T3lo)
#define T5 ((long double)T5hi + T5lo)
#define T7 ((long double)T7hi + T7lo)
#define pio4 ((long double)pio4_hi + pio4_lo)
#define pio4lo ((long double)pio4lo_hi + pio4lo_lo)
#if 0
static const long double
T3 = 0.333333333333333333180L, /* 0xaaaaaaaaaaaaaaa5.0p-65 */
T5 = 0.133333333333333372290L, /* 0x88888888888893c3.0p-66 */
T7 = 0.0539682539682504975744L, /* 0xdd0dd0dd0dc13ba2.0p-68 */
pio4 = 0.785398163397448309628L, /* 0xc90fdaa22168c235.0p-64 */
pio4lo = -1.25413940316708300586e-20L; /* -0xece675d1fc8f8cbb.0p-130 */
#endif
static const double
T9 = 0.021869488536312216, /* 0x1664f4882cc1c2.0p-58 */
......
......@@ -25,20 +25,8 @@ long double acosl(long double x)
#include "__invtrigl.h"
static const long double
one = 1.00000000000000000000e+00;
// FIXME
//#ifdef __i386__
/* XXX Work around the fact that gcc truncates long double constants on i386 */
static const volatile double
pi1 = 3.14159265358979311600e+00, /* 0x1.921fb54442d18p+1 */
pi2 = 1.22514845490862001043e-16; /* 0x1.1a80000000000p-53 */
#define pi ((long double)pi1 + pi2)
//#else
#if 0
static const long double
one = 1.00000000000000000000e+00,
pi = 3.14159265358979323846264338327950280e+00L;
#endif
long double acosl(long double x)
{
......
......@@ -27,16 +27,8 @@ long double atan2l(long double y, long double x)
static const volatile long double
tiny = 1.0e-300;
static const long double
zero = 0.0;
/* XXX Work around the fact that gcc truncates long double constants on i386 */
static const volatile double
pi1 = 3.14159265358979311600e+00, /* 0x1.921fb54442d18p+1 */
pi2 = 1.22514845490862001043e-16; /* 0x1.1a80000000000p-53 */
#define pi ((long double)pi1 + pi2)
#if 0
static const long double
zero = 0.0,
pi = 3.14159265358979323846264338327950280e+00L;
#endif
long double atan2l(long double y, long double x)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册