Diego Biurrun <di...@biurrun.de> writes:

> From: Ronald S. Bultje <rsbul...@gmail.com>
>
> Signed-off-by: Diego Biurrun <di...@biurrun.de>
> ---
>  configure            |    3 +++
>  libavutil/internal.h |    7 +++++--
>  2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index 3c82eaa..7ef1025 100755
> --- a/configure
> +++ b/configure
> @@ -1118,6 +1118,7 @@ HAVE_LIST="
>      MapViewOfFile
>      memalign
>      mkstemp
> +    mm_empty
>      mmap
>      nanosleep
>      netinet_sctp_h
> @@ -2746,6 +2747,8 @@ elif enabled x86; then
>
>      check_code ld intrin.h "__rdtsc()" && enable rdtsc
>
> +    check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
> +
>      enable local_aligned_8 local_aligned_16
>
>      # check whether EBP is available on x86
> diff --git a/libavutil/internal.h b/libavutil/internal.h
> index 41e8a9a..e8bcca5 100644
> --- a/libavutil/internal.h
> +++ b/libavutil/internal.h
> @@ -231,7 +231,7 @@ struct AVDictionary {
>  #   define ONLY_IF_THREADS_ENABLED(x) NULL
>  #endif
>
> -#if HAVE_MMX
> +#if HAVE_MMX && HAVE_INLINE_ASM
>  /**
>   * Empty mmx state.
>   * this must be called between any dsp function and float/double code.
> @@ -241,8 +241,11 @@ static av_always_inline void emms_c(void)
>  {
>      __asm__ volatile ("emms" ::: "memory");
>  }
> +#elif HAVE_MMX && HAVE_MM_EMPTY
> +#   include <mmintrin.h>
> +#   define emms_c _mm_empty
>  #else /* HAVE_MMX */
> -#define emms_c()
> +#   define emms_c()
>  #endif /* HAVE_MMX */

Are there actually any compilers that do _not_ have this intrinsic?
Perhaps we can simply drop the inline asm entirely.

-- 
Måns Rullgård
m...@mansr.com
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to