summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure15
-rw-r--r--libavcodec/cabac.h3
-rw-r--r--libavutil/common.h2
-rw-r--r--libavutil/internal.h2
4 files changed, 17 insertions, 5 deletions
diff --git a/configure b/configure
index 64b906fa64..12a6054b83 100755
--- a/configure
+++ b/configure
@@ -347,6 +347,7 @@ cpu="generic"
powerpc_perf="no"
mmx="default"
cmov="no"
+cmov_is_fast="no"
armv5te="default"
iwmmxt="default"
altivec="default"
@@ -1107,9 +1108,16 @@ if test $cpu != "generic"; then
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 @@ echo "broken inttypes.h $emu_fast_int"
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 @@ if test "$cmov" = "yes" ; then
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
diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h
index e191a62124..ff3e06ae10 100644
--- a/libavcodec/cabac.h
+++ b/libavcodec/cabac.h
@@ -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 @@ static int always_inline get_cabac_inline(CABACContext *c, uint8_t * const state
#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"\
diff --git a/libavutil/common.h b/libavutil/common.h
index 9a836f1b57..3ae59716e4 100644
--- a/libavutil/common.h
+++ b/libavutil/common.h
@@ -238,7 +238,7 @@ static inline int av_log2_16bit(unsigned int v)
/* 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"
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 29e4cc8fff..285d30457f 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -168,7 +168,7 @@ static inline int ff_sqrt(int a)
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"\