5

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

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

4

2 回答 2

4

我在ARM C language extensions的第 44 页找到了 ARM 内部函数名称。其中一些在 Xcode 中工作。正如预期的那样,这将打印 31:

NSLog(@"%u", __builtin_clz(1));

笔记:

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

这可能很明显,但是如果您使用 ARM 特定的指令,您将无法在 iOS 模拟器中运行您的应用程序。模拟器使用 Mac 的原生 x86-64 硬件。

您可以创建一个包装函数,该函数使用编译器指令来使用 ARM 命令,或者如果您没有支持,则回退到“丑陋”的代码。

于 2013-10-29T18:09:06.843 回答