Mercurial > mplayer.hg
view cpudetect.h @ 22830:1d4a455af876
Set CONFIG_EBP_AVAILABLE, CONFIG_EBX_AVAILABLE for FFmpeg
After FFmpeg r8549 these variables are used in libavcodec to determine
whether x86 inline asm sections using these registers or requiring a
certain total number of total free registers are enabled. Because they
were not set by MPlayer configure some H264 decoding optimizations were
disabled after that FFmpeg version. This change sets the variables to
true unconditionally which should restore previous behavior. Adding
proper detection is left for later.
EBX should always be available because internal libavcodec is never
compiled with PIC. However if -fomit-frame-pointer is not used because
of --enable-debug then EBP is not available. Thus proper detection would
be preferable to fix compilation with --enable-debug on x86. Currently
the variables are also set on non-x86 which should be harmless even if
somewhat ugly.
author | uau |
---|---|
date | Fri, 30 Mar 2007 22:57:04 +0000 |
parents | 739849dfb699 |
children | 3658234e099b |
line wrap: on
line source
#ifndef CPUDETECT_H #define CPUDETECT_H #define CPUTYPE_I386 3 #define CPUTYPE_I486 4 #define CPUTYPE_I586 5 #define CPUTYPE_I686 6 #ifdef ARCH_X86_64 # define REGa rax # define REGb rbx # define REGBP rbp # define REGSP rsp # define REG_a "rax" # define REG_b "rbx" # define REG_c "rcx" # define REG_d "rdx" # define REG_S "rsi" # define REG_D "rdi" # define REG_SP "rsp" # define REG_BP "rbp" #else # define REGa eax # define REGb ebx # define REGBP ebp # define REGSP esp # define REG_a "eax" # define REG_b "ebx" # define REG_c "ecx" # define REG_d "edx" # define REG_S "esi" # define REG_D "edi" # define REG_SP "esp" # define REG_BP "ebp" #endif typedef struct cpucaps_s { int cpuType; int cpuModel; int cpuStepping; int hasMMX; int hasMMX2; int has3DNow; int has3DNowExt; int hasSSE; int hasSSE2; int isX86; unsigned cl_size; /* size of cache line */ int hasAltiVec; int hasTSC; } CpuCaps; extern CpuCaps gCpuCaps; void GetCpuCaps(CpuCaps *caps); /* returned value is malloc()'ed so free() it after use */ char *GetCpuFriendlyName(unsigned int regs[], unsigned int regs2[]); #endif /* !CPUDETECT_H */