[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