diff --git a/src/lisp/s_expm1.c b/src/lisp/s_expm1.c
index e4dd820cd82d17874e36ecf78bf277c436c5e0d8..d6a182766af5cd431f96c0c7cdf1becb20cbf1d0 100644
--- a/src/lisp/s_expm1.c
+++ b/src/lisp/s_expm1.c
@@ -127,17 +127,20 @@ Q4  =   4.00821782732936239552e-06, /* 3ED0CFCA 86E65239 */
 Q5  =  -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */
 
 #ifdef __STDC__
-	double expm1(double x)
+	double fdlibm_expm1(double x)
 #else
-	double expm1(x)
+	double fdlibm_expm1(x)
 	double x;
 #endif
 {
 	double y,hi,lo,c,t,e,hxs,hfx,r1;
 	int k,xsb;
 	unsigned hx;
+	union { int i[2]; double d; } ux;
+	union { int i[2]; double d; } utmp;
 
-	hx  = __HI(x);	/* high word of x */
+	ux.d = x;
+	hx  = ux.i[HIWORD];	/* high word of x */
 	xsb = hx&0x80000000;		/* sign bit of x */
 	if(xsb==0) y=x; else y= -x;	/* y = |x| */
 	hx &= 0x7fffffff;		/* high word of |x| */
@@ -146,7 +149,7 @@ Q5  =  -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */
 	if(hx >= 0x4043687A) {			/* if |x|>=56*ln2 */
 	    if(hx >= 0x40862E42) {		/* if |x|>=709.78... */
                 if(hx>=0x7ff00000) {
-		    if(((hx&0xfffff)|__LO(x))!=0) 
+		    if(((hx&0xfffff)|ux.i[LOWORD])!=0) 
 		         return x+x; 	 /* NaN */
 		    else return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */
 	        }
@@ -196,19 +199,29 @@ Q5  =  -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */
 	       	else 	      return  one+2.0*(x-e);
 	    if (k <= -2 || k>56) {   /* suffice to return exp(x)-1 */
 	        y = one-(e-x);
-	        __HI(y) += (k<<20);	/* add k to y's exponent */
+		utmp.d = y;
+	        utmp.i[HIWORD] += (k<<20);	/* add k to y's exponent */
+		y = utmp.d;
 	        return y-one;
 	    }
 	    t = one;
 	    if(k<20) {
-	       	__HI(t) = 0x3ff00000 - (0x200000>>k);  /* t=1-2^-k */
+		utmp.d = t;
+	       	utmp.i[HIWORD] = 0x3ff00000 - (0x200000>>k);  /* t=1-2^-k */
+		t = utmp.d;
 	       	y = t-(e-x);
-	       	__HI(y) += (k<<20);	/* add k to y's exponent */
+		utmp.d = y;
+	       	utmp.i[HIWORD] += (k<<20);	/* add k to y's exponent */
+		y = utmp.d;
 	   } else {
-	       	__HI(t)  = ((0x3ff-k)<<20);	/* 2^-k */
+		utmp.d = t;
+	       	utmp.i[HIWORD]  = ((0x3ff-k)<<20);	/* 2^-k */
+		t = utmp.d;
 	       	y = x-(e+t);
 	       	y += one;
-	       	__HI(y) += (k<<20);	/* add k to y's exponent */
+		utmp.d = y;
+	       	utmp.i[HIWORD] += (k<<20);	/* add k to y's exponent */
+		y = utmp.d;
 	    }
 	}
 	return y;
diff --git a/src/lisp/s_log1p.c b/src/lisp/s_log1p.c
index 3d1059af31f496889ad313f6b1fd8168fd0bb613..eaec38a5f2ae7e709e4b2bac0fe614b7863ed074 100644
--- a/src/lisp/s_log1p.c
+++ b/src/lisp/s_log1p.c
@@ -97,16 +97,18 @@ Lp7 = 1.479819860511658591e-01;  /* 3FC2F112 DF3E5244 */
 static double zero = 0.0;
 
 #ifdef __STDC__
-	double log1p(double x)
+	double fdlibm_log1p(double x)
 #else
-	double log1p(x)
+	double fdlibm_log1p(x)
 	double x;
 #endif
 {
 	double hfsq,f,c,s,z,R,u;
 	int k,hx,hu,ax;
+	union { int i[2]; double d; } ux;
 
-	hx = __HI(x);		/* high word of x */
+	ux.d = x;
+	hx = ux.i[HIWORD];		/* high word of x */
 	ax = hx&0x7fffffff;
 
 	k = 1;
@@ -128,23 +130,29 @@ static double zero = 0.0;
 	if (hx >= 0x7ff00000) return x+x;
 	if(k!=0) {
 	    if(hx<0x43400000) {
-		u  = 1.0+x; 
-	        hu = __HI(u);		/* high word of u */
+		u  = 1.0+x;
+		ux.d = u;
+	        hu = ux.i[HIWORD];		/* high word of u */
 	        k  = (hu>>20)-1023;
 	        c  = (k>0)? 1.0-(u-x):x-(u-1.0);/* correction term */
 		c /= u;
 	    } else {
 		u  = x;
-	        hu = __HI(u);		/* high word of u */
+		ux.d = u;
+	        hu = ux.i[HIWORD];		/* high word of u */
 	        k  = (hu>>20)-1023;
 		c  = 0;
 	    }
 	    hu &= 0x000fffff;
 	    if(hu<0x6a09e) {
-	        __HI(u) = hu|0x3ff00000;	/* normalize u */
+		ux.d = u;
+	        ux.i[HIWORD] = hu|0x3ff00000;	/* normalize u */
+		u = ux.d;
 	    } else {
-	        k += 1; 
-	        __HI(u) = hu|0x3fe00000;	/* normalize u/2 */
+	        k += 1;
+		ux.d = u;
+	        ux.i[HIWORD] = hu|0x3fe00000;	/* normalize u/2 */
+		u = ux.d;
 	        hu = (0x00100000-hu)>>2;
 	    }
 	    f = u-1.0;