⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 biari_decode_symbol.asm

📁 这是在bf33dsp上对264中cabac部分进行汇编优化的汇编代码
💻 ASM
字号:
.section    L1_code;
.global     _biari_decode_symbol;
.align      8;
.extern _global_range;
.extern _rLPS_table_64x4;
.extern _AC_next_state_LPS_64;
.extern _Range;
.extern _AC_next_state_MPS_64;
.extern _bs;
.extern _global_value;

_biari_decode_symbol:

I0 = R0;//&bi_ct->state
[ -- SP ] = ( R7:4  ) ;
P2.L = _global_range ;
P2.H = _global_range ;
I2 = P2;//&global_range
R1 = [I0];//bi_ct->state
R4 = R1<<3||I0 += 4||R3 = [ I2] ;//global_range;//&bi_ct->MPS
R2 = R3 >> 6||I2 += 4 ||R0 = [ I0] ;//range>>6//bi_ct->MPS//&global_value
R2 = R4 + R2(S)||R6 = [ I0--]  ;
P1 = R2;//rLPS_table_64x4[bi_ct->state]
P0 = R1;//bi_ct->state
P2 += 8;//_rLPS_table_64x4
I3 = I2;
I1 = I0;
P1 = P2 + P1 ;
R2 = B [ P1 ] ( Z );
R3 = R3 - R2 ( NS )|| R7 = [I3 ]||I2 -= 4;//rLPS_table_64x4[bi_ct->state][(range>>6)]//range -= rLPS//global_value
CC = R3 <= R7 ( IU ) ;//value >= range

IF  !CC JUMP lable_mps;
R4 = 1 ;
CC = R1 == 0 ;//bi_ct->state
P2.L = _AC_next_state_LPS_64 ;
P2.H = _AC_next_state_LPS_64 ;
P0 = P2 + P0 ; //AC_next_state_LPS_64[bi_ct->state]
R0 = R4 - R0 (S) ||R1 = B[ P0 ](Z);//bi_ct->state = AC_next_state_LPS_64[bi_ct->state]; //bi_ct->state;//bit = 1-bi_ct->MPS;
P0 = R2 ;//rLPS

IF CC  R6 = R0;
R4 = R7 - R3 (S)||I1 +=4||[I0] = R1;//bi_ct->MPS = 1-bi_ct->MPS;//value -= range;
P2.L = _Range ;
P2.H = _Range ;
P0 = P2 + P0 ;//shift = Range[rLPS];
P2 += -16;//_bs
R5 = B [ P0 ] ( Z ) ;//shift;//9-bs.i_left
R3 = ASHIFT R2 BY R5.L ||[ I1 ] = R6;//bs.i_left//&bs.p //range = rLPS<<shift;
R2 = ASHIFT R4 BY R5.L||R6 = [ P2 + 0xc ];//bi_ct->state = AC_next_state_LPS_64[bi_ct->state]//bs.i_left -= shift;
R4 = R6 - R5(S)||P0 = [ P2 + 0x4 ] ; //value<<shift//*bs.p 
R5 += 1;
CC = R5 < R6 ;//if(bs.i_left>shift+1)//R2 <<= R5 ;
R7 = 9 ;
R6 = R7 - R6 (S)|| R1 = B [ P0 ++] ( Z ) ;

IF ! CC JUMP lable1 ;
R1 = ASHIFT  R1 BY R6.L||[I2] = R3 ;//  global_range = range; ;//*bs.p<<(9-bs.i_left)
R1 = R1.B ( Z ) ;//&0xff
R7 = R5 - R7(S) ||[ P2 + 0xc ] = R4;//8-shift//bs.i_left -= shift
R1 = ASHIFT R1 BY R7.L ;//value = (value<<shift)|((*bs.p<<(9-bs.i_left)&0xff)>>(8-shift))
R7 = R2 | R1 ;//value = (value<<shift)|((*bs.p<<(9-bs.i_left)&0xff)>>(8-shift));
lable_end:

[I3] = R7 ;//  global_value = value;
( R7:4 ) = [ SP ++ ] ;
RTS;

