Hard float要求GCC中的某些功能

时间:2013-05-30 21:48:43

标签: android gcc android-ndk

这适用于Android NDK项目,但我猜它一般适用于ARM的GCC。

我知道Android NDK使用软浮点来保持与ARMv5的兼容性,但是我发现在为我们的项目编译ARMv7库时,库内部的所有调用都可以使用硬浮点数,并且仅使用软浮点数调用其他库,但我不确定是否可以告诉编译器执行此操作。我的感觉是,它不是,但我希望有人可能知道这样做的方法。

(作为旁注 - 如果在NDK中使用Clang是可能的,或者如果Clang只是这样做,那么最好知道)

一些背景知识:它是一个基于物理的库,使用NDK进行编译,对浮点的使用非常重视,我正在研究可能的优化。

编辑:考虑一下,它只能确定一个函数是否在链接时是外部的,而硬/软浮动影响编译器,所以我猜如果这是可能的,我需要手动指定应该使用hard float的函数,以便编译器知道。

1 个答案:

答案 0 :(得分:3)

更新:NDK r9b添加了对使用-mhard-float构建库的支持。请参阅the NDK page

(原始答案如下。)

没有简单的方法可以做到这一点。编译器需要知道每个方法使用什么调用约定,并且没有“soft fp”属性。您可以编写(或生成)在调用约定之间进行转换的包装函数,但这很麻烦且烦人。

如果你有一个使用float的库,但没有任何以float作为参数的函数,并且没有调用浮点数的外部函数(例如libc实用函数) - 本质上是一个黑盒子外部浏览器似乎根本不使用浮点数 - 那么你应该能够使用“hard fp”进行构建。