浮使用iPhone的SIMD浮点数单元整数的转换
-
16-09-2019 - |
题
我目前试图优化与鲨鱼一些DSP相关的代码,发现我浪费了大量的时间在浮法到整数转换:
SInt16 nextInt = nextFloat * 32768.0f + 0.5f;
由于iPhone似乎有一个ARM11 FP协处理器,我想知道如果我可以用FTOSI指令取代我的代码。 有一些文档一>可在ARM网站,但我有手内联汇编优化的经验。 已经有人这么做过?结果 我想我可以内联的代码
__asm__ volatile
但我怎么检查指令是否可用?点击 我怎样才能把我的价值?
EDIT1: 正如路易斯已经指出的那样,我忘了提,我与“编译为Thumb”编译关闭。
EDIT2: 因为我想浮动转换为签署的Int16,而不是无符号整型,我改变了ARM指令从FTOUI到FTOSI。这是在原来的交错了。
解决方案
这可能是一个明显的问题,但你确定你的目标ARM?默认情况下,iPhone SDK编译为拇指,它使用软件浮点一切的所有应用(包括浮动/ INT转换)。
无论如何,如果该装置具有VFP协处理器它具有指令。您可以检查它是否通过读取寄存器FPSID,并确保它是一个支持的模型有一个相应的协处理器。
我怀疑它是安全的假设所有iPhone支持。除此之外苹果的汇编器支持的操作码,和LLVM ARM后端使用它的类型转换,这意味着当苹果最终支持他们的编译器会生成FTOUI说明在手机上LLVM。
不隶属于 StackOverflow