Merge commit '4db96649ca700db563d9da4ebe70bf9fc4c7a6ba'

* commit '4db96649ca700db563d9da4ebe70bf9fc4c7a6ba':
  avutil: Ensure that emms_c is always defined, even on non-x86
  configure: Move MinGW CPPFLAGS setting to libc section, where it belongs
  avutil: Move emms code to x86-specific header

Conflicts:
	configure
	libavutil/internal.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
pull/8/head
Michael Niedermayer 12 years ago
commit 61fbb4cd57
  1. 2
      configure
  2. 29
      libavutil/internal.h
  3. 22
      libavutil/x86/emms.h

2
configure vendored

@ -3226,7 +3226,6 @@ case $target_os in
objformat="win32" objformat="win32"
ranlib=: ranlib=:
enable dos_paths enable dos_paths
add_cppflags -U__STRICT_ANSI__
;; ;;
win32|win64) win32|win64)
if enabled shared; then if enabled shared; then
@ -3370,6 +3369,7 @@ elif check_header _mingw.h; then
"defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \ "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
(__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
die "ERROR: MinGW runtime version must be >= 3.15." die "ERROR: MinGW runtime version must be >= 3.15."
add_cppflags -U__STRICT_ANSI__
if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \ if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
__MINGW64_VERSION_MAJOR < 3"; then __MINGW64_VERSION_MAJOR < 3"; then
add_compat msvcrt/snprintf.o add_compat msvcrt/snprintf.o

@ -40,6 +40,14 @@
#include "cpu.h" #include "cpu.h"
#include "dict.h" #include "dict.h"
#if ARCH_X86
# include "x86/emms.h"
#endif
#ifndef emms_c
# define emms_c()
#endif
#ifndef attribute_align_arg #ifndef attribute_align_arg
#if ARCH_X86_32 && AV_GCC_VERSION_AT_LEAST(4,2) #if ARCH_X86_32 && AV_GCC_VERSION_AT_LEAST(4,2)
# define attribute_align_arg __attribute__((force_align_arg_pointer)) # define attribute_align_arg __attribute__((force_align_arg_pointer))
@ -154,25 +162,4 @@
# define ONLY_IF_THREADS_ENABLED(x) NULL # define ONLY_IF_THREADS_ENABLED(x) NULL
#endif #endif
#if HAVE_MMX_INLINE
/**
* Empty mmx state.
* this must be called between any dsp function and float/double code.
* for example sin(); dsp->idct_put(); emms_c(); cos()
*/
static av_always_inline void emms_c(void)
{
if(av_get_cpu_flags() & AV_CPU_FLAG_MMX)
__asm__ volatile ("emms" ::: "memory");
}
#elif HAVE_MMX && HAVE_MM_EMPTY
# include <mmintrin.h>
# define emms_c _mm_empty
#elif HAVE_MMX && HAVE_YASM
# include "libavutil/x86/emms.h"
# define emms_c avpriv_emms_yasm
#else
# define emms_c()
#endif /* HAVE_MMX_INLINE */
#endif /* AVUTIL_INTERNAL_H */ #endif /* AVUTIL_INTERNAL_H */

@ -19,6 +19,28 @@
#ifndef AVUTIL_X86_EMMS_H #ifndef AVUTIL_X86_EMMS_H
#define AVUTIL_X86_EMMS_H #define AVUTIL_X86_EMMS_H
#include "config.h"
#include "libavutil/attributes.h"
void avpriv_emms_yasm(void); void avpriv_emms_yasm(void);
#if HAVE_MMX_INLINE
# define emms_c emms_c
/**
* Empty mmx state.
* this must be called between any dsp function and float/double code.
* for example sin(); dsp->idct_put(); emms_c(); cos()
*/
static av_always_inline void emms_c(void)
{
if(av_get_cpu_flags() & AV_CPU_FLAG_MMX)
__asm__ volatile ("emms" ::: "memory");
}
#elif HAVE_MMX && HAVE_MM_EMPTY
# include <mmintrin.h>
# define emms_c _mm_empty
#elif HAVE_MMX_EXTERNAL
# define emms_c avpriv_emms_yasm
#endif /* HAVE_MMX_INLINE */
#endif /* AVUTIL_X86_EMMS_H */ #endif /* AVUTIL_X86_EMMS_H */

Loading…
Cancel
Save