llrint implementation in Cygwin

Charles Wilson cygwin@cwilson.fastmail.fm
Sat Sep 29 21:51:00 GMT 2007


Diego Biurrun wrote:

> llrint is required, so I guess Cygwin compilation will indeed be broken 
> for a while.  We don't add OS-specific workarounds to FFmpeg.

I call shenanigans.  The libavcodec directory has entirely separate 
subdirs for different processors -- platform specificity is BUILT IN to 
the ffmpeg source tree.  Second, common.h contains compiler-specific 
workarounds:

#ifndef av_always_inline
#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && 
__GNUC_MINOR__ > 0)
#    define av_always_inline __attribute__((always_inline)) inline
#else
#    define av_always_inline inline
#endif
#endif

to account for gcc-specific behavior. That file ALSO contains a 
half-dozen implementations of read_time depending on which 
microprocessor architecture is in use.

internal.h has this:

// Use rip-relative addressing if compiling PIC code on x86-64.
#if defined(__MINGW32__) || defined(__CYGWIN__) || \
     defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__))
#    if defined(ARCH_X86_64) && defined(PIC)
#        define MANGLE(a) "_" #a"(%%rip)"
#    else
#        define MANGLE(a) "_" #a
#    endif
#else
#    if defined(ARCH_X86_64) && defined(PIC)
#        define MANGLE(a) #a"(%%rip)"
#    elif defined(__APPLE__)
#        define MANGLE(a) "_" #a
#    else
#        define MANGLE(a) #a
#    endif
#endif

which looks pretty darn OS-specific to me.  (__CYGWIN__? __MINGW32__? 
__OS2__?)

Oh, and lookee here, in the same file:

#ifndef HAVE_LRINTF
/* XXX: add ISOC specific test to avoid specific BSD testing. */
/* better than nothing implementation. */
/* btw, rintf() is existing on fbsd too -- alex */
static av_always_inline long int lrintf(float x)
{
     return (int)(rint(x));
}
#endif /* HAVE_LRINTF */

a replacement function lrintf() that is activated only when a configure 
test determines that lrintf doesn't exist and therefore neglects to 
define HAVE_LRINTF....

So, we have:
   architecture-specific workarounds
   compiler-specific workarounds
   OS-specific workarounds
   AND capability-specific (!HAVE_FOO) workarounds

All god's chillins gots workaround code. "We don't add OS-specific 
workarounds", indeed...

--
Chuck

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list