[SCM] libav/experimental: replace a few and/sub/... by cmov this is faster on P3, should be faster on AMD, and should be slower on P4 its disabled by default (benchmarks welcome so we know when to enable it)

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:52:00 UTC 2013


The following commit has been merged in the experimental branch:
commit ab0151d163287160038052778ebf21b5529c12fd
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Tue Oct 10 01:08:39 2006 +0000

    replace a few and/sub/... by cmov
    this is faster on P3, should be faster on AMD, and should be slower on P4
    its disabled by default (benchmarks welcome so we know when to enable it)
    
    Originally committed as revision 6615 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h
index 0116391..e35f6ea 100644
--- a/libavcodec/cabac.h
+++ b/libavcodec/cabac.h
@@ -459,6 +459,14 @@ static int get_cabac(CABACContext *c, uint8_t * const state){
         "movl "LOW      "(%2), %%ebx            \n\t"
 //eax:state ebx:low, edx:range, esi:RangeLPS
         "subl %%esi, %%edx                      \n\t"
+#ifdef CMOV_IS_FAST //FIXME actually define this somewhere
+        "cmpl %%ebx, %%edx                      \n\t"
+        "cmova %%edx, %%esi                     \n\t"
+        "sbbl %%ecx, %%ecx                      \n\t"
+        "andl %%ecx, %%edx                      \n\t"
+        "subl %%edx, %%ebx                      \n\t"
+        "xorl %%ecx, %%eax                      \n\t"
+#else
         "movl %%edx, %%ecx                      \n\t"
         "subl %%ebx, %%edx                      \n\t"
         "sarl $31, %%edx                        \n\t" //lps_mask
@@ -467,9 +475,10 @@ static int get_cabac(CABACContext *c, uint8_t * const state){
         "addl %%ecx, %%esi                      \n\t" //new range
         "andl %%edx, %%ecx                      \n\t"
         "subl %%ecx, %%ebx                      \n\t"
+        "xorl %%edx, %%eax                      \n\t"
+#endif
 
 //eax:state ebx:low edx:mask esi:range
-        "xorl %%edx, %%eax                      \n\t"
         "movzbl "MPS_STATE"(%2, %%eax), %%ecx   \n\t"
         "movb %%cl, (%1)                        \n\t"
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list