mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-07 10:00:07 +00:00
51ea3b2042
Continuing the preparation for additional _FloatN / _FloatNx function aliases, this patch various powerpc functions use libm_alias_double to define function aliases (with consequent removal of the need for local compat symbol handling). (The present patch excludes the changes to some functions where such changes could result in differences in installed stripped shared libraries because of changes to the exact ordering or properties of symbols in individual .os files.) Tested with build-many-glibcs.py that installed stripped shared libraries are unchanged for all its hard-float powerpc configurations. * sysdeps/powerpc/fpu/s_rint.c: Include <libm-alias-double.h>. (rint): Define using libm_alias_double. * sysdeps/powerpc/power5+/fpu/s_modf.c: Include <libm-alias-double.h>. (modf): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S: Include <libm-alias-double.h>. (nearbyint): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include <libm-alias-double.h>. (rint): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/fpu/s_round.S: Include <libm-alias-double.h>. (round): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil.c: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor.c: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf.c: Include <libm-alias-double.h>. (modf): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round.c: Include <libm-alias-double.h>. (round): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc.c: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power5+/fpu/s_floor.S: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power5+/fpu/s_round.S: Include <libm-alias-double.h>. (round): Define using libm_alias_double. * sysdeps/powerpc/powerpc32/power5+/fpu/s_trunc.S: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c: Include <libm-alias-double.h>. (modf): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_round.c: Include <libm-alias-double.h>. (round): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc.c: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S: Include <libm-alias-double.h>. (nearbyint): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include <libm-alias-double.h>. (rint): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/s_round.S: Include <libm-alias-double.h>. (round): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S: Include <libm-alias-double.h>. (round): Define using libm_alias_double. * sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double.
81 lines
2.3 KiB
ArmAsm
81 lines
2.3 KiB
ArmAsm
/* Round to int floating-point values. PowerPC32 version.
|
|
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
|
|
|
|
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>
|
|
|
|
|
|
/* double [fp1] nearbyint(double [fp1] x) */
|
|
|
|
.section .rodata.cst4,"aM",@progbits,4
|
|
.align 2
|
|
.LC0: /* 2**52 */
|
|
.long 0x59800000 /* TWO52: 2**52 */
|
|
|
|
.section ".text"
|
|
ENTRY (__nearbyint)
|
|
#ifdef SHARED
|
|
mflr r11
|
|
cfi_register(lr,r11)
|
|
bcl 20,31,1f
|
|
1: mflr r9
|
|
addis r9,r9,.LC0-1b@ha
|
|
lfs fp13,.LC0-1b@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 */
|
|
bge cr7,.L10
|
|
fcmpu cr7,fp1,fp12 /* if (x > 0.0 */
|
|
ble cr7,L(lessthanzero)
|
|
mffs fp11
|
|
mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */
|
|
fadd fp1,fp1,fp13 /* x += TWO52 */
|
|
fsub fp1,fp1,fp13 /* x -= TWO52 */
|
|
fabs fp1,fp1 /* if (x == 0.0 */
|
|
mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */
|
|
blr
|
|
L(lessthanzero):
|
|
bgelr cr7
|
|
mffs fp11
|
|
mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */
|
|
fsub fp1,fp1,fp13 /* x -= TWO52 */
|
|
fadd fp1,fp1,fp13 /* x += TWO52 */
|
|
fnabs fp1,fp1 /* if (x == 0.0) */
|
|
mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */
|
|
blr
|
|
.L10:
|
|
/* Ensure sNaN input is converted to qNaN. */
|
|
fcmpu cr7,fp1,fp1
|
|
beqlr cr7
|
|
fadd fp1,fp1,fp1
|
|
blr
|
|
END (__nearbyint)
|
|
|
|
libm_alias_double (__nearbyint, nearbyint)
|