diff options
author | Petri Hintukainen <phintuka@users.sourceforge.net> | 2012-07-16 22:40:01 +0300 |
---|---|---|
committer | Petri Hintukainen <phintuka@users.sourceforge.net> | 2012-07-16 22:40:01 +0300 |
commit | 261fbd8afb17cd5a4644d127b5d3802089249da7 (patch) | |
tree | 465b1e4914e57734c888c3cc13351dfa5ef33631 | |
parent | dd3bd86c41a0af1b74b1e344e896d1649e83e549 (diff) | |
download | xine-lib-261fbd8afb17cd5a4644d127b5d3802089249da7.tar.gz xine-lib-261fbd8afb17cd5a4644d127b5d3802089249da7.tar.bz2 |
Added configure check for AVX assembler support
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | src/xine-utils/memcpy.c | 9 |
2 files changed, 15 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index cae88dbee..341127c1b 100644 --- a/configure.ac +++ b/configure.ac @@ -448,6 +448,13 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm(".align 3");]])], [AC_DEFINE([ASMALIGN_1SLN], [1], [define if '.align n' means alignment to (1 << n) - byte boundaries])]) +dnl avx instruction set support +AC_MSG_CHECKING([for AVX assembler]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm("vmovaps %ymm1, %ymm0");]])], + [AC_DEFINE([HAVE_AVX], [1], + [define if compiler supports avx inline assembler]) + AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) + CC_ATTRIBUTE_ALIGNED CC_ATTRIBUTE_VISIBILITY([protected], diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c index 277f0f48b..0c44e0808 100644 --- a/src/xine-utils/memcpy.c +++ b/src/xine-utils/memcpy.c @@ -259,6 +259,7 @@ static void * sse_memcpy(void * to, const void * from, size_t len) return retval; } +#ifdef HAVE_AVX static void * avx_memcpy(void * to, const void * from, size_t len) { void *retval; @@ -348,6 +349,7 @@ static void * avx_memcpy(void * to, const void * from, size_t len) if(len) linux_kernel_memcpy_impl(to, from, len); return retval; } +#endif /* HAVE_AVX */ static void * mmx_memcpy(void * to, const void * from, size_t len) { @@ -490,7 +492,9 @@ static const struct { { "MMX ", mmx_memcpy, MM_MMX }, { "MMXEXT", mmx2_memcpy, MM_MMXEXT }, { "SSE", sse_memcpy, MM_MMXEXT|MM_SSE }, +# ifdef HAVE_AVX { "AVX", avx_memcpy, MM_ACCEL_X86_AVX }, +# endif /* HAVE_AVX */ #endif /* ARCH_X86 */ #if defined (ARCH_PPC) && !defined (HOST_OS_DARWIN) { "ppcasm", ppcasm_memcpy, 0 }, @@ -570,7 +574,10 @@ void xine_probe_fast_memcpy(xine_t *xine) static const char *const memcpy_methods[] = { "probe", "libc", #if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined(_MSC_VER) - "kernel", "mmx", "mmxext", "sse", "avx", + "kernel", "mmx", "mmxext", "sse", +# ifdef HAVE_AVX + "avx", +# endif /* HAVE_AVX */ #endif #if defined (ARCH_PPC) && !defined (HOST_OS_DARWIN) "ppcasm_memcpy", "ppcasm_cacheable_memcpy", |