AP_Common: add replacements for fe control functions systems without them
This commit is contained in:
parent
e2498a1090
commit
484db9ff82
42
libraries/AP_Common/missing/fenv.h
Normal file
42
libraries/AP_Common/missing/fenv.h
Normal file
@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
#include_next <fenv.h>
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
|
||||
// Public domain polyfill for feenableexcept on OS X
|
||||
// http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c
|
||||
|
||||
inline int
|
||||
feenableexcept (unsigned int excepts)
|
||||
{
|
||||
static fenv_t fenv;
|
||||
unsigned int new_excepts = excepts & FE_ALL_EXCEPT,
|
||||
old_excepts; // previous masks
|
||||
|
||||
if ( fegetenv (&fenv) ) return -1;
|
||||
old_excepts = fenv.__control & FE_ALL_EXCEPT;
|
||||
|
||||
// unmask
|
||||
fenv.__control &= ~new_excepts;
|
||||
fenv.__mxcsr &= ~(new_excepts << 7);
|
||||
|
||||
return ( fesetenv (&fenv) ? -1 : old_excepts );
|
||||
}
|
||||
|
||||
inline int
|
||||
fedisableexcept (unsigned int excepts)
|
||||
{
|
||||
static fenv_t fenv;
|
||||
unsigned int new_excepts = excepts & FE_ALL_EXCEPT,
|
||||
old_excepts; // all previous masks
|
||||
|
||||
if ( fegetenv (&fenv) ) return -1;
|
||||
old_excepts = fenv.__control & FE_ALL_EXCEPT;
|
||||
|
||||
// mask
|
||||
fenv.__control |= new_excepts;
|
||||
fenv.__mxcsr |= new_excepts << 7;
|
||||
|
||||
return ( fesetenv (&fenv) ? -1 : old_excepts );
|
||||
}
|
||||
#endif // APPLE
|
Loading…
Reference in New Issue
Block a user