以下代码在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);
}
据我了解,x87fpatan
操作使用st(0)
andst(1)
寄存器,覆盖寄存器的内容st(1)
,然后弹出顶部寄存器。
那么为什么只st(1)
包含在clobber列表中,而不是st(0)
同样?
编辑:事实上,为什么它需要一个clobber列表,因为编译st(0)
器st(1)
应该通过"t"
and"u"
约束知道它。是对的吗?