[PATCH] Move more mp constants into static scope

Siddhesh Poyarekar siddhesh@redhat.com
Fri Dec 21 03:54:00 GMT 2012


Hi,

Here's another patch (on top of the mpone patch, not the int mantissa
patch) that moves constants mptwo, mphalf and mp3halfs into static
space, with mptwo being shared between mpa.c and mpatan.c.  Tested on
x86_64 to verify that it does not cause any regressions.  OK for 2.18?

Siddhesh

ChangeLog:

2012-12-21  Siddhesh Poyarekar  <siddhesh@redhat.com>

	* sysdeps/ieee754/dbl-64/mpa.c [! NO__CONST]: New constant
	MPTWO.
	(__inv): Remove local variable MPTWO to use the global
	constant.
	* sysdeps/ieee754/dbl-64/mpa.h: Declare MPTWO.
	* sysdeps/ieee754/dbl-64/mpatan.c (__mpatan): Remove local
	variable MPTWO.
	* sysdeps/ieee754/dbl-64/mpsqrt.c (__mpsqrt): Make MPHALF and
	MP3HALFS static const.

diff --git a/sysdeps/ieee754/dbl-64/mpa.c b/sysdeps/ieee754/dbl-64/mpa.c
index b5d25ed..f17e0d3 100644
--- a/sysdeps/ieee754/dbl-64/mpa.c
+++ b/sysdeps/ieee754/dbl-64/mpa.c
@@ -53,6 +53,7 @@
 
 #ifndef NO__CONST
 const mp_no mpone = {1, {1.0, 1.0}};
+const mp_no mptwo = {1, {1.0, 2.0}};
 #endif
 
 #ifndef NO___ACR
@@ -493,10 +494,6 @@ void __inv(const mp_no *x, mp_no *y, int p) {
   mp_no z,w;
   static const int np1[] = {0,0,0,0,1,2,2,2,2,3,3,3,3,3,3,3,3,3,
 			    4,4,4,4,4,4,4,4,4,4,4,4,4,4,4};
-  const mp_no mptwo = {1,{1.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-			 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-			 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-			 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}};
 
   __cpy(x,&z,p);  z.e=0;  __mp_dbl(&z,&t,p);
   t=ONE/t;   __dbl_mp(t,y,p);    EY -= EX;
diff --git a/sysdeps/ieee754/dbl-64/mpa.h b/sysdeps/ieee754/dbl-64/mpa.h
index 4fdecb6..2a2deb4 100644
--- a/sysdeps/ieee754/dbl-64/mpa.h
+++ b/sysdeps/ieee754/dbl-64/mpa.h
@@ -55,6 +55,7 @@ typedef struct {/* This structure holds the details of a multi-precision     */
 typedef union { int i[2]; double d; } number;
 
 extern const mp_no mpone;
+extern const mp_no mptwo;
 
 #define  X   x->d
 #define  Y   y->d
diff --git a/sysdeps/ieee754/dbl-64/mpatan.c b/sysdeps/ieee754/dbl-64/mpatan.c
index d897bbb..3c21a58 100644
--- a/sysdeps/ieee754/dbl-64/mpatan.c
+++ b/sysdeps/ieee754/dbl-64/mpatan.c
@@ -48,16 +48,13 @@ __mpatan(mp_no *x, mp_no *y, int p) {
   int i,m,n;
   double dx;
   mp_no
-    mptwo    = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-		0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-		0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}},
     mptwoim1 = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
 		0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
 		0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}};
 
   mp_no mps,mpsm,mpt,mpt1,mpt2,mpt3;
 
-		      /* Choose m and initiate mptwo & mptwoim1 */
+		      /* Choose m and initiate mptwoim1 */
     if      (EX>0) m=7;
     else if (EX<0) m=0;
     else {
@@ -65,9 +62,8 @@ __mpatan(mp_no *x, mp_no *y, int p) {
       for (m=6; m>0; m--)
 	{if (dx>__atan_xm[m].d) break;}
     }
-    mptwo.e    = mptwoim1.e = 1;
-    mptwo.d[0] = mptwoim1.d[0] = ONE;
-    mptwo.d[1] = TWO;
+    mptwoim1.e = 1;
+    mptwoim1.d[0] = ONE;
 
 				 /* Reduce x m times */
     __mul(x,x,&mpsm,p);
diff --git a/sysdeps/ieee754/dbl-64/mpsqrt.c b/sysdeps/ieee754/dbl-64/mpsqrt.c
index 92bf5ef..362b205 100644
--- a/sysdeps/ieee754/dbl-64/mpsqrt.c
+++ b/sysdeps/ieee754/dbl-64/mpsqrt.c
@@ -52,19 +52,11 @@ SECTION
 __mpsqrt(mp_no *x, mp_no *y, int p) {
   int i,m,ey;
   double dx,dy;
-  mp_no
-    mphalf   = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-		   0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-		   0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}},
-    mp3halfs = {0,{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-		   0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
-		   0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}};
+  static const mp_no
+    mphalf   = {0,{1.0,8388608.0 /* 2^23 */}},
+    mp3halfs = {1,{1.0,1.0,8388608.0 /* 2^23 */}};
   mp_no mpxn,mpz,mpu,mpt1,mpt2;
 
-  /* Prepare multi-precision 1/2 and 3/2 */
-  mphalf.e  =0;  mphalf.d[0]  =ONE;  mphalf.d[1]  =HALFRAD;
-  mp3halfs.e=1;  mp3halfs.d[0]=ONE;  mp3halfs.d[1]=ONE;  mp3halfs.d[2]=HALFRAD;
-
   ey=EX/2;     __cpy(x,&mpxn,p);    mpxn.e -= (ey+ey);
   __mp_dbl(&mpxn,&dx,p);   dy=fastiroot(dx);    __dbl_mp(dy,&mpu,p);
   __mul(&mpxn,&mphalf,&mpz,p);



More information about the Libc-alpha mailing list