[SCM] libav/experimental: CMOV-ify vp56 arithcoder This incantation causes gcc 4.3 to generate cmov on x86, a vastly better option than a completely unpredictable branch. Hopefully this carries over to newer versions and other CPUs with conditionals. ~5 cycles saved per call on a Core i7.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:09:47 UTC 2013


The following commit has been merged in the experimental branch:
commit 36d6b545a1a5309b3d9223b0db40ad2879817af5
Author: Jason Garrett-Glaser <darkshikari at gmail.com>
Date:   Wed Jun 30 23:18:47 2010 +0000

    CMOV-ify vp56 arithcoder
    This incantation causes gcc 4.3 to generate cmov on x86, a vastly better option
    than a completely unpredictable branch.
    Hopefully this carries over to newer versions and other CPUs with conditionals.
    ~5 cycles saved per call on a Core i7.
    
    Originally committed as revision 23921 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/vp56.h b/libavcodec/vp56.h
index af1a65d..6a2e29f 100644
--- a/libavcodec/vp56.h
+++ b/libavcodec/vp56.h
@@ -199,12 +199,8 @@ static inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
     int bit = c->code_word >= low_shift;
     int shift;
 
-    if (bit) {
-        c->high -= low;
-        c->code_word -= low_shift;
-    } else {
-        c->high = low;
-    }
+    c->high = bit ? c->high - low : low;
+    c->code_word = bit ? c->code_word - low_shift : c->code_word;
 
     /* normalize */
     shift = ff_h264_norm_shift[c->high] - 1;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list