diff options
Diffstat (limited to 'sysdeps/x86_64/fpu/math_private.h')
-rw-r--r-- | sysdeps/x86_64/fpu/math_private.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h index 4886c64..28bd9ce 100644 --- a/sysdeps/x86_64/fpu/math_private.h +++ b/sysdeps/x86_64/fpu/math_private.h @@ -145,7 +145,7 @@ do { \ #undef libc_feholdexcept #define libc_feholdexcept(e) \ - do { \ + do { \ unsigned int mxcsr; \ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ (e)->__mxcsr = mxcsr; \ @@ -155,6 +155,18 @@ do { \ // #define libc_feholdexceptf(e) (void) feholdexcept (e) // #define libc_feholdexceptl(e) (void) feholdexcept (e) +#undef libc_feholdexcept_setround +#define libc_feholdexcept_setround(e, r) \ + do { \ + unsigned int mxcsr; \ + asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ + (e)->__mxcsr = mxcsr; \ + mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | ((r) << 3); \ + asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \ + } while (0) +// #define libc_feholdexcept_setroundf(e, r) ... +// #define libc_feholdexcept_setroundl(e, r) ... + #undef libc_fesetenv #define libc_fesetenv(e) \ asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr)) |