[Ffmpeg-cvslog] r6749 - in trunk: configure libavcodec/cabac.h libavutil/common.h libavutil/internal.h

gpoirier subversion
Fri Oct 20 19:53:20 CEST 2006


Author: gpoirier
Date: Fri Oct 20 19:53:19 2006
New Revision: 6749

Modified:
   trunk/configure
   trunk/libavcodec/cabac.h
   trunk/libavutil/common.h
   trunk/libavutil/internal.h

Log:
Protect code that uses CMOV instructions with HAVE_CMOV,
Make configure set CMOV_IS_FAST on arches on which cmov has a low latency
(typically non-Netburst based processor)


Modified: trunk/configure
==============================================================================
--- trunk/configure	(original)
+++ trunk/configure	Fri Oct 20 19:53:19 2006
@@ -347,6 +347,7 @@
 powerpc_perf="no"
 mmx="default"
 cmov="no"
+cmov_is_fast="no"
 armv5te="default"
 iwmmxt="default"
 altivec="default"
@@ -1107,9 +1108,16 @@
             cmov="no"
         ;;
         # targets that do support conditional mov (cmov)
-        i686|pentiumpro|pentium[234]|pentium-m|prescott|athlon|athlon-tbird|athlon-4|athlon-[mx]p|nocona|athlon64|k8|opteron|athlon-fx)
+        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx)
             add_cflags "-march=$cpu"
             cmov="yes"
+            cmov_is_fast="yes"
+        ;;
+        # targets that do support conditional mov but on which it's slow
+        pentium4|prescott|nocona)
+            add_cflags "-march=$cpu"
+            cmov="yes"
+            cmov_is_fast="no"
         ;;
         sparc64)
             add_cflags "-mcpu=v9"
@@ -1559,6 +1567,7 @@
 if test $arch = "x86" -o $arch = "x86_64"; then
     echo "MMX enabled      $mmx"
     echo "CMOV enabled     $cmov"
+    echo "CMOV is fast     $cmov_is_fast"
 fi
 if test $arch = "armv4l"; then
     echo "ARMv5TE enabled  $armv5te"
@@ -1745,6 +1754,10 @@
   echo "TARGET_CMOV=yes" >> config.mak
   echo "#define HAVE_CMOV 1" >> $TMPH
 fi
+if test "$cmov_is_fast" = "yes" ; then
+  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
+  echo "#define CMOV_IS_FAST 1" >> $TMPH
+fi
 if test "$armv5te" = "yes" ; then
   echo "TARGET_ARMV5TE=yes" >> config.mak
   echo "#define HAVE_ARMV5TE 1" >> $TMPH

Modified: trunk/libavcodec/cabac.h
==============================================================================
--- trunk/libavcodec/cabac.h	(original)
+++ trunk/libavcodec/cabac.h	Fri Oct 20 19:53:19 2006
@@ -32,7 +32,6 @@
 #define CABAC_BITS 16
 #define CABAC_MASK ((1<<CABAC_BITS)-1)
 #define BRANCHLESS_CABAC_DECODER 1
-#define CMOV_IS_FAST 1
 //#define ARCH_X86_DISABLED 1
 
 typedef struct CABACContext{
@@ -454,7 +453,7 @@
 #else /* BRANCHLESS_CABAC_DECODER */
 
 
-#if (defined CMOV_IS_FAST  && __CPU__ >= 686)
+#if defined CMOV_IS_FAST
 #define BRANCHLESS_GET_CABAC_UPDATE(ret, cabac, statep, low, lowword, range, tmp, tmpbyte)\
         "mov    "tmp"       , %%ecx                                     \n\t"\
         "shl    $17         , "tmp"                                     \n\t"\

Modified: trunk/libavutil/common.h
==============================================================================
--- trunk/libavutil/common.h	(original)
+++ trunk/libavutil/common.h	Fri Oct 20 19:53:19 2006
@@ -238,7 +238,7 @@
 /* median of 3 */
 static inline int mid_pred(int a, int b, int c)
 {
-#if (defined(ARCH_X86) && __CPU__ >= 686 || defined(ARCH_X86_64)) && !defined(RUNTIME_CPUDETECT)
+#if HAVE_CMOV
     int i=b;
     asm volatile(
         "cmp    %2, %1 \n\t"

Modified: trunk/libavutil/internal.h
==============================================================================
--- trunk/libavutil/internal.h	(original)
+++ trunk/libavutil/internal.h	Fri Oct 20 19:53:19 2006
@@ -168,7 +168,7 @@
             level= (level^mask)-mask;
 #endif
 
-#if __CPU__ >= 686 && !defined(RUNTIME_CPUDETECT)
+#ifdef HAVE_CMOV
 #define COPY3_IF_LT(x,y,a,b,c,d)\
 asm volatile (\
     "cmpl %0, %3        \n\t"\




More information about the ffmpeg-cvslog mailing list