Update ENTERI() macro
Steve Kargl
sgk at troutmask.apl.washington.edu
Tue Feb 26 19:18:29 UTC 2019
I have submitted
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236063
Update the ENTERI() macro in math_private.h to take a parameter.
This parameter is used by __typeof() to set the type for an
intermediate variable that holds the return value of a function
on i386 FreeBSD. The patch updates the consumers of ENTERI().
--- /data/kargl/freebsd/src/lib/msun/src/e_acoshl.c 2013-07-30 10:32:47.000000000 -0700
+++ ./src/e_acoshl.c 2019-02-25 16:36:08.532381000 -0800
@@ -68,7 +68,7 @@
long double t;
int16_t hx;
- ENTERI();
+ ENTERI(x);
GET_LDBL_EXPSIGN(hx, x);
if (hx < 0x3fff) { /* x < 1, or misnormal */
RETURNI((x-x)/(x-x));
--- /data/kargl/freebsd/src/lib/msun/src/e_atanhl.c 2013-07-30 10:32:47.000000000 -0700
+++ ./src/e_atanhl.c 2019-02-25 16:36:24.414626000 -0800
@@ -57,7 +57,7 @@
long double t;
uint16_t hx, ix;
- ENTERI();
+ ENTERI(x);
GET_LDBL_EXPSIGN(hx, x);
ix = hx & 0x7fff;
if (ix >= 0x3fff) /* |x| >= 1, or NaN or misnormal */
--- /data/kargl/freebsd/src/lib/msun/src/e_coshl.c 2016-10-10 14:48:39.000000000 -0700
+++ ./src/e_coshl.c 2019-02-25 16:37:03.670060000 -0800
@@ -97,7 +97,7 @@
/* x is INF or NaN */
if(ix>=0x7fff) return x*x;
- ENTERI();
+ ENTERI(x);
/* |x| < 1, return 1 or c(x) */
if(ix<0x3fff) {
--- /data/kargl/freebsd/src/lib/msun/src/e_sinhl.c 2016-10-10 14:48:39.000000000 -0700
+++ ./src/e_sinhl.c 2019-02-25 16:37:14.623690000 -0800
@@ -97,7 +97,7 @@
/* x is INF or NaN */
if(ix>=0x7fff) return x+x;
- ENTERI();
+ ENTERI(x);
s = 1;
if (jx<0) s = -1;
--- /data/kargl/freebsd/src/lib/msun/src/math_private.h 2018-10-31 16:15:21.809877000 -0700
+++ ./src/math_private.h 2019-02-25 16:54:26.897247000 -0800
@@ -335,15 +348,14 @@
/* Support switching the mode to FP_PE if necessary. */
#if defined(__i386__) && !defined(NO_FPSETPREC)
-#define ENTERI() ENTERIT(long double)
-#define ENTERIT(returntype) \
- returntype __retval; \
+#define ENTERI(a) \
+ __typeof(a) __retval; \
fp_prec_t __oprec; \
\
if ((__oprec = fpgetprec()) != FP_PE) \
fpsetprec(FP_PE)
-#define RETURNI(x) do { \
- __retval = (x); \
+#define RETURNI(a) do { \
+ __retval = (a); \
if (__oprec != FP_PE) \
fpsetprec(__oprec); \
RETURNF(__retval); \
@@ -359,9 +371,8 @@
return; \
} while (0)
#else
-#define ENTERI()
-#define ENTERIT(x)
-#define RETURNI(x) RETURNF(x)
+#define ENTERI(a)
+#define RETURNI(a) RETURNF(a)
#define ENTERV()
#define RETURNV() return
#endif
--- /data/kargl/freebsd/src/lib/msun/src/s_asinhl.c 2013-07-30 10:32:47.000000000 -0700
+++ ./src/s_asinhl.c 2019-02-25 16:37:44.264923000 -0800
@@ -71,7 +71,7 @@
long double t, w;
uint16_t hx, ix;
- ENTERI();
+ ENTERI(x);
GET_LDBL_EXPSIGN(hx, x);
ix = hx & 0x7fff;
if (ix >= 0x7fff) RETURNI(x+x); /* x is inf, NaN or misnormal */
--- /data/kargl/freebsd/src/lib/msun/src/s_cbrtl.c 2012-07-30 14:58:28.000000000 -0700
+++ ./src/s_cbrtl.c 2019-02-25 16:43:03.606703000 -0800
@@ -53,7 +53,7 @@
if (k == BIAS + LDBL_MAX_EXP)
return (x + x);
- ENTERI();
+ ENTERI(x);
if (k == 0) {
/* If x = +-0, then cbrt(x) = +-0. */
if ((u.bits.manh | u.bits.manl) == 0)
--- /data/kargl/freebsd/src/lib/msun/src/s_clogl.c 2019-02-26 11:00:53.735653000 -0800
+++ ./src/s_clogl.c 2019-02-25 16:43:19.194615000 -0800
@@ -65,7 +65,7 @@
uint16_t hax, hay;
int kx, ky;
- ENTERIT(long double complex);
+ ENTERI(z);
x = creall(z);
y = cimagl(z);
--- /data/kargl/freebsd/src/lib/msun/src/s_cosl.c 2017-12-01 13:29:36.000000000 -0800
+++ ./src/s_cosl.c 2019-02-25 16:43:29.546277000 -0800
@@ -68,7 +68,7 @@
if (z.bits.exp == 32767)
return ((x - x) / (x - x));
- ENTERI();
+ ENTERI(x);
/* Optimize the case where x is already within range. */
if (z.e < M_PI_4)
--- /data/kargl/freebsd/src/lib/msun/src/s_roundl.c 2017-12-01 13:29:36.000000000 -0800
+++ ./src/s_roundl.c 2019-02-25 16:43:42.814592000 -0800
@@ -48,7 +48,7 @@
if ((hx & 0x7fff) == 0x7fff)
return (x + x);
- ENTERI();
+ ENTERI(x);
if (!(hx & 0x8000)) {
t = floorl(x);
--- /data/kargl/freebsd/src/lib/msun/src/s_sinl.c 2017-12-01 13:29:36.000000000 -0800
+++ ./src/s_sinl.c 2019-02-25 16:43:49.574030000 -0800
@@ -64,7 +64,7 @@
if (z.bits.exp == 32767)
return ((x - x) / (x - x));
- ENTERI();
+ ENTERI(x);
/* Optimize the case where x is already within range. */
if (z.e < M_PI_4) {
--- /data/kargl/freebsd/src/lib/msun/src/s_tanhl.c 2016-10-10 14:48:39.000000000 -0700
+++ ./src/s_tanhl.c 2019-02-25 16:44:10.604476000 -0800
@@ -127,7 +127,7 @@
else return one/x-one; /* tanh(NaN) = NaN */
}
- ENTERI();
+ ENTERI(x);
/* |x| < 40 */
if (ix < 0x4004 || fabsl(x) < 40) { /* |x|<40 */
--- /data/kargl/freebsd/src/lib/msun/src/s_tanl.c 2017-12-01 13:29:36.000000000 -0800
+++ ./src/s_tanl.c 2019-02-25 16:44:21.348406000 -0800
@@ -70,7 +70,7 @@
if (z.bits.exp == 32767)
return ((x - x) / (x - x));
- ENTERI();
+ ENTERI(x);
/* Optimize the case where x is already within range. */
if (z.e < M_PI_4) {
--- /data/kargl/freebsd/src/lib/msun/ld80/e_lgammal_r.c 2016-10-10 14:48:38.000000000 -0700
+++ ./ld80/e_lgammal_r.c 2019-02-26 11:04:45.992781000 -0800
@@ -261,7 +261,7 @@
ix = hx&0x7fff;
if(ix==0x7fff) return x*x;
- ENTERI();
+ ENTERI(x);
/* purge +-0 and tiny arguments */
*signgamp = 1-2*(hx>>15);
--- /data/kargl/freebsd/src/lib/msun/ld80/s_erfl.c 2014-07-13 10:05:05.000000000 -0700
+++ ./ld80/s_erfl.c 2019-02-26 11:05:35.163816000 -0800
@@ -231,7 +231,7 @@
return (1-i)+one/x; /* erfl(+-inf)=+-1 */
}
- ENTERI();
+ ENTERI(x);
ax = fabsl(x);
if(ax < 0.84375) {
@@ -284,7 +284,7 @@
return ((hx>>15)<<1)+one/x;
}
- ENTERI();
+ ENTERI(x);
ax = fabsl(x);
if(ax < 0.84375L) {
--- /data/kargl/freebsd/src/lib/msun/ld80/s_exp2l.c 2017-12-01 13:29:35.000000000 -0800
+++ ./ld80/s_exp2l.c 2019-02-25 16:31:42.300930000 -0800
@@ -242,7 +242,7 @@
return (1.0L + x); /* 1 with inexact */
}
- ENTERI();
+ ENTERI(x);
/*
* Reduce x, computing z, i0, and k. The low bits of x + redux
--- /data/kargl/freebsd/src/lib/msun/ld80/s_expl.c 2018-10-31 16:15:21.293646000 -0700
+++ ./ld80/s_expl.c 2019-02-25 16:32:05.335182000 -0800
@@ -97,7 +97,7 @@
RETURN2P(1, x); /* 1 with inexact iff x != 0 */
}
- ENTERI();
+ ENTERI(x);
twopk = 1;
__k_expl(x, &hi, &lo, &k);
@@ -193,7 +193,7 @@
RETURN2P(tiny, -1); /* good for x < -65ln2 - eps */
}
- ENTERI();
+ ENTERI(x);
if (T1 < x && x < T2) {
if (ix < BIAS - 74) { /* |x| < 0x1p-74 (includes pseudos) */
--- /data/kargl/freebsd/src/lib/msun/ld80/s_logl.c 2017-12-01 13:29:35.000000000 -0800
+++ ./ld80/s_logl.c 2019-02-25 16:34:17.938768000 -0800
@@ -481,7 +481,7 @@
/* log(pseudo-NaN) = qNaN */
/* log(unnormal) = qNaN */
#ifndef STRUCT_RETURN
- ENTERI();
+ ENTERI(x);
#endif
k += hx;
ix = lx & 0x7fffffffffffffffULL;
@@ -588,7 +588,7 @@
f_hi = x;
f_lo = 0; /* avoid underflow of the P5 term */
}
- ENTERI();
+ ENTERI(x);
x = f_hi + f_lo;
f_lo = (f_hi - x) + f_lo;
@@ -668,7 +668,7 @@
{
struct ld r;
- ENTERI();
+ ENTERI(x);
DOPRINT_START(&x);
k_logl(x, &r);
RETURNSPI(&r);
@@ -686,7 +686,7 @@
struct ld r;
long double hi, lo;
- ENTERI();
+ ENTERI(x);
DOPRINT_START(&x);
k_logl(x, &r);
if (!r.lo_set)
@@ -704,7 +704,7 @@
struct ld r;
long double hi, lo;
- ENTERI();
+ ENTERI(x);
DOPRINT_START(&x);
k_logl(x, &r);
if (!r.lo_set)
--- /data/kargl/freebsd/src/lib/msun/ld128/s_expl.c 2018-10-31 16:15:21.240218000 -0700
+++ ./ld128/s_expl.c 2019-02-25 16:28:16.950376000 -0800
@@ -85,7 +85,7 @@
RETURN2P(1, x); /* 1 with inexact iff x != 0 */
}
- ENTERI();
+ ENTERI(x);
twopk = 1;
__k_expl(x, &hi, &lo, &k);
@@ -232,7 +232,7 @@
RETURN2P(tiny, -1); /* good for x < -114ln2 - eps */
}
- ENTERI();
+ ENTERI(x);
if (T1 < x && x < T2) {
x2 = x * x;
--- /data/kargl/freebsd/src/lib/msun/ld128/s_logl.c 2017-12-01 13:29:34.000000000 -0800
+++ ./ld128/s_logl.c 2019-02-25 16:30:18.608573000 -0800
@@ -478,7 +478,7 @@
} else if (hx >= 0x7fff)
RETURN1(rp, x + x); /* log(Inf or NaN) = Inf or qNaN */
#ifndef STRUCT_RETURN
- ENTERI();
+ ENTERI(x);
#endif
k += hx;
dk = k;
@@ -597,7 +597,7 @@
f_hi = x;
f_lo = 0; /* avoid underflow of the P3 term */
}
- ENTERI();
+ ENTERI(x);
x = f_hi + f_lo;
f_lo = (f_hi - x) + f_lo;
@@ -678,7 +678,7 @@
{
struct ld r;
- ENTERI();
+ ENTERI(x);
DOPRINT_START(&x);
k_logl(x, &r);
RETURNSPI(&r);
@@ -705,7 +705,7 @@
long double lo;
float hi;
- ENTERI();
+ ENTERI(x);
DOPRINT_START(&x);
k_logl(x, &r);
if (!r.lo_set)
@@ -724,7 +724,7 @@
long double lo;
float hi;
- ENTERI();
+ ENTERI(x);
DOPRINT_START(&x);
k_logl(x, &r);
if (!r.lo_set)
--
Steve
More information about the freebsd-numerics
mailing list