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/frexpl.S')
-rw-r--r--winsup/mingw/mingwex/math/frexpl.S71
1 files changed, 71 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/math/frexpl.S b/winsup/mingw/mingwex/math/frexpl.S
new file mode 100644
index 000000000..2b691c87f
--- /dev/null
+++ b/winsup/mingw/mingwex/math/frexpl.S
@@ -0,0 +1,71 @@
+/*
+ Cephes Math Library Release 2.7: May, 1998
+ Copyright 1984, 1987, 1988, 1992, 1998 by Stephen L. Moshier
+
+ Extracted from floorl.387 for use in libmingwex.a by
+ Danny Smith <dannysmith@users.sourceforge.net>
+ 2002-06-20
+*/
+
+/*
+ * frexpl(long double x, int* expnt) extracts the exponent from x.
+ * It returns an integer power of two to expnt and the significand
+ * between 0.5 and 1 to y. Thus x = y * 2**expn.
+ */
+ .align 2
+.globl _frexpl
+_frexpl:
+ pushl %ebp
+ movl %esp,%ebp
+ subl $24,%esp
+ pushl %esi
+ pushl %ebx
+ fldt 8(%ebp)
+ movl 20(%ebp),%ebx
+ fld %st(0)
+ fstpt -12(%ebp)
+ leal -4(%ebp),%ecx
+ movw -4(%ebp),%dx
+ andl $32767,%edx
+ jne L25
+ fldz
+ fucompp
+ fnstsw %ax
+ andb $68,%ah
+ xorb $64,%ah
+ jne L21
+ movl $0,(%ebx)
+ fldz
+ jmp L24
+ .align 2,0x90
+ .align 2,0x90
+L21:
+ fldt -12(%ebp)
+ fadd %st(0),%st
+ fstpt -12(%ebp)
+ decl %edx
+ movw (%ecx),%si
+ andl $32767,%esi
+ jne L22
+ cmpl $-66,%edx
+ jg L21
+L22:
+ addl %esi,%edx
+ jmp L19
+ .align 2,0x90
+L25:
+ fstp %st(0)
+L19:
+ addl $-16382,%edx
+ movl %edx,(%ebx)
+ movw (%ecx),%ax
+ andl $-32768,%eax
+ orl $16382,%eax
+ movw %ax,(%ecx)
+ fldt -12(%ebp)
+L24:
+ leal -32(%ebp),%esp
+ popl %ebx
+ popl %esi
+ leave
+ ret