mirror of https://github.com/mpv-player/mpv
Using cpudetect code instead of d_cpu.s
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4263 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
20e408a606
commit
ff4cca939b
|
@ -9,8 +9,8 @@ OPTFLAGS := $(OPTFLAGS:-O4=-O0)
|
||||||
endif
|
endif
|
||||||
CFLAGS = $(OPTFLAGS) $(EXTRA_INC)
|
CFLAGS = $(OPTFLAGS) $(EXTRA_INC)
|
||||||
ifeq ($(TARGET_ARCH_X86),yes)
|
ifeq ($(TARGET_ARCH_X86),yes)
|
||||||
SRCS += d_cpu.s decode_i586.c
|
SRCS += decode_i586.c
|
||||||
OBJS += d_cpu.o decode_i586.o
|
OBJS += decode_i586.o
|
||||||
ifeq ($(TARGET_MMX),yes)
|
ifeq ($(TARGET_MMX),yes)
|
||||||
CFLAGS += -fomit-frame-pointer
|
CFLAGS += -fomit-frame-pointer
|
||||||
SRCS += decode_MMX.c dct64_MMX.c tabinit_MMX.c
|
SRCS += decode_MMX.c dct64_MMX.c tabinit_MMX.c
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// Cpu function detect by Pontscho/fresh!mindworkz
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef __MY_CPUIDENT
|
|
||||||
#define __MY_CPUIDENT
|
|
||||||
|
|
||||||
unsigned int _CpuID;
|
|
||||||
unsigned int _i586;
|
|
||||||
unsigned int _3dnow;
|
|
||||||
unsigned int _isse;
|
|
||||||
unsigned int _has_mmx;
|
|
||||||
|
|
||||||
extern unsigned long CpuDetect( void );
|
|
||||||
extern unsigned long ipentium( void );
|
|
||||||
extern unsigned long isse( void );
|
|
||||||
extern unsigned long a3dnow( void );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
156
mp3lib/d_cpu.s
156
mp3lib/d_cpu.s
|
@ -1,156 +0,0 @@
|
||||||
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
/ Cpu function detect by Pontscho/fresh!mindworkz (c) 2000 - 2000
|
|
||||||
/ 3dnow-dsp detection by Nick Kurshev (C) 2001
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
.globl CpuDetect
|
|
||||||
.globl ipentium
|
|
||||||
.globl a3dnow
|
|
||||||
.globl isse
|
|
||||||
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
/ in C: unsigned long CpuDetect( void );
|
|
||||||
/ return: cpu ident number.
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
CpuDetect:
|
|
||||||
pushl %ebx
|
|
||||||
pushl %ecx
|
|
||||||
pushl %edx
|
|
||||||
|
|
||||||
pushfl
|
|
||||||
popl %eax
|
|
||||||
movl %eax,%ebx
|
|
||||||
xorl $0x00200000,%eax
|
|
||||||
pushl %eax
|
|
||||||
popfl
|
|
||||||
pushfl
|
|
||||||
popl %eax
|
|
||||||
cmpl %eax,%ebx
|
|
||||||
jz no_cpuid_cpudetect
|
|
||||||
|
|
||||||
movl $1,%eax
|
|
||||||
cpuid
|
|
||||||
|
|
||||||
jmp exit_cpudetect
|
|
||||||
no_cpuid_cpudetect:
|
|
||||||
xorl %eax,%eax
|
|
||||||
exit_cpudetect:
|
|
||||||
|
|
||||||
popl %edx
|
|
||||||
popl %ecx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
/ in C: unsigled long ipentium( void );
|
|
||||||
/ return: 0 if this processor i386 or i486
|
|
||||||
/ 1 otherwise
|
|
||||||
/ 3 if this cpu supports mmx
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
ipentium:
|
|
||||||
pushl %ebx
|
|
||||||
pushl %ecx
|
|
||||||
pushl %edx
|
|
||||||
pushfl
|
|
||||||
popl %eax
|
|
||||||
movl %eax,%ebx
|
|
||||||
xorl $0x00200000,%eax
|
|
||||||
pushl %eax
|
|
||||||
popfl
|
|
||||||
pushfl
|
|
||||||
popl %eax
|
|
||||||
cmpl %eax,%ebx
|
|
||||||
jz no_cpuid
|
|
||||||
movl $1,%eax
|
|
||||||
cpuid
|
|
||||||
movl %eax, %ecx
|
|
||||||
xorl %eax, %eax
|
|
||||||
shrl $8,%ecx
|
|
||||||
cmpl $5,%ecx
|
|
||||||
jb exit
|
|
||||||
incl %eax
|
|
||||||
test $0x00800000, %edx
|
|
||||||
jz exit
|
|
||||||
orl $2, %eax
|
|
||||||
jmp exit
|
|
||||||
no_cpuid:
|
|
||||||
xorl %eax,%eax
|
|
||||||
exit:
|
|
||||||
popl %edx
|
|
||||||
popl %ecx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
/ in C: unsigned long a3dnow( void );
|
|
||||||
/ return: 0 if this processor does not support 3dnow!
|
|
||||||
/ 1 otherwise
|
|
||||||
/ 3 if this cpu supports 3dnow-dsp extension
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
a3dnow:
|
|
||||||
pushl %ebx
|
|
||||||
pushl %edx
|
|
||||||
pushl %ecx
|
|
||||||
|
|
||||||
|
|
||||||
call ipentium
|
|
||||||
testl %eax,%eax
|
|
||||||
jz exit2
|
|
||||||
|
|
||||||
movl $0x80000000,%eax
|
|
||||||
cpuid
|
|
||||||
cmpl $0x80000000,%eax
|
|
||||||
jbe no3dnow
|
|
||||||
movl $0x80000001,%eax
|
|
||||||
cpuid
|
|
||||||
xorl %eax,%eax
|
|
||||||
testl $0x80000000,%edx
|
|
||||||
jz no3dnow
|
|
||||||
/// eax=1 - K6 3DNow!
|
|
||||||
inc %eax
|
|
||||||
testl $0x40000000,%edx
|
|
||||||
jz exit2
|
|
||||||
/// eax=2 - K7 3DNowEx!
|
|
||||||
orl $2, %eax
|
|
||||||
jmp exit2
|
|
||||||
no3dnow:
|
|
||||||
xorl %eax,%eax
|
|
||||||
exit2:
|
|
||||||
|
|
||||||
popl %ecx
|
|
||||||
popl %edx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
/ in C: unsigned long isse( void );
|
|
||||||
/ return: 0 if this processor does not support sse
|
|
||||||
/ 1 otherwise
|
|
||||||
/ 3 if this cpu supports sse2 extension
|
|
||||||
/ ---------------------------------------------------------------------------
|
|
||||||
isse:
|
|
||||||
pushl %ebx
|
|
||||||
pushl %edx
|
|
||||||
pushl %ecx
|
|
||||||
|
|
||||||
call ipentium
|
|
||||||
testl %eax,%eax
|
|
||||||
jz exit3
|
|
||||||
|
|
||||||
movl $1,%eax
|
|
||||||
cpuid
|
|
||||||
xorl %eax, %eax
|
|
||||||
testl $0x02000000,%edx
|
|
||||||
jz exit3
|
|
||||||
incl %eax
|
|
||||||
testl $0x04000000,%edx
|
|
||||||
jz exit3
|
|
||||||
orl $2, %eax
|
|
||||||
exit3:
|
|
||||||
popl %ecx
|
|
||||||
popl %edx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
180
mp3lib/sr1.c
180
mp3lib/sr1.c
|
@ -25,9 +25,15 @@
|
||||||
#include "huffman.h"
|
#include "huffman.h"
|
||||||
#include "mp3.h"
|
#include "mp3.h"
|
||||||
#include "bswap.h"
|
#include "bswap.h"
|
||||||
#include "d_cpu.h"
|
#include "../cpudetect.h"
|
||||||
|
#include "../liba52/mm_accel.h"
|
||||||
|
|
||||||
#include "fastmemcpy.h"
|
#include "fastmemcpy.h"
|
||||||
|
|
||||||
|
#ifdef ARCH_X86
|
||||||
|
#define CAN_COMPILE_X86_ASM
|
||||||
|
#endif
|
||||||
|
|
||||||
//static FILE* mp3_file=NULL;
|
//static FILE* mp3_file=NULL;
|
||||||
|
|
||||||
int MP3_frames=0;
|
int MP3_frames=0;
|
||||||
|
@ -354,6 +360,8 @@ retry1:
|
||||||
return frames;
|
return frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int _has_mmx = 0;
|
||||||
|
|
||||||
#include "layer2.c"
|
#include "layer2.c"
|
||||||
#include "layer3.c"
|
#include "layer3.c"
|
||||||
|
|
||||||
|
@ -378,12 +386,19 @@ void MP3_Init(int fakemono){
|
||||||
#else
|
#else
|
||||||
void MP3_Init(){
|
void MP3_Init(){
|
||||||
#endif
|
#endif
|
||||||
|
int accel=0;
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef RUNTIME_CPUDETECT
|
|
||||||
#ifdef CAN_COMPILE_X86_ASM
|
#ifdef CAN_COMPILE_X86_ASM
|
||||||
if (gCpuCaps.hasMMX)
|
GetCpuCaps(&gCpuCaps);
|
||||||
|
if(gCpuCaps.hasMMX) accel |= MM_ACCEL_X86_MMX;
|
||||||
|
if(gCpuCaps.hasMMX2) accel |= MM_ACCEL_X86_MMXEXT;
|
||||||
|
if(gCpuCaps.hasSSE) accel |= MM_ACCEL_X86_SSE;
|
||||||
|
if(gCpuCaps.has3DNow) accel |= MM_ACCEL_X86_3DNOW;
|
||||||
|
if(gCpuCaps.has3DNowExt) accel |= MM_ACCEL_X86_3DNOWEXT;
|
||||||
|
|
||||||
|
if (accel & MM_ACCEL_X86_MMX)
|
||||||
{
|
{
|
||||||
|
_has_mmx = 1;
|
||||||
make_decode_tables_MMX(outscale);
|
make_decode_tables_MMX(outscale);
|
||||||
printf("mp3lib: made decode tables with MMX optimization\n");
|
printf("mp3lib: made decode tables with MMX optimization\n");
|
||||||
}
|
}
|
||||||
|
@ -392,14 +407,6 @@ void MP3_Init(){
|
||||||
#else
|
#else
|
||||||
make_decode_tables(outscale);
|
make_decode_tables(outscale);
|
||||||
#endif
|
#endif
|
||||||
#else /* RUNTIME_CPUDETECT */
|
|
||||||
#ifdef HAVE_MMX
|
|
||||||
make_decode_tables_MMX(outscale);
|
|
||||||
printf("mp3lib: made decode tables with MMX optimization\n");
|
|
||||||
#else
|
|
||||||
make_decode_tables(outscale);
|
|
||||||
#endif
|
|
||||||
#endif /* RUNTIME_CPUDTECT */
|
|
||||||
|
|
||||||
#ifdef USE_FAKE_MONO
|
#ifdef USE_FAKE_MONO
|
||||||
if (fakemono == 1)
|
if (fakemono == 1)
|
||||||
|
@ -421,10 +428,9 @@ void MP3_Init(){
|
||||||
dct36_func = dct36;
|
dct36_func = dct36;
|
||||||
printf("init layer2&3 finished, tables done\n");
|
printf("init layer2&3 finished, tables done\n");
|
||||||
|
|
||||||
#ifdef RUNTIME_CPUDETECT
|
|
||||||
#ifdef CAN_COMPILE_X86_ASM
|
#ifdef CAN_COMPILE_X86_ASM
|
||||||
#if 0
|
#if 0
|
||||||
if(gCpuCaps.hasSSE)
|
if(accel & MM_ACCEL_X86_SSE)
|
||||||
{
|
{
|
||||||
/* SSE version is buggy */
|
/* SSE version is buggy */
|
||||||
synth_func = synth_1to1_MMX;
|
synth_func = synth_1to1_MMX;
|
||||||
|
@ -433,24 +439,24 @@ void MP3_Init(){
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (gCpuCaps.has3DNowExt)
|
if (accel & MM_ACCEL_X86_3DNOWEXT)
|
||||||
{
|
{
|
||||||
synth_func = synth_1to1_MMX;
|
synth_func=synth_1to1_MMX;
|
||||||
dct36_func = dct36_3dnowex;
|
dct36_func=dct36_3dnowex;
|
||||||
dct64_MMX_func = dct64_MMX_3dnowex;
|
dct64_MMX_func=dct64_MMX_3dnowex;
|
||||||
printf("mp3lib: using 3DNow!Ex optimized decore!\n");
|
printf("mp3lib: using 3DNow!Ex optimized decore!\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (gCpuCaps.has3DNow)
|
if (accel & MM_ACCEL_X86_3DNOW)
|
||||||
{
|
{
|
||||||
synth_func = synth_1to1_MMX;
|
synth_func = synth_1to1_MMX;
|
||||||
dct36_func = dct36_3dnow;
|
dct36_func = dct36_3dnow;
|
||||||
dct64_MMX_func = dct64_MMX_3dnow;
|
dct64_MMX_func = dct64_MMX_3dnow;
|
||||||
printf("mp3lib: using 3DNow! optimized decore!\n");
|
printf("mp3lib: using 3DNow! optimized decore!\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (gCpuCaps.hasMMX)
|
if (accel & MM_ACCEL_X86_MMX)
|
||||||
{
|
{
|
||||||
synth_func = synth_1to1_MMX;
|
synth_func = synth_1to1_MMX;
|
||||||
dct64_MMX_func = dct64_MMX;
|
dct64_MMX_func = dct64_MMX;
|
||||||
printf("mp3lib: using MMX optimized decore!\n");
|
printf("mp3lib: using MMX optimized decore!\n");
|
||||||
|
@ -470,88 +476,7 @@ void MP3_Init(){
|
||||||
synth_func = NULL;
|
synth_func = NULL;
|
||||||
printf("mp3lib: using generic decore!\n");
|
printf("mp3lib: using generic decore!\n");
|
||||||
#endif
|
#endif
|
||||||
#else /* RUNTIME_CPUDETECT */
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* SSE version is buggy */
|
|
||||||
synth_func = synth_1to1_MMX;
|
|
||||||
dct64_MMX_func = dct64_MMX_sse;
|
|
||||||
printf("mp3lib: using SSE optimized decore!\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_3DNOWEX
|
|
||||||
synth_func = synth_1to1_MMX;
|
|
||||||
dct36_func = dct36_3dnowex;
|
|
||||||
dct64_MMX_func = dct64_MMX_3dnowex;
|
|
||||||
printf("mp3lib: using 3DNow!Ex optimized decore!\n");
|
|
||||||
#elif defined(HAVE_3DNOW)
|
|
||||||
synth_func = synth_1to1_MMX;
|
|
||||||
dct36_func = dct36_3dnow;
|
|
||||||
dct64_MMX_func = dct64_MMX_3dnow;
|
|
||||||
printf("mp3lib: using 3DNow! optimized decore!\n");
|
|
||||||
#elif defined(HAVE_MMX)
|
|
||||||
synth_func = synth_1to1_MMX;
|
|
||||||
dct64_MMX_func = dct64_MMX;
|
|
||||||
printf("mp3lib: using MMX optimized decore!\n");
|
|
||||||
#elif defined(__CPU__ > 586)
|
|
||||||
synth_func = synth_1to1_pent;
|
|
||||||
printf("mp3lib: using Pentium optimized decore!\n");
|
|
||||||
#else
|
|
||||||
synth_func = NULL; /* use default c version */
|
|
||||||
printf("mp3lib: using generic decore!\n");
|
|
||||||
#endif
|
|
||||||
#endif /* RUNTIME_CPUDETECT */
|
|
||||||
|
|
||||||
#else
|
|
||||||
#ifdef ARCH_X86
|
|
||||||
_CpuID=CpuDetect();
|
|
||||||
_i586=ipentium();
|
|
||||||
#ifndef HAVE_MMX
|
|
||||||
_i586 &= 1;
|
|
||||||
#endif
|
|
||||||
_3dnow=a3dnow();
|
|
||||||
#ifndef HAVE_3DNOW
|
|
||||||
_3dnow = 0;
|
|
||||||
#endif
|
|
||||||
#ifndef HAVE_3DNOWEX
|
|
||||||
_3dnow &= 1;
|
|
||||||
#endif
|
|
||||||
_isse=isse();
|
|
||||||
#ifndef HAVE_SSE
|
|
||||||
_isse = 0;
|
|
||||||
#endif
|
|
||||||
#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":""));
|
|
||||||
printf( "mp3lib: Using Pentium%s optimized decore.\n",(_i586>1?"-MMX":""));
|
|
||||||
else
|
|
||||||
if(_3dnow)
|
|
||||||
printf( "mp3lib: Using AMD 3dnow%s! optimized decore.\n",(_3dnow>1?"-dsp(k7)":""));
|
|
||||||
#else
|
|
||||||
_CpuID = _i586 = _3dnow = _isse = _has_mmx = 0;
|
|
||||||
printf( "mp3lib: Using generic decore.\n");
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MMX
|
|
||||||
/* Use it for any MMX cpu */
|
|
||||||
if(_has_mmx)
|
|
||||||
{
|
|
||||||
make_decode_tables_MMX(outscale);
|
|
||||||
printf("mp3lib: made decode tables with MMX optimization\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
make_decode_tables(outscale);
|
|
||||||
#ifdef USE_FAKE_MONO
|
#ifdef USE_FAKE_MONO
|
||||||
if (fakemono == 1)
|
if (fakemono == 1)
|
||||||
fr.synth=synth_1to1_l;
|
fr.synth=synth_1to1_l;
|
||||||
|
@ -568,53 +493,6 @@ void MP3_Init(){
|
||||||
init_layer2();
|
init_layer2();
|
||||||
init_layer3(fr.down_sample_sblimit);
|
init_layer3(fr.down_sample_sblimit);
|
||||||
tables_done_flag=1;
|
tables_done_flag=1;
|
||||||
|
|
||||||
dct36_func=dct36;
|
|
||||||
/*#ifdef HAVE_SSE
|
|
||||||
if(_isse)
|
|
||||||
{
|
|
||||||
synth_func=synth_1to1_MMX;
|
|
||||||
dct64_MMX_func=dct64_MMX_sse;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif*/
|
|
||||||
#ifdef HAVE_3DNOWEX
|
|
||||||
if ( _3dnow > 1 )
|
|
||||||
{
|
|
||||||
synth_func=synth_1to1_MMX;
|
|
||||||
dct36_func=dct36_3dnowex;
|
|
||||||
dct64_MMX_func=dct64_MMX_3dnowex;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_3DNOW
|
|
||||||
if ( _3dnow )
|
|
||||||
{
|
|
||||||
synth_func=synth_1to1_MMX;
|
|
||||||
dct36_func=dct36_3dnow;
|
|
||||||
dct64_MMX_func=dct64_MMX_3dnow;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MMX
|
|
||||||
if ( _i586 > 1)
|
|
||||||
{
|
|
||||||
synth_func=synth_1to1_MMX;
|
|
||||||
dct64_MMX_func=dct64_MMX;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
#ifdef ARCH_X86
|
|
||||||
if ( _i586 )
|
|
||||||
{
|
|
||||||
synth_func=synth_1to1_pent;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
synth_func = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
Loading…
Reference in New Issue