gpt4 book ai didi

c - 强制 64 位长 double ?

转载 作者:太空狗 更新时间:2023-10-29 16:32:46 26 4
gpt4 key购买 nike

我正在 build musl-libc静态地用于 aarch64(ARM 64 位)平台上的项目。我想避免使用任何软浮点库,例如 GCC's soft float library routines .然而,即使我使用 -mfloat-abi=hard,这些仍然出现在库文件中。据我所知,这是因为 ARM 64 位平台将 long double 定义为 128 位。

有什么办法可以改变这种行为吗?例如,我可以强制将 long double 定义为与 double 相同的大小吗?我知道 C 标准允许这样做,但我不确定是否有任何方法可以强制 Clang(我专门为此使用 Clang)使用这样的定义进行编译。

最佳答案

我最终找到了解决方案,但我不一定会推荐给所有人。它可能会在其他地方引发错误,但它足以满足我的需要。它还涉及从头开始构建 Clang(感谢@Art 的建议!)。此外,我正在处理的项目使用的是 LLVM/Clang 3.7.1,因此我对其他版本不做任何声明。


据我所知,AArch64 目标的 long double 定义出现在 clang/lib/Basic/Targets.cpp 中。 :

...
MaxAtomicInlineWidth = 128;
MaxAtomicPromoteWidth = 128;

LongDoubleWidth = LongDoubleAlign = SuitableAlign = 128;
LongDoubleFormat = &llvm::APFloat::IEEEquad;

// {} in inline assembly are neon specifiers, not assembly variant
// specifiers.
...

通过修改内部 2 行,我删除了对我在问题中提到的软 FP 例程的所有引用:

LongDoubleWidth = LongDoubleAlign = SuitableAlign = 64;
LongDoubleFormat = &llvm::APFloat::IEEEdouble;

我的测试程序 -- SNU's version of the NASA Parallel Benchmarks - 仍然正确验证,所以我假设我没有破坏任何东西。不过,这是一个重要的修改——我不建议大多数人这样做(它可能会导致其他地方损坏)。

关于c - 强制 64 位长 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48888860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com