mirror of https://github.com/mpv-player/mpv
memcpy() moved mmx.h -> fastmemcpy.h
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@355 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
69bf86446c
commit
0ddb6b81b5
98
libvo/mmx.h
98
libvo/mmx.h
|
@ -27,104 +27,6 @@
|
|||
#ifndef _MMX_H
|
||||
#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@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
|
||||
with most Linux distributions does not handle the
|
||||
|
|
|
@ -49,7 +49,7 @@ LIBVO_EXTERN(3dfx)
|
|||
|
||||
#include "drivers/3dfx.h"
|
||||
|
||||
#include "mmx.h"
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
static vo_info_t vo_info =
|
||||
{
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include "yuv2rgb.h"
|
||||
extern void rgb15to16_mmx(char *s0, char *d0, int count);
|
||||
|
||||
#include "mmx.h"
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
LIBVO_EXTERN(fbdev)
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
//#include "fastmemcpy.h"
|
||||
|
||||
#include "linux/keycodes.h"
|
||||
#include "config.h"
|
||||
|
@ -64,8 +65,6 @@ static unsigned char *vo_dga_base;
|
|||
static Display *vo_dga_dpy;
|
||||
|
||||
|
||||
#include "mmx.h"
|
||||
|
||||
#if defined (HAVE_SSE) || defined (HAVE_3DNOW)
|
||||
#define movntq "movntq" // use this for processors that have SSE or 3Dnow
|
||||
#else
|
||||
|
|
|
@ -19,7 +19,7 @@ LIBVO_EXTERN(odivx)
|
|||
|
||||
#include "../encore/encore.h"
|
||||
|
||||
#include "mmx.h"
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
static vo_info_t vo_info =
|
||||
{
|
||||
|
|
|
@ -73,8 +73,8 @@
|
|||
#include "video_out.h"
|
||||
#include "video_out_internal.h"
|
||||
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
#include "mmx.h"
|
||||
LIBVO_EXTERN(sdl)
|
||||
|
||||
//#include "log.h"
|
||||
|
|
|
@ -43,7 +43,7 @@ LIBVO_EXTERN(syncfb)
|
|||
|
||||
#include "drivers/syncfb/syncfb.h"
|
||||
|
||||
#include "mmx.h"
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
static vo_info_t vo_info =
|
||||
{
|
||||
|
|
|
@ -36,7 +36,7 @@ LIBVO_EXTERN( x11 )
|
|||
|
||||
#include "x11_common.h"
|
||||
|
||||
#include "mmx.h"
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
static vo_info_t vo_info =
|
||||
{
|
||||
|
|
|
@ -28,7 +28,7 @@ LIBVO_EXTERN(xv)
|
|||
|
||||
#include "x11_common.h"
|
||||
|
||||
#include "mmx.h"
|
||||
#include "fastmemcpy.h"
|
||||
|
||||
static vo_info_t vo_info =
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue