Other Parts Discussed in Thread: ARM-CGT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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