78#if (defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64))
80#define FE_EXCEPT_SHIFT 22
81#define FM_ALL_EXCEPT FE_ALL_EXCEPT >> FE_EXCEPT_SHIFT
84feenableexcept (
unsigned int excepts)
87 unsigned int new_excepts = (excepts & FE_ALL_EXCEPT) >> FE_EXCEPT_SHIFT,
90 if ( fegetenv (&fenv) )
return -1;
91 old_excepts = (fenv & FM_ALL_EXCEPT) << FE_EXCEPT_SHIFT;
93 fenv = (fenv & ~new_excepts) | new_excepts;
94 return ( fesetenv (&fenv) ? -1 : old_excepts );
98#elif (defined(__x86_64__) || defined(_M_X64) || defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86))
101feenableexcept (
unsigned int excepts)
104 unsigned int new_excepts = excepts & FE_ALL_EXCEPT,
107 if ( fegetenv (&fenv) )
return -1;
108 old_excepts = fenv.__control & FE_ALL_EXCEPT;
111 fenv.__control &= ~new_excepts;
112 fenv.__mxcsr &= ~(new_excepts << 7);
114 return ( fesetenv (&fenv) ? -1 : old_excepts );
118#elif (defined(__arm) || defined(__arm64) || defined(__aarch64__))
120#define FE_EXCEPT_SHIFT 8
123feenableexcept (
unsigned int excepts)
126 if ( fegetenv (&fenv) )
return -1;
127 unsigned int old_excepts = ((fenv.__fpcr) >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT;
129 unsigned int new_excepts = excepts & FE_ALL_EXCEPT;
130 fenv.__fpcr |= new_excepts << FE_EXCEPT_SHIFT;
132 return ( fesetenv (&fenv) ? -1 : old_excepts );
137#error "feenableexcept.h: unknown hardware architecture"