繁体   English   中英

ARMv8 NEON GCC内在函数

[英]ARMv8 NEON GCC intrinsics

针对带有NDK r10c和64位CPU的Android-21,NEON内在函数在何种程度上类似于32位ARMv7a? 将特定于ARM的C代码移植到新平台的主要注意事项是什么?

C中的NEON内在函数应该基本相同-Linaro将手写汇编转换为内在函数(显然会导致一定程度的性能损失,因为编译器在这方面并不完美),以便将NEON支持移植到某些库中(例如libvpx)到64位。 有一些新的东西(例如对64位浮点数的支持),但是据我所知(实际上是全部?),现有的内在函数应该工作相同。

指令的大多数实际更改(例如vzip-> zip1 / zip2)和寄存器集(已更改SIMD寄存器别名的方式)都隐藏在内在函数级别上。

要记住的主要警告不是将旧代码移植到AArch64,而是关于现有二进制文件和运行32位代码。

您很可能需要更新NEON运行时检测(例如cpufeatures库)以在新的ARMv8设备上正确检测它,即使在32位模式下运行时也是如此。 如果您使用NDK中的cpufeatures库,则即使您不打算将其实际移植到AArch64上,也需要使用NDK r10或更高版本重建代码以在ARMv8设备上正确地检测到它-否则最终仅运行后备C代码。 (长话短说,旧的cpufeatures库仅解析/ proc / cpuinfo,并且这已更改了ARMv8设备上的格式,因此旧的cpufeatures版本将无法正确检测功能。)

编辑:事实证明,Android内核最终为/ proc / cpuinfo提供了额外的兼容性选项,因此旧NDK版本的cpufeatures库将继续检测NEON正常。 有关详细信息,请参见https://android.googlesource.com/kernel/common/+/cba0c6b2913c0d075a7434025f5dc29cd813707f%5E%21/https://android.googlesource.com/kernel/common/+/3868e7f8d47992922756d1aa6590f0d556c669b8%5E%21/额外的兼容性选项(至少在上游linux内核中似乎没有)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM