【发布时间】:2013-03-01 11:42:34
【问题描述】:
将uint32x4_t 类型的r1、r3 和r4 加载到NEON 寄存器中,我有以下代码:
r3 = veorq_u32(r0,r3);
r4 = r1;
r1 = vandq_u32(r1,r3);
r4 = veorq_u32(r4,r2);
r1 = veorq_u32(r1,r0);
我只是想知道 GCC 是否真的将 r4 = r1 翻译成 vmov 指令。看着反汇编的代码,我并不感到惊讶。 (而且我无法弄清楚生成的汇编代码实际上是做什么的)
浏览 ARM 的 NEON 内在函数参考我找不到任何简单的向量->向量赋值内在函数。
实现这一目标的最简单方法是什么?我不确定内联汇编代码的样子,因为我不知道vld1q_u32 分配的r1 和r4 在哪些寄存器中。我不需要实际的交换,只需要分配。
【问题讨论】:
-
装配体是什么样子的?你用 -O2 编译了吗?
-
是的,只有一堆逻辑指令,但没有我所期望的
vmov。 -
如果您认为 NEON 指令变体
vmov的内在函数缺失,请随时在 gcc.gnu.org 发布错误,并附上操作码、参数、文档链接等。
标签: c arm simd neon intrinsics