如何在C ++中为内联asm指定xmm / ymm寄存器作为输入/输出?

时间:2017-08-06 13:58:53

标签: c++ sse inline-assembly intrinsics avx

    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。

0 个答案:

没有答案