diff options
author | Richard Henderson <rth@twiddle.net> | 2012-05-30 15:49:01 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2012-05-30 16:05:42 -0700 |
commit | 268f6dda11e8afc861cbd964b2f209eb0ff816a3 (patch) | |
tree | 1a6ec53580f096a1dd79848360f558524592e33c | |
parent | 6863adc8f9d57fc8fe690edc3f535a6804556481 (diff) | |
download | glibc-268f6dda11e8afc861cbd964b2f209eb0ff816a3.tar glibc-268f6dda11e8afc861cbd964b2f209eb0ff816a3.tar.gz glibc-268f6dda11e8afc861cbd964b2f209eb0ff816a3.tar.bz2 glibc-268f6dda11e8afc861cbd964b2f209eb0ff816a3.zip |
alpha: Use dynamic rounding with sqrt insn
-rw-r--r-- | ChangeLog.alpha | 5 | ||||
-rw-r--r-- | sysdeps/alpha/alphaev6/fpu/e_sqrt.S | 6 | ||||
-rw-r--r-- | sysdeps/alpha/alphaev6/fpu/e_sqrtf.S | 6 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/math_private.h | 26 |
4 files changed, 37 insertions, 6 deletions
diff --git a/ChangeLog.alpha b/ChangeLog.alpha index f87c9d69be..44ffdc74e3 100644 --- a/ChangeLog.alpha +++ b/ChangeLog.alpha @@ -1,5 +1,10 @@ 2012-05-30 Richard Henderson <rth@twiddle.net> + * sysdeps/alpha/alphaev6/fpu/e_sqrt.S: Use dynamic rounding. + * sysdeps/alpha/alphaev6/fpu/e_sqrtf.S: Likewise. + * sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): New. + (__ieee754_sqrtf): New. + * sysdeps/unix/sysv/linux/alpha/nptl/pthread_once.c: Replace _internal alias by hidden_def. diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S b/sysdeps/alpha/alphaev6/fpu/e_sqrt.S index eae1fb4e4c..c4625d0eca 100644 --- a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S +++ b/sysdeps/alpha/alphaev6/fpu/e_sqrt.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -33,9 +33,9 @@ ENTRY(__ieee754_sqrt) .align 4 #ifdef _IEEE_FP_INEXACT - sqrtt/sui $f16, $f0 + sqrtt/suid $f16, $f0 #else - sqrtt/su $f16, $f0 + sqrtt/sud $f16, $f0 #endif ret nop diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S b/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S index c8217e5454..5681f3a947 100644 --- a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S +++ b/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -33,9 +33,9 @@ ENTRY(__ieee754_sqrtf) .align 4 #ifdef _IEEE_FP_INEXACT - sqrts/sui $f16, $f0 + sqrts/suid $f16, $f0 #else - sqrts/su $f16, $f0 + sqrts/sud $f16, $f0 #endif ret nop diff --git a/sysdeps/alpha/fpu/math_private.h b/sysdeps/alpha/fpu/math_private.h index eb2177d78d..4f270f7a3f 100644 --- a/sysdeps/alpha/fpu/math_private.h +++ b/sysdeps/alpha/fpu/math_private.h @@ -18,4 +18,30 @@ #include_next <math_private.h> +#ifdef __alpha_fix__ +extern __always_inline double +__ieee754_sqrt (double d) +{ + double ret; +# ifdef _IEEE_FP_INEXACT + asm ("sqrtt/suid %1,%0" : "=f"(ret) : "f"(d)); +# else + asm ("sqrtt/sud %1,%0" : "=f"(ret) : "f"(d)); +# endif + return ret; +} + +extern __always_inline float +__ieee754_sqrtf (float d) +{ + float ret; +# ifdef _IEEE_FP_INEXACT + asm ("sqrts/suid %1,%0" : "=f"(ret) : "f"(d)); +# else + asm ("sqrts/sud %1,%0" : "=f"(ret) : "f"(d)); +# endif + return ret; +} +#endif /* FIX */ + #endif /* ALPHA_MATH_PRIVATE_H */ |