/* * ==================================================== * x87 FP implementation contributed to Newlib by * Dave Korn, November 2007. This file is placed in the * public domain. Permission to use, copy, modify, and * distribute this software is freely granted. * ==================================================== */ #if defined(__GNUC__) && !defined(_SOFT_FLOAT) #include /* FUNCTION <>, <>, <>---round and convert to long integer INDEX lrint INDEX lrintf INDEX lrintl SYNOPSIS #include long int lrint(double x); long int lrintf(float x); long int lrintl(long double x); DESCRIPTION The <>, <> and <> functions round <[x]> to the nearest integer value, according to the current rounding direction. If the rounded value is outside the range of the return type, the numeric result is unspecified. A range error may occur if the magnitude of <[x]> is too large. RETURNS These functions return the rounded integer value of <[x]>. <>, <> and <> return the result as a long integer. PORTABILITY <>, <>, and <> are ANSI. <> and <> are available on all platforms. <> is only available on i386 platforms when hardware floating point support is available and when compiling with GCC. */ /* * Fast math version of lrint(x) * Return x rounded to integral value according to the prevailing * rounding mode. * Method: * Using inline x87 asms. * Exception: * Governed by x87 FPCR. */ long int _f_lrint (double x) { long int _result; asm ("fistpl %0" : "=m" (_result) : "t" (x) : "st"); return _result; } #endif /* !__GNUC__ || _SOFT_FLOAT */