From ab6c65f69307bff2a2d073a94b839619ab64386b Mon Sep 17 00:00:00 2001 From: Brian Foley Date: Mon, 2 Sep 2002 08:48:12 +0000 Subject: [PATCH] altivec build tidyup patch by (Brian Foley ) Originally committed as revision 898 to svn://svn.ffmpeg.org/ffmpeg/trunk --- configure | 30 ++++++++++++++++++++++++++++++ libavcodec/Makefile | 4 ++++ libavcodec/dsputil.c | 4 +--- libavcodec/dsputil.h | 4 +--- libavcodec/ppc/dsputil_altivec.c | 9 --------- libavcodec/ppc/dsputil_altivec.h | 5 +++++ libavcodec/ppc/dsputil_ppc.c | 20 ++++++++++++++++++++ 7 files changed, 61 insertions(+), 15 deletions(-) create mode 100644 libavcodec/ppc/dsputil_altivec.h create mode 100644 libavcodec/ppc/dsputil_ppc.c diff --git a/configure b/configure index 1f94134263f..39342a1c408 100755 --- a/configure +++ b/configure @@ -25,6 +25,7 @@ make="make" strip="strip" cpu=`uname -m` mmx="default" +altivec="default" case "$cpu" in i386|i486|i586|i686|i86pc|BePC) cpu="x86" @@ -161,6 +162,8 @@ for opt do ;; --disable-mmx) mmx="no" ;; + --disable-altivec) altivec="no" + ;; --enable-gprof) gprof="yes" ;; --disable-v4l) v4l="no" @@ -201,6 +204,27 @@ if test $mmx = "default"; then fi fi +# Can only do AltiVec on PowerPC +if test $altivec = "default"; then + if test $cpu = "powerpc"; then + altivec="yes" + else + altivec="no" + fi +fi + +# See does our compiler support Motorola AltiVec C API +if test $altivec = "yes"; then +cat > $TMPC << EOF +int main(void) { + vector signed int v1, v2, v3; + v1 = vec_add(v2,v3); + return 0; +} +EOF +$cc -o $TMPO $TMPC -faltivec 2> /dev/null || altivec="no" +fi + # Checking for CFLAGS if test -z "$CFLAGS"; then CFLAGS="-O3" @@ -324,6 +348,7 @@ echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]" echo " --extra-libs=ELIBS add ELIBS [$ELIBS]" echo " --cpu=CPU force cpu to CPU [$cpu]" echo " --disable-mmx disable mmx usage" +echo " --disable-altivec disable AltiVec usage" echo " --disable-audio-oss disable OSS audio support [default=no]" echo " --disable-v4l disable video4linux grabbing [default=no]" echo " --disable-network disable network support [default=no]" @@ -345,6 +370,7 @@ echo "make $make" echo "CPU $cpu" echo "Big Endian $bigendian" echo "MMX enabled $mmx" +echo "AltiVec enabled $altivec" echo "gprof enabled $gprof" echo "zlib enabled $zlib" echo "mp3lame enabled $mp3lame" @@ -391,6 +417,10 @@ if test "$mmx" = "yes" ; then echo "TARGET_MMX=yes" >> config.mak echo "#define HAVE_MMX 1" >> $TMPH fi +if test "$altivec" = "yes" ; then + echo "TARGET_ALTIVEC=yes" >> config.mak + echo "#define HAVE_ALTIVEC 1" >> $TMPH +fi if test "$gprof" = "yes" ; then echo "TARGET_GPROF=yes" >> config.mak echo "#define HAVE_GPROF 1" >> $TMPH diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 2b226bc44f5..31f5be28a67 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -73,6 +73,10 @@ CFLAGS += -Wa,-mpca56 -finline-limit=8000 -fforce-addr -freduce-all-givs endif ifeq ($(TARGET_ARCH_POWERPC),yes) +OBJS += ppc/dsputil_ppc.o +endif + +ifeq ($(TARGET_ALTIVEC),yes) CFLAGS += -faltivec OBJS += ppc/dsputil_altivec.o endif diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index 9eae404581c..b30d368de9e 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -1340,9 +1340,7 @@ void dsputil_init(void) use_permuted_idct = 0; #endif #ifdef ARCH_POWERPC -#ifdef CONFIG_DARWIN - dsputil_init_altivec(); -#endif + dsputil_init_ppc(); #endif #ifdef SIMPLE_IDCT diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 27f7524049e..8703203269d 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -167,9 +167,7 @@ void dsputil_init_alpha(void); #define emms_c() #define __align8 __attribute__ ((aligned (16))) -#ifdef CONFIG_DARWIN -void dsputil_init_altivec(void); -#endif +void dsputil_init_ppc(void); #else diff --git a/libavcodec/ppc/dsputil_altivec.c b/libavcodec/ppc/dsputil_altivec.c index aab5ea6431e..18d9d27a489 100644 --- a/libavcodec/ppc/dsputil_altivec.c +++ b/libavcodec/ppc/dsputil_altivec.c @@ -127,15 +127,6 @@ int pix_sum_altivec(UINT8 * pix, int line_size) return s; } -void dsputil_init_altivec(void) -{ - if (has_altivec()) { - pix_abs16x16 = pix_abs16x16_altivec; - pix_abs8x8 = pix_abs8x8_altivec; - pix_sum = pix_sum_altivec; - } -} - int has_altivec(void) { #if CONFIG_DARWIN diff --git a/libavcodec/ppc/dsputil_altivec.h b/libavcodec/ppc/dsputil_altivec.h new file mode 100644 index 00000000000..42c373e76b3 --- /dev/null +++ b/libavcodec/ppc/dsputil_altivec.h @@ -0,0 +1,5 @@ +extern int pix_abs16x16_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); +extern int pix_abs8x8_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); +extern int pix_sum_altivec(UINT8 * pix, int line_size); + +extern int has_altivec(void); diff --git a/libavcodec/ppc/dsputil_ppc.c b/libavcodec/ppc/dsputil_ppc.c new file mode 100644 index 00000000000..1311cc61b1f --- /dev/null +++ b/libavcodec/ppc/dsputil_ppc.c @@ -0,0 +1,20 @@ +#include "../../config.h" +#include "../dsputil.h" + +#ifdef HAVE_ALTIVEC +#include "dsputil_altivec.h" +#endif + +void dsputil_init_ppc(void) +{ +#if HAVE_ALTIVEC + if (has_altivec()) { + pix_abs16x16 = pix_abs16x16_altivec; + pix_abs8x8 = pix_abs8x8_altivec; + pix_sum = pix_sum_altivec; + } else +#endif + { + /* Non-AltiVec PPC optimisations here */ + } +} -- 2.39.2