[FFmpeg-devel] [PATCH] avutil/intmath: enable builtin intrinsics for icl and msvc.

Michael Niedermayer michaelni at gmx.at
Sun Oct 26 17:49:58 CET 2014


On Mon, Oct 27, 2014 at 01:44:59AM +1100, Matt Oliver wrote:
> On 26 October 2014 21:31, Michael Niedermayer <michaelni at gmx.at> wrote:
> 
> > 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 <protogonoi at 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
> >
> >
> >
> > [...]
> >
> 
> Long and int are exactly the same size in msvc. But attached is a slightly
> different version that avoids the casting casting.

>  intmath.h |   40 ++++++++++++++++++++++++++++++++++++----
>  1 file changed, 36 insertions(+), 4 deletions(-)
> 07acb6a8c92791a2c85dcd00a57bac636e9cdafe  0001-avutil-intmath-enable-builtin-intrinsics-for-icl-and.patch
> From 0777b80ffcd46bd92a109720ce60db186e0f8918 Mon Sep 17 00:00:00 2001
> From: Matthew Oliver <protogonoi at gmail.com>
> Date: Mon, 27 Oct 2014 01:43:15 +1100
> Subject: [PATCH] avutil/intmath: enable builtin intrinsics for icl and msvc.
> 
> ---
>  libavutil/intmath.h | 40 ++++++++++++++++++++++++++++++++++++----
>  1 file changed, 36 insertions(+), 4 deletions(-)

applied

thanks

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The educated differ from the uneducated as much as the living from the
dead. -- Aristotle 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141026/fa30b6a1/attachment.asc>


More information about the ffmpeg-devel mailing list