glibc/include
Siddhesh Poyarekar 2506109403 Set/restore rounding mode only when needed
The most common use case of math functions is with default rounding
mode, i.e. rounding to nearest.  Setting and restoring rounding mode
is an unnecessary overhead for this, so I've added support for a
context, which does the set/restore only if the FP status needs a
change.  The code is written such that only x86 uses these.  Other
architectures should be unaffected by it, but would definitely benefit
if the set/restore has as much overhead relative to the rest of the
code, as the x86 bits do.

Here's a summary of the performance improvement due to these
improvements; I've only mentioned functions that use the set/restore
and have benchmark inputs for x86_64:

Before:

cos(): ITERS:4.69335e+08: TOTAL:28884.6Mcy, MAX:4080.28cy, MIN:57.562cy, 16248.6 calls/Mcy
exp(): ITERS:4.47604e+08: TOTAL:28796.2Mcy, MAX:207.721cy, MIN:62.385cy, 15543.9 calls/Mcy
pow(): ITERS:1.63485e+08: TOTAL:28879.9Mcy, MAX:362.255cy, MIN:172.469cy, 5660.86 calls/Mcy
sin(): ITERS:3.89578e+08: TOTAL:28900Mcy, MAX:704.859cy, MIN:47.583cy, 13480.2 calls/Mcy
tan(): ITERS:7.0971e+07: TOTAL:28902.2Mcy, MAX:1357.79cy, MIN:388.58cy, 2455.55 calls/Mcy

After:

cos(): ITERS:6.0014e+08: TOTAL:28875.9Mcy, MAX:364.283cy, MIN:45.716cy, 20783.4 calls/Mcy
exp(): ITERS:5.48578e+08: TOTAL:28764.9Mcy, MAX:191.617cy, MIN:51.011cy, 19071.1 calls/Mcy
pow(): ITERS:1.70013e+08: TOTAL:28873.6Mcy, MAX:689.522cy, MIN:163.989cy, 5888.18 calls/Mcy
sin(): ITERS:4.64079e+08: TOTAL:28891.5Mcy, MAX:6959.3cy, MIN:36.189cy, 16062.8 calls/Mcy
tan(): ITERS:7.2354e+07: TOTAL:28898.9Mcy, MAX:1295.57cy, MIN:380.698cy, 2503.7 calls/Mcy

So the improvements are:

cos: 27.9089%
exp: 22.6919%
pow: 4.01564%
sin: 19.1585%
tan: 1.96086%

