From 5e1fd4135744cc00e09825631e8f4c99bd4c5d27 Mon Sep 17 00:00:00 2001 From: John Koleszar Date: Tue, 26 Apr 2011 12:52:17 -0400 Subject: Speed up VP8DX_BOOL_DECODER_FILL The end-of-buffer check is hoisted out of the inner loop. Gives about 0.5% improvement on x86_64. Change-Id: I8e3ed08af7d33468c5c749af36c2dfa19677f971 --- vp8/decoder/dboolhuff.h | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'vp8') diff --git a/vp8/decoder/dboolhuff.h b/vp8/decoder/dboolhuff.h index b217b14b3..5f6b211ea 100644 --- a/vp8/decoder/dboolhuff.h +++ b/vp8/decoder/dboolhuff.h @@ -51,19 +51,26 @@ void vp8dx_bool_decoder_fill(BOOL_DECODER *br); #define VP8DX_BOOL_DECODER_FILL(_count,_value,_bufptr,_bufend) \ do \ { \ - int shift; \ - for(shift = VP8_BD_VALUE_SIZE - 8 - ((_count) + 8); shift >= 0; ) \ + int shift = VP8_BD_VALUE_SIZE - 8 - ((_count) + 8); \ + int loop_end, x; \ + size_t bits_left = ((_bufend)-(_bufptr))*CHAR_BIT; \ + \ + x = shift + CHAR_BIT - bits_left; \ + loop_end = 0; \ + if(x >= 0) \ { \ - if((_bufptr) >= (_bufend)) { \ - (_count) += VP8_LOTS_OF_BITS; \ - break; \ - } \ - (_count) += 8; \ + (_count) += VP8_LOTS_OF_BITS; \ + loop_end = x; \ + if(!bits_left) break; \ + } \ + while(shift >= loop_end) \ + { \ + (_count) += CHAR_BIT; \ (_value) |= (VP8_BD_VALUE)*(_bufptr)++ << shift; \ - shift -= 8; \ + shift -= CHAR_BIT; \ } \ } \ - while(0) + while(0) \ static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) { -- cgit v1.2.3