无法使用 ARM NEON 内在函数设置 4 个 floatx32 的向量

Can't set a vector of 4 floatx32 with ARM NEON intrinsics

我想从 table 加载一些值并将它们设置到向量中: 在第一种情况下将向量的四个值设置为:

float32x4_t dest = vdupq_n_f32(a);

当我阅读内在函数手册时,这一点非常明显。

在第二种情况下,将向量的四个值设置为与 table 不同的值。这有点棘手,因为没有相关说明,所以我执行了以下操作:

float32x4_t dest = {a3,a2,a1,a0};

它不是内在的,但基于网络上的其他出版物和论坛,它是我唯一的解决方案。遗憾的是,我收到了这个错误:

error: expected expression before ‘{’ token

任何人都可以提供帮助或对此有替代方案吗?

如果您的编译器不支持这样的直接初始化(即您使用的不是 gcc 或 clang),那么您需要显式加载值,例如

const float init[4] = {a3,a2,a1,a0};
float32x4_t dest = vld1q_f32(init);

请注意,您的第一个示例似乎是错误的 - 如果您试图将所有 4 个矢量元素设置为相同的值(如 SSE 的 _mm_set1_ps),那么您将需要使用类似 vdupq_n_f32.