diff options
author | nick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-11-11 14:42:10 +0000 |
---|---|---|
committer | nick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-11-11 14:42:10 +0000 |
commit | 7035adb0bdf3b83031576418aed3584c9c39abb1 (patch) | |
tree | 8f8266e42b2c2ef99686313d234c156a67d44a57 /libvo | |
parent | 6fde34dde88c6d840718600485a696eaa97a1d4b (diff) |
Enable MMX stuff
I don't know why Michael Niedermayer disabled it but:
my benchmarks of 25 frames for TIMER+SUBTITLE (measured by RDTSC):
Non-MMX stuff:
total=306142159
MMX stuff:
total=159534150
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2834 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/osd.c | 28 | ||||
-rw-r--r-- | libvo/osd_template.c | 28 |
2 files changed, 14 insertions, 42 deletions
diff --git a/libvo/osd.c b/libvo/osd.c index fb01444f3e..e32fc6bc03 100644 --- a/libvo/osd.c +++ b/libvo/osd.c @@ -7,6 +7,8 @@ #include "config.h" #include "osd.h" #include "../mmx_defs.h" +//#define ENABLE_PROFILE +#include "../my_profile.h" void vo_draw_alpha_yv12(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ int y; @@ -76,25 +78,13 @@ void vo_draw_alpha_rgb24(int w,int h, unsigned char* src, unsigned char *srca, i return; } -#ifdef PROFILE_ME -static inline unsigned long long int read_tsc( void ) -{ - unsigned long long int retval; - __asm __volatile ("rdtsc":"=A"(retval)::"memory"); - return retval; -} -#endif - void vo_draw_alpha_rgb32(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ int y; -#ifdef PROFILE_ME -unsigned long long v1,v2; -v1 = read_tsc(); -#endif +PROFILE_START(); for(y=0;y<h;y++){ register int x; #ifdef ARCH_X86 -#ifdef HAVE_MMX2 +#ifdef HAVE_MMX asm volatile( "pxor %%mm7, %%mm7 \n\t" "xorl %%eax, %%eax \n\t" @@ -121,7 +111,7 @@ v1 = read_tsc(); "punpcklbw %%mm2, %%mm2 \n\t" // src AABBCCDD "punpcklbw %%mm2, %%mm2 \n\t" // src AAAABBBB "paddb %%mm2, %%mm0 \n\t" - MOVNTQ" %%mm0, (%0, %%eax, 4) \n\t" + "movq %%mm0, (%0, %%eax, 4) \n\t" "addl $2, %%eax \n\t" "cmpl %3, %%eax \n\t" " jb 1b \n\t" @@ -175,14 +165,10 @@ v1 = read_tsc(); srca+=srcstride; dstbase+=dststride; } -#ifdef HAVE_MMX2 - asm volatile(SFENCE:::"memory"); +#ifdef HAVE_MMX asm volatile(EMMS:::"memory"); #endif -#ifdef PROFILE_ME -v2 = read_tsc(); -printf("rd_tsc: %llu\n\t",v2-v1); -#endif +PROFILE_END("vo_draw_alpha_rgb32"); return; } diff --git a/libvo/osd_template.c b/libvo/osd_template.c index fb01444f3e..e32fc6bc03 100644 --- a/libvo/osd_template.c +++ b/libvo/osd_template.c @@ -7,6 +7,8 @@ #include "config.h" #include "osd.h" #include "../mmx_defs.h" +//#define ENABLE_PROFILE +#include "../my_profile.h" void vo_draw_alpha_yv12(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ int y; @@ -76,25 +78,13 @@ void vo_draw_alpha_rgb24(int w,int h, unsigned char* src, unsigned char *srca, i return; } -#ifdef PROFILE_ME -static inline unsigned long long int read_tsc( void ) -{ - unsigned long long int retval; - __asm __volatile ("rdtsc":"=A"(retval)::"memory"); - return retval; -} -#endif - void vo_draw_alpha_rgb32(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ int y; -#ifdef PROFILE_ME -unsigned long long v1,v2; -v1 = read_tsc(); -#endif +PROFILE_START(); for(y=0;y<h;y++){ register int x; #ifdef ARCH_X86 -#ifdef HAVE_MMX2 +#ifdef HAVE_MMX asm volatile( "pxor %%mm7, %%mm7 \n\t" "xorl %%eax, %%eax \n\t" @@ -121,7 +111,7 @@ v1 = read_tsc(); "punpcklbw %%mm2, %%mm2 \n\t" // src AABBCCDD "punpcklbw %%mm2, %%mm2 \n\t" // src AAAABBBB "paddb %%mm2, %%mm0 \n\t" - MOVNTQ" %%mm0, (%0, %%eax, 4) \n\t" + "movq %%mm0, (%0, %%eax, 4) \n\t" "addl $2, %%eax \n\t" "cmpl %3, %%eax \n\t" " jb 1b \n\t" @@ -175,14 +165,10 @@ v1 = read_tsc(); srca+=srcstride; dstbase+=dststride; } -#ifdef HAVE_MMX2 - asm volatile(SFENCE:::"memory"); +#ifdef HAVE_MMX asm volatile(EMMS:::"memory"); #endif -#ifdef PROFILE_ME -v2 = read_tsc(); -printf("rd_tsc: %llu\n\t",v2-v1); -#endif +PROFILE_END("vo_draw_alpha_rgb32"); return; } |