diff options
Diffstat (limited to 'winsup/mingw/mingwex/math/modfl.c')
-rw-r--r-- | winsup/mingw/mingwex/math/modfl.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/winsup/mingw/mingwex/math/modfl.c b/winsup/mingw/mingwex/math/modfl.c index 5663956f0..c7ea2cbce 100644 --- a/winsup/mingw/mingwex/math/modfl.c +++ b/winsup/mingw/mingwex/math/modfl.c @@ -9,10 +9,11 @@ modfl (long double value, long double* iptr) { long double int_part; unsigned short saved_cw; + unsigned short tmp_cw; /* truncate */ asm ("fnstcw %0;" : "=m" (saved_cw)); /* save control word */ - asm ("fldcw %0;" : : "m" ((saved_cw & ~FE_ROUNDING_MASK) - | FE_TOWARDZERO)); + tmp_cw = (saved_cw & ~FE_ROUNDING_MASK) | FE_TOWARDZERO; + asm ("fldcw %0;" : : "m" (tmp_cw)); asm ("frndint;" : "=t" (int_part) : "0" (value)); /* round */ asm ("fldcw %0;" : : "m" (saved_cw)); /* restore saved cw */ if (iptr) |