Vil*_*ray 4 c x86 assembly gcc inline-assembly
以下代码位于MinGW x86inline.h文件中:
/*
** in-line atan2(y,x) function.
** Computes arctan(y/x).
*/
#define atan2(y,x) atan2_x87_inline(y,x)
double atan2_x87_inline(double y,double x);
extern __inline__ double atan2_x87_inline(double y,double x)
{
double result;
__asm__ ("fpatan" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
return(result);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,x87 fpatan
操作使用st(0)
和st(1)
寄存器,覆盖寄存器的内容st(1)
,然后弹出顶部寄存器.
那么为什么只st(1)
包括在clobber列表中,而不是st(0)
呢?
编辑:实际上,它为什么会需要一个撞名单,因为在所有的st(0)
和st(1)
应该知道通过编译器"t"
和"u"
约束.是对的吗?