📄 biari_decode_symbol.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 + -