This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Move more mp constants into static scope


Ping!

On Fri, Dec 21, 2012 at 09:24:05AM +0530, Siddhesh Poyarekar wrote:
> 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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]