int fex_set_log(FILE *fp) { mutex_lock(&log_lock); log_fp = fp; mutex_unlock(&log_lock); __fex_update_te(); return 1; }
void fex_merge_flags(const fenv_t *p) { unsigned long fsr; __fenv_getfsr(&fsr); __fenv_set_ex(fsr, __fenv_get_ex(fsr) | __fenv_get_ex(p->__fsr)); __fenv_setfsr(&fsr); if (fex_get_log()) __fex_update_te(); }
void fex_setexcepthandler(const fex_handler_t *buf, int e) { struct fex_handler_data *thr_handlers; int i; thr_handlers = __fex_get_thr_handlers(); for (i = 0; i < FEX_NUM_EXC; i++) if (e & (1 << i)) thr_handlers[i] = (*buf)[i]; __fex_update_te(); }
int fex_set_handling(int e, int mode, void (*handler)()) { struct fex_handler_data *thr_handlers; int i; if (e & ~((1 << FEX_NUM_EXC) - 1)) return 0; thr_handlers = __fex_get_thr_handlers(); for (i = 0; i < FEX_NUM_EXC; i++) { if (e & (1 << i)) { thr_handlers[i].__mode = mode; thr_handlers[i].__handler = handler; } } __fex_update_te(); return 1; }