glibc/sysdeps/ieee754/flt-32/s_sincosf.c

109 lines
2.9 KiB
C
Raw Normal View History

Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
/* Compute sine and cosine of argument.
Copyright (C) 2018-2023 Free Software Foundation, Inc.
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
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.
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
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.
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
Prefer https to http for gnu.org and fsf.org URLs Also, change sources.redhat.com to sourceware.org. This patch was automatically generated by running the following shell script, which uses GNU sed, and which avoids modifying files imported from upstream: sed -ri ' s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g ' \ $(find $(git ls-files) -prune -type f \ ! -name '*.po' \ ! -name 'ChangeLog*' \ ! -path COPYING ! -path COPYING.LIB \ ! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \ ! -path manual/texinfo.tex ! -path scripts/config.guess \ ! -path scripts/config.sub ! -path scripts/install-sh \ ! -path scripts/mkinstalldirs ! -path scripts/move-if-change \ ! -path INSTALL ! -path locale/programs/charmap-kw.h \ ! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \ ! '(' -name configure \ -execdir test -f configure.ac -o -f configure.in ';' ')' \ ! '(' -name preconfigure \ -execdir test -f preconfigure.ac ';' ')' \ -print) and then by running 'make dist-prepare' to regenerate files built from the altered files, and then executing the following to cleanup: chmod a+x sysdeps/unix/sysv/linux/riscv/configure # Omit irrelevant whitespace and comment-only changes, # perhaps from a slightly-different Autoconf version. git checkout -f \ sysdeps/csky/configure \ sysdeps/hppa/configure \ sysdeps/riscv/configure \ sysdeps/unix/sysv/linux/csky/configure # Omit changes that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines git checkout -f \ sysdeps/powerpc/powerpc64/ppc-mcount.S \ sysdeps/unix/sysv/linux/s390/s390-64/syscall.S # Omit change that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
<https://www.gnu.org/licenses/>. */
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
#include <errno.h>
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
#include <stdint.h>
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
#include <math.h>
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
#include <math-barriers.h>
Use libm_alias_float in flt-32. This patch makes flt-32 libm functions use libm_alias_float to define public interfaces (in cases where _Float32 aliases of those interfaces would be appropriate, so not for finitef / isinff / isnanf). Tested for x86_64. Also tested with build-many-glibcs.py that installed stripped shared libraries are unchanged by the patch. * sysdeps/ieee754/flt-32/s_asinhf.c: Include <libm-alias-float.h>. (asinhf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_atanf.c: Include <libm-alias-float.h>. (atanf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_cbrtf.c: Include <libm-alias-float.h>. (cbrtf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ceilf.c: Include <libm-alias-float.h>. (ceilf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_copysignf.c: Include <libm-alias-float.h>. (copysignf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_cosf.c: Include <libm-alias-float.h>. (cosf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_erff.c: Include <libm-alias-float.h>. (erff): Define using libm_alias_float. (erfcf): Likewise. * sysdeps/ieee754/flt-32/s_expm1f.c: Include <libm-alias-float.h>. (expm1f): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fabsf.c: Include <libm-alias-float.h>. (fabsf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_floorf.c: Include <libm-alias-float.h>. (floorf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_frexpf.c: Include <libm-alias-float.h>. (frexpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fromfpf.c (fromfpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fromfpf_main.c: Include <libm-alias-float.h>. * sysdeps/ieee754/flt-32/s_fromfpxf.c (fromfpxf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_getpayloadf.c: Include <libm-alias-float.h>. (getpayloadf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_llrintf.c: Include <libm-alias-float.h>. (llrintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_llroundf.c: Include <libm-alias-float.h>. (llroundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_logbf.c: Include <libm-alias-float.h>. (logbf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_lrintf.c: Include <libm-alias-float.h>. (lrintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_lroundf.c: Include <libm-alias-float.h>. (lroundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_modff.c: Include <libm-alias-float.h>. (modff): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nearbyintf.c: Include <libm-alias-float.h>. (nearbyintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nextafterf.c: Include <libm-alias-float.h>. (nextafterf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nextupf.c: Include <libm-alias-float.h>. (nextupf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_remquof.c: Include <libm-alias-float.h>. (remquof): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_rintf.c: Include <libm-alias-float.h>. (rintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_roundevenf.c: Include <libm-alias-float.h>. (roundevenf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_roundf.c: Include <libm-alias-float.h>. (roundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_setpayloadf.c (setpayloadf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_setpayloadf_main.c: Include <libm-alias-float.h>. * sysdeps/ieee754/flt-32/s_setpayloadsigf.c (setpayloadsigf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_sincosf.c: Include <libm-alias-float.h>. (sincosf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_sinf.c: Include <libm-alias-float.h>. (sinf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_tanf.c: Include <libm-alias-float.h>. (tanf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_tanhf.c: Include <libm-alias-float.h>. (tanhf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_totalorderf.c: Include <libm-alias-float.h>. (totalorderf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_totalordermagf.c: Include <libm-alias-float.h>. (totalordermagf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_truncf.c: Include <libm-alias-float.h>. (truncf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ufromfpf.c (ufromfpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ufromfpxf.c (ufromfpxf): Define using libm_alias_float.
2017-09-22 20:24:12 +00:00
#include <libm-alias-float.h>
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
#include "math_config.h"
#include "s_sincosf.h"
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
#ifndef SECTION
# define SECTION
#endif
#ifndef SINCOSF
# define SINCOSF_FUNC __sincosf
#else
# define SINCOSF_FUNC SINCOSF
#endif
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
/* Fast sincosf implementation. Worst-case ULP is 0.5607, maximum relative
error is 0.5303 * 2^-23. A single-step range reduction is used for
small values. Large inputs have their range reduced using fast integer
arithmetic. */
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
void
SECTION
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
SINCOSF_FUNC (float y, float *sinp, float *cosp)
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
{
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
double x = y;
double s;
int n;
const sincos_t *p = &__sincosf_table[0];
if (abstop12 (y) < abstop12 (pio4))
{
double x2 = x * x;
if (__glibc_unlikely (abstop12 (y) < abstop12 (0x1p-12f)))
{
/* Force underflow for tiny y. */
if (__glibc_unlikely (abstop12 (y) < abstop12 (0x1p-126f)))
math_force_eval ((float)x2);
*sinp = y;
*cosp = 1.0f;
return;
}
sincosf_poly (x, x2, p, 0, sinp, cosp);
}
else if (abstop12 (y) < abstop12 (120.0f))
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
{
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
x = reduce_fast (x, p, &n);
/* Setup the signs for sin and cos. */
s = p->sign[n & 3];
if (n & 2)
p = &__sincosf_table[1];
sincosf_poly (x * s, x * x, p, n, sinp, cosp);
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
}
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
else if (__glibc_likely (abstop12 (y) < abstop12 (INFINITY)))
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
{
Improve performance of sincosf This patch is a complete rewrite of sincosf. The new version is significantly faster, as well as simple and accurate. The worst-case ULP is 0.5607, maximum relative error is 0.5303 * 2^-23 over all 4 billion inputs. In non-nearest rounding modes the error is 1ULP. The algorithm uses 3 main cases: small inputs which don't need argument reduction, small inputs which need a simple range reduction and large inputs requiring complex range reduction. The code uses approximate integer comparisons to quickly decide between these cases. The small range reducer uses a single reduction step to handle values up to 120.0. It is fastest on targets which support inlined round instructions. The large range reducer uses integer arithmetic for simplicity. It does a 32x96 bit multiply to compute a 64-bit modulo result. This is more than accurate enough to handle the worst-case cancellation for values close to an integer multiple of PI/4. It could be further optimized, however it is already much faster than necessary. sincosf throughput gains on Cortex-A72: * |x| < 0x1p-12 : 1.6x * |x| < M_PI_4 : 1.7x * |x| < 2 * M_PI: 1.5x * |x| < 120.0 : 1.8x * |x| < Inf : 2.3x * math/Makefile: Add s_sincosf_data.c. * sysdeps/ia64/fpu/s_sincosf_data.c: New file. * sysdeps/ieee754/flt-32/s_sincosf.h (abstop12): Add new function. (sincosf_poly): Likewise. (reduce_small): Likewise. (reduce_large): Likewise. * sysdeps/ieee754/flt-32/s_sincosf.c (sincosf): Rewrite. * sysdeps/ieee754/flt-32/s_sincosf_data.c: New file with sincosf data. * sysdeps/m68k/m680x0/fpu/s_sincosf_data.c: New file. * sysdeps/x86_64/fpu/s_sincosf_data.c: New file.
2018-08-10 16:31:30 +00:00
uint32_t xi = asuint (y);
int sign = xi >> 31;
x = reduce_large (xi, &n);
/* Setup signs for sin and cos - include original sign. */
s = p->sign[(n + sign) & 3];
if ((n + sign) & 2)
p = &__sincosf_table[1];
sincosf_poly (x * s, x * x, p, n, sinp, cosp);
}
else
{
/* Return NaN if Inf or NaN for both sin and cos. */
*sinp = *cosp = y - y;
#if WANT_ERRNO
/* Needed to set errno for +-Inf, the add is a hack to work
around a gcc register allocation issue: just passing y
affects code generation in the fast path (PR86901). */
__math_invalidf (y + y);
#endif
Update. 1997-04-15 03:14 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsstr.c: Add weak alias wcswcs for Unix98 compliance. * math/Makefile (libm-calls): Add s_sincos and s_cproj. * math/mathcalls.h: Add prototype for sincos. * sysdeps/i386/fpu/__math.h: Warn about restriction on arguments to inlined sin and cos function. Define functions new in ISO C 9X when __USE_ISOC9X is defined. Add optimized version of finite. Rewrite sincos function to handle too large arguments. * sysdeps/libm-i387/s_cos.S: Better code alignment. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Yet better code. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_sincos.S: New file. * sysdeps/libm-i387/s_sincosf.S: New file. * sysdeps/libm-i387/s_sincosl.S: New file. * sysdeps/libm-ieee754/s_sincos.c: New file. * sysdeps/libm-ieee754/s_sincosf.c: New file. * sysdeps/libm-ieee754/s_sincosl.c: New file. * sysdeps/libm-ieee754/s_ccosh.c: Change to use sincos function. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. * sysdeps/libm-ieee754/s_cexp.c: Likewise. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-ieee754/s_csinh.c: Likewise. * sysdeps/libm-ieee754/s_csinhf.c: Likewise. * sysdeps/libm-ieee754/s_csinhl.c: Likewise. * sysdeps/libm-ieee754/s_ctan.c: Likewise. * sysdeps/libm-ieee754/s_ctanf.c: Likewise. * sysdeps/libm-ieee754/s_ctanl.c: Likewise. * sysdeps/libm-ieee754/s_ctanh.c: Likewise. * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. * sysdeps/libm-ieee754/s_cosl.c: Correct check for range. * sysdeps/libm-ieee754/s_sinl.c: Likewise. * sysdeps/libm-ieee754/s_roundtol.c: Fix typos. * sysdeps/libm-ieee754/s_roundtoll.c: Likewise. * nis/Makefile (services): Mention nisplus before compat. * nis/nis_call.c (__do_niscall): Change type of variable server_len to prevent warning. * nis/nss_compat/compat-grp.c (getgrent_next_file_plusgroup): Add cast to prevent warning. * nis/nss_compat/compat-pwd.c (getpwent_next_file_plususer): Likewise. * nis/nss_compat/compat-spwd.c (getspent_next_file_plususer): Likewise. * nis/nss_nisplus/nisplus-hosts.c (_nss_nisplus_parse_hostent): Change type of variable `i' to prevent warning. * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_parse_netent): Likewise. * nis/nss_nisplus/nisplus-proto.c (_nss_nisplus_parse_protoent): Likewise. * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_parse_rpcent): Likewise. * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Likewise. * sysdeps/generic/Dist: Remove old math implementation files. * sysdeps/generic/mathimpl.h: Removed. * sysdeps/generic/trig.h: Removed. * sysdeps/generic/sincos.c: Removed. * sysdeps/generic/asincos.c: Removed. * sysdeps/generic/exp__E.c: Removed. * sysdeps/generic/log__L.c: Removed. 1997-04-13 17:18 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (fREe): Small optimization. Before returning, add fast check whether the heap containing top can go away. 1997-04-11 16:46 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (mALLOc, rEALLOc, cALLOc, mEMALIGn): When failing to allocate a new chunk, also try the main_arena. It may be that we are only running out of mmapped regions, and other arenas cannot be enlarged sufficiently. (new_heap, malloc_extend_top): Handle top_pad more consistently, i.e. only in new_heap(). 1997-04-13 21:10 Philip Blundell <pjb27@cl.cam.ac.uk> * sysdeps/posix/Makefile: Don't try to build and run mk-stdiolim if cross-compiling. * configure.in: Recognise "...linuxaout" OS names and turn off ELF. * configure.in: Add ARM support. * sysdeps/arm/Implies: New file. * sysdeps/arm/__longjmp.S: New file. * sysdeps/arm/bsd-_setjmp: New file. * sysdeps/arm/bsd-setjmp: New file. * sysdeps/arm/bytesex.h: New file. * sysdeps/arm/fpu_control.h: New file. * sysdeps/arm/jmp_buf.h: New file. * sysdeps/arm/setjmp.h: New file. * sysdeps/arm/sysdep.h: New file. * sysdeps/unix/arm/config.h: New file. 1997-04-14 04:03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/s_cproj.c: New file. * sysdeps/libm-ieee754/s_cprojf.c: New file. * sysdeps/libm-ieee754/s_cprojl.c: New file.
1997-04-15 01:38:39 +00:00
}
}
#ifndef SINCOSF
Use libm_alias_float in flt-32. This patch makes flt-32 libm functions use libm_alias_float to define public interfaces (in cases where _Float32 aliases of those interfaces would be appropriate, so not for finitef / isinff / isnanf). Tested for x86_64. Also tested with build-many-glibcs.py that installed stripped shared libraries are unchanged by the patch. * sysdeps/ieee754/flt-32/s_asinhf.c: Include <libm-alias-float.h>. (asinhf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_atanf.c: Include <libm-alias-float.h>. (atanf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_cbrtf.c: Include <libm-alias-float.h>. (cbrtf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ceilf.c: Include <libm-alias-float.h>. (ceilf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_copysignf.c: Include <libm-alias-float.h>. (copysignf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_cosf.c: Include <libm-alias-float.h>. (cosf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_erff.c: Include <libm-alias-float.h>. (erff): Define using libm_alias_float. (erfcf): Likewise. * sysdeps/ieee754/flt-32/s_expm1f.c: Include <libm-alias-float.h>. (expm1f): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fabsf.c: Include <libm-alias-float.h>. (fabsf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_floorf.c: Include <libm-alias-float.h>. (floorf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_frexpf.c: Include <libm-alias-float.h>. (frexpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fromfpf.c (fromfpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fromfpf_main.c: Include <libm-alias-float.h>. * sysdeps/ieee754/flt-32/s_fromfpxf.c (fromfpxf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_getpayloadf.c: Include <libm-alias-float.h>. (getpayloadf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_llrintf.c: Include <libm-alias-float.h>. (llrintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_llroundf.c: Include <libm-alias-float.h>. (llroundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_logbf.c: Include <libm-alias-float.h>. (logbf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_lrintf.c: Include <libm-alias-float.h>. (lrintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_lroundf.c: Include <libm-alias-float.h>. (lroundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_modff.c: Include <libm-alias-float.h>. (modff): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nearbyintf.c: Include <libm-alias-float.h>. (nearbyintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nextafterf.c: Include <libm-alias-float.h>. (nextafterf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nextupf.c: Include <libm-alias-float.h>. (nextupf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_remquof.c: Include <libm-alias-float.h>. (remquof): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_rintf.c: Include <libm-alias-float.h>. (rintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_roundevenf.c: Include <libm-alias-float.h>. (roundevenf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_roundf.c: Include <libm-alias-float.h>. (roundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_setpayloadf.c (setpayloadf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_setpayloadf_main.c: Include <libm-alias-float.h>. * sysdeps/ieee754/flt-32/s_setpayloadsigf.c (setpayloadsigf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_sincosf.c: Include <libm-alias-float.h>. (sincosf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_sinf.c: Include <libm-alias-float.h>. (sinf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_tanf.c: Include <libm-alias-float.h>. (tanf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_tanhf.c: Include <libm-alias-float.h>. (tanhf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_totalorderf.c: Include <libm-alias-float.h>. (totalorderf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_totalordermagf.c: Include <libm-alias-float.h>. (totalordermagf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_truncf.c: Include <libm-alias-float.h>. (truncf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ufromfpf.c (ufromfpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ufromfpxf.c (ufromfpxf): Define using libm_alias_float.
2017-09-22 20:24:12 +00:00
libm_alias_float (__sincos, sincos)
#endif