From ab0151d163287160038052778ebf21b5529c12fd Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 10 Oct 2006 01:08:39 +0000 Subject: 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 --- libavcodec/cabac.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'libavcodec/cabac.h') diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h index 01163915a7..e35f6ea628 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" -- cgit v1.2.3