我收到有关某些 Neon 代码的错误消息

I got an error message about some Neon code

为了在 Android 上学习 ARM Neon,我尝试了 运行 示例代码。

但是我收到一条错误消息。

 uint16_t in[8] = {0, 1, 2, 3, 4, 5, 6, 7};
 uint16_t out[8];
 r = vld1q_u16(&in[0]);
 **vst1q_u16(&out[0], r);** <-- Here comes an error message

the error message is Invalid Arguments

我不明白为什么会出现这个问题。

vld1q_u16 工作正常,r 的值也正确。

vst1q_u16 不起作用。

你应该使用

r = vld1q_u16(in);
vst1q_u16(out, r);

像 NEON 这样的 SIMD 引擎在默认情况下会向后读取内存内容,因此给它数组元素 0 的地址是个坏主意。