summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2012-07-16 22:40:01 +0300
committerPetri Hintukainen <phintuka@users.sourceforge.net>2012-07-16 22:40:01 +0300
commit261fbd8afb17cd5a4644d127b5d3802089249da7 (patch)
tree465b1e4914e57734c888c3cc13351dfa5ef33631
parentdd3bd86c41a0af1b74b1e344e896d1649e83e549 (diff)
downloadxine-lib-261fbd8afb17cd5a4644d127b5d3802089249da7.tar.gz
xine-lib-261fbd8afb17cd5a4644d127b5d3802089249da7.tar.bz2
Added configure check for AVX assembler support
-rw-r--r--configure.ac7
-rw-r--r--src/xine-utils/memcpy.c9
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",