altivec build tidyup patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
authorBrian Foley <bfoley@compsoc.nuigalway.ie>
Mon, 2 Sep 2002 08:48:12 +0000 (08:48 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 2 Sep 2002 08:48:12 +0000 (08:48 +0000)
Originally committed as revision 898 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure
libavcodec/Makefile
libavcodec/dsputil.c
libavcodec/dsputil.h
libavcodec/ppc/dsputil_altivec.c
libavcodec/ppc/dsputil_altivec.h [new file with mode: 0644]
libavcodec/ppc/dsputil_ppc.c [new file with mode: 0644]

index 1f94134..39342a1 100755 (executable)
--- 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
index 2b226bc..31f5be2 100644 (file)
@@ -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
index 9eae404..b30d368 100644 (file)
@@ -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
index 27f7524..8703203 100644 (file)
@@ -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
 
index aab5ea6..18d9d27 100644 (file)
@@ -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 (file)
index 0000000..42c373e
--- /dev/null
@@ -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 (file)
index 0000000..1311cc6
--- /dev/null
@@ -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 */
+    }
+}