about summary refs log tree commit diff
path: root/sysdeps/alpha/fpu/s_lroundf.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2014-07-03 08:52:45 -0700
committerRichard Henderson <rth@twiddle.net>2014-07-03 08:52:45 -0700
commitca7b945c7330064f494436611bd35fce6107abf6 (patch)
tree5176ca06cbb59eea5a267269df6812736eb29a24 /sysdeps/alpha/fpu/s_lroundf.c
parentcd1175a373590f053bea8aa9f2dfaeae13906aa9 (diff)
downloadglibc-ca7b945c7330064f494436611bd35fce6107abf6.tar.gz
glibc-ca7b945c7330064f494436611bd35fce6107abf6.tar.xz
glibc-ca7b945c7330064f494436611bd35fce6107abf6.zip
alpha: Fix lround implementations
Use chopped rounding to add 0.5.
Diffstat (limited to 'sysdeps/alpha/fpu/s_lroundf.c')
-rw-r--r--sysdeps/alpha/fpu/s_lroundf.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sysdeps/alpha/fpu/s_lroundf.c b/sysdeps/alpha/fpu/s_lroundf.c
index 650004dbc1..ebbb1295a4 100644
--- a/sysdeps/alpha/fpu/s_lroundf.c
+++ b/sysdeps/alpha/fpu/s_lroundf.c
@@ -25,11 +25,11 @@
 long int
 __lroundf (float x)
 {
-  float adj;
+  float adj, y;
 
-  adj = 0x1.fffffep-2;		/* nextafterf (0.5f, 0.0f) */
-  adj = copysignf (adj, x);
-  return x + adj;
+  adj = copysignf (0.5f, x);
+  asm("adds/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj));
+  return y;
 }
 
 strong_alias (__lroundf, __llroundf)