glibc/sysdeps/i386/fpu/s_fmax.S
Joseph Myers bc4e8f9b49 Use libm_alias_double for i386.
Continuing the preparation for additional _FloatN / _FloatNx function
aliases, this patch makes i386 libm function implementations use
libm_alias_double to define function aliases.

Tested with build-many-glibcs.py for all its i386 configurations that
installed stripped shared libraries are unchanged by the patch, as
well as running the full glibc testsuite for i686.

	* sysdeps/i386/fpu/s_asinh.S: Include <libm-alias-double.h>.
	(asinh): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_atan.S: Include <libm-alias-double.h>.
	(atan): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_cbrt.S: Include <libm-alias-double.h>.
	(cbrt): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_ceil.S: Include <libm-alias-double.h>.
	(ceil): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_copysign.S: Include <libm-alias-double.h>.
	(copysign): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_expm1.S: Include <libm-alias-double.h>.
	(expm1): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_fabs.S: Include <libm-alias-double.h>.
	(fabs): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_fdim.c: Include <libm-alias-double.h>.
	(fdim): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_floor.S: Include <libm-alias-double.h>.
	(floor): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_fmax.S: Include <libm-alias-double.h>.
	(fmax): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_fmin.S: Include <libm-alias-double.h>.
	(fmin): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_frexp.S: Include <libm-alias-double.h>.
	(frexp): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_llrint.S: Include <libm-alias-double.h>.
	(llrint): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_logb.S: Include <libm-alias-double.h>.
	(logb): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_lrint.S: Include <libm-alias-double.h>.
	(lrint): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_nearbyint.S: Include <libm-alias-double.h>.
	(nearbyint): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_remquo.S: Include <libm-alias-double.h>.
	(remquo): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_rint.S: Include <libm-alias-double.h>.
	(rint): Define using libm_alias_double.
	* sysdeps/i386/fpu/s_trunc.S: Include <libm-alias-double.h>.
	(trunc): Define using libm_alias_double.
	* sysdeps/i386/i686/fpu/s_fmax.S: Include <libm-alias-double.h>.
	(fmax): Define using libm_alias_double.
	* sysdeps/i386/i686/fpu/s_fmin.S: Include <libm-alias-double.h>.
	(fmin): Define using libm_alias_double.
	* sysdeps/i386/i686/multiarch/s_fma.c: Include <libm-alias-double.h>.
	(fma): Define using libm_alias_double.
2017-11-28 18:15:44 +00:00

45 lines
1.2 KiB
ArmAsm

/* Compute maximum 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 <sysdep.h>
#include <libm-alias-double.h>
.text
ENTRY(__fmax)
fldl 12(%esp) // y
fxam
fnstsw
fldl 4(%esp) // y : x
andb $0x45, %ah
cmpb $0x01, %ah
je 1f // y == NaN
fucom %st(1)
fnstsw
sahf
jnc 1f
fxch %st(1)
1: fstp %st(1)
ret
END(__fmax)
libm_alias_double (__fmax, fmax)