工具/软件:TI C/C++编译器
客户在使用浮点数运行的函数中观察到 NaN 错误。 他确定了此错误的位置、相关代码如下所示。
;--------------------------------------------------------------
;57| PEX->QualityParams->政治家 缓冲2[0]= z;
;--------------------------------------------------------------
LDW .d1T2 *+A23[A17]、B9;[A_D64P]|57|<0、44>
NOP 1;[A_L66]
.dwpsn 文件"../main.c"、行55、列9、is_stmt、ISA 0
FADDSP .L2 B9、B4、B4;[B_L66]|55|<0、46>^
NOP 2;[A_L66]
FSUBSP .L2 B4、B5、B4;[B_L66]|55|<0、49>^
|| ADDAD .D2 B9、15、B5;[B_D64P]|59|<0、49>
在使用 LDW 指令将数据读取到 B9寄存器和使用 FADDSP 中的 B9寄存器之间只有一个 NOP、该 NOP 与 LDW 指令所需的延迟时隙数不匹配。 此问题出现在 C6000 cgtools v8.1.3和所有其他8.1.x 修订版本(最高为 v8.1.8)中。 仅当使用编译器选项-O2或-O3时才会发生这种情况。 如果使用 C6000 cgtools v8.2.0或更高版本、生成的代码将按预期工作。 现在、客户正在评估、即使在 其项目的非常晚的开发阶段、切换到较新的编译器版本(v8.2.x)是否安全。
他的基本问题我目前无法回答:上面描述的编译器错误是否已知、如果是这种情况、是否可以确保在较新的 v8.2.x 版本中修复了此问题? 我希望编译器团队中的某个人能够回答这个问题。 如果需要、我还可以提供允许重现错误的测试代码。
此致、
曼弗雷德