glenn@qed.physics.su.OZ.AU (Glenn Geers) (12/17/90)
Submitted-by: root@trantor Archive-name: mathlib2.0/part03 ---- Cut Here and feed the following to sh ---- #!/bin/sh # this is mathlib.03 (part 3 of mathlib2.0) # do not concatenate these parts, unpack them in order with /bin/sh # file erff.c continued # if test ! -r _shar_seq_.tmp; then echo 'Please unpack part 1 first!' exit 1 fi (read Scheck if test "$Scheck" != 3; then echo Please unpack part "$Scheck" next! exit 1 else exit 0 fi ) < _shar_seq_.tmp || exit 1 if test ! -f _shar_wnt_.tmp; then echo 'x - still skipping erff.c' else echo 'x - continuing file erff.c' sed 's/^X//' << 'SHAR_EOF' >> 'erff.c' && X skip++; X } X } X if (!skip) { X ysq = ONE/(y*y); X xnum = P[5]*ysq; X xden = ysq; X for (i = 0; i <= 3; i++) { X xnum = (xnum+P[i])*ysq; X xden = (xden+Q[i])*ysq; X } X result = ysq*(xnum+P[4])/(xden+Q[4]); X result = (SQRPI-result)/y; X if (jint != 2) { X i = (int)(y*SIXTEN); ysq = (double)i/SIXTEN; X result *= exp(-ysq*ysq)*exp(-(y-ysq)*(y+ysq)); X } X } X } X if (jint == 0) { /* Fix up for negative argument, erf, etc. */ X result = HALF-result; result += HALF; X if (x < ZERO) X result = -result; X } X else if (jint == 1) { X if (x < ZERO) X result = TWO-result; X } X else if (x < ZERO) { X if (x < XNEG) X result = XINF; X else { X i = (int)(x*SIXTEN); ysq = (double)i/SIXTEN; X y = exp(ysq*ysq)*exp((x-ysq)*(x+ysq)); X result = -result; result += y+y; X } X } X return result; } X /* X * This subprogram computes approximate values for erf(x). X * (see comments heading calerf()). X * X * Author/date: W. J. Cody, January 8, 1985 X */ float erff(float x) { X return ((float)calerf(x,0)); } X /* X * This subprogram computes approximate values for erfc(x). X * (see comments heading calerf()). X * X * Author/date: W. J. Cody, January 8, 1985 X */ float erfcf(float x) { X return ((float)calerf(x,1)); } X /* X * This subprogram computes approximate values for exp(x*x) * erfc(x). X * (see comments heading calerf()). X * X * Author/date: W. J. Cody, March 30, 1987 X */ float erfcxf(float x) { X return ((float)calerf(x,2)); } SHAR_EOF echo 'File erff.c is complete' && chmod 0644 erff.c || echo 'restore of erff.c failed' Wc_c="`wc -c < 'erff.c'`" test 9376 -eq "$Wc_c" || echo 'erff.c: original size 9376, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= nextafterf.c ============== if test -f 'nextafterf.c' -a X"$1" != X"-c"; then echo 'x - skipping nextafterf.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting nextafterf.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'nextafterf.c' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** ** A mix of C and assembler - well I've got the functions so I might ** as well use them! ** */ X #include "fpumath.h" X asm(".align 4"); asm(".Lulp:"); asm(".double 5.9604644775390625e-08"); X asm(".align 4"); asm(".Lulpup:"); asm(".double 1.1920928955078125e-07"); X float nextafterf(float x, float y) { X asm("subl $8, %esp"); X X if (isnanf(x) || isnanf(y)) X return(quiet_nanf(1.0)); X X if (isinff(x)) X if (y > x) X return(-max_normalf()); X else X if (y < x) X return(max_normalf()); X X if (x == 0.0) { X if (y > 0.0) X return(min_subnormalf()); X else X return(-min_subnormalf()); X } X X if (isnormalf(x)) { X if ((x == min_normalf()) && y < x) X return(max_subnormalf()); X X if ((x == max_normalf()) && y > x) X return(infinityf()); X X if ((x == -max_normalf()) && y < x) X return(-infinityf()); X X asm("movl 8(%ebp), %eax"); X asm("andl $0x7f800000, %eax"); X asm("movl %eax, -8(%ebp)"); X asm("flds -8(%ebp)"); X X if (fabsf(x) <= 2.0 && y < x) X asm("fldl .Lulp"); X else X asm("fldl .Lulpup"); X X asm("fmulp"); X X if (y > x) { X asm("flds 8(%ebp)"); X asm("faddp"); X asm("leave"); X asm("ret"); X } X if (y < x) { X asm("flds 8(%ebp)"); X asm("fsubp"); X asm("leave"); X asm("ret"); X } X } X else X if (issubnormalf(x)) { X if ((x == max_subnormalf()) && y > x) X return(min_normalf()); X X if ((x == -max_subnormalf()) && y < x) X return(-min_normalf()); X X if (y > x) X return(x + min_subnormalf()); X X if (y < x) X return(x - min_subnormalf()); X } X X return(x); } SHAR_EOF chmod 0644 nextafterf.c || echo 'restore of nextafterf.c failed' Wc_c="`wc -c < 'nextafterf.c'`" test 1717 -eq "$Wc_c" || echo 'nextafterf.c: original size 1717, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= acos.s ============== if test -f 'acos.s' -a X"$1" != X"-c"; then echo 'x - skipping acos.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting acos.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'acos.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 Lhalfpi: X .double 1.57079632679489661923 X X .align 4 X .globl acos acos: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X X ftst X fstsw %ax X sahf X jz .Lzero X X fst %st(1) X fmull 8(%ebp) X fld1 X fsubp X fsqrt X fdivp X fld1 X fpatan X jnc .Ldone X X fldpi X faddp X leave X ret X Lzero: X fldl .Lhalfpi X Ldone: X leave X ret SHAR_EOF chmod 0644 acos.s || echo 'restore of acos.s failed' Wc_c="`wc -c < 'acos.s'`" test 544 -eq "$Wc_c" || echo 'acos.s: original size 544, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= copysign.s ============== if test -f 'copysign.s' -a X"$1" != X"-c"; then echo 'x - skipping copysign.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting copysign.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'copysign.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 globl copysign copysign: X pushl %ebp X movl %esp,%ebp X X movl 20(%ebp), %eax X andl $0x80000000, %eax X cmpl $0x80000000, %eax X je .Lneg X andl $0x7fffffff, 12(%ebp) X fldl 8(%ebp) /* Store argument for return */ X leave X ret Lneg: X orl $0x80000000, 12(%ebp) X fldl 8(%ebp) /* Store argument for return */ X leave X ret SHAR_EOF chmod 0644 copysign.s || echo 'restore of copysign.s failed' Wc_c="`wc -c < 'copysign.s'`" test 555 -eq "$Wc_c" || echo 'copysign.s: original size 555, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= drem.s ============== if test -f 'drem.s' -a X"$1" != X"-c"; then echo 'x - skipping drem.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting drem.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'drem.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl drem drem: X pushl %ebp X movl %esp,%ebp X X fldl 16(%ebp) X fldl 8(%ebp) Lnotred: X fprem1 X X fstsw %ax X sahf X jp .Lnotred X X leave X ret SHAR_EOF chmod 0644 drem.s || echo 'restore of drem.s failed' Wc_c="`wc -c < 'drem.s'`" test 381 -eq "$Wc_c" || echo 'drem.s: original size 381, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= fabs.s ============== if test -f 'fabs.s' -a X"$1" != X"-c"; then echo 'x - skipping fabs.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting fabs.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'fabs.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl fabs fabs: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fabs X X leave X ret SHAR_EOF chmod 0644 fabs.s || echo 'restore of fabs.s failed' Wc_c="`wc -c < 'fabs.s'`" test 322 -eq "$Wc_c" || echo 'fabs.s: original size 322, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= hypot.s ============== if test -f 'hypot.s' -a X"$1" != X"-c"; then echo 'x - skipping hypot.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting hypot.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'hypot.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 globl hypot hypot: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fmull 8(%ebp) X fldl 16(%ebp) X fmull 16(%ebp) X faddp X fsqrt X X leave X ret SHAR_EOF chmod 0644 hypot.s || echo 'restore of hypot.s failed' Wc_c="`wc -c < 'hypot.s'`" test 377 -eq "$Wc_c" || echo 'hypot.s: original size 377, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= logb.s ============== if test -f 'logb.s' -a X"$1" != X"-c"; then echo 'x - skipping logb.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting logb.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'logb.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl logb logb: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fxtract X fldl %st(1) X X leave X ret SHAR_EOF chmod 0644 logb.s || echo 'restore of logb.s failed' Wc_c="`wc -c < 'logb.s'`" test 339 -eq "$Wc_c" || echo 'logb.s: original size 339, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= scalb.s ============== if test -f 'scalb.s' -a X"$1" != X"-c"; then echo 'x - skipping scalb.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting scalb.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'scalb.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl scalb scalb: X pushl %ebp X movl %esp,%ebp X X fildl 16(%ebp) X fldl 8(%ebp) X fscale X X leave X ret SHAR_EOF chmod 0644 scalb.s || echo 'restore of scalb.s failed' Wc_c="`wc -c < 'scalb.s'`" test 343 -eq "$Wc_c" || echo 'scalb.s: original size 343, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= tan.s ============== if test -f 'tan.s' -a X"$1" != X"-c"; then echo 'x - skipping tan.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting tan.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'tan.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl tan tan: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fptan X fstp %st(0) X X leave X ret SHAR_EOF chmod 0644 tan.s || echo 'restore of tan.s failed' Wc_c="`wc -c < 'tan.s'`" test 334 -eq "$Wc_c" || echo 'tan.s: original size 334, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= asin.s ============== if test -f 'asin.s' -a X"$1" != X"-c"; then echo 'x - skipping asin.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting asin.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asin.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl asin asin: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fst %st(1) X fst %st(2) X fmulp X fld1 X fsubp X fsqrt X fld1 X fdivp X fmulp X fld1 X fpatan X X leave X ret SHAR_EOF chmod 0644 asin.s || echo 'restore of asin.s failed' Wc_c="`wc -c < 'asin.s'`" test 401 -eq "$Wc_c" || echo 'asin.s: original size 401, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ceil.s ============== if test -f 'ceil.s' -a X"$1" != X"-c"; then echo 'x - skipping ceil.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ceil.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ceil.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Could use ceil(x) = -floor(-x) but this is quicker. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl ceil ceil: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X fldl 8(%ebp) /* load data */ X X fstcw -12(%ebp) /* store control word */ X fstcw -16(%ebp) /* store it again */ X orw $0x0800, -16(%ebp) /* round toward +inf */ X fldcw -16(%ebp) /* store new control word */ X frndint /* rounding gives ceil(x) */ X fldcw -12(%ebp) /* restore original control word */ X X leave X ret SHAR_EOF chmod 0644 ceil.s || echo 'restore of ceil.s failed' Wc_c="`wc -c < 'ceil.s'`" test 682 -eq "$Wc_c" || echo 'ceil.s: original size 682, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= exp.s ============== if test -f 'exp.s' -a X"$1" != X"-c"; then echo 'x - skipping exp.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting exp.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'exp.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl exp exp: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X X leave X ret SHAR_EOF chmod 0644 exp.s || echo 'restore of exp.s failed' Wc_c="`wc -c < 'exp.s'`" test 400 -eq "$Wc_c" || echo 'exp.s: original size 400, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= expm1.s ============== if test -f 'expm1.s' -a X"$1" != X"-c"; then echo 'x - skipping expm1.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting expm1.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'expm1.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl expm1 expm1: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X fldl 8(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X X fstpl -8(%ebp) X X fldl 8(%ebp) X fchs X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X X fld1 X fsubp X fmull -8(%ebp) X X leave X ret SHAR_EOF chmod 0644 expm1.s || echo 'restore of expm1.s failed' Wc_c="`wc -c < 'expm1.s'`" test 573 -eq "$Wc_c" || echo 'expm1.s: original size 573, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= finite.s ============== if test -f 'finite.s' -a X"$1" != X"-c"; then echo 'x - skipping finite.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting finite.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'finite.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl finite finite: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x7ff00000, %eax X cmpl $0x7ff00000, %eax X je .Lnotfinite X X movl $1, %eax X leave X ret X Lnotfinite: X movl $0, %eax X leave X ret SHAR_EOF chmod 0644 finite.s || echo 'restore of finite.s failed' Wc_c="`wc -c < 'finite.s'`" test 447 -eq "$Wc_c" || echo 'finite.s: original size 447, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= log.s ============== if test -f 'log.s' -a X"$1" != X"-c"; then echo 'x - skipping log.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting log.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'log.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl log log: X pushl %ebp X movl %esp,%ebp X X fldln2 X fldl 8(%ebp) X fyl2x X X leave X ret SHAR_EOF chmod 0644 log.s || echo 'restore of log.s failed' Wc_c="`wc -c < 'log.s'`" test 329 -eq "$Wc_c" || echo 'log.s: original size 329, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= log1p.s ============== if test -f 'log1p.s' -a X"$1" != X"-c"; then echo 'x - skipping log1p.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting log1p.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'log1p.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl log1p log1p: X pushl %ebp X movl %esp,%ebp X X fldln2 X fldl 8(%ebp) X fld1 X faddp X fyl2x X X leave X ret SHAR_EOF chmod 0644 log1p.s || echo 'restore of log1p.s failed' Wc_c="`wc -c < 'log1p.s'`" test 346 -eq "$Wc_c" || echo 'log1p.s: original size 346, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= pow.s ============== if test -f 'pow.s' -a X"$1" != X"-c"; then echo 'x - skipping pow.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting pow.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'pow.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** This file started life as a C implemenation of pow, it then evolved ** into an embeded asm version (with some C) and finally, all assembler. ** It's actually hacked assembler produced by gcc. ** ** Copyright 1990 G. Geers ** */ X text LC0: X .ascii "pow: DOMAIN error\12\0" X .align 4 LC1: X .double 0d0.00000000000000000000e+00 X .align 4 LC2: X .double 0d1.00000000000000000000e+00 X .align 4 globl pow pow: X pushl %ebp X movl %esp,%ebp X subl $28,%esp X pushl %edi X pushl %esi X pushl %ebx X movl 16(%ebp),%esi X movl 20(%ebp),%edi X movl $0,-4(%ebp) X movl $1,%ebx X fldl 8(%ebp) X ftst X fstp %st(0) X fnstsw %ax X sahf X jae .L2 X movl %ebx,-4(%ebp) X pushl %edi X pushl %esi /**/ X fldl 16(%ebp) X X fstcw -8(%ebp) X fstcw -12(%ebp) X orw $0x0400, -12(%ebp) X fldcw -12(%ebp) X X frndint X fldcw -8(%ebp) /**/ X fstpl -16(%ebp) X pushl %edi X pushl %esi X fldl (%esp) X addl $8,%esp X fsubl -16(%ebp) X fstpl -16(%ebp) X addl $8,%esp X fldl -16(%ebp) X ftst X fstp %st(0) X fnstsw %ax X sahf X je .L3 X movl $33,errno X pushl $.LC0 X pushl $_iob+32 X call fprintf X fldl .LC1 X jmp .L1 X .align 4 L3: X pushl %edi X pushl %esi /**/ X fldl 16(%ebp) X fistpl -8(%ebp) X movl -8(%ebp),%eax /**/ X testl %eax,%eax X jge .L5 X incl %eax L5: X andl $-2,%eax X movl -8(%ebp),%ecx X subl %eax,%ecx X movl %ecx,%eax X testl %eax,%eax X je .L2 X xorl %ebx,%ebx L2: X fldl 8(%ebp) X ftst X fstp %st(0) X fnstsw %ax X sahf X jne .L6 X pushl %edi X pushl %esi X fldl (%esp) X addl $8,%esp X ftst X fstp %st(0) X fnstsw %ax X sahf X je .L6 X fldl .LC1 X jmp .L1 X .align 4 L6: X pushl %edi X pushl %esi X fldl (%esp) X addl $8,%esp X ftst X fstp %st(0) X fnstsw %ax X sahf X jne .L8 X fldl .LC2 X jmp .L1 X .align 4 L8: /APP X fldl 16(%ebp) X fldl 8(%ebp) /NO_APP X cmpl $0,-4(%ebp) X je .L10 /APP X fchs /NO_APP L10: /APP X fyl2x X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale /NO_APP X testl %ebx,%ebx X jne .L1 /APP X fchs /NO_APP L1: X leal -28(%ebp),%esp X popl %ebx X popl %esi X popl %edi X leave X ret SHAR_EOF chmod 0644 pow.s || echo 'restore of pow.s failed' Wc_c="`wc -c < 'pow.s'`" test 2128 -eq "$Wc_c" || echo 'pow.s: original size 2128, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sin.s ============== if test -f 'sin.s' -a X"$1" != X"-c"; then echo 'x - skipping sin.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sin.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sin.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl sin sin: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fsin X X leave X ret SHAR_EOF chmod 0644 sin.s || echo 'restore of sin.s failed' Wc_c="`wc -c < 'sin.s'`" test 320 -eq "$Wc_c" || echo 'sin.s: original size 320, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= atan.s ============== if test -f 'atan.s' -a X"$1" != X"-c"; then echo 'x - skipping atan.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting atan.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'atan.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl atan atan: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fld1 X fpatan X X leave X ret SHAR_EOF chmod 0644 atan.s || echo 'restore of atan.s failed' Wc_c="`wc -c < 'atan.s'`" test 331 -eq "$Wc_c" || echo 'atan.s: original size 331, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= cos.s ============== if test -f 'cos.s' -a X"$1" != X"-c"; then echo 'x - skipping cos.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting cos.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'cos.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl cos cos: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fcos X X leave X ret SHAR_EOF chmod 0644 cos.s || echo 'restore of cos.s failed' Wc_c="`wc -c < 'cos.s'`" test 320 -eq "$Wc_c" || echo 'cos.s: original size 320, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= exp10.s ============== if test -f 'exp10.s' -a X"$1" != X"-c"; then echo 'x - skipping exp10.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting exp10.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'exp10.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl exp10 exp10: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fldl2t X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X X leave X ret SHAR_EOF chmod 0644 exp10.s || echo 'restore of exp10.s failed' Wc_c="`wc -c < 'exp10.s'`" test 404 -eq "$Wc_c" || echo 'exp10.s: original size 404, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= floor.s ============== if test -f 'floor.s' -a X"$1" != X"-c"; then echo 'x - skipping floor.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting floor.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'floor.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl floor floor: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X fldl 8(%ebp) /* load data */ X X fstcw -12(%ebp) /* store control word */ X fstcw -16(%ebp) /* store it again */ X orw $0x0400, -16(%ebp) /* round toward -inf */ X fldcw -16(%ebp) /* store new control word */ X X frndint /* rounding gives floor(x) */ X fldcw -12(%ebp) /* restore original control word */ X X leave X ret SHAR_EOF chmod 0644 floor.s || echo 'restore of floor.s failed' Wc_c="`wc -c < 'floor.s'`" test 628 -eq "$Wc_c" || echo 'floor.s: original size 628, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= log10.s ============== if test -f 'log10.s' -a X"$1" != X"-c"; then echo 'x - skipping log10.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting log10.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'log10.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl log10 log10: X pushl %ebp X movl %esp,%ebp X X fldlg2 X fldl 8(%ebp) X fyl2x X X leave X ret SHAR_EOF chmod 0644 log10.s || echo 'restore of log10.s failed' Wc_c="`wc -c < 'log10.s'`" test 333 -eq "$Wc_c" || echo 'log10.s: original size 333, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= rint.s ============== if test -f 'rint.s' -a X"$1" != X"-c"; then echo 'x - skipping rint.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting rint.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'rint.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl rint rint: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X frndint X X leave X ret SHAR_EOF chmod 0644 rint.s || echo 'restore of rint.s failed' Wc_c="`wc -c < 'rint.s'`" test 326 -eq "$Wc_c" || echo 'rint.s: original size 326, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sqrt.s ============== if test -f 'sqrt.s' -a X"$1" != X"-c"; then echo 'x - skipping sqrt.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sqrt.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sqrt.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** ** sqrt in the prevailing precision */ X X .align 4 X .globl sqrt sqrt: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fsqrt X X leave X ret SHAR_EOF chmod 0644 sqrt.s || echo 'restore of sqrt.s failed' Wc_c="`wc -c < 'sqrt.s'`" test 359 -eq "$Wc_c" || echo 'sqrt.s: original size 359, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= exp2.s ============== if test -f 'exp2.s' -a X"$1" != X"-c"; then echo 'x - skipping exp2.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting exp2.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'exp2.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl exp2 exp2: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X X leave X ret SHAR_EOF chmod 0644 exp2.s || echo 'restore of exp2.s failed' Wc_c="`wc -c < 'exp2.s'`" test 387 -eq "$Wc_c" || echo 'exp2.s: original size 387, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= log2.s ============== if test -f 'log2.s' -a X"$1" != X"-c"; then echo 'x - skipping log2.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting log2.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'log2.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl log2 log2: X pushl %ebp X movl %esp,%ebp X X fld1 X fldl 8(%ebp) X fyl2x X X leave X ret SHAR_EOF chmod 0644 log2.s || echo 'restore of log2.s failed' Wc_c="`wc -c < 'log2.s'`" test 329 -eq "$Wc_c" || echo 'log2.s: original size 329, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sinh.s ============== if test -f 'sinh.s' -a X"$1" != X"-c"; then echo 'x - skipping sinh.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sinh.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sinh.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** ** This file started life as a C program but has been massively hacked. ** ** The coefficients are from Hart, et.al. via Berkeley ** */ X data X .align 4 p0: X .double 0d-6.30767364049771680000e+05 X .align 4 p1: X .double 0d-8.99127202203950870000e+04 X .align 4 p2: X .double 0d-2.89421135598956380000e+03 X .align 4 p3: X .double 0d-2.63056321339749710000e+01 X .align 4 q0: X .double 0d-6.30767364049771680000e+05 X .align 4 q1: X .double 0d1.52151737879001900000e+04 X .align 4 q2: X .double 0d-1.73678953558233700000e+02 X text X .align 4 LC0: X .double 0d2.10000000000000000000e+01 X .align 4 LC1: X .double 0d5.00000000000000000000e-01 X X .align 4 globl sinh X sinh: X pushl %ebp X movl %esp,%ebp X subl $72,%esp X fldl 8(%ebp) X fstpl -8(%ebp) X movl $1,%edx X fldl -8(%ebp) X ftst X fstp %st(0) X fnstsw %ax X sahf X jae .L2 X fldl -8(%ebp) X fchs X fstpl -8(%ebp) X movl $-1,%edx L2: X fldl .LC0 X fldl -8(%ebp) X fcompp X fnstsw %ax X sahf X jbe .L3 X fldl -8(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X fldl .LC1 X fmulp X testl %edx,%edx X jg .L7 X fchs L7: X leave X ret L3: X fldl .LC1 X fldl -8(%ebp) X fcompp X fnstsw %ax X sahf X jbe .L6 X fldl 8(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X fst %st(1) X fld1 X fdivp X fsubrp X fldl .LC1 X fmulp X leave X ret L6: X fldl -8(%ebp) X fmull -8(%ebp) X fstl -16(%ebp) X fmull p3 X faddl p2 X fmull -16(%ebp) X faddl p1 X fmull -16(%ebp) X faddl p0 X fmull -8(%ebp) X fstpl -72(%ebp) X fldl -16(%ebp) X faddl q2 X fmull -16(%ebp) X faddl q1 X fmull -16(%ebp) X faddl q0 X fstpl -56(%ebp) X fldl -72(%ebp) X fdivl -56(%ebp) X pushl %edx X fildl (%esp) X addl $4,%esp X fstpl -64(%ebp) X fmull -64(%ebp) X leal -76(%ebp),%esp X leave X ret SHAR_EOF chmod 0644 sinh.s || echo 'restore of sinh.s failed' Wc_c="`wc -c < 'sinh.s'`" test 1943 -eq "$Wc_c" || echo 'sinh.s: original size 1943, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= cosh.s ============== if test -f 'cosh.s' -a X"$1" != X"-c"; then echo 'x - skipping cosh.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting cosh.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'cosh.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 LC2: X .double 0.500 X X .align 4 X .globl cosh cosh: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X ftst X fstsw %ax X sahf X ja .Lpos X fchs X Lpos: X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X fst %st(1) X X fld1 X fdivp X faddp X X fldl .LC2 X fmulp X X leave X ret SHAR_EOF chmod 0644 cosh.s || echo 'restore of cosh.s failed' Wc_c="`wc -c < 'cosh.s'`" test 533 -eq "$Wc_c" || echo 'cosh.s: original size 533, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= tanh.s ============== if test -f 'tanh.s' -a X"$1" != X"-c"; then echo 'x - skipping tanh.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting tanh.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'tanh.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl tanh tanh: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X fldl 8(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X fstl %st(1) X fstl -16(%ebp) X X fld1 X fdivp X X fsubr X faddl -16(%ebp) X fdivrp X X leave X ret SHAR_EOF chmod 0644 tanh.s || echo 'restore of tanh.s failed' Wc_c="`wc -c < 'tanh.s'`" test 493 -eq "$Wc_c" || echo 'tanh.s: original size 493, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= asinh.s ============== if test -f 'asinh.s' -a X"$1" != X"-c"; then echo 'x - skipping asinh.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting asinh.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asinh.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl asinh asinh: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X X fmull 8(%ebp) X fld1 X faddp X fsqrt X faddl 8(%ebp) X fldln2 X fxch %st(1) X fyl2x X X leave X ret SHAR_EOF chmod 0644 asinh.s || echo 'restore of asinh.s failed' Wc_c="`wc -c < 'asinh.s'`" test 397 -eq "$Wc_c" || echo 'asinh.s: original size 397, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= acosh.s ============== if test -f 'acosh.s' -a X"$1" != X"-c"; then echo 'x - skipping acosh.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting acosh.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'acosh.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl acosh acosh: X pushl %ebp X movl %esp,%ebp X X fldl 8(%ebp) X X fmull 8(%ebp) X fld1 X fsubrp X fsqrt X faddl 8(%ebp) X fldln2 X fxch %st(1) X fyl2x X X leave X ret SHAR_EOF chmod 0644 acosh.s || echo 'restore of acosh.s failed' Wc_c="`wc -c < 'acosh.s'`" test 398 -eq "$Wc_c" || echo 'acosh.s: original size 398, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= atanh.s ============== if test -f 'atanh.s' -a X"$1" != X"-c"; then echo 'x - skipping atanh.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting atanh.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'atanh.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 Lhalf: X .double 0.500 X X .align 4 X .globl atanh atanh: X pushl %ebp X movl %esp,%ebp X X fld1 X faddl 8(%ebp) X fld1 X fsubl 8(%ebp) X fdivrp X X fldln2 X fxch %st(1) X fyl2x X X fldl .Lhalf X fmulp X X leave X ret SHAR_EOF chmod 0644 atanh.s || echo 'restore of atanh.s failed' Wc_c="`wc -c < 'atanh.s'`" test 438 -eq "$Wc_c" || echo 'atanh.s: original size 438, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= atan2.s ============== if test -f 'atan2.s' -a X"$1" != X"-c"; then echo 'x - skipping atan2.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting atan2.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'atan2.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 Lpi: X .double 3.14159265358979323846 X X .align 4 Lmpi: X .double -3.14159265358979323846 X X .align 4 Lhalfpi: X .double 1.57079632679489661923 X X .align 4 Lmhalfpi: X .double -1.57079632679489661923 X X .align 4 X .globl atan2 atan2: X pushl %ebp X movl %esp,%ebp X X fldl 16(%ebp) X ftst X fnstsw %ax X sahf X fldl 8(%ebp) X jz .Lgotzero X jc .Lgotneg X X fdivp X fld1 X fpatan X X leave X ret X Lgotneg: X ftst X fnstsw %ax X sahf X jc .Lneg1 X X fdivp X fld1 X fpatan X fldl .Lmpi X fsubrp X X leave X ret X Lneg1: X fdivp X fld1 X fpatan X fldl .Lpi X fsubrp X X leave X ret X Lgotzero: X ftst X fnstsw %ax X sahf X jz .Lzero X jc .Lneg X X fldl .Lhalfpi X X leave X ret X Lzero: X fldz X X leave X ret X Lneg: X fldl .Lmhalfpi X X leave X ret SHAR_EOF chmod 0644 atan2.s || echo 'restore of atan2.s failed' Wc_c="`wc -c < 'atan2.s'`" test 931 -eq "$Wc_c" || echo 'atan2.s: original size 931, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= fmod.s ============== if test -f 'fmod.s' -a X"$1" != X"-c"; then echo 'x - skipping fmod.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting fmod.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'fmod.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl fmod fmod: X pushl %ebp X movl %esp,%ebp X X fldl 16(%ebp) X fldl 8(%ebp) Lnotred: X fprem X X fstsw %ax X sahf X jp .Lnotred X X leave X ret SHAR_EOF chmod 0644 fmod.s || echo 'restore of fmod.s failed' Wc_c="`wc -c < 'fmod.s'`" test 380 -eq "$Wc_c" || echo 'fmod.s: original size 380, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ieee_ext.s ============== if test -f 'ieee_ext.s' -a X"$1" != X"-c"; then echo 'x - skipping ieee_ext.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ieee_ext.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ieee_ext.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl isnan isnan: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x7ff00000, %eax X cmpl $0x7ff00000, %eax X jne .Lnotnan X movl 12(%ebp), %eax X andl $0xfffff, %eax X orl 8(%ebp), %eax X je .Lnotnan X X movl $1, %eax X leave X ret X Lnotnan: X movl $0, %eax X Ldone: X leave X ret X X .align 4 X .globl isinf isinf: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x7ff00000, %eax X cmpl $0x7ff00000, %eax X je .Lcouldbeinf X Lnotinf: X movl $0, %eax X leave X ret X Lcouldbeinf: X movl 12(%ebp), %eax X andl $0xfffff, %eax X orl 8(%ebp), %eax X jne .Lnotinf X X movl $1, %eax X leave X ret X X .align 4 X .globl iszero iszero: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X cmpl $0x0, %eax X je .Lcouldbezero Lnotzero: X movl $0, %eax X leave X ret X Lcouldbezero: X andl $0xfffff, %eax X orl 8(%ebp), %eax X jne .Lnotzero X X movl $1, %eax X leave X ret X X .align 4 X .globl signbit signbit: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x80000000, %eax X cmpl $0x80000000, %eax X jne .Lpos X movl $1, %eax X leave X ret X Lpos: X movl $0, %eax X leave X ret X X .align 4 X .globl issubnormal issubnormal: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x7ff00000, %eax X cmpl $0x0, %eax X je .Lcouldbesub X Lnotsubnorm: X movl $0, %eax X leave X ret X Lcouldbesub: X movl 12(%ebp), %eax X andl $0xfffff, %eax X orl 8(%ebp), %eax X je .Lnotsubnorm X X movl $1, %eax X leave X ret X X .align 4 X .globl isnormal isnormal: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x7ff00000, %eax /* mask sign bit */ X xorl $0x7ff00000, %eax X cmpl $0x0, %eax X je .Lnotnorm X cmpl $0x7ff00000, %eax X je .Lnotnorm X Lnorm: X movl $1, %eax X leave X ret X Lcouldbenorm: X movl 12(%ebp), %eax X andl $0xfffff, %eax X orl 8(%ebp), %eax X je .Lnorm X Lnotnorm: X movl $0, %eax X leave X ret SHAR_EOF chmod 0644 ieee_ext.s || echo 'restore of ieee_ext.s failed' Wc_c="`wc -c < 'ieee_ext.s'`" test 1994 -eq "$Wc_c" || echo 'ieee_ext.s: original size 1994, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= infinity.s ============== if test -f 'infinity.s' -a X"$1" != X"-c"; then echo 'x - skipping infinity.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting infinity.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'infinity.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl infinity infinity: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x7ff00000, -12(%ebp) X movl $0x0, -16(%ebp) X X fldl -16(%ebp) X X leave X ret SHAR_EOF chmod 0644 infinity.s || echo 'restore of infinity.s failed' Wc_c="`wc -c < 'infinity.s'`" test 394 -eq "$Wc_c" || echo 'infinity.s: original size 394, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sqrtp.s ============== if test -f 'sqrtp.s' -a X"$1" != X"-c"; then echo 'x - skipping sqrtp.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sqrtp.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sqrtp.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** ** sqrt in 64 bit precision always */ X X .align 4 X .globl sqrtp sqrtp: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X fnstcw -12(%ebp) /* store current control word */ X fnstcw -16(%ebp) /* store again */ X andw $0xf2ff, -12(%ebp) /* enable 64 bit precision */ X fldcw -12(%ebp) X X fldl 8(%ebp) X fsqrt X X fldcw -16(%ebp) /* restore original control word */ X X leave X ret SHAR_EOF chmod 0644 sqrtp.s || echo 'restore of sqrtp.s failed' Wc_c="`wc -c < 'sqrtp.s'`" test 605 -eq "$Wc_c" || echo 'sqrtp.s: original size 605, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ieee_values.s ============== if test -f 'ieee_values.s' -a X"$1" != X"-c"; then echo 'x - skipping ieee_values.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ieee_values.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ieee_values.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl max_normal X max_normal: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x7fefffff, -12(%ebp) X movl $0xffffffff, -16(%ebp) X X fldl -16(%ebp) X X leave X ret X X .align 4 X .globl min_normal X min_normal: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x00100000, -12(%ebp) X movl $0x00000001, -16(%ebp) X X fldl -16(%ebp) X X leave X ret X X .align 4 X .globl min_subnormal X min_subnormal: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x0, -12(%ebp) X movl $0x00000001, -16(%ebp) X X fldl -16(%ebp) X X leave X ret X X .align 4 X .globl max_subnormal X max_subnormal: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x000fffff, -12(%ebp) X movl $0xffffffff, -16(%ebp) X X fldl -16(%ebp) X X leave X ret X X .align 4 X .globl quiet_nan X quiet_nan: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x7fffffff, -12(%ebp) X movl $0xffffffff, -16(%ebp) X X fldl -16(%ebp) X X leave X ret X X .align 4 X .globl signaling_nan X signaling_nan: X pushl %ebp X movl %esp,%ebp X subl $8, %esp X X movl $0x7ff00000, -12(%ebp) X movl $0x00000001, -16(%ebp) X X fldl -16(%ebp) X X leave X ret SHAR_EOF chmod 0644 ieee_values.s || echo 'restore of ieee_values.s failed' Wc_c="`wc -c < 'ieee_values.s'`" test 1295 -eq "$Wc_c" || echo 'ieee_values.s: original size 1295, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= acosf.s ============== if test -f 'acosf.s' -a X"$1" != X"-c"; then echo 'x - skipping acosf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting acosf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'acosf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 Lhalfpi: X .double 1.57079632679489661923 X X .align 4 X .globl acosf acosf: X pushl %ebp X movl %esp,%ebp X X flds 8(%ebp) X X ftst X fstsw %ax X sahf X jz .Lzero X X fst %st(1) X fmuls 8(%ebp) X fld1 X fsubp X fsqrt X fdivp X fld1 X fpatan X jnc .Ldone X X fldpi X faddp X leave X ret X Lzero: X flds .Lhalfpi X Ldone: X leave X ret SHAR_EOF chmod 0644 acosf.s || echo 'restore of acosf.s failed' Wc_c="`wc -c < 'acosf.s'`" test 546 -eq "$Wc_c" || echo 'acosf.s: original size 546, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= copysignf.s ============== if test -f 'copysignf.s' -a X"$1" != X"-c"; then echo 'x - skipping copysignf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting copysignf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'copysignf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 globl copysignf copysignf: X pushl %ebp X movl %esp,%ebp X X movl 12(%ebp), %eax X andl $0x80000000, %eax X cmpl $0x80000000, %eax X je .Lneg X andl $0x7fffffff, 8(%ebp) X flds 8(%ebp) /* Store argument for return */ X leave X ret Lneg: X orl $0x80000000, 8(%ebp) X flds 8(%ebp) /* Store argument for return */ X leave X ret SHAR_EOF chmod 0644 copysignf.s || echo 'restore of copysignf.s failed' Wc_c="`wc -c < 'copysignf.s'`" test 555 -eq "$Wc_c" || echo 'copysignf.s: original size 555, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= fabsf.s ============== if test -f 'fabsf.s' -a X"$1" != X"-c"; then echo 'x - skipping fabsf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting fabsf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'fabsf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl fabsf fabsf: X pushl %ebp X movl %esp,%ebp X X flds 8(%ebp) X fabs X X leave X ret SHAR_EOF chmod 0644 fabsf.s || echo 'restore of fabsf.s failed' Wc_c="`wc -c < 'fabsf.s'`" test 324 -eq "$Wc_c" || echo 'fabsf.s: original size 324, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= log10f.s ============== if test -f 'log10f.s' -a X"$1" != X"-c"; then echo 'x - skipping log10f.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting log10f.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'log10f.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl log10f log10f: X pushl %ebp X movl %esp,%ebp X X fldlg2 X flds 8(%ebp) X fyl2x X X leave X ret SHAR_EOF chmod 0644 log10f.s || echo 'restore of log10f.s failed' Wc_c="`wc -c < 'log10f.s'`" test 335 -eq "$Wc_c" || echo 'log10f.s: original size 335, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sinf.s ============== if test -f 'sinf.s' -a X"$1" != X"-c"; then echo 'x - skipping sinf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sinf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sinf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl sinf sinf: X pushl %ebp X movl %esp,%ebp X X flds 8(%ebp) X fsin X X leave X ret SHAR_EOF chmod 0644 sinf.s || echo 'restore of sinf.s failed' Wc_c="`wc -c < 'sinf.s'`" test 322 -eq "$Wc_c" || echo 'sinf.s: original size 322, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= acoshf.s ============== if test -f 'acoshf.s' -a X"$1" != X"-c"; then echo 'x - skipping acoshf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting acoshf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'acoshf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl acoshf acoshf: X pushl %ebp X movl %esp,%ebp X X flds 8(%ebp) X X fmuls 8(%ebp) X fld1 X fsubrp X fsqrt X fadds 8(%ebp) X fldln2 X fxch %st(1) X fyl2x X X leave X ret SHAR_EOF chmod 0644 acoshf.s || echo 'restore of acoshf.s failed' Wc_c="`wc -c < 'acoshf.s'`" test 400 -eq "$Wc_c" || echo 'acoshf.s: original size 400, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= cosf.s ============== if test -f 'cosf.s' -a X"$1" != X"-c"; then echo 'x - skipping cosf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting cosf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'cosf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl cosf cosf: X pushl %ebp X movl %esp,%ebp X X flds 8(%ebp) X fcos X X leave X ret SHAR_EOF chmod 0644 cosf.s || echo 'restore of cosf.s failed' Wc_c="`wc -c < 'cosf.s'`" test 322 -eq "$Wc_c" || echo 'cosf.s: original size 322, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= finitef.s ============== if test -f 'finitef.s' -a X"$1" != X"-c"; then echo 'x - skipping finitef.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting finitef.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'finitef.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl finitef finitef: X pushl %ebp X movl %esp,%ebp X X movl 8(%ebp), %eax X andl $0x7ff00000, %eax X cmpl $0x7ff00000, %eax X je .Lnotfinite X X movl $1, %eax X leave X ret X Lnotfinite: X movl $0, %eax X leave X ret SHAR_EOF chmod 0644 finitef.s || echo 'restore of finitef.s failed' Wc_c="`wc -c < 'finitef.s'`" test 448 -eq "$Wc_c" || echo 'finitef.s: original size 448, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= log1pf.s ============== if test -f 'log1pf.s' -a X"$1" != X"-c"; then echo 'x - skipping log1pf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting log1pf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'log1pf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** */ X X .align 4 X .globl log1pf log1pf: X pushl %ebp X movl %esp,%ebp X X fldln2 X flds 8(%ebp) X fld1 X faddp X fyl2x X X leave X ret SHAR_EOF chmod 0644 log1pf.s || echo 'restore of log1pf.s failed' Wc_c="`wc -c < 'log1pf.s'`" test 348 -eq "$Wc_c" || echo 'log1pf.s: original size 348, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sinhf.s ============== if test -f 'sinhf.s' -a X"$1" != X"-c"; then echo 'x - skipping sinhf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sinhf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sinhf.s' && /* ** This file is part of the alternative 80386 math library and is ** covered by the GNU General Public license with my modification ** as noted in the README file that accompanied this file. ** ** Copyright 1990 G. Geers ** ** This file started life as a C program but has been massively hacked. ** */ X data X .align 4 p0: X .double 0d-6.30767364049771680000e+05 X .align 4 p1: X .double 0d-8.99127202203950870000e+04 X .align 4 p2: X .double 0d-2.89421135598956380000e+03 X .align 4 p3: X .double 0d-2.63056321339749710000e+01 X .align 4 q0: X .double 0d-6.30767364049771680000e+05 X .align 4 q1: X .double 0d1.52151737879001900000e+04 X .align 4 q2: X .double 0d-1.73678953558233700000e+02 X text X .align 4 LC0: X .double 0d2.10000000000000000000e+01 X .align 4 LC1: X .double 0d5.00000000000000000000e-01 X .align 4 X globl sinhf sinhf: X pushl %ebp X movl %esp,%ebp X subl $88,%esp X movl 8(%ebp),%ecx X movl %ecx,-4(%ebp) X movl $1,%edx X pushl %ecx X flds (%esp) X addl $4,%esp X ftst X fstp %st(0) X fnstsw %ax X sahf X jae .L2 X flds -4(%ebp) X fchs X fstps -4(%ebp) X movl $-1,%edx L2: X flds -4(%ebp) X fldl .LC0 X fcompp X fnstsw %ax X sahf X jae .L3 X flds 8(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X fldl .LC1 X fmulp X testl %edx,%edx X jg .L7 X fchs L7: X leave X ret L3: X flds -4(%ebp) X fldl .LC1 X fcompp X fnstsw %ax X sahf X jae .L6 X flds -4(%ebp) X fldl2e X fmulp X fstl %st(1) X frndint X fstl %st(2) X fsubrp X f2xm1 X fld1 X faddp X fscale X fst %st(1) X fld1 X fdivp X fsubrp X fldl .LC1 X fmulp X leave X ret L6: X flds -4(%ebp) X fmuls -4(%ebp) X fstps -88(%ebp) X flds -88(%ebp) X fstpl -12(%ebp) X fldl -12(%ebp) X fmull p3 X faddl p2 X fmull -12(%ebp) X faddl p1 X fmull -12(%ebp) X faddl p0 X flds -4(%ebp) X fstpl -20(%ebp) X fmull -20(%ebp) X fstpl -88(%ebp) X fldl -12(%ebp) X faddl q2 X fmull -12(%ebp) X faddl q1 X fmull -12(%ebp) X faddl q0 X fstpl -60(%ebp) X fldl -88(%ebp) X fdivl -60(%ebp) X pushl %edx X fildl (%esp) X addl $4,%esp X fstps -64(%ebp) X flds -64(%ebp) X fstpl -72(%ebp) X fmull -72(%ebp) X addl $-4,%esp X fstps (%esp) X flds (%esp) X addl $4,%esp X leave X ret SHAR_EOF chmod 0644 sinhf.s || echo 'restore of sinhf.s failed' Wc_c="`wc -c < 'sinhf.s'`" test 2072 -eq "$Wc_c" || echo 'sinhf.s: original size 2072, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= asinf.s ============== if test -f 'asinf.s' -a X"$1" != X"-c"; then echo 'x - skipping asinf.s (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting asinf.s (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asinf.s' && /* SHAR_EOF true || echo 'restore of asinf.s failed' fi echo 'End of mathlib2.0 part 3' echo 'File asinf.s is continued in part 4' echo 4 > _shar_seq_.tmp exit 0 -- Glenn Geers | "So when it's over, we're back to people. Department of Theoretical Physics | Just to prove that human touch can have The University of Sydney | no equal." Sydney NSW 2006 Australia | - Basia Trzetrzelewska, 'Prime Time TV'