使用iPhone SIMD浮动单元浮动到整数转换

时间:2009-07-16 09:57:20

标签: iphone performance signal-processing visual-foxpro simd

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

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

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

内联代码
__asm__ volatile

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

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

EDIT2: 由于我想将float转换为带符号的Int16而不是无符号Int,我将ARM指令从FTOUI更改为FTOSI。这是原帖中的一个错误。

1 个答案:

答案 0 :(得分:3)

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

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

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