summaryrefslogtreecommitdiffstats
path: root/mp3lib/sr1.c
diff options
context:
space:
mode:
authornick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-06-29 17:55:35 +0000
committernick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-06-29 17:55:35 +0000
commit2ec6762923fea7f28331849b1d394f30dfce1aff (patch)
tree58ff3fcc1ac955a2b07e81d74fe489076e1fe631 /mp3lib/sr1.c
parentbf8a76c06387345aa448b66ce2dff37ba0fcd69e (diff)
downloadmpv-2ec6762923fea7f28331849b1d394f30dfce1aff.tar.bz2
mpv-2ec6762923fea7f28331849b1d394f30dfce1aff.tar.xz
Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1246 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mp3lib/sr1.c')
-rw-r--r--mp3lib/sr1.c81
1 files changed, 72 insertions, 9 deletions
diff --git a/mp3lib/sr1.c b/mp3lib/sr1.c
index 146e12f9f3..7ada065875 100644
--- a/mp3lib/sr1.c
+++ b/mp3lib/sr1.c
@@ -343,6 +343,12 @@ retry1:
static int tables_done_flag=0;
+/* It's hidden from gcc in assembler */
+extern void dct64_MMX( void );
+extern void dct64_MMX_3dnow( void );
+extern void dct64_MMX_3dnowex( void );
+void (*dct64_MMX_func)( void );
+
// Init decoder tables. Call first, once!
#ifdef USE_FAKE_MONO
void MP3_Init(int fakemono){
@@ -351,20 +357,41 @@ void MP3_Init(){
#endif
_CpuID=CpuDetect();
_i586=ipentium();
-#ifdef HAVE_3DNOW
+#ifndef HAVE_MMX
+ _i586 &= 1;
+#endif
_3dnow=a3dnow();
+#ifndef HAVE_3DNOW
+ _3dnow = 0;
#endif
-
- printf( "mp3lib: Processor ID: %x\n",_CpuID );
- printf( "mp3lib: i586 processor %sdetected.\n",(_i586?"":"not ") );
-#ifdef HAVE_3DNOW
- printf( "mp3lib: AMD 3dnow! extension %sdetected.\n",(_3dnow?"":"not ") );
+#ifndef HAVE_3DNOWEX
+ _3dnow &= 1;
+#endif
+ _isse=isse();
+#ifndef HAVE_SSE
+ _isse = 0;
#endif
-#ifdef HAVE_3DNOWEX
- printf( "mp3lib: AMD 3dnow-dsp! extension %sdetected.\n",(_3dnow>1?"":"not ") );
+#ifndef HAVE_SSE2
+ _isse &= 1;
#endif
+ _has_mmx=_i586>1||_3dnow||_isse;
+ printf( "mp3lib: Processor ID: %x\n",_CpuID );
+ if(_i586&&!_3dnow&&!_isse)
+ printf( "mp3lib: Using Pentium%s optimized decore.\n",(_i586>1?"-MMX":""));
+ else
+ if(_isse)
+ /*
+ Note: It's ok, Since K8 will have SSE2 support and will much faster
+ of P4 ;)
+ */
+ printf( "mp3lib: Using SSE%s! optimized decore.\n",(_isse>1?"2":""));
+ else
+ if(_3dnow)
+ printf( "mp3lib: Using AMD 3dnow%s! optimized decore.\n",(_3dnow>1?"-dsp(k7)":""));
- make_decode_tables(outscale);
+/* Use it for any MMX cpu */
+ if(_has_mmx) make_decode_tables_MMX(outscale);
+ else make_decode_tables(outscale);
#ifdef USE_FAKE_MONO
if (fakemono == 1)
fr.synth=synth_1to1_l;
@@ -381,6 +408,42 @@ void MP3_Init(){
init_layer2();
init_layer3(fr.down_sample_sblimit);
tables_done_flag=1;
+
+ dct36_func=dct36;
+ if(_isse)
+ {
+ synth_func=synth_1to1_MMX;
+ dct64_MMX_func=dct64_MMX;
+ }
+ else
+ if ( _3dnow > 1 )
+ {
+ synth_func=synth_1to1_MMX;
+ dct36_func=dct36_3dnowex;
+ dct64_MMX_func=dct64_MMX_3dnowex;
+ }
+ else
+ if ( _3dnow )
+ {
+ synth_func=synth_1to1_MMX;
+ dct36_func=dct36_3dnow;
+ dct64_MMX_func=dct64_MMX_3dnow;
+ }
+ else
+ if ( _i586 > 1)
+ {
+ synth_func=synth_1to1_MMX;
+ dct64_MMX_func=dct64_MMX;
+ }
+ else
+ if ( _i586 )
+ {
+ synth_func=synth_1to1_pent;
+ }
+ else
+ {
+ synth_func = NULL;
+ }
}
#if 0