about summary refs log tree commit diff
path: root/sysdeps/generic/math_private.h
Commit message (Collapse)AuthorAgeFilesLines
* Consolidate multiple precision sin/cos functionsSiddhesh Poyarekar2013-10-081-4/+2
|
* Set/restore rounding mode only when neededSiddhesh Poyarekar2013-06-121-14/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Skip modifying exception mask and flags in SET_RESTORE_ROUND_53BITSiddhesh Poyarekar2013-06-051-6/+6
| | | | | We only need to set/restore rounding mode to ensure correct computation for non-default rounding modes.
* Improve tgamma accuracy (bugs 2546, 2560, 5159, 15426).Joseph Myers2013-05-081-0/+12
|
* Make fma use of Dekker and Knuth algorithms use round-to-nearest (bug 14796).Joseph Myers2012-11-031-0/+16
|
* Fix inaccuracy of clog, clog10 near |z| = 1 (bug 13629).Joseph Myers2012-09-251-0/+7
|
* Fix ilogb exception and errno (bug 6794)Adhemerval Zanella2012-04-171-0/+3
| | | | | | | | | | | | | | | | | | | | [BZ #6794] Following Joseph comments about bug 6794, here is a proposed fix. It turned out to be a large fix mainly because I had to move some file along to follow libm files/names conventions. Basically I have added wrappers (w_ilogb.c, w_ilogbf.c, w_ilogbl.c) that now calls the symbol '__ieee754_ilogb'. The wrappers checks for '__ieee754_ilogb' output and set the errno and raise exceptions as expected. The '__ieee754_ilogb' is implemented in sysdeps. I have moved the 's_ilogb[f|l]' files to e_ilogb[f|l] and renamed the '__ilogb[f|l]' to '__ieee754_ilogb[f|l]'. I also found out a bug in i386 and x86-64 assembly coded ilogb implementation where it raises a FE_DIVBYZERO when argument is '0.0'. I corrected this issue as well. Finally I added the errno and FE_INVALID tests for 0.0, NaN and +-InF argument. Tested on i386, x86-64, ppc32 and ppc64.
* Avoid overflows from long double functions using __kernel_standard.Joseph Myers2012-03-281-0/+1
|
* Create and use libc_feupdateenv_test.Richard Henderson2012-03-191-0/+18
| | | | | We can reduce the number of STMXCSR, and often we can avoid the call to __feraiseexcept.
* Create and use SET_RESTORE_ROUND{,_NOEX,_53BIT}{,F,L}.Richard Henderson2012-03-191-0/+69
|
* Convert libc_feholdexcept et al from macros to inline functions.Richard Henderson2012-03-191-21/+78
|
* Make inline __isnan, __isinf_ns, __finite generic.Richard Henderson2012-03-191-13/+26
| | | | | | For code generation to stay identical on x86_64, this requires that we define the fp word manipulation macros before including the generic header.
* Implement and use libc_feholdexcept_setround_53bit and libc_feupdateenv_53bitAndreas Jaeger2012-03-141-0/+5
| | | | so that double arithmetic in s_sin is done in 53 bit (without extend i386 double precision)
* Move math/math_private.h to sysdeps/generic/math_private.h.Richard Henderson2012-03-091-0/+392
This reverts commit 60d6f5a6f50d838bcb4240fcc0223cac445c6c83.