学习GCC ASM:SSE到NEON:负载和商店

时间:2012-12-05 16:54:59

标签: gcc assembly sse neon

我有一段使用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结构(比如命名变量等)结合起来有点模糊。 )。

1 个答案:

答案 0 :(得分:0)

vld1.32 {d0,d1}, [%[I]]; 
vst1.32 {q0}, [%[O]];   

取决于gcc版本,它将q0识别为d0,d1。 另外我认为你想要(& output [0])或简单(输出)和(输入)而不是将浮点数加载到通用寄存器。

在ARM中,您还可以对指针进行后递增:xxx { }, [%[I]!]

咨询,例如this例如。