访问FP表示中的位的可移植方法是写入到联合中,该联合写入到内存中。至少,glibc就是这样做的。但是下面的代码看起来过于复杂,而且速度很慢。我想知道是否有一条x86指令将FP寄存器的64个可访问位复制到整数寄存器中,以便对这些位进行操作?这将不是可移植的,但其思想是具有内联函数,并且每个端口必须实现标准的干净(和快速)例程。
在本例中,我将查看isnan,它被实现为:
#define EXTRACT_WORDS(ix0,ix1,d) \
do { \
ieee_double_shape_type ew_u; \
ew_u.value = (d); \
(ix0) = ew_u.parts.msw; \
(ix1) = ew_u.parts.lsw; \
} while (0)
int __isnan(double x)
{
int32_t hx,lx;
EXTRACT_WORDS(hx,lx,x);
hx &= 0x7fffffff;
hx |= (u_int32_t)(lx|(-lx))>>31;
hx = 0x7ff00000 - hx;
return (int)(((u_int32_t)hx)>>31);
}发布于 2010-11-16 06:39:23
没有将FP寄存器复制到整数寄存器的x86指令,反之亦然。您可能可以通过使用SSE instrinsics来获得您想要的内容,因为SSE寄存器可以同时包含整数和浮点值。
https://stackoverflow.com/questions/4188898
复制相似问题