This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: llrint implementation in Cygwin


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]