繁体   English   中英

MSVC内联汇编到GCC(带有参数和返回)

[英]MSVC inline assembly to GCC (with parameter and return)

inline float sqrt2(float sqr)
{
    float root = 0;

    __asm
    {
    sqrtss xmm0, sqr
    movss root, xmm0
    }

    return root;
}

这是我想用gcc x86编译的MSVC编译器内联程序集,我知道gcc内联程序集被asm(“ asm here”)调用; 但我完全不知道该如何包含参数,其结果是通过我仅知道的“ = r”获得的。

这应该导致类似这样的结果:

asm("sqrtss xmm0, %1\n\t"
        "movss %0, xmm0"
        : "=r" (root)
        : "r" (sqr));

r约束用于通用寄存器。 xxmm 有关更多详细信息,请查阅手册 另外,如果您mov联汇编中使用mov ,则可能做错了。

inline float sqrt2(float sqr)
{
    float root = 0;

    __asm__("sqrtss %1, %0" : "=x" (root) : "x" (sqr));

    return root;
}

请注意,gcc完全能够从sqrtf库函数调用生成sqrtss指令。 您可以使用-fno-math-errno摆脱一些较小的错误检查开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM