aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/powerpc32/fpu
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-03-08 20:26:36 +0000
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-06-12 11:46:22 -0300
commit21bd039bb41a59cdbd6c93670433e3b473720653 (patch)
tree4047dcc470c90f96a12f8b2d3e43e726da1f3e8d /sysdeps/powerpc/powerpc32/fpu
parentcfa611447b44d2fa1cb3d8f853b6f3f75ade366a (diff)
downloadglibc-21bd039bb41a59cdbd6c93670433e3b473720653.tar
glibc-21bd039bb41a59cdbd6c93670433e3b473720653.tar.gz
glibc-21bd039bb41a59cdbd6c93670433e3b473720653.tar.bz2
glibc-21bd039bb41a59cdbd6c93670433e3b473720653.zip
powerpc: consolidate rint
This patches consolidates all the powerpc rint{f} implementations on the generic sysdeps/powerpc/fpu/s_rint{f}. Checked on powerpc-linux-gnu (built without --with-cpu, with --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch), powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+ and --disable-multi-arch). * sysdeps/powerpc/fpu/round_to_integer.h (set_fenv_mode, round_to_integer_float, round_mode): Add RINT handling. (reset_fenv_mode): New symbol. * sysdeps/powerpc/fpu/s_rint.c (__rint): Use generic implementation. * sysdeps/powerpc/fpu/s_rintf.c (__rintf): Likewise. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Remove file. * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Likewise. * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Likewise. Reviewed-by: Gabriel F. T. Gomes <gabrielftg@linux.ibm.com>
Diffstat (limited to 'sysdeps/powerpc/powerpc32/fpu')
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/s_rint.S69
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/s_rintf.S66
2 files changed, 0 insertions, 135 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rint.S b/sysdeps/powerpc/powerpc32/fpu/s_rint.S
deleted file mode 100644
index 0b50b6f053..0000000000
--- a/sysdeps/powerpc/powerpc32/fpu/s_rint.S
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Round to int floating-point values. PowerPC32 version.
- Copyright (C) 2004-2019 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
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* 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>
-#include <libm-alias-double.h>
-
- .section .rodata.cst4,"aM",@progbits,4
- .align 2
-.LC0: /* 2**52 */
- .long 0x59800000
-
- .section ".text"
-ENTRY (__rint)
-#ifdef SHARED
- mflr r11
- cfi_register(lr,r11)
- SETUP_GOT_ACCESS(r9,got_label)
- addis r9,r9,.LC0-got_label@ha
- lfs fp13,.LC0-got_label@l(r9)
- mtlr r11
- cfi_same_value (lr)
-#else
- lis r9,.LC0@ha
- lfs fp13,.LC0@l(r9)
-#endif
- fabs fp0,fp1
- fsub fp12,fp13,fp13 /* generate 0.0 */
- fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */
- fcmpu cr6,fp1,fp12 /* if (x > 0.0) */
- bnl cr7,.L10
- bng cr6,.L4
- fadd fp1,fp1,fp13 /* x+= TWO52; */
- fsub fp1,fp1,fp13 /* x-= TWO52; */
- fabs fp1,fp1 /* if (x == 0.0) */
- blr /* x = 0.0; */
-.L4:
- bnllr cr6 /* if (x < 0.0) */
- fsub fp1,fp1,fp13 /* x-= TWO52; */
- fadd fp1,fp1,fp13 /* x+= TWO52; */
- fnabs fp1,fp1 /* if (x == 0.0) */
- blr /* x = -0.0; */
-.L10:
- /* Ensure sNaN input is converted to qNaN. */
- fcmpu cr7,fp1,fp1
- beqlr cr7
- fadd fp1,fp1,fp1
- blr
- END (__rint)
-
-libm_alias_double (__rint, rint)
diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S b/sysdeps/powerpc/powerpc32/fpu/s_rintf.S
deleted file mode 100644
index f22ad8b2b3..0000000000
--- a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Round float to int floating-point values. PowerPC32 version.
- Copyright (C) 2004-2019 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
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <libm-alias-float.h>
-
- .section .rodata.cst4,"aM",@progbits,4
- .align 2
-.LC0: /* 2**23 */
- .long 0x4b000000
-
- .section ".text"
-ENTRY (__rintf)
-#ifdef SHARED
- mflr r11
- cfi_register(lr,r11)
- SETUP_GOT_ACCESS(r9,got_label)
- addis r9,r9,.LC0-got_label@ha
- lfs fp13,.LC0-got_label@l(r9)
- mtlr r11
- cfi_same_value (lr)
-#else
- lis r9,.LC0@ha
- lfs fp13,.LC0@l(r9)
-#endif
- fabs fp0,fp1
- fsubs fp12,fp13,fp13 /* generate 0.0 */
- fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */
- fcmpu cr6,fp1,fp12 /* if (x > 0.0) */
- bnl cr7,.L10
- bng cr6,.L4
- fadds fp1,fp1,fp13 /* x+= TWO23; */
- fsubs fp1,fp1,fp13 /* x-= TWO23; */
- fabs fp1,fp1 /* if (x == 0.0) */
- blr /* x = 0.0; */
-.L4:
- bnllr cr6 /* if (x < 0.0) */
- fsubs fp1,fp1,fp13 /* x-= TWO23; */
- fadds fp1,fp1,fp13 /* x+= TWO23; */
- fnabs fp1,fp1 /* if (x == 0.0) */
- blr /* x = -0.0; */
-.L10:
- /* Ensure sNaN input is converted to qNaN. */
- fcmpu cr7,fp1,fp1
- beqlr cr7
- fadds fp1,fp1,fp1
- blr
- END (__rintf)
-
-libm_alias_float (__rint, rint)
-