From b8cdc234c67d883b7e9d6e4caf4ba15972ac7788 Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Mon, 29 Jul 2002 03:00:10 +0000 Subject: Add incomplet long double math support to libmingwex.a --- winsup/mingw/mingwex/math/llroundf.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 winsup/mingw/mingwex/math/llroundf.c (limited to 'winsup/mingw/mingwex/math/llroundf.c') diff --git a/winsup/mingw/mingwex/math/llroundf.c b/winsup/mingw/mingwex/math/llroundf.c new file mode 100644 index 000000000..b6c431f9d --- /dev/null +++ b/winsup/mingw/mingwex/math/llroundf.c @@ -0,0 +1,23 @@ +#include +#include + +long long +llroundf (float x) { + long long 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__ __volatile__ ( + "fistpll %0" : "=m" (retval) : "t" (x) : "st" + ); + __asm__ ( + "fldcw %0;" : : "m" (saved_cw) + ); /* restore control word */ + return retval; +} -- cgit v1.2.3