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. |
||
---|---|---|
.. | ||
e_lgammal_r.c | ||
e_powl.c | ||
e_rem_pio2l.h | ||
invtrig.c | ||
invtrig.h | ||
k_cosl.c | ||
k_expl.h | ||
k_sinl.c | ||
k_tanl.c | ||
s_erfl.c | ||
s_exp2l.c | ||
s_expl.c | ||
s_logl.c | ||
s_nanl.c |