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]

[ping][PATCH][ppc] Use intermediate var for exponent in __mul and__sqr


Ping!

On Thu, Feb 21, 2013 at 06:27:22PM +0530, Siddhesh Poyarekar wrote:
> Hi,
> 
> Attached patch uses an intermediate variable similar to the generic
> code to calculate the exponent.  In __mul the resulting code is a
> little more compact since the earlier code resulted in two copies of
> load instructions to load EX and EY.  In __sqr the result is better
> since an additional store is eliminated.
> 
> OK to commit?
> 
> Siddhesh
> 
> 	* sysdeps/powerpc/powerpc32/power4/fpu/mpa.c (__mul): Use
> 	intermediate variable to calculate exponent.
> 	(__sqr): Likewise.
> 	* sysdeps/powerpc/powerpc64/power4/fpu/mpa.c (__mul):
> 	Likewise.
> 	(__sqr): Likewise.
> 
> 
> diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c b/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c
> index ef7ada7..1858c97 100644
> --- a/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c
> +++ b/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c
> @@ -99,16 +99,16 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p)
>      }
>    Z[k] = zk;
>  
> +  int e = EX + EY;
>    /* Is there a carry beyond the most significant digit?  */
>    if (Z[1] == ZERO)
>      {
>        for (i = 1; i <= p2; i++)
>  	Z[i] = Z[i + 1];
> -      EZ = EX + EY - 1;
> +      e--;
>      }
> -  else
> -    EZ = EX + EY;
>  
> +  EZ = e;
>    Z[0] = X[0] * Y[0];
>  }
>  
> @@ -202,12 +202,13 @@ __sqr (const mp_no *x, mp_no *y, int p)
>    /* Squares are always positive.  */
>    Y[0] = 1.0;
>  
> -  EY = 2 * EX;
> +  int e = EX * 2;
>    /* Is there a carry beyond the most significant digit?  */
>    if (__glibc_unlikely (Y[1] == ZERO))
>      {
>        for (i = 1; i <= p; i++)
>  	Y[i] = Y[i + 1];
> -      EY--;
> +      e--;
>      }
> +  EY = e;
>  }
> diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c b/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c
> index ef7ada7..1858c97 100644
> --- a/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c
> +++ b/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c
> @@ -99,16 +99,16 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p)
>      }
>    Z[k] = zk;
>  
> +  int e = EX + EY;
>    /* Is there a carry beyond the most significant digit?  */
>    if (Z[1] == ZERO)
>      {
>        for (i = 1; i <= p2; i++)
>  	Z[i] = Z[i + 1];
> -      EZ = EX + EY - 1;
> +      e--;
>      }
> -  else
> -    EZ = EX + EY;
>  
> +  EZ = e;
>    Z[0] = X[0] * Y[0];
>  }
>  
> @@ -202,12 +202,13 @@ __sqr (const mp_no *x, mp_no *y, int p)
>    /* Squares are always positive.  */
>    Y[0] = 1.0;
>  
> -  EY = 2 * EX;
> +  int e = EX * 2;
>    /* Is there a carry beyond the most significant digit?  */
>    if (__glibc_unlikely (Y[1] == ZERO))
>      {
>        for (i = 1; i <= p; i++)
>  	Y[i] = Y[i + 1];
> -      EY--;
> +      e--;
>      }
> +  EY = e;
>  }


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