[Mplayer-cvslog] CVS: main/libvo mmx.h,1.1.1.1,1.2 vo_3dfx.c,1.2,1.3 vo_fbdev.c,1.12,1.13 vo_odivx.c,1.3,1.4 vo_sdl.c,1.6,1.7 vo_syncfb.c,1.2,1.3 vo_x11.c,1.11,1.12 vo_xv.c,1.8,1.9

GEREOFFY arpi_esp at users.sourceforge.net
Wed Apr 11 14:47:47 CEST 2001


Update of /cvsroot/mplayer/main/libvo
In directory usw-pr-cvs1:/tmp/cvs-serv19020/libvo

Modified Files:
	mmx.h vo_3dfx.c vo_fbdev.c vo_odivx.c vo_sdl.c vo_syncfb.c 
	vo_x11.c vo_xv.c 
Log Message:
applied MMX2 memcpy() patch by Nick Kurshev

Index: mmx.h
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/mmx.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -r1.1.1.1 -r1.2
*** mmx.h	2001/02/24 20:29:56	1.1.1.1
--- mmx.h	2001/04/11 12:47:45	1.2
***************
*** 28,31 ****
--- 28,129 ----
  #define _MMX_H
  
+ /*
+  This part of code was taken by from Linux-2.4.3 and slightly modified
+ for MMX2 instruction set. I have done it since linux uses page aligned
+ blocks but mplayer uses weakly ordered data and original sources can not
+ speedup their. Only using prefetch and movntq together have effect! 
+ If you have questions please contact with me: Nick Kurshev: nickols_k at mail.ru.
+ */
+ 
+ #ifndef HAVE_MMX2
+ //static inline void * __memcpy(void * to, const void * from, unsigned n)
+ inline static void * memcpy(void * to, const void * from, unsigned n)
+ {
+ int d0, d1, d2;
+ __asm__ __volatile__(
+ 	"rep ; movsl\n\t"
+ 	"testb $2,%b4\n\t"
+ 	"je 1f\n\t"
+ 	"movsw\n"
+ 	"1:\ttestb $1,%b4\n\t"
+ 	"je 2f\n\t"
+ 	"movsb\n"
+ 	"2:"
+ 	: "=&c" (d0), "=&D" (d1), "=&S" (d2)
+ 	:"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
+ 	: "memory");
+ return (to);
+ }
+ #else
+ //inline static void *__memcpy_mmx2(void *to, const void *from, unsigned len)
+ inline static void * memcpy(void * to, const void * from, unsigned n)
+ {
+ 	void *p;
+ 	int i;
+ 
+         if(len >= 0x200) /* 512-byte blocks */
+ 	{
+   	  p = to;
+ 	  i = len >> 6; /* len/64 */
+ 	__asm__ __volatile__ (
+ 		"1: prefetch (%0)\n"		/* This set is 28 bytes */
+ 		"   prefetch 64(%0)\n"
+ 		"   prefetch 128(%0)\n"
+ 		"   prefetch 192(%0)\n"
+ 		"   prefetch 256(%0)\n"
+ 		"2:  \n"
+ 		".section .fixup, \"ax\"\n"
+ 		"3: movw $0x1AEB, 1b\n"	/* jmp on 26 bytes */
+ 		"   jmp 2b\n"
+ 		".previous\n"
+ 		".section __ex_table,\"a\"\n"
+ 		"	.align 4\n"
+ 		"	.long 1b, 3b\n"
+ 		".previous"
+ 		: : "r" (from) );
+ 		
+ 	
+ 	for(; i>0; i--)
+ 	{
+ 		__asm__ __volatile__ (
+ 		"1:  prefetch 320(%0)\n"
+ 		"2:  movq (%0), %%mm0\n"
+ 		"  movq 8(%0), %%mm1\n"
+ 		"  movq 16(%0), %%mm2\n"
+ 		"  movq 24(%0), %%mm3\n"
+ 		"  movntq %%mm0, (%1)\n"
+ 		"  movntq %%mm1, 8(%1)\n"
+ 		"  movntq %%mm2, 16(%1)\n"
+ 		"  movntq %%mm3, 24(%1)\n"
+ 		"  movq 32(%0), %%mm0\n"
+ 		"  movq 40(%0), %%mm1\n"
+ 		"  movq 48(%0), %%mm2\n"
+ 		"  movq 56(%0), %%mm3\n"
+ 		"  movntq %%mm0, 32(%1)\n"
+ 		"  movntq %%mm1, 40(%1)\n"
+ 		"  movntq %%mm2, 48(%1)\n"
+ 		"  movntq %%mm3, 56(%1)\n"
+ 		".section .fixup, \"ax\"\n"
+ 		"3: movw $0x05EB, 1b\n"	/* jmp on 5 bytes */
+ 		"   jmp 2b\n"
+ 		".previous\n"
+ 		".section __ex_table,\"a\"\n"
+ 		"	.align 4\n"
+ 		"	.long 1b, 3b\n"
+ 		".previous"
+ 		: : "r" (from), "r" (to) : "memory");
+ 		from+=64;
+ 		to+=64;
+ 	}
+ 	        __asm__ __volatile__ ("emms":::"memory");
+ 	}
+ 	/*
+ 	 *	Now do the tail of the block
+ 	 */
+ 	__memcpy(to, from, len&63);
+ 	return p;
+ }
+ #endif
+ 
  
  /*	Warning:  at this writing, the version of GAS packaged

Index: vo_3dfx.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_3dfx.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** vo_3dfx.c	2001/03/03 21:46:39	1.2
--- vo_3dfx.c	2001/04/11 12:47:45	1.3
***************
*** 50,53 ****
--- 50,55 ----
  #include "drivers/3dfx.h"
  
+ #include "mmx.h"
+ 
  static vo_info_t vo_info = 
  {

Index: vo_fbdev.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_fbdev.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** vo_fbdev.c	2001/04/08 20:39:37	1.12
--- vo_fbdev.c	2001/04/11 12:47:45	1.13
***************
*** 25,28 ****
--- 25,30 ----
  extern void rgb15to16_mmx(char *s0, char *d0, int count);
  
+ #include "mmx.h"
+ 
  LIBVO_EXTERN(fbdev)
  

Index: vo_odivx.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_odivx.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** vo_odivx.c	2001/03/11 02:43:24	1.3
--- vo_odivx.c	2001/04/11 12:47:45	1.4
***************
*** 20,23 ****
--- 20,25 ----
  #include "../encore/encore.h"
  
+ #include "mmx.h"
+ 
  static vo_info_t vo_info = 
  {

Index: vo_sdl.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_sdl.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** vo_sdl.c	2001/04/10 21:41:31	1.6
--- vo_sdl.c	2001/04/11 12:47:45	1.7
***************
*** 69,72 ****
--- 69,74 ----
  #include "video_out_internal.h"
  
+ 
+ #include "mmx.h"
  LIBVO_EXTERN(sdl)
  

Index: vo_syncfb.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_syncfb.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** vo_syncfb.c	2001/03/03 21:46:39	1.2
--- vo_syncfb.c	2001/04/11 12:47:45	1.3
***************
*** 44,47 ****
--- 44,49 ----
  #include "drivers/syncfb/syncfb.h"
  
+ #include "mmx.h"
+ 
  static vo_info_t vo_info =
  {

Index: vo_x11.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_x11.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** vo_x11.c	2001/04/10 02:29:38	1.11
--- vo_x11.c	2001/04/11 12:47:45	1.12
***************
*** 37,40 ****
--- 37,42 ----
  #include "x11_common.h"
  
+ #include "mmx.h"
+ 
  static vo_info_t vo_info =
  {

Index: vo_xv.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_xv.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** vo_xv.c	2001/04/10 02:29:38	1.8
--- vo_xv.c	2001/04/11 12:47:45	1.9
***************
*** 29,32 ****
--- 29,34 ----
  #include "x11_common.h"
  
+ #include "mmx.h"
+ 
  static vo_info_t vo_info =
  {


_______________________________________________
Mplayer-cvslog mailing list
Mplayer-cvslog at lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog



More information about the MPlayer-cvslog mailing list