asm ( "movd %2, %%xmm0;" // valueToAdd
"movd %3, %%xmm1;" // accumulatedError
"movd %4, %%xmm2;" // accumulator
"movss %%xmm2,%%xmm3;" // accumulator
"subss %%xmm1,%%xmm0;" // valueToAdd - accumulatedError ---> y
"addss %%xmm0,%%xmm2;" // accumulator + y ----> t
"movss %%xmm2,%%xmm4;" // t---->t
"subss %%xmm3,%%xmm2;" // t - accumulator ----> (t2)
"subss %%xmm0,%%xmm2;" // t2-y ---> (t3)[accumulated error]
"movd %%xmm2,%0;"
"movd %%xmm4,%1;"
: "=r"(accumulatedError),"=r"(accumulator)
: "r"(valueToAdd),"r"(accumulatedError),"r"(accumulator)
: "%xmm0","%xmm1","%xmm2","%xmm3","%xmm4"
);
这里我可以使用r
标签将32位浮点数插入到asm块中。现在我需要制作这个块"矢量化"而且我不知道如何标记sse / avx寄存器。
我需要传递的变量类型是__m128
和__m256
。我怎样才能将它们(xmm,ymm)作为约束引入inline-asm而不是" r"?
编译器是G ++ 6.3。