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.

[参考译文] 编译器/ARM-CGT:有符号单精度浮点0的符号位未置位

Guru**** 2952510 points

Other Parts Discussed in Thread: ARM-CGT

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/960840/compiler-arm-cgt-signed-single-precision-floating-point-zero-has-sign-bit-unset

器件型号:ARM-CGT

工具/软件:TI C/C++编译器

您好!

我们遇到了 ARM-CGT 18.12.2中似乎是代码生成错误的情况。

我们有一些使用文字-0.0F 并希望设置符号位的代码;遗憾的是、这似乎不是这样。 但是、使用 std::copysigned 生成有符号零可以正常工作。 此外、在检查对象表示时、它确实看起来像符号位未被置位:

#include 
#include 
#include 
#include 
#include 


模板 
t byte_cast (const U& value)
{
t 结果;
std::memcpy (static_cast (&result)、static_cast (&value)、sizeof (T));
返回结果;
}

int main()
{
const float a = 0.0f;
const float b =-0.0f;
const float c = std::copysignat (0.0f、-1.0f);
std::printf ("%08x\n"、byte_cast (a));//预期:0x00000000、实际:0x00000000
std::printf ("%08x\n"、byte_cast (b));//预期:0x8000000、实际值:0x00000000
std::printf ("%08x\n"、byte_cast (C));//预期:0x8000000、实际:0x8000000
assert (std::signbit (a)= false);// ok
assert (std::signbit (b)= true);//失败!
assert (std::signbit (c)= true);// ok
} 

在本段中、我希望所有三个断言都能通过。 请注意、等效双精度代码工作正常。

这是编译器中的已知问题吗?是否存在不涉及显式调用 std::copysigned 的权变措施?

我们的目标平台是 TDA3 SOC、我们使用以下编译器标志:

-qq -mv7M4 --float_support=vfplib --endian=little_ansi --define=SOC_TDA3XX --keep_unneed_statics --diag_wrap=off --display_error_number --diag_suppress=556 --wchar_t=16 --fp_reap=off --fap=fap=f=4 -float_ab=f=off --float_ab=enable=enable=f=f=f=f=f=f=f=f=f=off --f=f=f=float_ab=f=f=f= 

和以下链接器标志:

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

    感谢您报告此问题并提供简要的测试案例。  我可以重现相同的行为。  我提交了 EXT_EP-10156条目  以进行调查。  欢迎您访问该链接。

    以下是需要考虑的权变措施。  将--opt_for_speed=4更改为--opt_for_speed=2。   

    谢谢、此致、

    乔治

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

    您好!

    感谢您的快速响应和建议的解决方法!

    此致、
    Simon Sigurdhsson