summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xine-utils/memcpy.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c
index a04b9437f..c2f3b2a84 100644
--- a/src/xine-utils/memcpy.c
+++ b/src/xine-utils/memcpy.c
@@ -168,10 +168,15 @@ static void * sse_memcpy(void * to, const void * from, size_t len)
/* PREFETCH has effect even for MOVSB instruction ;) */
__asm__ __volatile__ (
" prefetchnta (%0)\n"
+ " prefetchnta 32(%0)\n"
" prefetchnta 64(%0)\n"
+ " prefetchnta 96(%0)\n"
" prefetchnta 128(%0)\n"
+ " prefetchnta 160(%0)\n"
" prefetchnta 192(%0)\n"
+ " prefetchnta 224(%0)\n"
" prefetchnta 256(%0)\n"
+ " prefetchnta 288(%0)\n"
: : "r" (from) );
if(len >= MIN_LEN)
@@ -193,6 +198,7 @@ static void * sse_memcpy(void * to, const void * from, size_t len)
{
__asm__ __volatile__ (
"prefetchnta 320(%0)\n"
+ "prefetchnta 352(%0)\n"
"movups (%0), %%xmm0\n"
"movups 16(%0), %%xmm1\n"
"movups 32(%0), %%xmm2\n"
@@ -215,6 +221,7 @@ static void * sse_memcpy(void * to, const void * from, size_t len)
{
__asm__ __volatile__ (
"prefetchnta 320(%0)\n"
+ "prefetchnta 352(%0)\n"
"movaps (%0), %%xmm0\n"
"movaps 16(%0), %%xmm1\n"
"movaps 32(%0), %%xmm2\n"
@@ -300,10 +307,15 @@ void * mmx2_memcpy(void * to, const void * from, size_t len)
/* PREFETCH has effect even for MOVSB instruction ;) */
__asm__ __volatile__ (
" prefetchnta (%0)\n"
+ " prefetchnta 32(%0)\n"
" prefetchnta 64(%0)\n"
+ " prefetchnta 96(%0)\n"
" prefetchnta 128(%0)\n"
+ " prefetchnta 160(%0)\n"
" prefetchnta 192(%0)\n"
+ " prefetchnta 224(%0)\n"
" prefetchnta 256(%0)\n"
+ " prefetchnta 288(%0)\n"
: : "r" (from) );
if(len >= MIN_LEN)
@@ -323,6 +335,7 @@ void * mmx2_memcpy(void * to, const void * from, size_t len)
{
__asm__ __volatile__ (
"prefetchnta 320(%0)\n"
+ "prefetchnta 352(%0)\n"
"movq (%0), %%mm0\n"
"movq 8(%0), %%mm1\n"
"movq 16(%0), %%mm2\n"