3

这是针对 Android NDK 项目的,但我猜它通常适用于 ARM 的 GCC。

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

(作为旁注 - 如果在 NDK 中使用 Clang 可以做到这一点,或者如果 Clang 只是这样做,很高兴知道)

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

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

4

1 回答 1

4

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

(原答案如下。)

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

如果您有一个使用浮点数的库,但没有任何将浮点数作为参数的函数,并且没有调用使用浮点数的外部函数(例如 libc 实用程序函数) - 本质上是一个不支持浮点数的黑盒在外部查看者看来完全可以使用浮点数——那么您应该能够使用“硬 fp”进行构建。

于 2013-06-04T16:51:26.593 回答