lable1:
R1 =R1<< 0x8 ||R7 = B [ P0  ] ( Z ) ;//*(bs.p+1);//(*bs.p<<8)
R1 = R7 + R1(S)||[ P2 + 0x4 ] = P0 ; 
R1= ASHIFT R1 BY R6.L ||[I2] = R3 ;//  global_range = range;/((*bs.p<<8)+*(bs.p+1))<<(9-bs.i_left)
R7 = 17 ;
R1 = R1.L ( Z ) ;
R4 += 8 ;//bs.i_left = 8+bs.i_left-shift;
R7 = R5 - R7(S)|| [P2 + 0xc ] = R4 ;//(16-shift)
R1 = ASHIFT R1 BY R7.L ;//value = (value<<shift)|((*bs.p<<(9-bs.i_left)&0xff)>>(8-shift))
R7 = R2 | R1 ;
JUMP.S lable_end  ;



lable_mps:
R1 = 256 ( X ) ;
CC = R3 < R1 ( IU ) ;
P2.L = _AC_next_state_MPS_64 ;
P2.H = _AC_next_state_MPS_64 ;
P0 = P2 + P0 ;
R1 = B [ P0 ] ( Z ) ||[I2] = R3 ;//  global_range = range;;
[ I0] = R1 ;//bi_ct->state = AC_next_state_MPS_64[bi_ct->state]; // next state
IF ! CC JUMP lable_end ;


P0 = R3 ;//range -= rLPS
P2.L = _Range ;
P2.H = _Range ;
P1.L = _bs ;
P1.H = _bs ;
P0 = P2 + P0 ;//shift = Range[rLPS];
R5 = B [ P0 ] ( Z ) ;//shift
R3 = ASHIFT R3 BY R5.L||R6 = [ P1 + 0xc ];//&bs.p //range <<= shift;
R4 = R6 - R5(S) ||R2 = [I3];//bi_ct->state = AC_next_state_LPS_64[bi_ct->state]//bs.i_left -= shift;
R2 = ASHIFT R2 BY R5.L ||P0 = [ P1 + 0x4 ] ; //value<<shift//*bs.p 
R7 = 9 ;
R5 += 1;
CC = R5 < R6 ;//if(bs.i_left>shift+1)
R6 = R7 - R6 (S)  || R1 = B [ P0 ++] ( Z ) ;//bs.i_left//9-bs.i_left


//R2 <<= R5 ;
IF ! CC JUMP lable2 ;
R1 = ASHIFT  R1 BY R6.L||[I2] = R3 ;//  global_range = range; ;//*bs.p<<(9-bs.i_left)
R1 = R1.B ( Z ) ;//&0xff
R7 = R5 - R7(S) ||[ P1 + 0xc ] = R4;//8-shift//bs.i_left -= shift
R1 = ASHIFT R1 BY R7.L ;//value = (value<<shift)|((*bs.p<<(9-bs.i_left)&0xff)>>(8-shift))
R7 = R2 | R1 ;//value = (value<<shift)|((*bs.p<<(9-bs.i_left)&0xff)>>(8-shift));
JUMP.S lable_end;



lable2:
R1 =R1<< 0x8 ||R7 = B [ P0  ] ( Z ) ;//*(bs.p+1);//(*bs.p<<8)
R1 = R7 + R1(S)||[ P1 + 0x4 ] = P0 ; 
R1= ASHIFT R1 BY R6.L ||[I2] = R3 ;//  global_range = range;/((*bs.p<<8)+*(bs.p+1))<<(9-bs.i_left)
R7 = 17 ;
R1 = R1.L ( Z ) ;
R4 += 8 ;//bs.i_left = 8+bs.i_left-shift;
R7 = R5 - R7(S)|| [P1 + 0xc ] = R4 ;//(16-shift)
R1 = ASHIFT R1 BY R7.L ;//value = (value<<shift)|((*bs.p<<(9-bs.i_left)&0xff)>>(8-shift))
R7 = R2 | R1 ;
JUMP.S lable_end ;

_biari_decode_symbol.END:

/*
R2 = rLPS|value
R7 =  value
R3 = range
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -