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

Michael Niedermayer michaelni at gmx.at
Sun Oct 26 11:31:50 CET 2014


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

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Observe your enemies, for they first find out your faults. -- Antisthenes
-------------- 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/8b30da5b/attachment.asc>


More information about the ffmpeg-devel mailing list