|
|
|
@ -163,12 +163,12 @@ extern int memcntl(caddr_t, size_t, int, caddr_t, int, int); |
|
|
|
int initgroups(const char *,unsigned int); |
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(__FreeBSD__) && defined(HAVE_IEEEFP_H)
|
|
|
|
#if defined(__FreeBSD__) && defined(HAVE_IEEEFP_H) && !defined(HAVE_FEDISABLEEXCEPT)
|
|
|
|
#include <ieeefp.h>
|
|
|
|
#ifdef HAVE_FP_EXCEPT // Fix type conflict
|
|
|
|
typedef fp_except fp_except_t; |
|
|
|
#endif
|
|
|
|
#endif /* __FreeBSD__ && HAVE_IEEEFP_H */
|
|
|
|
#endif /* __FreeBSD__ && HAVE_IEEEFP_H && !HAVE_FEDISABLEEXCEPT */
|
|
|
|
#ifdef HAVE_SYS_FPU_H
|
|
|
|
/* for IRIX to use set_fpc_csr() */ |
|
|
|
#include <sys/fpu.h>
|
|
|
|
@ -194,19 +194,24 @@ extern "C" my_bool reopen_fstreams(const char *filename, |
|
|
|
|
|
|
|
inline void setup_fpu() |
|
|
|
{ |
|
|
|
#if defined(__FreeBSD__) && defined(HAVE_IEEEFP_H)
|
|
|
|
#if defined(__FreeBSD__) && defined(HAVE_IEEEFP_H) && !defined(HAVE_FEDISABLEEXCEPT)
|
|
|
|
/* We can't handle floating point exceptions with threads, so disable
|
|
|
|
this on freebsd |
|
|
|
Don't fall for overflow, underflow,divide-by-zero or loss of precision |
|
|
|
Don't fall for overflow, underflow,divide-by-zero or loss of precision. |
|
|
|
fpsetmask() is deprecated in favor of fedisableexcept() in C99. |
|
|
|
*/ |
|
|
|
#if defined(__i386__)
|
|
|
|
#if defined(FP_X_DNML)
|
|
|
|
fpsetmask(~(FP_X_INV | FP_X_DNML | FP_X_OFL | FP_X_UFL | FP_X_DZ | |
|
|
|
FP_X_IMP)); |
|
|
|
#else
|
|
|
|
fpsetmask(~(FP_X_INV | FP_X_OFL | FP_X_UFL | FP_X_DZ | |
|
|
|
FP_X_IMP)); |
|
|
|
#endif /* __i386__ */
|
|
|
|
#endif /* __FreeBSD__ && HAVE_IEEEFP_H */
|
|
|
|
#endif /* FP_X_DNML */
|
|
|
|
#endif /* __FreeBSD__ && HAVE_IEEEFP_H && !HAVE_FEDISABLEEXCEPT */
|
|
|
|
|
|
|
|
#ifdef HAVE_FEDISABLEEXCEPT
|
|
|
|
fedisableexcept(FE_ALL_EXCEPT); |
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_FESETROUND
|
|
|
|
/* Set FPU rounding mode to "round-to-nearest" */ |
|
|
|
|