mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-07 10:00:07 +00:00
2ce30701e6
This patch continues the preparation for additional _FloatN / _FloatNx function aliases by using libm_alias_ldouble for sysdeps/i386/fpu long double functions, so that they can have _Float64x aliases added in future. Tested for x86_64 (which includes some of these implementations) and x86, including build-many-glibcs.py tests that installed stripped shared libraries are unchanged by the patch. * sysdeps/i386/fpu/e_expl.S: Include <libm-alias-ldouble.h>. [USE_AS_EXPM1L] (expm1l): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_asinhl.S: Include <libm-alias-ldouble.h>. (asinhl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_atanl.c: Include <libm-alias-ldouble.h>. (atanl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_cbrtl.S: Include <libm-alias-ldouble.h>. (cbrtl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_ceill.S: Include <libm-alias-ldouble.h>. (ceill): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_copysignl.S: Include <libm-alias-ldouble.h>. (copysignl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_fabsl.S: Include <libm-alias-ldouble.h>. (fabsl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_floorl.S: Include <libm-alias-ldouble.h>. (floorl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_fmaxl.S: Include <libm-alias-ldouble.h>. (fmaxl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_fminl.S: Include <libm-alias-ldouble.h>. (fminl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_frexpl.S: Include <libm-alias-ldouble.h>. (frexpl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_llrintl.S: Include <libm-alias-ldouble.h>. (llrintl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_logbl.c: Include <libm-alias-ldouble.h>. (logbl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_lrintl.S: Include <libm-alias-ldouble.h>. (lrintl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_nearbyintl.S: Include <libm-alias-ldouble.h>. (nearbyintl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_nextafterl.c: Include <libm-alias-ldouble.h>. (nextafterl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_remquol.S: Include <libm-alias-ldouble.h>. (remquol): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_rintl.c: Include <libm-alias-ldouble.h>. (rintl): Define using libm_alias_ldouble. * sysdeps/i386/fpu/s_truncl.S: Include <libm-alias-ldouble.h>. (truncl): Define using libm_alias_ldouble. * sysdeps/i386/i686/fpu/s_fmaxl.S: Include <libm-alias-ldouble.h>. (fmaxl): Define using libm_alias_ldouble. * sysdeps/i386/i686/fpu/s_fminl.S: Include <libm-alias-ldouble.h>. (fminl): Define using libm_alias_ldouble.
73 lines
1.7 KiB
ArmAsm
73 lines
1.7 KiB
ArmAsm
/* Compute minimum of two numbers, regarding NaN as missing argument.
|
|
Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
|
|
|
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 <libm-alias-ldouble.h>
|
|
#include <sysdep.h>
|
|
|
|
.text
|
|
ENTRY(__fminl)
|
|
fldt 16(%esp) // y
|
|
fxam
|
|
fnstsw
|
|
fldt 4(%esp) // y : x
|
|
|
|
andb $0x45, %ah
|
|
cmpb $0x01, %ah
|
|
je 2f // y == NaN
|
|
|
|
fxam
|
|
fnstsw
|
|
andb $0x45, %ah
|
|
cmpb $0x01, %ah
|
|
je 3f // x == NaN
|
|
|
|
fucom %st(1)
|
|
fnstsw
|
|
sahf
|
|
jc 1f
|
|
|
|
fxch %st(1)
|
|
1: fstp %st(1)
|
|
|
|
ret
|
|
|
|
2: // st(1) is a NaN; st(0) may or may not be.
|
|
fxam
|
|
fnstsw
|
|
andb $0x45, %ah
|
|
cmpb $0x01, %ah
|
|
je 4f
|
|
// st(1) is a NaN; st(0) is not. Test if st(1) is signaling.
|
|
testb $0x40, 23(%esp)
|
|
jz 4f
|
|
fstp %st(1)
|
|
ret
|
|
|
|
3: // st(0) is a NaN; st(1) is not. Test if st(0) is signaling.
|
|
testb $0x40, 11(%esp)
|
|
jz 4f
|
|
fstp %st(0)
|
|
ret
|
|
|
|
4: // Both arguments are NaNs, or one is a signaling NaN.
|
|
faddp
|
|
ret
|
|
END(__fminl)
|
|
libm_alias_ldouble (__fmin, fmin)
|