alpha: Fix lround implementations

Use chopped rounding to add 0.5.
This commit is contained in:
Richard Henderson 2014-07-03 08:52:45 -07:00
parent cd1175a373
commit ca7b945c73
3 changed files with 11 additions and 8 deletions

View File

@ -1,5 +1,8 @@
2014-07-03 Richard Henderson <rth@redhat.com> 2014-07-03 Richard Henderson <rth@redhat.com>
* sysdeps/alpha/fpu/s_lround.c: Add 0.5 with chopped rounding.
* sysdeps/alpha/fpu/s_lroundf.c: Likewise.
* sysdeps/alpha/fpu/s_round.c: Remove file. * sysdeps/alpha/fpu/s_round.c: Remove file.
* sysdeps/alpha/fpu/s_roundf.c: Remove file. * sysdeps/alpha/fpu/s_roundf.c: Remove file.

View File

@ -25,11 +25,11 @@
long int long int
__lround (double x) __lround (double x)
{ {
double adj; double adj, y;
adj = 0x1.fffffffffffffp-2; /* nextafter (0.5, 0.0) */ adj = copysign (0.5, x);
adj = copysign (adj, x); asm("addt/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj));
return x + adj; return y;
} }
strong_alias (__lround, __llround) strong_alias (__lround, __llround)

View File

@ -25,11 +25,11 @@
long int long int
__lroundf (float x) __lroundf (float x)
{ {
float adj; float adj, y;
adj = 0x1.fffffep-2; /* nextafterf (0.5f, 0.0f) */ adj = copysignf (0.5f, x);
adj = copysignf (adj, x); asm("adds/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj));
return x + adj; return y;
} }
strong_alias (__lroundf, __llroundf) strong_alias (__lroundf, __llroundf)