mirror of https://github.com/flysand7/ciabatta.git
non-std functions for fenv.g
This commit is contained in:
parent
caef55ef67
commit
6f57efcaa9
20
code/fenv.c
20
code/fenv.c
|
@ -103,3 +103,23 @@ int feupdateenv(fenv_t const *envp) {
|
|||
feraiseexcept(excepts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _feenabletraps(int excepts) {
|
||||
if((excepts & FE_ALL_EXCEPT) != excepts) {
|
||||
return 1;
|
||||
}
|
||||
fexcept_t csr = _mm_getcsr();
|
||||
csr &= ~fe_masks(excepts);
|
||||
_mm_setcsr(csr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _fedisabletraps(int excepts) {
|
||||
if((excepts & FE_ALL_EXCEPT) != excepts) {
|
||||
return 1;
|
||||
}
|
||||
fexcept_t csr = _mm_getcsr();
|
||||
csr |= fe_masks(excepts);
|
||||
_mm_setcsr(csr);
|
||||
return 0;
|
||||
}
|
||||
|
|
16
inc/fenv.h
16
inc/fenv.h
|
@ -30,16 +30,32 @@ typedef unsigned fenv_t;
|
|||
extern fenv_t _fe_dfl_env;
|
||||
#define FE_DFL_ENV (&_fe_dfl_env)
|
||||
|
||||
// Exceptions
|
||||
|
||||
int feclearexcept(int excepts);
|
||||
int fegetexceptflag(fexcept_t *flagp, int excepts);
|
||||
int feraiseexcept(int excepts);
|
||||
int fesetexceptflag(const fexcept_t *flagp, int excepts);
|
||||
int fetestexcept(int excepts);
|
||||
|
||||
// Rounding behaviour
|
||||
|
||||
int fegetround(void);
|
||||
int fesetround(int round);
|
||||
|
||||
// Environment
|
||||
|
||||
int fegetenv(fenv_t *env);
|
||||
int fesetenv(fenv_t *env);
|
||||
int feholdexcept(fenv_t *envp);
|
||||
int feupdateenv(fenv_t const *envp);
|
||||
|
||||
// Non-standard functions
|
||||
|
||||
int _feenabletraps(int excepts);
|
||||
int _fedisabletraps(int excepts);
|
||||
|
||||
#if defined(_CIABATTA_EXT)
|
||||
#define feenabletraps _feenabletraps
|
||||
#define _fedisabletraps _fedisabletraps
|
||||
#endif
|
Loading…
Reference in New Issue