TMS320C62X DSP的混合编程研究
ADD .L1X pSrc?offset?pSrc ;参考块第一个元素的
地址
AND .L2X pSrc?temp?tmp_pSrc ;字对准访问的地址
AND .S1 0x0003?pSrc?rshiftA ;用两个LSB位得
;到了需右移几个字
SUB .L1 0x04?rshiftA?lshiftA ;需左移几个字
MPY .M1 rshiftA?8?rshiftA ;需右移的#bit数
MPY .M1 lshiftA?8?lshiftA ;需左移的#bit数
作为一个说明C语言与汇编程序混合编程的设计例子,采用并行汇编实现了这个函数的优化。这里只给出部分汇编程序:
.text ;将该段汇编代码安排在.text
段,当然通过在C语言中用
#program_section也可以将其安排
在其它自己命名的段中。
.global mc
_case_a ;函数名,用.def或.gloal对其进行
声明,使得C代码调用该函数
_mc_case_a? ;标号,是C调用函数和汇编
被调用函数的接口处
……
.asg B10,ocsr
.asg B11,rw_4
STW .D2 ocsr,?stack--?1? ;被调用函数用到了
B10~B15,A10
STW .D2 r_w4,?stack--?1? ;~A15的寄存器,则
需对它们保护
MVC .S2 CSR,ocsr
AND .S2 -2,ocsr,ocsr
MVC .S2 ocsr,CSR ;关闭某些中断 ……
loop?
LDW .D2 ?tmp_pSrc++?src_width1?,r_w1
;读取第一个字
LDW .D1 ?pSrc++?1?,r-w2 ;读取第二个字
LDW .D1 ?pSrc++?src_width2?,r-w3 ;读取第三个字 SHRU .S2 r_w1,rshiftB, r-w1
SHL .S1 r_w3,lshiftA, r_w3
SHL .S2X r_w2,rshiftB,r_w4
SHRU .S1 r_w2,rshiftA, r_w2
OR .L2 r_w1,r_w4, r_w1
OR .L1 r_w1,r_w3,r_w2 ;这几步作了图a
《TMS320C62X DSP的混合编程研究(第3页)》