Update of /cvsroot/mplayer/main/libvo In directory usw-pr-cvs1:/tmp/cvs-serv1003/libvo Modified Files: fastmemcpy.h Log Message: add 3dnow support Index: fastmemcpy.h =================================================================== RCS file: /cvsroot/mplayer/main/libvo/fastmemcpy.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** fastmemcpy.h 2001/04/14 17:56:44 1.5 --- fastmemcpy.h 2001/04/16 20:55:27 1.6 *************** *** 1,2 **** --- 1,6 ---- + + #ifndef __MPLAYER_MEMCPY + #define __MPLAYER_MEMCPY + /* This part of code was taken by from Linux-2.4.3 and slightly modified *************** *** 6,10 **** If you have questions please contact with me: Nick Kurshev: nickols_k@mail.ru. */ ! #ifdef HAVE_MMX2 /* for small memory blocks (<256 bytes) this version is faster */ #define small_memcpy(to,from,n)\ --- 10,19 ---- If you have questions please contact with me: Nick Kurshev: nickols_k@mail.ru. */ ! ! // 3dnow memcpy support from kernel 2.4.2 ! // by Pontscho/fresh!mindworkz ! ! #if defined( HAVE_MMX2 ) || defined( HAVE_3DNOW ) ! /* for small memory blocks (<256 bytes) this version is faster */ #define small_memcpy(to,from,n)\ *************** *** 28,31 **** --- 37,47 ---- __asm__ __volatile__ ( + #if defined( HAVE_3DNOW ) && !defined( HAVE_MMX2 ) + "prefetch (%0)\n" + "prefetch 64(%0)\n" + "prefetch 128(%0)\n" + "prefetch 192(%0)\n" + "prefetch 256(%0)\n" + #else "prefetchnta (%0)\n" "prefetchnta 64(%0)\n" *************** *** 33,36 **** --- 49,53 ---- "prefetchnta 192(%0)\n" "prefetchnta 256(%0)\n" + #endif : : "r" (from) ); /* *************** *** 46,50 **** --- 63,71 ---- { __asm__ __volatile__ ( + #if defined( HAVE_3DNOW ) && !defined( HAVE_MMX2 ) + "prefetch 320(%0)\n" + #else "prefetchnta 320(%0)\n" + #endif #ifdef HAVE_SSE /* Only P3 (may be Cyrix3) */ "movups (%0), %%xmm0\n" *************** *** 57,60 **** --- 78,99 ---- "movntps %%xmm1, 48(%1)\n" #else /* Only K7 (may be other) */ + #if defined( HAVE_3DNOW ) && !defined( HAVE_MMX2 ) + "movq (%0), %%mm0\n" + "movq 8(%0), %%mm1\n" + "movq 16(%0), %%mm2\n" + "movq 24(%0), %%mm3\n" + "movq %%mm0, (%1)\n" + "movq %%mm1, 8(%1)\n" + "movq %%mm2, 16(%1)\n" + "movq %%mm3, 24(%1)\n" + "movq 32(%0), %%mm0\n" + "movq 40(%0), %%mm1\n" + "movq 48(%0), %%mm2\n" + "movq 56(%0), %%mm3\n" + "movq %%mm0, 32(%1)\n" + "movq %%mm1, 40(%1)\n" + "movq %%mm2, 48(%1)\n" + "movq %%mm3, 56(%1)\n" + #else "movq (%0), %%mm0\n" "movq 8(%0), %%mm1\n" *************** *** 74,90 **** --- 113,150 ---- "movntq %%mm3, 56(%1)\n" #endif + #endif :: "r" (from), "r" (to) : "memory"); from+=64; to+=64; } + #if defined( HAVE_3DNOW ) && !defined( HAVE_MMX2 ) + __asm__ __volatile__ ("femms":::"memory"); + #else __asm__ __volatile__ ("emms":::"memory"); + #endif } /* * Now do the tail of the block */ + #if 0 small_memcpy(to, from, len); + #else + __asm__ __volatile__ ( + "shrl $1,%%ecx\n" + "jnc 1f\n" + "movsb\n" + "1:\n" + "shrl $1,%%ecx\n" + "jnc 2f\n" + "movsw\n" + "2:\n" + "rep ; movsl\n" + ::"D" (to), "S" (from),"c" (len) + : "memory"); + #endif return p; } #define memcpy(a,b,c) fast_memcpy(a,b,c) + #endif _______________________________________________ Mplayer-cvslog mailing list Mplayer-cvslog@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog
participants (1)
-
Zoltan Ponekker