4

我目前正在尝试使用 Shark 优化一些与 DSP 相关的代码,发现我在浮点到整数的转换中浪费了很多时间:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

由于 iPhone 似乎有一个 ARM11 FP 协处理器,我想知道是否可以用 FTOSI 指令替换我的代码。ARM 网站上提供了一些文档,但我没有内联手动优化程序集的经验。以前有人这样做过吗?
我想我可以内联代码

__asm__ volatile

但是如何检查指令是否可用?
我怎样才能传递我的价值?

EDIT1:正如路易斯已经指出的那样,我忘了提到我正在编译时关闭了“Compile for Thumb”。

EDIT2:因为我想将浮点数转换为有符号的 Int16 而不是无符号的 Int,所以我将 ARM 指令从 FTOUI 更改为 FTOSI。这是原帖中的一个错误。

4

1 回答 1

3

这可能是一个显而易见的问题,但您确定您的目标是 ARM 吗?默认情况下,iPhone SDK 为 THUMB 编译所有应用程序,它使用软件浮点一切(包括浮点/整数转换)。

无论如何,如果设备有 VFP 协处理器,它就有指令。您可以通过读取 FPSID 寄存器并确保它是受支持的型号来检查它是否具有合适的协处理器。

我怀疑假设所有 iPhone 都支持它是安全的。除其他外,Apple 的汇编器支持操作码,LLVM ARM 后端使用它进行类型转换,这意味着当 Apple 最终在手机上支持 LLVM 时,他们的编译器将生成 FTOUI 指令。

于 2009-07-16T10:10:02.977 回答