如何在iOS中使用ARM内在函数?

Ale*_*nin 5 arm intrinsics neon ios

我需要非常快速地在iPad上的数百万32位整数上计算MSB(最重要的位).我有自己的(丑陋的)MSB写的实现,这很慢.ARM处理器具有CLZ(计数前导零)硬件命令,这对此非常有用.根据ARM参考,有一个内在的C函数__CLZ.如何在我的Xcode项目中添加对ARM内部函数的支持?

PS我已经设法找到从NEON访问硬件CLZ的方法(通过包含arm_neon.h),但这不是我需要的,因为它只适用于vector,但我需要标量MSB.

Ale*_*nin 4

我在ARM C 语言扩展的第 44 页上找到了 ARM 内部函数名称。其中一些可以在 Xcode 中运行。正如预期的那样,打印 31:

NSLog(@"%u", __builtin_clz(1));
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 我在 Apple 文档中没有找到任何对此的引用。Xcode 很可能从 LLVM 或 CLANG 继承了这些功能。
  • 您不需要包含任何特殊的标头或框架来使用这些函数。Xcode IDE 自动完成功能不知道它们。
  • 仅实现了扩展列表中的少数功能。根据同一文档的第 12-13 页,它应该是两个头文件:arm_acle.h 用于非 NEON 内在函数,arm_neon.h 用于 NEON 内在函数。Xcode 只有第二个文件,但第一个文件中的一些函数在其他地方声明。