lrintf emulation improvments

Originally committed as revision 3412 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2004-08-24 16:33:55 +00:00
parent f2fe8752ab
commit 91d6655aa7
1 changed files with 11 additions and 2 deletions

View File

@ -583,11 +583,20 @@ static int name16(void /*MpegEncContext*/ *s, uint8_t *dst, uint8_t *src, int st
/* XXX: add ISOC specific test to avoid specific BSD testing. */
/* better than nothing implementation. */
/* btw, rintf() is existing on fbsd too -- alex */
static inline long int lrintf(float x)
static always_inline long int lrintf(float x)
{
#ifdef CONFIG_WIN32
# ifdef ARCH_X86
int32_t i;
asm volatile(
"fistpl %0\n\t"
: "=m" (i) : "t" (x) : "st"
);
return i;
# else
/* XXX: incorrect, but make it compile */
return (int)(x);
return (int)(x + (x < 0 ? -0.5 : 0.5));
# endif
#else
return (int)(rint(x));
#endif