freebsd-skq/lib/msun/ld128
Bruce Evans 27aa844253 Centralize the complications for special efficient rounding to integers.
This was open-coded in range reduction for trig and exp functions.  Now
there are 3 static inline functions rnint[fl]() that replace open-coded
expressions, and type-generic irint() and i64rint() macros that hide the
complications for efficiently using non-generic irint() and irintl()
functions and casts.

Special details:

ld128/e_rem_pio2l.h needs to use i64rint() since it needs a 46-bit integer
result.  Everything else only needs a (less than) 32-bit integer result so
uses irint().

Float and double cases now use float_t and double_t locally instead of
STRICT_ASSIGN() to avoid bugs in extra precision.

On amd64, inline asm is now only used for irint() on long doubles.  The SSE
asm for irint() on amd64 only existed because the ifdef tangles made the
correct method of simply casting to int for this case non-obvious.
2018-07-20 12:42:24 +00:00
..
e_lgammal_r.c
e_powl.c Add a macro nan_mix() and use it to get NaN results that are (bitwise) 2018-07-17 07:42:14 +00:00
e_rem_pio2l.h Centralize the complications for special efficient rounding to integers. 2018-07-20 12:42:24 +00:00
invtrig.c
invtrig.h
k_cosl.c
k_expl.h Centralize the complications for special efficient rounding to integers. 2018-07-20 12:42:24 +00:00
k_sinl.c
k_tanl.c
s_erfl.c
s_exp2l.c
s_expl.c Centralize the complications for special efficient rounding to integers. 2018-07-20 12:42:24 +00:00
s_logl.c
s_nanl.c