diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-01-29 10:57:31 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-01-29 10:57:31 +0000 |
commit | 068bbaf6e03542833233fb8789481e0ac05c8768 (patch) | |
tree | 76cab51040c370e067645d294cb18aa5e883b06c /sysdeps/alpha | |
parent | a87b0e3624267638026c10120cb80d72006585ab (diff) | |
download | glibc-068bbaf6e03542833233fb8789481e0ac05c8768.tar glibc-068bbaf6e03542833233fb8789481e0ac05c8768.tar.gz glibc-068bbaf6e03542833233fb8789481e0ac05c8768.tar.bz2 glibc-068bbaf6e03542833233fb8789481e0ac05c8768.zip |
(__floorf): Don't depend on inlining, duplicate the code.
Diffstat (limited to 'sysdeps/alpha')
-rw-r--r-- | sysdeps/alpha/fpu/s_floorf.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/sysdeps/alpha/fpu/s_floorf.c b/sysdeps/alpha/fpu/s_floorf.c index d25643d19e..7502b6781e 100644 --- a/sysdeps/alpha/fpu/s_floorf.c +++ b/sysdeps/alpha/fpu/s_floorf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson. @@ -29,7 +29,27 @@ float __floorf (float x) { - return __i_floorf(x); + /* Check not zero since floor(-0) == -0. */ + if (x != 0 && fabsf (x) < 16777216.0f) /* 1 << FLT_MANT_DIG */ + { + /* Note that Alpha S_Floating is stored in registers in a + restricted T_Floating format, so we don't even need to + convert back to S_Floating in the end. The initial + conversion to T_Floating is needed to handle denormals. */ + + float __tmp1, __tmp2; + + __asm ("cvtst/s %3,%2\n\t" +#ifdef _IEEE_FP_INEXACT + "cvttq/svim %2,%1\n\t" +#else + "cvttq/svm %2,%1\n\t" +#endif + "cvtqt/m %1,%0\n\t" + : "=f"(x), "=&f"(__tmp1), "=&f"(__tmp2) + : "f"(x)); + } + return x; } weak_alias (__floorf, floorf) |