Print this page
*** 215,263 ****
movw %cx,(%esp)
fldcw (%esp) / restore RD
addl $8,%esp
.end
- /
- / branchless __isnan
- / ((0x7ff00000-[((lx|-lx)>>31)&1]|ahx)>>31)&1 = 1 iff x is NaN
- /
- .inline __isnan,0
- movl (%esp),%eax /// eax <-- lo_32(x)
- movl %eax,%ecx
- negl %ecx / ecx <-- -lo_32(x)
- orl %ecx,%eax
- shrl $31,%eax / 1 iff lx != 0
- movl 4(%esp),%ecx /// ecx <-- hi_32(x)
- andl $0x7fffffff,%ecx / ecx <-- hi_32(abs(x))
- orl %ecx,%eax
- subl $0x7ff00000,%eax
- negl %eax
- shrl $31,%eax
- .end
-
.inline __isnanf,0
movl (%esp),%eax
andl $0x7fffffff,%eax
negl %eax
addl $0x7f800000,%eax
shrl $31,%eax
.end
- .inline __isinf,0
- movl 4(%esp),%eax / eax <-- hi_32(x)
- andl $0x7fffffff,%eax / set first bit to 0
- cmpl $0x7ff00000,%eax
- pushfl
- popl %eax
- cmpl $0,(%esp) / is lo_32(x) = 0?
- pushfl
- popl %ecx / bit 6 of ecx <-- lo_32(x) == 0
- andl %ecx,%eax
- andl $0x40,%eax
- shrl $6,%eax
- .end
.inline __isnormal,0
/ TRUE iff (x is _finite, but
/ neither subnormal nor +/-0)
/ iff (0 < bexp(x) < 0x7ff)
--- 215,232 ----