我目前正在尝试使用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。这是原帖中的一个错误。
答案 0 :(得分:3)
这可能是一个显而易见的问题,但您确定要针对ARM吗?默认情况下,iPhone SDK会为THUMB编译所有应用程序,它使用软件浮点所有内容(包括float / int转换)。
无论如何,如果设备有一个VFP协处理器,它就有指令。您可以通过读取FPSID寄存器并确保它是受支持的型号来检查它是否具有适当的协处理器。
我怀疑假设所有iPhone都支持它是安全的。 Apple的汇编程序支持操作码,而LLVM ARM后端则用于类型转换,这意味着当Apple最终支持手机上的LLVM时,他们的编译器将生成FTOUI指令。