网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> ADI DSP代码示例 >> Blackfin >> 文章正文
  BF533上对H.264中cabac部分进行汇编优化的汇编代码         ★★★ 【字体:
BF533上对H.264中cabac部分进行汇编优化的汇编代码
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-17    

.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
*/

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    DM642上TCP/IP协议的实现及性…
    基于DM642嵌入式无线视频监控…
    DM642 I2C通用读写源代码
    基于AVS-M和DM642视频服务器…
    DM642 Ver2.0多路实时图像处…
    DM642与百兆以太网接口设计
    DM642与1394a的接口设计
    DM642和线阵CCD的接口
    DM642与以太网的接口
    DM642与CMOS图像传感器的接口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号