[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[135] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2010-01-29 17:57:36
|
Revision: 135 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=135&view=rev Author: nickols_k Date: 2010-01-29 17:57:20 +0000 (Fri, 29 Jan 2010) Log Message: ----------- gcc-related code-generation fixed + gcc-44 related workaround Modified Paths: -------------- functions mplayerxp/configure mplayerxp/cpudetect.c mplayerxp/libvo/osd.c mplayerxp/postproc/dsp.c mplayerxp/postproc/dsp_accel.h mplayerxp/pvector/pvector_int_x86.h Modified: functions =================================================================== --- functions 2010-01-28 19:09:03 UTC (rev 134) +++ functions 2010-01-29 17:57:20 UTC (rev 135) @@ -321,31 +321,40 @@ check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC } -check_asm(){ +test_asm(){ log check_asm "$@" name="$1" asm="$2" shift 2 - check_cc "$@" <<EOF && enable $name || disable $name + check_cc "$@" <<EOF && return 0 || return 1 int foo(void){ asm volatile($asm); } EOF } +check_asm(){ + name="$1" + test_asm "$@" && enable $name || disable $name +} + check_ld(){ log check_ld "$@" check_cc || return check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs } -check_cflags(){ +test_cflags(){ log check_cflags "$@" - check_cc "$@" <<EOF && add_cflags "$@" + check_cc "$@" <<EOF && return 0 || return 1 int x; EOF } +check_cflags(){ + test_cflags "$@" && add_cflags "$@" +} + is_in_cflags(){ value=$1 shift @@ -356,15 +365,19 @@ return 1 } -check_ldflags(){ +test_ldflags(){ log check_ldflags "$@" - check_ld "$@" <<EOF && add_ldflags "$@" + check_ld "$@" <<EOF && return 0 || return 1 int main(void){ return 0; } EOF } +check_ldflags(){ + test_ldflags "$@" && add_ldflags "$@" +} + check_header(){ log check_header "$@" header=$1 @@ -877,6 +890,13 @@ } # Display error message, flushes tempfile, exit +warning() { + log "Warning: $@" + echo + echo "Warning: $@" >&2 + echo >&2 +} + die() { log "Error: $@" echo @@ -1128,8 +1148,13 @@ fi # agree with user-defined architecture/tuning here +if enabled gcc44_workaround ; then +is_in_cflags "-march" || check_cflags "-march=native" +is_in_cflags "-mtune" || check_cflags "-mtune=native" +else is_in_cflags "-march" || check_cflags $locarch is_in_cflags "-mtune" || check_cflags "-mtune=generic" +fi if enabled profile || test $debug -gt 2 || enabled gcov; then add_cflags "-O2 -fno-builtin" if enabled profile ; then @@ -1145,7 +1170,7 @@ add_extralibs "-lgcov" fi else - add_cflags "-O3" + is_in_cflags "-O3" || add_cflags "-O3" mips || check_cflags "-pipe" x86_32 && check_cflags "-fomit-frame-pointer" # -fomit-frame-pointer is not needed for x86_64 @@ -1155,12 +1180,14 @@ is_in_cflags "-mfancy-math-387" || check_cflags "-mfancy-math-387" is_in_cflags "-fno-math-errno" || check_cflags "-fno-math-errno" is_in_cflags "-fno-signed-zeros" || check_cflags "-fno-signed-zeros" -# depend on compiler version -#check_cflags "-fno-tree-vectorize" +# it seems that -mtune=generic doesn't prevent generation of SSE4 opcodes for i686 arch +check_cflags "-fno-tree-vectorize" +check_cflags "-fno-tree-vect-loop-version" +check_cflags "-fno-vect-cost-model" disable mmx_test x86 && enable mmx_test - +enabled gcc44_workaround && disable mmx_test if enabled mmx_test ; then check_cflags -mmmx check_cflags -m3dnow Modified: mplayerxp/configure =================================================================== --- mplayerxp/configure 2010-01-28 19:09:03 UTC (rev 134) +++ mplayerxp/configure 2010-01-29 17:57:20 UTC (rev 135) @@ -238,6 +238,7 @@ add_ldflags "-L/usr/bin" fi +disable gcc44_workaround # Checking CC version... # gcc-3.0 merges optimizations coming from egcs, pgcc, agcc, ... echocheck "$cc version" @@ -247,51 +248,16 @@ cc_version=`$cc -dumpversion` cc_v=$cc_version case $cc_version in - '') - cc_version="v. ?.??, bad" - cc_verc_fail=yes + 4.[4-9]|4.[4-9].[0-9]) + enable gcc44_workaround ;; - 3.2|3.2.[0-2]) - cc_version="$cc_version, bad" - cc_verc_fail=yes + 3.[3-9]|3.[2-9].[3-9]|4.[0-3]|4.[0-3].[0-9]) ;; - 3.[2-9]|3.[2-9].[0-9]|4.[0-9]|4.[0-9].[0-9]) - cc_version="$cc_version, ok" - cc_verc_fail=no - ;; *) - cc_version="$cc_version, bad" - cc_verc_fail=yes + die "*** Bad gcc-$cc_version: Please upgrade C compiler at least to gcc-3.2.3+! ***" ;; esac echores "$cc_version" - test "$cc_verc_fail" = yes && disable fastcall - if enabled fastcall ; then - echocheck "__fastcall optimization abilities" - case $cc_v in - '') - fastcall=no - ;; - # avoid fastcall usage on gcc-2.95.2 and older - 3.[2-9]|3.[2-9].[0-9]|4.[0-9].[0-9]) - fastcall=yes - ;; - *) - fastcall=no - ;; - esac - echores "$fastcall" - fi - - if test "$cc_verc_fail" = yes ; then - cat <<EOF - -*** Please upgrade C compiler to gcc-3.2.3+ version! *** -EOF - die "Bad gcc version" - fi -# --- - # now that we know what compiler should be used for compilation, try to find # out which assembler is used by the $cc compiler if cygwin ; then @@ -1012,6 +978,13 @@ EOF fi +if enabled gcc44_workaround ; then +warning "*** gcc-4.4.x sometime generates AVX opcodes for -mavx key ignoring -fno-tree-vectorize option. +That breaks current logic of mplayerxp configuring. +It is stronly recommended to use this version of gcc for home purposes only! +Please don't use this compiler to produce redistributable executables of mplayerxp!!! ***" +fi + # Last move: rmtmps Modified: mplayerxp/cpudetect.c =================================================================== --- mplayerxp/cpudetect.c 2010-01-28 19:09:03 UTC (rev 134) +++ mplayerxp/cpudetect.c 2010-01-29 17:57:20 UTC (rev 135) @@ -155,44 +155,6 @@ gCpuCaps.hasAVX, gCpuCaps.hasFMA ); - - /* FIXME: Does SSE2 need more OS support, too? */ -#if defined(__linux__) || defined(__FreeBSD__) - if (caps->hasSSE) - check_os_katmai_support(); - if (!caps->hasSSE) - caps->hasSSE2 = 0; -#else - caps->hasSSE=0; - caps->hasSSE2 = 0; -#endif - -#ifndef ARCH_X86_64 -#ifndef CAN_COMPILE_MMX - if(caps->hasMMX) MSG_WARN("MMX supported but disabled\n"); - caps->hasMMX=0; -#endif -#ifndef CAN_COMPILE_MMX2 - if(caps->hasMMX2) MSG_WARN("MMX2 supported but disabled\n"); - caps->hasMMX2=0; -#endif -#ifndef CAN_COMPILE_SSE - if(caps->hasSSE) MSG_WARN("SSE supported but disabled\n"); - caps->hasSSE=0; -#endif -#ifndef CAN_COMPILE_SSE2 - if(caps->hasSSE2) MSG_WARN("SSE2 supported but disabled\n"); - caps->hasSSE2=0; -#endif -#ifndef CAN_COMPILE_3DNOW - if(caps->has3DNow) MSG_WARN("3DNow supported but disabled\n"); - caps->has3DNow=0; -#endif -#ifndef CAN_COMPILE_3DNOW2 - if(caps->has3DNowExt) MSG_WARN("3DNowExt supported but disabled\n"); - caps->has3DNowExt=0; -#endif -#endif } Modified: mplayerxp/libvo/osd.c =================================================================== --- mplayerxp/libvo/osd.c 2010-01-28 19:09:03 UTC (rev 134) +++ mplayerxp/libvo/osd.c 2010-01-29 17:57:20 UTC (rev 135) @@ -115,6 +115,17 @@ #endif /*FIXME the optimized stuff is a lie for 15/16bpp as they arent optimized yet*/ // ordered per speed fasterst first +#ifdef __AVX__ +if(gCpuCaps.hasSSE41) +{ + MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); + vo_draw_alpha_yv12_ptr=vo_draw_alpha_yv12_AVX; + vo_draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_AVX; + vo_draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_AVX; + vo_draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_AVX; +} +else +#endif #ifdef __SSE4_1__ if(gCpuCaps.hasSSE41) { Modified: mplayerxp/postproc/dsp.c =================================================================== --- mplayerxp/postproc/dsp.c 2010-01-28 19:09:03 UTC (rev 134) +++ mplayerxp/postproc/dsp.c 2010-01-29 17:57:20 UTC (rev 135) @@ -666,6 +666,10 @@ static void __FASTCALL__ init_change_bps(const void* in, void* out, unsigned len, unsigned inbps, unsigned outbps,int final) { +#ifdef __AVX__ + if(gCpuCaps.hasAVX) change_bps = change_bps_AVX; + else +#endif #ifdef __SSE4_1__ if(gCpuCaps.hasSSE41) change_bps = change_bps_SSE4; else @@ -683,10 +687,6 @@ if(gCpuCaps.hasMMX2) change_bps = change_bps_SSE; else #endif -#ifdef __MMX__ - if(gCpuCaps.hasMMX) change_bps = change_bps_MMX; - else -#endif #endif /* __x86_64__ */ change_bps = change_bps_c; (*change_bps)(in,out,len,inbps,outbps,final); @@ -779,10 +779,6 @@ if(gCpuCaps.hasMMX2) FIR_i16 = FIR_i16_SSE; else #endif -#ifdef __MMX__ - if(gCpuCaps.hasMMX) FIR_i16 = FIR_i16_MMX; - else -#endif #endif /*__x86_64__*/ FIR_i16 = FIR_i16_c; return (*FIR_i16)(x,w); Modified: mplayerxp/postproc/dsp_accel.h =================================================================== --- mplayerxp/postproc/dsp_accel.h 2010-01-28 19:09:03 UTC (rev 134) +++ mplayerxp/postproc/dsp_accel.h 2010-01-29 17:57:20 UTC (rev 135) @@ -276,7 +276,7 @@ #endif static int32_t __FASTCALL__ PVECTOR_RENAME(FIR_i16)(int16_t *x,int16_t *w) { -#ifdef OPTIMIZE_MMX +#ifdef OPTIMIZE_SSE __m64 mm[8]; mm[0] = _m_load(&w[0]); mm[1] = _m_load(&w[4]); @@ -291,12 +291,8 @@ mm[0] = _m_paddd(mm[4],mm[5]); mm[1] = _m_paddd(mm[6],mm[7]); mm[2] = _m_paddd(mm[0],mm[1]); -#ifdef OPTIMIZE_SSE mm[0] = _m_pshufw(mm[2],0xFE); -#else - mm[0] = mm[2]; - mm[0] = _m_psrlqi(mm[0],32); -#endif + mm[0] = _m_paddd(mm[0],mm[2]); mm[0] = _m_psrldi(mm[0],16); return _mm_cvtsi64_si32(mm[0]); Modified: mplayerxp/pvector/pvector_int_x86.h =================================================================== --- mplayerxp/pvector/pvector_int_x86.h 2010-01-28 19:09:03 UTC (rev 134) +++ mplayerxp/pvector/pvector_int_x86.h 2010-01-29 17:57:20 UTC (rev 135) @@ -2,10 +2,10 @@ pvector_int_x86.h */ -//#if defined( OPTIMIZE_AVX ) -//#define _VEC(a) a ## _AVX -//#include <immintrin.h> -#if defined(OPTIMIZE_AES) +#if defined( OPTIMIZE_AVX ) +#define _VEC(a) a ## _AVX +#include <immintrin.h> +#elif defined(OPTIMIZE_AES) #include <wmmintrin.h> #elif defined (OPTIMIZE_SSE4) #include <smmintrin.h> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |