This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TI C6000编译器8.3.12中的_itof 问题

Guru**** 1565925 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1198153/_itof-issue-in-ti-c6000-compiler-8-3-12

有问题的代码:

浮点低16位 AsFloat_Incorrect (uint32_t a)
{    
  const uint32_t lo16 = A & 0x0000FFFFU;
  return _itof (lo16);


浮点低16位 AsFloat_Correct (uint32_t A)
{    
  返回_itof (A & 0x0000FFFFU);

我们希望这两个函数能够生成功能相同的目标代码。

使用以下标志调用编译器: -mv6600 -c++14 -O3 -DNDEBUG -auto_inline=0 -MS1
为第一个函数产生错误的输出。 请注意  lower16BitAsFloate_incorrect 中缺少的 EXTU 指令:

lower16BitAsFloate_incorrect (unsigned int):
      RETNOP      B3,5.        ;[]|14|

lower16BitAsFloate_Correct (unsigned int):
      RETNOP      B3,4.        ;[]|26|
      EXTU  .S1  A4,16,16,A4   ;[A_S66]|25|

尝试缩小触发条件范围时、我们发现以下代码会生成正确的二进制文件。

因此、我们怀疑问题与16位 处理相关/仅限于16位处理、并且由于 FP 次正常模式而未触发。

浮点值17位 AsFloat_Correct (uint32_t a)
{    
  const uint32_t lo17 = A & 0x0001FFFFU;
  return _itof (lo17);


浮点低值15BitAsFloat_Correct (uint32_t A)
{    
  const uint32_t lo15 = A & 0x00007FFFU;
  return _itof (lo15);

产生:

lower17BitAsFloate_Correct (unsigned int):
      RETNOP      B3,4.        ;[]|8|
      EXTU  .S1  A4,15,15,A4   ;[A_S66]|7|

lower15BitAsFloate_Correct (unsigned int):
      RETNOP      B3,4.        ;[]|20|
      EXTU  .S1  A4,17,17,A4   ;[A_S66]|19|

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您将此问题通知我们、并提供简要的测试案例。  我可以重现相同的结果。  我提交 了 EXT_EP-11070以 进行调查。  欢迎您访问该链接。

    谢谢、此致、

    乔治