我需要在 iPad 上快速计算数百万个 32 位整数的 MSB(最高有效位)。我有自己的(丑陋的)用普通 C 语言编写的 MSB 实现,速度很慢。ARM 处理器具有CLZ(计数前导零)硬件命令,这对此非常有用。根据ARM 参考,有一个内在的 C 函数 __CLZ。如何向我的 Xcode 项目添加对 ARM 内部函数的支持?
PS我已经设法找到从NEON访问硬件CLZ的方法(通过包括arm_neon.h),但这不是我需要的,因为它只适用于矢量,但我需要标量MSB。
我需要在 iPad 上快速计算数百万个 32 位整数的 MSB(最高有效位)。我有自己的(丑陋的)用普通 C 语言编写的 MSB 实现,速度很慢。ARM 处理器具有CLZ(计数前导零)硬件命令,这对此非常有用。根据ARM 参考,有一个内在的 C 函数 __CLZ。如何向我的 Xcode 项目添加对 ARM 内部函数的支持?
PS我已经设法找到从NEON访问硬件CLZ的方法(通过包括arm_neon.h),但这不是我需要的,因为它只适用于矢量,但我需要标量MSB。
我在ARM C language extensions的第 44 页找到了 ARM 内部函数名称。其中一些在 Xcode 中工作。正如预期的那样,这将打印 31:
NSLog(@"%u", __builtin_clz(1));
笔记:
这可能很明显,但是如果您使用 ARM 特定的指令,您将无法在 iOS 模拟器中运行您的应用程序。模拟器使用 Mac 的原生 x86-64 硬件。
您可以创建一个包装函数,该函数使用编译器指令来使用 ARM 命令,或者如果您没有支持,则回退到“丑陋”的代码。