网站公告列表

  没有公告

加入收藏
设为首页
联系本站
您现在的位置: Analog安诺电子网 >> 文章 >> 技术交流 >> 文章正文
  BF533上对H.264中cabac部分进行汇编优化的汇编代码           ★★★ 【字体:
BF533上对H.264中cabac部分进行汇编优化的汇编代码
作者:佚名    文章来源:Internet    点击数:    更新时间:2008-4-2    

.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示例

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    FPGA+DSP实时三维图像信息处
    ADP-TS101 EzFlash示例程序
    ADSP TS101EzFlash (C)源代码
    ADI DSP双精度除法的例子
    ADI GPS导航解决方案
    用对数放大器实现射频功率控
    ADI DSP的单精度随机斜率滤波
    多路跟踪滤波同步数据采集系
    基于单片机的车载超级电容测
    设计面向高清电视的全数字音
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    版权所有:Analog安诺电子网 湘ICP备06016315号