最近,我遇到了一个第三方库的问题,该库正在使用以下代码来测试ARM平台上的混合字节序浮点格式:

#if defined(__arm__) && !(__ARM_EABI__)

此检查在Android平台上错误地检测到混合字节序格式,但在iOS平台上正常工作。经过一番研究后,我发现debian ArmEabiPort document在GCC浮点部分的预处理器宏中包含以下内容:(强调我的):



对于我们的特定情况,将检查更新为以下内容可解决此问题:
#if defined(__arm__) && !(__VFP_FP__)

并适用于Android和iOS平台。尽管从文档中可以更正确地进行检查:
#if defined(__arm__) && !(__VFP_FP__) && !(__MAVERICK__)

我们想将补丁提交给第三方,但考虑到旧支票确实对提交者有用,并且查找文档有多困难,我觉得我没有足够的信息来纠正此错误。

是否有最后一次检查未命中的情况? debian文件专门介绍了gcc,这些宏的移植性如何?

更新

根据来自无杂音的有用评论,该问题可归结为:

另一个用户将__ARM_EABI__宏检查作为补丁引入,以检查混合字节序浮点格式。因此,显然存在此宏适用的系统,这些系统是什么? __VFP_FP__宏会覆盖这些系统吗?还是我还需要考虑该宏,以防止在提交补丁时破坏现有用户。

最佳答案

您还需要检查以确保您未使用软浮点工具链,因为软浮点库没有混合字节序问题:

#if defined(arm) && !defined(__SOFTFP__) && !defined(__VFP_FP__) && !defined(__MAVERICK__)

至于编译器支持-它们应该在clang中工作,但是显然,商业ARM编译器将完全做其他事情。

关于c++ - 在ARM平台上正确检测混合字节序浮点格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26105686/

10-11 23:11
查看更多