diff options
Diffstat (limited to 'winsup/mingw/mingwex/fesetround.c')
-rw-r--r-- | winsup/mingw/mingwex/fesetround.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/fesetround.c b/winsup/mingw/mingwex/fesetround.c index a8cef86a4..e90dbb4e7 100644 --- a/winsup/mingw/mingwex/fesetround.c +++ b/winsup/mingw/mingwex/fesetround.c @@ -1,4 +1,6 @@ #include <fenv.h> +#include "cpu_features.h" + /* 7.6.3.2 The fesetround function establishes the rounding direction represented by its argument round. If the argument is not equal @@ -15,5 +17,14 @@ int fesetround (int mode) _cw &= ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO); _cw |= mode; __asm__ volatile ("fldcw %0;" : : "m" (_cw)); + + if (__HAS_SSE) + { + __asm__ volatile ("stmxcsr %0" : "=m" (_cw)); + _cw &= ~ 0x6000; + _cw |= (mode << __MXCSR_ROUND_FLAG_SHIFT); + __asm__ volatile ("ldmxcsr %0" : : "m" (_cw)); + } + return 0; } |