This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Move more mp constants into static scope
- From: Siddhesh Poyarekar <siddhesh at redhat dot com>
- To: libc-alpha at sourceware dot org
- Date: Fri, 28 Dec 2012 19:15:13 +0530
- Subject: Re: [PATCH] Move more mp constants into static scope
- References: <20121221035405.GB9870@spoyarek.pnq.redhat.com>
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);