summaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/powerpc32/fpu/s_rint.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/powerpc/powerpc32/fpu/s_rint.S')
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/s_rint.S49
1 files changed, 27 insertions, 22 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rint.S b/sysdeps/powerpc/powerpc32/fpu/s_rint.S
index dee25f204f..c8dca313ae 100644
--- a/sysdeps/powerpc/powerpc32/fpu/s_rint.S
+++ b/sysdeps/powerpc/powerpc32/fpu/s_rint.S
@@ -1,5 +1,5 @@
/* Round to int floating-point values. PowerPC32 version.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 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
@@ -14,40 +14,41 @@
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ Software Foundation, Inc., 1 Franklin Street, Fifth Floor, Boston MA
+ 02110-1301 USA. */
/* This has been coded in assembler because GCC makes such a mess of it
when it's coded in C. */
#include <sysdep.h>
+#include <math_ldbl_opt.h>
- .section .rodata
- .align 3
- .type TWO52.0,@object
- .size TWO52.0,8
-TWO52.0:
- .long 0x43300000
- .long 0
-
- .section .rodata.cst8,"aM",@progbits,8
- .align 3
+ .section .rodata.cst4,"aM",@progbits,4
+ .align 2
.LC0: /* 2**52 */
- .long 0x43300000
- .long 0
+ .long 0x59800000
.section ".text"
ENTRY (__rint)
#ifdef SHARED
mflr r11
+ cfi_register(lr,r11)
+# ifdef HAVE_ASM_PPC_REL16
+ bcl 20,31,1f
+1: mflr r9
+ addis r9,r9,.LC0-1b@ha
+ lfs fp13,.LC0-1b@l(r9)
+# else
bl _GLOBAL_OFFSET_TABLE_@local-4
mflr r10
lwz r9,.LC0@got(10)
+ lfs fp13,0(r9)
+# endif
mtlr r11
- lfd fp13,0(r9)
+ cfi_same_value (lr)
#else
lis r9,.LC0@ha
- lfd fp13,.LC0@l(r9)
+ lfs fp13,.LC0@l(r9)
#endif
fabs fp0,fp1
fsub fp12,fp13,fp13 /* generate 0.0 */
@@ -57,13 +58,14 @@ ENTRY (__rint)
bng- cr6,.L4
fadd fp1,fp1,fp13 /* x+= TWO52; */
fsub fp1,fp1,fp13 /* x-= TWO52; */
- blr
+ fabs fp1,fp1 /* if (x == 0.0) */
+ blr /* x = 0.0; */
.L4:
bnllr- cr6 /* if (x < 0.0) */
- fsub fp1,fp13,fp1 /* x = TWO52 - x; */
- fsub fp0,fp1,fp13 /* x = - (x - TWO52); */
- fneg fp1,fp0
- blr
+ fsub fp1,fp1,fp13 /* x-= TWO52; */
+ fadd fp1,fp1,fp13 /* x+= TWO52; */
+ fnabs fp1,fp1 /* if (x == 0.0) */
+ blr /* x = -0.0; */
END (__rint)
weak_alias (__rint, rint)
@@ -72,3 +74,6 @@ weak_alias (__rint, rint)
weak_alias (__rint, rintl)
strong_alias (__rint, __rintl)
#endif
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __rint, rintl, GLIBC_2_0)
+#endif