|
.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 */
//本代码Blackfin示例
|