The downside of the change is that it will have an adverse performance
impact on non-default rounding modes, but I think the tradeoff is
justified.
2013-06-12 10:36:48 +05:30
..
arpa Add first fixes for conformtest for POSIX2008 2012-02-26 21:32:56 -05:00
bits Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
gnu Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
net First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
netinet First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
programs sys/cdefs.h: export __attribute_alloc_size__ 2013-02-18 17:18:57 -05:00
protocols
rpc Avoid use of "register" as optimization hint. 2013-06-07 22:24:35 +00:00
rpcsvc * nis/nis_domain_of.c (__nis_domain_of): New function. 2007-04-19 14:28:01 +00:00
sys Fix indentation and add copyright header to time.h 2013-06-11 18:42:42 +05:30
aio.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
aliases.h Remove pre-ISO C support 2012-01-07 23:57:22 -05:00
alloca.h Account for alloca size rounding in extend_alloca 2011-11-01 18:29:34 +01:00
argp.h
argz.h Remove use of INTDEF/INTUSE in intl 2012-05-24 23:08:18 +02:00
assert.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
atomic.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
byteswap.h
caller.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
complex.h Fix cacos real-part inaccuracy for result real part near 0 (bug 15023). 2013-01-17 20:25:51 +00:00
ctype.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
des.h
dirent.h Declare __getdirentries in internal dirent.h. 2012-08-15 10:09:18 -07:00
dlfcn.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
elf.h Check supported DF_1_XXX bits 2012-11-21 06:33:19 -08:00
endian.h
envz.h
err.h
errno.h Don't use GLIBC_PRIVATE errno outside of libraries 2013-02-04 10:01:54 +01:00
error.h
execinfo.h Remove pre-ISO C support 2012-01-07 23:57:22 -05:00
fcntl.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
features.h Remove __GLIBC_HAVE_LONG_LONG. 2013-01-11 21:13:25 +00:00
fenv.h Set/restore rounding mode only when needed 2013-06-12 10:36:48 +05:30
fnmatch.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
fpu_control.h
ftw.h
gconv.h
getopt.h Update. 2004-03-09 10:36:53 +00:00
getopt_int.h Update. 2004-03-09 10:36:53 +00:00
glob.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
gmp.h * include/gmp.h: Include/gmp-mparam.h. * stdlib/strtod.c: Include gmp-mparam.h before gmp.h and gmp-impl.h. 2003-03-14 05:48:18 +00:00
gnu-versions.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
grp.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
gshadow.h [BZ #9955] 2009-04-23 18:29:30 +00:00
iconv.h
ifaddrs.h Cache network interface information 2011-10-31 01:51:16 -04:00
ifunc-impl-list.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
inline-hashtab.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
langinfo.h Add first fixes for conformtest for POSIX2008 2012-02-26 21:32:56 -05:00
libc-internal.h Cast to __intptr_t before casting pointer to int64 2012-11-26 16:45:36 -08:00
libc-symbols.h Remove redunant "warning: " prefix from stub warnings. 2013-02-12 16:15:59 -08:00
libgen.h
libintl.h Remove use of INTDEF/INTUSE in intl 2012-05-24 23:08:18 +02:00
libio.h Remove use of INTDEF/INTUSE in libio 2012-05-24 23:06:20 +02:00
limits.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
link.h Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
locale.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
malloc.h * malloc/malloc.c (_int_free): Second argument is now mchunkptr. 2009-02-07 22:01:49 +00:00
math.h New <math.h> macro named issignaling to check for a signaling NaN (sNaN). 2013-04-02 13:51:02 +02:00
mcheck.h
memory.h
mntent.h Remove use of INTUSE/INTDEF in misc. 2012-05-31 13:10:02 +02:00
monetary.h Add first fixes for conformtest for POSIX2008 2012-02-26 21:32:56 -05:00
mqueue.h Update. 2004-04-13 02:15:43 +00:00
netdb.h Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
netgroup.h
nl_types.h
nss.h
nsswitch.h
obstack.h
poll.h
printf.h
pthread.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
pty.h Update. 2004-10-24 21:29:41 +00:00
pwd.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
regex.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
resolv.h Remove support for !USE___THREAD 2011-09-10 16:50:28 -04:00
rounding-mode.h Remove lots of inline keywords. 2013-02-07 14:44:18 -08:00
sched.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
search.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
set-hooks.h Remove __ptrvalue, __bounded and __unbounded. 2013-02-13 23:30:40 +00:00
setjmp.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
sgtty.h
shadow.h Remove pre-ISO C support 2012-01-07 23:57:22 -05:00
shlib-compat.h Fix leading whitespaces. 2013-06-06 20:36:07 +02:00
signal.h Remove use of INTDEF/INTUSE in stdio-common 2012-06-01 01:25:41 +02:00
spawn.h
stab.h
stap-probe.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
stdc-predef.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
stdio.h Remove use of INTDEF/INTUSE in libio 2012-05-24 23:06:20 +02:00
stdio_ext.h Remove use of INTDEF/INTUSE in libio 2012-05-24 23:06:20 +02:00
stdlib.h Avoid unconditional __call_tls_dtors calls in static linking. 2013-03-28 16:52:57 -07:00
string.h Avoid PLT references from __get_clockfreq on powerpc 2012-10-12 16:54:06 +02:00
strings.h
stropts.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
stubs-prologue.h
syscall.h
sysexits.h
syslog.h
tar.h
termios.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
tgmath.h
time.h Fix symbol definitions for __clock_* functions 2013-06-11 11:11:11 +05:30
ttyent.h
uchar.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
ucontext.h
ulimit.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
unistd.h add attribute_hidden to __have_{sock_cloexec,pipe2,dup3 2012-08-18 01:54:12 -04:00
utime.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
utmp.h Remove pre-ISO C support 2012-01-07 23:57:22 -05:00
values.h Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
wchar.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
wctype.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
wordexp.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
xlocale.h