From b128050fac2089746cc3c826a71002da3b23d7b4 Mon Sep 17 00:00:00 2001 From: arpi_esp Date: Sat, 21 Apr 2001 21:49:28 +0000 Subject: 16-byte align fix for SSE git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@568 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/fastmemcpy.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'libvo') diff --git a/libvo/fastmemcpy.h b/libvo/fastmemcpy.h index 09c40bc12f..543d46166e 100644 --- a/libvo/fastmemcpy.h +++ b/libvo/fastmemcpy.h @@ -29,6 +29,25 @@ inline static void * fast_memcpy(void * to, const void * from, unsigned len) void *p; int i; + +#ifdef HAVE_SSE /* Only P3 (may be Cyrix3) */ +// printf("fastmemcpy_pre(0x%X,0x%X,0x%X)\n",to,from,len); + // Align dest to 16-byte boundary: + if((unsigned int)to&15){ + int len2=16-((unsigned int)to&15); + if(len>len2){ + len-=len2; + __asm__ __volatile__( + "rep ; movsb\n" + :"=D" (to), "=S" (from) + : "D" (to), "S" (from),"c" (len2) + : "memory"); + } + } +// printf("fastmemcpy(0x%X,0x%X,0x%X)\n",to,from,len); +#endif + + if(len >= 0x200) /* 512-byte blocks */ { p = to; -- cgit v1.2.3