我有一段使用SSE指令编写的内联ASM代码,我需要将其移植到NEON。我希望自己学习基础知识,看看能不能一步一步地完成基础知识,而不仅仅是将整个事物大量转换。
所以,第一步是学习装载和存储。考虑......
float input[4] = { 1.0f, 2.0f, 3.0f, 4.0f };
float output[4] = { 0 };
asm volatile
(
"movups %[I], %%xmm0 \n\t"
"movups %%xmm0, %[O] \n\t"
: [O] "=m" (output[0])
: [I] "m" (input[0])
: "memory", "xmm0"
);
我知道(我认为)我应该使用vld1.32指令但是我将它与我之前使用过的其他一些GCC ASM结构(比如命名变量等)结合起来有点模糊。 )。
答案 0 :(得分:0)
vld1.32 {d0,d1}, [%[I]];
vst1.32 {q0}, [%[O]];
取决于gcc版本,它将q0识别为d0,d1。 另外我认为你想要(& output [0])或简单(输出)和(输入)而不是将浮点数加载到通用寄存器。
在ARM中,您还可以对指针进行后递增:xxx { }, [%[I]!]
咨询,例如this例如。