gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:44:30 30 4
gpt4 key购买 nike

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约束用于通用寄存器。 x用于xmm。有关更多详细信息,请查询manual。另外,如果您在嵌入式汇编程序中使用mov,则可能做错了。

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

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

return root;
}

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

关于c++ - MSVC内联汇编到GCC(带有参数和返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042567/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com