通过下面的方法改进C语言程序,可使编译出的代码性能显著提高:
(1)使用intrinsics(内联函数)替代复杂的C/C++代码;
(2)使用字(Word)访问存放在32位寄存器的高16位和低16位字段的数据;
(3)使用双字访问存放在64位寄存器的32位数据(仅指C64xx/C67XX)。
C6000编译器提供了许多内联函数,它们直接对应着C62X/C64X/C67X指令可快速优化C代码。这些内联函数不易用C/C++语言实现其功能。内联函数用前下划线“_”特别标示,其使用方法与调用函数一样。例如C语言的饱和加法只能写为需要多周期的函数:
这段复杂的代码可以用_sadd()内联函数实现,它是一个单周期的C6x指令。
result=_sadd(a,b);
要提高C6000数据处理率,应使一条Load/Store指令能访问多个数据。C6000有与内联函数相关的指令,例如_add2(),_mpyhl(),_mpylh()等,这些操作数以16位数据形式存储在32位寄存器的高位部分和低位部分。当程序需要对一连串短型数据进行操作时,可使用字1次访问2个短型数据,然后使用C6000相应指令来处理数据。相似的在C64x或C67x中,有时需要执行64位的LDDW来访问两个32位数据,4个16位数据,甚至8个8位数据。
|