diff options
Diffstat (limited to 'winsup/mingw/mingwex/fesetround.c')
-rw-r--r-- | winsup/mingw/mingwex/fesetround.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/fesetround.c b/winsup/mingw/mingwex/fesetround.c new file mode 100644 index 000000000..a8cef86a4 --- /dev/null +++ b/winsup/mingw/mingwex/fesetround.c @@ -0,0 +1,19 @@ +#include <fenv.h> + /* 7.6.3.2 + The fesetround function establishes the rounding direction + represented by its argument round. If the argument is not equal + to the value of a rounding direction macro, the rounding direction + is not changed. */ + +int fesetround (int mode) +{ + unsigned short _cw; + if ((mode & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)) + != 0) + return -1; + __asm__ volatile ("fnstcw %0;": "=m" (_cw)); + _cw &= ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO); + _cw |= mode; + __asm__ volatile ("fldcw %0;" : : "m" (_cw)); + return 0; +} |