[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