工具/软件:TI C/C++编译器
您好!
使用上述版本进行编译时、我会得到不同的反汇编代码(使用7.4.24版本时-我得到了所需的结果)。
它仅在优化(-o3)时发生。
以下代码似乎有问题:
void func1 (short* as16Tmp1、short* ps16Pnt、short* ps16CoefPnt、short Len) { short i; __int40_t i40Temp0; for (i = 0;i < Len;i ++) { i40Temp0 =(ps16CoefPnt[i]<]<tmp1; i401_ iDs_i_imp1 ;(tmp1) as16Tmp1[14]、ps16Pnt[-2-i]); mIMacDSS__(i40Temp0、as16Tmp1[13]、ps16Pnt[-3-i]); mIMacDSS__(i40Temp0、as16Tmp1[12]、ps16Pnt[-4-i]); mIMacDSS__(i40Temp0、as16Tmp1[11]、 ps16Pnt[-5-i]); mIMacDSS__(i40Temp0、as16Tmp1[10]、ps16Pnt[-6-i]); mIMacDSS__(i40Temp0、 as16Tmp1[9]、ps16Pnt[-7-i]); mIMacDSS__(i40Temp0、as16Tmp1[8]、ps16Pnt[-8-i]); mIMacDSS__(i40Temp0、as16Tmp1[7]、ps16Pnt[-9-i]); mIMacDSS__(i40Temp0、as16Tmp1[6]、 ps16Pnt[-10-i]); mIMacDSS__(i40Temp0、as16Tmp1[5]、ps16Pnt[-11-i]); mIMacDSS__(i40Temp0、 as16Tmp1[4]、ps16Pnt[-12-i]); mIMacDSS__(i40Temp0、as16Tmp1[3]、ps16Pnt[-13-i]); mIMacDSS__(i40Temp0、as16Tmp1[2]、ps16Pnt[-14-i]); mIMacDSS__(i40Temp0、as16Tmp1[1]、 ps16Pnt[-15-i]); mIMacDSS__(i40Temp0、as16Tmp1[0]、ps16Pnt[-16-i]); ps16CoefPnt[i]= mSatSD__((i40Temp0 + 0x4000)<< 1); }
mIMacDSS 和 mSatSD 定义为:
#define mIMacDSS__(DOp1、SOp2、SOp3)((DOp1)+=(_int40_t)(((SOp2)*(SOp3)))
#define mSatSD__(DOp1)(_sat (DOp1)>> 16)
此外、还使用了以下编译器标志:
-mv6600 --abi=eabi -O3 -g --relaxed_ansi --quiet --diag_warning=225 --diag_wrap=off --no_bad_aliases --mem_model :data=far -k --obj_directory="Obj"--"../Source/EC/temp_src.c
'完成的建筑:./Source/EC/temp_src.c
看起来、如果我使用7.6.0版本进行编译、则第一个乘法(mIMacDSS__)是使用未初始化的寄存器完成的。
BTW、该问题也与版本8.2.4有关。
提前感谢、
Shay。