Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/mingwex/math/ilogb.S')
-rw-r--r--winsup/mingw/mingwex/math/ilogb.S37
1 files changed, 37 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/math/ilogb.S b/winsup/mingw/mingwex/math/ilogb.S
new file mode 100644
index 000000000..2335b5146
--- /dev/null
+++ b/winsup/mingw/mingwex/math/ilogb.S
@@ -0,0 +1,37 @@
+/*
+ * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Public domain.
+ */
+
+
+ .file "ilogb.S"
+ .text
+ .align 4
+.globl _ilogb
+ .def _ilogb; .scl 2; .type 32; .endef
+_ilogb:
+
+ fldl 4(%esp)
+/* I added the following ugly construct because ilogb(+-Inf) is
+ required to return INT_MAX in ISO C99.
+ -- jakub@redhat.com. */
+ fxam /* Is NaN or +-Inf? */
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 1f /* Is +-Inf, jump. */
+
+ fxtract
+ pushl %eax
+ fstp %st
+
+ fistpl (%esp)
+ fwait
+ popl %eax
+
+ ret
+
+1: fstp %st
+ movl $0x7fffffff, %eax
+ ret