/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-1997, 1999, 2005, 2012 Free Software Foundation, Inc.
+ Copyright (C) 1996-2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
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/>. */
+ <https://www.gnu.org/licenses/>. */
#include <machine/asm.h>
+#include <libm-alias-float.h>
.section .rodata
.align ALIGNARG(4)
- ASM_TYPE_DIRECTIVE(huge,@object)
+ .type huge,@object
huge: .double 1e+36
ASM_SIZE_DIRECTIVE(huge)
- ASM_TYPE_DIRECTIVE(one,@object)
+ .type one,@object
one: .double 1.0
ASM_SIZE_DIRECTIVE(one)
- ASM_TYPE_DIRECTIVE(limit,@object)
+ .type limit,@object
limit: .double 0.29
ASM_SIZE_DIRECTIVE(limit)
4: fld %st // x : x
faddl MO(huge) // huge+x : x
fstp %st(0) // x
- ret
+ cmpl $0x00800000, %eax
+ jae 8f
+ subl $4, %esp
+ cfi_adjust_cfa_offset (4)
+ fld %st(0)
+ fmul %st(0)
+ fstps (%esp)
+ addl $4, %esp
+ cfi_adjust_cfa_offset (-4)
+8: ret
// |x| > 2^14 => y = sign(x) * (log(|x|) + log(2))
.align ALIGNARG(4)
fchs
4: ret
END(__asinhf)
-weak_alias (__asinhf, asinhf)
+libm_alias_float (__asinh, asinh)