<arm_neon.h> 中的某些霓虹灯指令在 Jetson Xavier (ARMv8.2) 中不可用



"vld1q_u16_x2";存在于<arm_neon.h>在Jetson Xavier(ARMv8.2)中不可用。示例代码与所附代码相同。我已经在M1、A53和A72上尝试过代码,一切都很好。

然而,Jetson Xavier给出了以下警告和错误:">警告:函数'vld1q_u16_x2'的隐式声明"以及">错误:从类型"int"分配给类型"uint16x8x2_t{aka struct uint16x8x2_t}"时,类型不兼容。src1=vldlq_u16_x2(&origin)"。

ARMv8.2不支持此指令吗?我们想知道这个问题的解决方案。

#include <arm_neon.h>
int main()
{
uint16x8x2_t src1, src2;
uint16_t origin = 0x33;
src1 = vld1q_u16_x2(&origin);
return 0;
}

这不是关于ARMv8.2的,而是GCC。GCC的32位arm_neon.h目前缺少一些本应存在的函数。

这些也是clang最近添加的内容;它们在版本9之前是不可用的。

AArch64对GCC的支持往往更好;GCC的64位arm_neon.h中有很多这样的函数,尽管它们确实应该同时存在。上次我看的时候,有一些函数在32位模式下存在,但在64位标头中缺失,有一些32位和64位都缺失,但有几十个函数在64位模式下出现,但在32位中缺失。

FWIW,叮当一方的情况更好;它们只缺少一些功能。。。如果您可以使用clang,这可能是一个不错的选择。

aarch32模式下,无论工具链如何,都不支持所有这些x2/x3/x4足够的功能,尽管这是非常可能的,因为ARM32 neon有适当的指令。

您应该将目标限制为aarch64

这是愚蠢的,NEON内部非常需要改进:没有vtbl1qvtbl2qvtbl3qvtbl4q,尽管ARM64有接受128位向量的tbl/tbx指令。

MS Visual Studio已经提供了自己的(?)arm64_neon.h,支持以上所有功能。

PS:걍 어셈블리로 짜세요.

相关内容

  • 没有找到相关文章

最新更新