[英]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
约束用于通用寄存器。 x
是xmm
。 有关更多详细信息,请查阅手册 。 另外,如果您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.