diff options
Diffstat (limited to 'winsup/mingw/mingwex/math/roundf.c')
-rw-r--r-- | winsup/mingw/mingwex/math/roundf.c | 31 |
1 files changed, 5 insertions, 26 deletions
diff --git a/winsup/mingw/mingwex/math/roundf.c b/winsup/mingw/mingwex/math/roundf.c index 6ae81bdd8..b50d950a7 100644 --- a/winsup/mingw/mingwex/math/roundf.c +++ b/winsup/mingw/mingwex/math/roundf.c @@ -1,29 +1,8 @@ -#include <fenv.h> +#include <math.h> float -roundf (float x) { - double retval; - unsigned short saved_cw, _cw; - __asm__ ( - "fnstcw %0;" - : "=m" (saved_cw) - ); /* save control word */ - _cw = ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO) - | (x > 0.0 ? FE_UPWARD : FE_DOWNWARD); /* round away from zero */ - __asm__ ( - "fldcw %0;" - : - : "m" (_cw) - ); /* load the rounding control */ - __asm__ ( - "frndint;" - : "=t" (retval) - : "0" (x) - ); /* do the rounding */ - __asm__ ( - "fldcw %0;" - : - : "m" (saved_cw) - ); /* restore control word */ - return retval; +roundf (float x) +{ + /* Add +/- 0.5 then then round towards zero. */ + return truncf ( x + (x >= 0.0F ? 0.5F : -0.5F)); } |