On Sun, Oct 26, 2014 at 08:49:07PM +1100, Matt Oliver wrote: > intmath.h already uses the gcc builtin intrinsics for log2 and ctz. This > patch just adds the equivalent icl and msvc intrinsics. All added > intrinsics have the same function (i.e. with respect to input 0s etc.) as > the existing gcc builtins.
> intmath.h | 37 +++++++++++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 6 deletions(-) > 26a67ffba2f85535b6ac5dcb7643ec89c1d81d5f > 0001-avutil-intmath-enable-builtin-intrinsics-for-icl-and.patch > From 8b2a0cc3e265750650b4399ad051ae2e98a24f42 Mon Sep 17 00:00:00 2001 > From: Matthew Oliver <protogo...@gmail.com> > Date: Wed, 22 Oct 2014 00:30:53 +1100 > Subject: [PATCH] avutil/intmath: enable builtin intrinsics for icl and > msvc. > > --- > libavutil/intmath.h | 37 +++++++++++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 6 deletions(-) > > diff --git a/libavutil/intmath.h b/libavutil/intmath.h > index 8f7a69e..7d836d9 100644 > --- a/libavutil/intmath.h > +++ b/libavutil/intmath.h > @@ -35,21 +35,29 @@ > * @{ > */ > > -#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4) > - > +#if HAVE_FAST_CLZ > +#if AV_GCC_VERSION_AT_LEAST(3,4) > #ifndef ff_log2 > # define ff_log2(x) (31 - __builtin_clz((x)|1)) > # ifndef ff_log2_16bit > # define ff_log2_16bit av_log2 > # endif > #endif /* ff_log2 */ > - > +#elif defined( __INTEL_COMPILER ) > +#ifndef ff_log2 > +# define ff_log2(x) (_bit_scan_reverse(x|1)) > +# ifndef ff_log2_16bit > +# define ff_log2_16bit av_log2 > +# endif > +#endif /* ff_log2 */ > +#endif > #endif /* AV_GCC_VERSION_AT_LEAST(3,4) */ > > extern const uint8_t ff_log2_tab[256]; > > #ifndef ff_log2 > #define ff_log2 ff_log2_c > +#if !defined( _MSC_VER ) > static av_always_inline av_const int ff_log2_c(unsigned int v) > { > int n = 0; > @@ -65,6 +73,15 @@ static av_always_inline av_const int ff_log2_c(unsigned > int v) > > return n; > } > +#else > +static av_always_inline av_const int ff_log2_c(unsigned int v) > +{ > + int n = 0; > + _BitScanReverse((unsigned long *)&n, v|1); strict aliasing violation [...] > int c; > - > +#if !defined( _MSC_VER ) > if (v & 0x1) > return 0; > > @@ -127,7 +150,9 @@ static av_always_inline av_const int ff_ctz_c(int v) > c += 2; > } > c -= v & 0x1; > - > +#else > + _BitScanForward( (unsigned long *)&c, v ); here too [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Observe your enemies, for they first find out your faults. -- Antisthenes
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel