diff --git a/src/lisp/e_exp.c b/src/lisp/e_exp.c
index e2012057f7304c7990f51b0de115abf4540ed5d9..4d94a1e3d5c97f8f774e1054d8dbbd4dc0653ea5 100644
--- a/src/lisp/e_exp.c
+++ b/src/lisp/e_exp.c
@@ -108,15 +108,17 @@ P5   =  4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
 	double y,hi,lo,c,t;
 	int k,xsb;
 	unsigned hx;
+	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 */
 	xsb = (hx>>31)&1;		/* sign bit of x */
 	hx &= 0x7fffffff;		/* high word of |x| */
 
     /* filter out non-finite argument */
 	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:0.0;	/* exp(+-inf)={inf,0} */
 	    }
@@ -147,10 +149,14 @@ P5   =  4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
 	if(k==0) 	return one-((x*c)/(c-2.0)-x); 
 	else 		y = one-((lo-(x*c)/(2.0-c))-hi);
 	if(k >= -1021) {
-	    __HI(y) += (k<<20);	/* add k to y's exponent */
+	    ux.d = y;
+	    ux.i[HIWORD] += (k<<20);	/* add k to y's exponent */
+	    y = ux.d;
 	    return y;
 	} else {
-	    __HI(y) += ((k+1000)<<20);/* add k to y's exponent */
+	    ux.d = y;
+	    ux.i[HIWORD] += ((k+1000)<<20);/* add k to y's exponent */
+	    y = ux.d;
 	    return y*twom1000;
 	}
 }
diff --git a/src/lisp/e_log.c b/src/lisp/e_log.c
index 3798bc8027ef5bc4fb3ddee310f715a699a67dd4..4404ce15ed5d94891711eed0bbae5531f314ddc8 100644
--- a/src/lisp/e_log.c
+++ b/src/lisp/e_log.c
@@ -92,9 +92,11 @@ static double zero   =  0.0;
 	double hfsq,f,s,z,R,w,t1,t2,dk;
 	int k,hx,i,j;
 	unsigned lx;
+	union { int i[2]; double d; } ux;
 
-	hx = __HI(x);		/* high word of x */
-	lx = __LO(x);		/* low  word of x */
+	ux.d = x;
+	hx = ux.i[HIWORD];		/* high word of x */
+	lx = ux.i[LOWORD];		/* low  word of x */
 
 	k=0;
 	if (hx < 0x00100000) {			/* x < 2**-1022  */
@@ -102,13 +104,16 @@ static double zero   =  0.0;
 		return -two54/zero;		/* log(+-0)=-inf */
 	    if (hx<0) return (x-x)/zero;	/* log(-#) = NaN */
 	    k -= 54; x *= two54; /* subnormal number, scale up x */
-	    hx = __HI(x);		/* high word of x */
+	    ux.d = x;
+	    hx = ux.i[HIWORD];		/* high word of x */
 	} 
 	if (hx >= 0x7ff00000) return x+x;
 	k += (hx>>20)-1023;
 	hx &= 0x000fffff;
 	i = (hx+0x95f64)&0x100000;
-	__HI(x) = hx|(i^0x3ff00000);	/* normalize x or x/2 */
+	ux.d = x;
+	ux.i[HIWORD] = hx|(i^0x3ff00000);	/* normalize x or x/2 */
+	x = ux.d;
 	k += (i>>20);
 	f = x-1.0;
 	if((0x000fffff&(2+hx))<3) {	/* |f| < 2**-20 */