1/* 2 * Public domain. 3 */ 4 5#include <machine/asm.h> 6 7ENTRY(__ieee754_ilogbl) 8 fldt 8(%rsp) 9/* I added the following ugly construct because ilogb(+-Inf) is 10 required to return INT_MAX in ISO C99. 11 -- jakub@redhat.com. */ 12 fxam /* Is NaN or +-Inf? */ 13 fstsw %ax 14 movb $0x45, %dh 15 andb %ah, %dh 16 cmpb $0x05, %dh 17 je 1f /* Is +-Inf, jump. */ 18 cmpb $0x40, %dh 19 je 2f /* Is +-Inf, jump. */ 20 21 fxtract 22 fstp %st 23 24 fistpl -4(%rsp) 25 fwait 26 movl -4(%rsp),%eax 27 28 ret 29 301: fstp %st 31 movl $0x7fffffff, %eax 32 ret 332: fstp %st 34 movl $0x80000000, %eax /* FP_ILOGB0 */ 35 ret 36END (__ieee754_ilogbl) 37