]> granicus.if.org Git - yasm/commitdiff
Remove ancient doc directory.
authorPeter Johnson <peter@tortall.net>
Tue, 19 Sep 2006 04:02:38 +0000 (04:02 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 19 Sep 2006 04:02:38 +0000 (04:02 -0000)
Also remove float (gdtoa and softfloat) directory, as no one is asking for
floating point calculation, we've never integrated any of this code, and
it's just taking up space (note it's still available on a branch).

svn path=/trunk/yasm/; revision=1622

114 files changed:
float/gdtoa/Makefile [deleted file]
float/gdtoa/README [deleted file]
float/gdtoa/arithchk.c [deleted file]
float/gdtoa/dmisc.c [deleted file]
float/gdtoa/dtoa.c [deleted file]
float/gdtoa/g_Qfmt.c [deleted file]
float/gdtoa/g__fmt.c [deleted file]
float/gdtoa/g_ddfmt.c [deleted file]
float/gdtoa/g_dfmt.c [deleted file]
float/gdtoa/g_ffmt.c [deleted file]
float/gdtoa/g_xLfmt.c [deleted file]
float/gdtoa/g_xfmt.c [deleted file]
float/gdtoa/gdtoa.c [deleted file]
float/gdtoa/gdtoa.h [deleted file]
float/gdtoa/gdtoaimp.h [deleted file]
float/gdtoa/gethex.c [deleted file]
float/gdtoa/gmisc.c [deleted file]
float/gdtoa/hd_init.c [deleted file]
float/gdtoa/hexnan.c [deleted file]
float/gdtoa/misc.c [deleted file]
float/gdtoa/smisc.c [deleted file]
float/gdtoa/strtoIQ.c [deleted file]
float/gdtoa/strtoId.c [deleted file]
float/gdtoa/strtoIdd.c [deleted file]
float/gdtoa/strtoIf.c [deleted file]
float/gdtoa/strtoIg.c [deleted file]
float/gdtoa/strtoIx.c [deleted file]
float/gdtoa/strtoIxL.c [deleted file]
float/gdtoa/strtod.c [deleted file]
float/gdtoa/strtodI.c [deleted file]
float/gdtoa/strtodg.c [deleted file]
float/gdtoa/strtof.c [deleted file]
float/gdtoa/strtopQ.c [deleted file]
float/gdtoa/strtopd.c [deleted file]
float/gdtoa/strtopdd.c [deleted file]
float/gdtoa/strtopf.c [deleted file]
float/gdtoa/strtopx.c [deleted file]
float/gdtoa/strtopxL.c [deleted file]
float/gdtoa/strtorQ.c [deleted file]
float/gdtoa/strtord.c [deleted file]
float/gdtoa/strtordd.c [deleted file]
float/gdtoa/strtorf.c [deleted file]
float/gdtoa/strtorx.c [deleted file]
float/gdtoa/strtorxL.c [deleted file]
float/gdtoa/sum.c [deleted file]
float/gdtoa/test/Makefile [deleted file]
float/gdtoa/test/Q.ou0 [deleted file]
float/gdtoa/test/Q.ou1 [deleted file]
float/gdtoa/test/Qtest.c [deleted file]
float/gdtoa/test/README [deleted file]
float/gdtoa/test/d.out [deleted file]
float/gdtoa/test/dI.out [deleted file]
float/gdtoa/test/dIsi.out [deleted file]
float/gdtoa/test/dItest.c [deleted file]
float/gdtoa/test/dd.out [deleted file]
float/gdtoa/test/ddsi.out [deleted file]
float/gdtoa/test/ddtest.c [deleted file]
float/gdtoa/test/dt.c [deleted file]
float/gdtoa/test/dtest.c [deleted file]
float/gdtoa/test/dtst.out [deleted file]
float/gdtoa/test/f.out [deleted file]
float/gdtoa/test/ftest.c [deleted file]
float/gdtoa/test/getround.c [deleted file]
float/gdtoa/test/rtestnos [deleted file]
float/gdtoa/test/strtoIdSI.c [deleted file]
float/gdtoa/test/strtoIddSI.c [deleted file]
float/gdtoa/test/strtodISI.c [deleted file]
float/gdtoa/test/strtodt.c [deleted file]
float/gdtoa/test/strtopddSI.c [deleted file]
float/gdtoa/test/strtorddSI.c [deleted file]
float/gdtoa/test/testnos [deleted file]
float/gdtoa/test/testnos1 [deleted file]
float/gdtoa/test/testnos3 [deleted file]
float/gdtoa/test/x.ou0 [deleted file]
float/gdtoa/test/x.ou1 [deleted file]
float/gdtoa/test/xL.ou0 [deleted file]
float/gdtoa/test/xL.ou1 [deleted file]
float/gdtoa/test/xLtest.c [deleted file]
float/gdtoa/test/xQtest.c [deleted file]
float/gdtoa/test/xsum0.out [deleted file]
float/gdtoa/test/xtest.c [deleted file]
float/gdtoa/ulp.c [deleted file]
float/gdtoa/xsum0.out [deleted file]
float/softfloat/processors/386-GCC.h [deleted file]
float/softfloat/processors/SPARC-GCC.h [deleted file]
float/softfloat/softfloat/README.txt [deleted file]
float/softfloat/softfloat/SoftFloat-history.txt [deleted file]
float/softfloat/softfloat/SoftFloat-source.txt [deleted file]
float/softfloat/softfloat/SoftFloat.txt [deleted file]
float/softfloat/softfloat/bits32/386-Win32-GCC/milieu.h [deleted file]
float/softfloat/softfloat/bits32/386-Win32-GCC/softfloat-specialize [deleted file]
float/softfloat/softfloat/bits32/386-Win32-GCC/softfloat.h [deleted file]
float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/milieu.h [deleted file]
float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat-specialize [deleted file]
float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat.h [deleted file]
float/softfloat/softfloat/bits32/softfloat-macros [deleted file]
float/softfloat/softfloat/bits32/softfloat.c [deleted file]
float/softfloat/softfloat/bits32/templates/milieu.h [deleted file]
float/softfloat/softfloat/bits32/templates/softfloat-specialize [deleted file]
float/softfloat/softfloat/bits32/templates/softfloat.h [deleted file]
float/softfloat/softfloat/bits32/timesoftfloat.c [deleted file]
float/softfloat/softfloat/bits64/386-Win32-GCC/milieu.h [deleted file]
float/softfloat/softfloat/bits64/386-Win32-GCC/softfloat-specialize [deleted file]
float/softfloat/softfloat/bits64/386-Win32-GCC/softfloat.h [deleted file]
float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/milieu.h [deleted file]
float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat-specialize [deleted file]
float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat.h [deleted file]
float/softfloat/softfloat/bits64/softfloat-macros [deleted file]
float/softfloat/softfloat/bits64/softfloat.c [deleted file]
float/softfloat/softfloat/bits64/templates/milieu.h [deleted file]
float/softfloat/softfloat/bits64/templates/softfloat-specialize [deleted file]
float/softfloat/softfloat/bits64/templates/softfloat.h [deleted file]
float/softfloat/softfloat/bits64/timesoftfloat.c [deleted file]
float/softfloat/softfloat/timesoftfloat.txt [deleted file]

diff --git a/float/gdtoa/Makefile b/float/gdtoa/Makefile
deleted file mode 100644 (file)
index 3387a65..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# /****************************************************************
-# Copyright (C) 1998 by Lucent Technologies
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that the copyright notice and this
-# permission notice and warranty disclaimer appear in supporting
-# documentation, and that the name of Lucent or any of its entities
-# not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-# IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-# THIS SOFTWARE.
-#
-# ****************************************************************/
-
-.SUFFIXES: .c .o
-CC = cc
-CFLAGS = -g -DINFNAN_CHECK
-
-.c.o:
-       $(CC) -c $(CFLAGS) $*.c
-
-all: arith.h gdtoa.a
-
-arith.h: arithchk.c
-       $(CC) $(CFLAGS) arithchk.c || $(CC) -DNO_LONG_LONG $(CFLAGS) arithchk.c
-       ./a.out >arith.h
-       rm -f a.out arithchk.o
-
-gdtoa.a: dmisc.c dtoa.c g_Qfmt.c g__fmt.c g_ddfmt.c g_dfmt.c g_ffmt.c\
-        g_xLfmt.c g_xfmt.c gdtoa.c gethex.c gmisc.c hd_init.c hexnan.c\
-        misc.c smisc.c strtoIQ.c strtoId.c strtoIdd.c strtoIf.c strtoIg.c\
-        strtoIx.c strtoIxL.c strtod.c strtodI.c strtodg.c strtof.c strtopQ.c\
-        strtopd.c strtopdd.c strtopf.c strtopx.c strtopxL.c strtorQ.c\
-        strtord.c strtordd.c strtorf.c strtorx.c strtorxL.c sum.c ulp.c
-       $(CC) -c $(CFLAGS) $?
-       x=`echo $? | sed 's/\.c/.o/g'` && ar ruv gdtoa.a $$x && rm $$x
-       ranlib gdtoa.a || true
-
-# If your system lacks ranlib, you do not need it.
-
-xs0 = README arithchk.c dmisc.c dtoa.c g_Qfmt.c g__fmt.c g_ddfmt.c g_dfmt.c\
-        g_ffmt.c g_xLfmt.c g_xfmt.c gdtoa.c gdtoa.h gdtoaimp.h gethex.c\
-        gmisc.c hd_init.c hexnan.c makefile misc.c smisc.c strtoIQ.c\
-        strtoId.c strtoIdd.c strtoIf.c strtoIg.c strtoIx.c strtoIxL.c\
-        strtod.c strtodI.c strtodg.c strtof.c strtopQ.c strtopd.c strtopdd.c\
-        strtopf.c strtopx.c strtopxL.c strtorQ.c strtord.c strtordd.c\
-        strtorf.c strtorx.c strtorxL.c sum.c ulp.c
-
-# "make xsum.out" to check for transmission errors; source for xsum is
-# netlib's "xsum.c from f2c", e.g.,
-# ftp://netlib.bell-labs.com/netlib/f2c/xsum.c.gz
-
-xsum.out: xsum0.out $(xs0)
-       xsum $(xs0) >xsum1.out
-       cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out
-
-clean:
-       rm -f arith.h *.[ao] xsum.out xsum1.out
diff --git a/float/gdtoa/README b/float/gdtoa/README
deleted file mode 100644 (file)
index f29e1cf..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-This directory contains source for a library of binary -> decimal
-and decimal -> binary conversion routines, for single-, double-,
-and extended-precision IEEE binary floating-point arithmetic, and
-other IEEE-like binary floating-point, including "double double",
-as in
-
-       T. J. Dekker, "A Floating-Point Technique for Extending the
-       Available Precision", Numer. Math. 18 (1971), pp. 224-242
-
-and
-
-       "Inside Macintosh: PowerPC Numerics", Addison-Wesley, 1994
-
-The conversion routines use double-precision floating-point arithmetic
-and, where necessary, high precision integer arithmetic.  The routines
-are generalizations of the strtod and dtoa routines described in
-
-       David M. Gay, "Correctly Rounded Binary-Decimal and
-       Decimal-Binary Conversions", Numerical Analysis Manuscript
-       No. 90-10, Bell Labs, Murray Hill, 1990;
-       http://cm.bell-labs.com/cm/cs/what/ampl/REFS/rounding.ps.gz
-
-(based in part on papers by Clinger and Steele & White: see the
-references in the above paper).
-
-The present conversion routines should be able to use any of IEEE binary,
-VAX, or IBM-mainframe double-precision arithmetic internally, but I (dmg)
-have so far only had a chance to test them with IEEE double precision
-arithmetic.
-
-The core conversion routines are strtodg for decimal -> binary conversions
-and gdtoa for binary -> decimal conversions.  These routines operate
-on arrays of unsigned 32-bit integers of type ULong, a signed 32-bit
-exponent of type Long, and arithmetic characteristics described in
-struct FPI; FPI, Long, and ULong are defined in gdtoa.h.  File arith.h
-is supposed to provide #defines that cause gdtoa.h to define its
-types correctly.  File arithchk.c is source for a program that
-generates a suitable arith.h on all systems where I've been able to
-test it.
-
-The core conversion routines are meant to be called by helper routines
-that know details of the particular binary arithmetic of interest and
-convert.  The present directory provides helper routines for 5 variants
-of IEEE binary floating-point arithmetic, each indicated by one or
-two letters:
-
-       f       IEEE single precision
-       d       IEEE double precision
-       x       IEEE extended precision, as on Intel 80x87
-               and software emulations of Motorola 68xxx chips
-               that do not pad the way the 68xxx does, but
-               only store 80 bits
-       xL      IEEE extended precision, as on Motorola 68xxx chips
-       Q       quad precision, as on Sun Sparc chips
-       dd      double double, pairs of IEEE double numbers
-               whose sum is the desired value
-
-For decimal -> binary conversions, there are three families of
-helper routines: one for round-nearest:
-
-       strtof
-       strtod
-       strtodd
-       strtopd
-       strtopf
-       strtopx
-       strtopxL
-       strtopQ
-
-one with rounding direction specified:
-
-       strtorf
-       strtord
-       strtordd
-       strtorx
-       strtorxL
-       strtorQ
-
-and one for computing an interval (at most one bit wide) that contains
-the decimal number:
-
-       strtoIf
-       strtoId
-       strtoIdd
-       strtoIx
-       strtoIxL
-       strtoIQ
-
-The latter call strtoIg, which makes one call on strtodg and adjusts
-the result to provide the desired interval.  On systems where native
-arithmetic can easily make one-ulp adjustments on values in the
-desired floating-point format, it might be more efficient to use the
-native arithmetic.  Routine strtodI is a variant of strtoId that
-illustrates one way to do this for IEEE binary double-precision
-arithmetic -- but whether this is more efficient remains to be seen.
-
-Functions strtod and strtof have "natural" return types, float and
-double -- strtod is specified by the C standard, and strtof appears
-in the stdlib.h of some systems, such as (at least some) Linux systems.
-The other functions write their results to their final argument(s):
-to the final two argument for the strtoI... (interval) functions,
-and to the final argument for the others (strtop... and strtor...).
-Where possible, these arguments have "natural" return types (double*
-or float*), to permit at least some type checking.  In reality, they
-are viewed as arrays of ULong (or, for the "x" functions, UShort)
-values. On systems where long double is the appropriate type, one can
-pass long double* final argument(s) to these routines.  The int value
-that these routines return is the return value from the call they make
-on strtodg; see the enum of possible return values in gdtoa.h.
-
-Source files g_ddfmt.c, misc.c, smisc.c, strtod.c, strtodg.c, and ulp.c
-should use true IEEE double arithmetic (not, e.g., double extended),
-at least for storing (and viewing the bits of) the variables declared
-"double" within them.
-
-One detail indicated in struct FPI is whether the target binary
-arithmetic departs from the IEEE standard by flushing denormalized
-numbers to 0.  On systems that do this, the helper routines for
-conversion to double-double format (when compiled with
-Sudden_Underflow #defined) penalize the bottom of the exponent
-range so that they return a nonzero result only when the least
-significant bit of the less significant member of the pair of
-double values returned can be expressed as a normalized double
-value.  An alternative would be to drop to 53-bit precision near
-the bottom of the exponent range.  To get correct rounding, this
-would (in general) require two calls on strtodg (one specifying
-126-bit arithmetic, then, if necessary, one specifying 53-bit
-arithmetic).
-
-By default, the core routine strtodg and strtod set errno to ERANGE
-if the result overflows to +Infinity or underflows to 0.  Compile
-these routines with NO_ERRNO #defined to inhibit errno assignments.
-
-Routine strtod is based on netlib's "dtoa.c from fp", and
-(f = strtod(s,se)) is more efficient for some conversions than, say,
-strtord(s,se,1,&f).  Parts of strtod require true IEEE double
-arithmetic with the default rounding mode (round-to-nearest) and, on
-systems with IEEE extended-precision registers, double-precision
-(53-bit) rounding precision.  If the machine uses (the equivalent of)
-Intel 80x87 arithmetic, the call
-       _control87(PC_53, MCW_PC);
-does this with many compilers.  Whether this or another call is
-appropriate depends on the compiler; for this to work, it may be
-necessary to #include "float.h" or another system-dependent header
-file.
-
-The values returned for NaNs may be signaling NaNs on some systems,
-since the rules for distinguishing signaling from quiet NaNs are
-system-dependent.  You can easily fix this by suitably modifying the
-ULto* routines in strtor*.c.
-
-C99's hexadecimal floating-point constants are recognized by the
-strto* routines (but this feature has not yet been heavily tested).
-Compiling with NO_HEX_FP #defined disables this feature.
-
-The strto* routines do not (yet) recognize C99's NaN(...) syntax; the
-strto* routines simply regard '(' as the first unprocessed input
-character.
-
-For binary -> decimal conversions, I've provided just one family
-of helper routines:
-
-       g_ffmt
-       g_dfmt
-       g_ddfmt
-       g_xfmt
-       g_xLfmt
-       g_Qfmt
-
-which do a "%g" style conversion either to a specified number of decimal
-places (if their ndig argument is positive), or to the shortest
-decimal string that rounds to the given binary floating-point value
-(if ndig <= 0).  They write into a buffer supplied as an argument
-and return either a pointer to the end of the string (a null character)
-in the buffer, if the buffer was long enough, or 0.  Other forms of
-conversion are easily done with the help of gdtoa(), such as %e or %f
-style and conversions with direction of rounding specified (so that, if
-desired, the decimal value is either >= or <= the binary value).
-
-For an example of more general conversions based on dtoa(), see
-netlib's "printf.c from ampl/solvers".
-
-For double-double -> decimal, g_ddfmt() assumes IEEE-like arithmetic
-of precision max(126, #bits(input)) bits, where #bits(input) is the
-number of mantissa bits needed to represent the sum of the two double
-values in the input.
-
-The makefile creates a library, gdtoa.a.  To use the helper
-routines, a program only needs to include gdtoa.h.  All the
-source files for gdtoa.a include a more extensive gdtoaimp.h;
-among other things, gdtoaimp.h has #defines that make "internal"
-names end in _D2A.  To make a "system" library, one could modify
-these #defines to make the names start with __.
-
-Various comments about possible #defines appear in gdtoaimp.h,
-but for most purposes, arith.h should set suitable #defines.
-
-Systems with preemptive scheduling of multiple threads require some
-manual intervention.  On such systems, it's necessary to compile
-dmisc.c, dtoa.c gdota.c, and misc.c with MULTIPLE_THREADS #defined,
-and to provide (or suitably #define) two locks, acquired by
-ACQUIRE_DTOA_LOCK(n) and freed by FREE_DTOA_LOCK(n) for n = 0 or 1.
-(The second lock, accessed in pow5mult, ensures lazy evaluation of
-only one copy of high powers of 5; omitting this lock would introduce
-a small probability of wasting memory, but would otherwise be harmless.)
-Routines that call dtoa or gdtoa directly must also invoke freedtoa(s)
-to free the value s returned by dtoa or gdtoa.  It's OK to do so whether
-or not MULTIPLE_THREADS is #defined, and the helper g_*fmt routines
-listed above all do this indirectly (in gfmt_D2A(), which they all call).
-
-By default, there is a private pool of memory of length 2000 bytes
-for intermediate quantities, and MALLOC (see gdtoaimp.h) is called only
-if the private pool does not suffice.   2000 is large enough that MALLOC
-is called only under very unusual circumstances (decimal -> binary
-conversion of very long strings) for conversions to and from double
-precision.  For systems with preemptivaly scheduled multiple threads
-or for conversions to extended or quad, it may be appropriate to
-#define PRIVATE_MEM nnnn, where nnnn is a suitable value > 2000.
-For extended and quad precisions, -DPRIVATE_MEM=20000 is probably
-plenty even for many digits at the ends of the exponent range.
-Use of the private pool avoids some overhead.
-
-Directory test provides some test routines.  See its README.
-I've also tested this stuff (except double double conversions)
-with Vern Paxson's testbase program: see
-
-       V. Paxson and W. Kahan, "A Program for Testing IEEE Binary-Decimal
-       Conversion", manuscript, May 1991,
-       ftp://ftp.ee.lbl.gov/testbase-report.ps.Z .
-
-(The same ftp directory has source for testbase.)
-
-Some system-dependent additions to CFLAGS in the makefile:
-
-       HU-UX: -Aa -Ae
-       OSF (DEC Unix): -ieee_with_no_inexact
-       SunOS 4.1x: -DKR_headers -DBad_float_h
-
-If you want to put this stuff into a shared library and your
-operating system requires export lists for shared libraries,
-the following would be an appropriate export list:
-
-       dtoa
-       freedtoa
-       g_Qfmt
-       g_ddfmt
-       g_dfmt
-       g_ffmt
-       g_xLfmt
-       g_xfmt
-       gdtoa
-       strtoIQ
-       strtoId
-       strtoIdd
-       strtoIf
-       strtoIx
-       strtoIxL
-       strtod
-       strtodI
-       strtodg
-       strtof
-       strtopQ
-       strtopd
-       strtopdd
-       strtopf
-       strtopx
-       strtopxL
-       strtorQ
-       strtord
-       strtordd
-       strtorf
-       strtorx
-       strtorxL
-
-When time permits, I (dmg) hope to write in more detail about the
-present conversion routines; for now, this README file must suffice.
-Meanwhile, if you wish to write helper functions for other kinds of
-IEEE-like arithmetic, some explanation of struct FPI and the bits
-array may be helpful.  Both gdtoa and strtodg operate on a bits array
-described by FPI *fpi.  The bits array is of type ULong, a 32-bit
-unsigned integer type.  Floating-point numbers have fpi->nbits bits,
-with the least significant 32 bits in bits[0], the next 32 bits in
-bits[1], etc.  These numbers are regarded as integers multiplied by
-2^e (i.e., 2 to the power of the exponent e), where e is the second
-argument (be) to gdtoa and is stored in *exp by strtodg.  The minimum
-and maximum exponent values fpi->emin and fpi->emax for normalized
-floating-point numbers reflect this arrangement.  For example, the
-P754 standard for binary IEEE arithmetic specifies doubles as having
-53 bits, with normalized values of the form 1.xxxxx... times 2^(b-1023),
-with 52 bits (the x's) and the biased exponent b represented explicitly;
-b is an unsigned integer in the range 1 <= b <= 2046 for normalized
-finite doubles, b = 0 for denormals, and b = 2047 for Infinities and NaNs.
-To turn an IEEE double into the representation used by strtodg and gdtoa,
-we multiply 1.xxxx... by 2^52 (to make it an integer) and reduce the
-exponent e = (b-1023) by 52:
-
-       fpi->emin = 1 - 1023 - 52
-       fpi->emax = 1046 - 1023 - 52
-
-In various wrappers for IEEE double, we actually write -53 + 1 rather
-than -52, to emphasize that there are 53 bits including one implicit bit.
-Field fpi->rounding indicates the desired rounding direction, with
-possible values
-       FPI_Round_zero = toward 0,
-       FPI_Round_near = unbiased rounding -- the IEEE default,
-       FPI_Round_up = toward +Infinity, and
-       FPI_Round_down = toward -Infinity
-given in gdtoa.h.
-
-Field fpi->sudden_underflow indicates whether strtodg should return
-denormals or flush them to zero.  Normal floating-point numbers have
-bit fpi->nbits in the bits array on.  Denormals have it off, with
-exponent = fpi->emin.  Strtodg provides distinct return values for normals
-and denormals; see gdtoa.h.
-
-Please send comments to
-
-       David M. Gay
-       Bell Labs, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636, U.S.A.
-       dmg@research.bell-labs.com
diff --git a/float/gdtoa/arithchk.c b/float/gdtoa/arithchk.c
deleted file mode 100644 (file)
index 59eaad7..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/****************************************************************
-Copyright (C) 1997, 1998 Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-****************************************************************/
-
-/* Try to deduce arith.h from arithmetic properties. */
-
-#include <stdio.h>
-
- static int dalign;
- typedef struct
-Akind {
-       char *name;
-       int   kind;
-       } Akind;
-
- static Akind
-IEEE_8087      = { "IEEE_8087", 1 },
-IEEE_MC68k     = { "IEEE_MC68k", 2 },
-IBM            = { "IBM", 3 },
-VAX            = { "VAX", 4 },
-CRAY           = { "CRAY", 5};
-
- static Akind *
-Lcheck()
-{
-       union {
-               double d;
-               long L[2];
-               } u;
-       struct {
-               double d;
-               long L;
-               } x[2];
-
-       if (sizeof(x) > 2*(sizeof(double) + sizeof(long)))
-               dalign = 1;
-       u.L[0] = u.L[1] = 0;
-       u.d = 1e13;
-       if (u.L[0] == 1117925532 && u.L[1] == -448790528)
-               return &IEEE_MC68k;
-       if (u.L[1] == 1117925532 && u.L[0] == -448790528)
-               return &IEEE_8087;
-       if (u.L[0] == -2065213935 && u.L[1] == 10752)
-               return &VAX;
-       if (u.L[0] == 1267827943 && u.L[1] == 704643072)
-               return &IBM;
-       return 0;
-       }
-
- static Akind *
-icheck()
-{
-       union {
-               double d;
-               int L[2];
-               } u;
-       struct {
-               double d;
-               int L;
-               } x[2];
-
-       if (sizeof(x) > 2*(sizeof(double) + sizeof(int)))
-               dalign = 1;
-       u.L[0] = u.L[1] = 0;
-       u.d = 1e13;
-       if (u.L[0] == 1117925532 && u.L[1] == -448790528)
-               return &IEEE_MC68k;
-       if (u.L[1] == 1117925532 && u.L[0] == -448790528)
-               return &IEEE_8087;
-       if (u.L[0] == -2065213935 && u.L[1] == 10752)
-               return &VAX;
-       if (u.L[0] == 1267827943 && u.L[1] == 704643072)
-               return &IBM;
-       return 0;
-       }
-
-char *emptyfmt = "";   /* avoid possible warning message with printf("") */
-
- static Akind *
-ccheck()
-{
-       union {
-               double d;
-               long L;
-               } u;
-       long Cray1;
-
-       /* Cray1 = 4617762693716115456 -- without overflow on non-Crays */
-       Cray1 = printf(emptyfmt) < 0 ? 0 : 4617762;
-       if (printf(emptyfmt, Cray1) >= 0)
-               Cray1 = 1000000*Cray1 + 693716;
-       if (printf(emptyfmt, Cray1) >= 0)
-               Cray1 = 1000000*Cray1 + 115456;
-       u.d = 1e13;
-       if (u.L == Cray1)
-               return &CRAY;
-       return 0;
-       }
-
- static int
-fzcheck()
-{
-       double a, b;
-       int i;
-
-       a = 1.;
-       b = .1;
-       for(i = 155;; b *= b, i >>= 1) {
-               if (i & 1) {
-                       a *= b;
-                       if (i == 1)
-                               break;
-                       }
-               }
-       b = a * a;
-       return b == 0.;
-       }
-
-main()
-{
-       Akind *a = 0;
-       int Ldef = 0;
-       FILE *f;
-
-#ifdef WRITE_ARITH_H   /* for Symantec's buggy "make" */
-       f = fopen("arith.h", "w");
-       if (!f) {
-               printf("Cannot open arith.h\n");
-               return 1;
-               }
-#else
-       f = stdout;
-#endif
-
-       if (sizeof(double) == 2*sizeof(long))
-               a = Lcheck();
-       else if (sizeof(double) == 2*sizeof(int)) {
-               Ldef = 1;
-               a = icheck();
-               }
-       else if (sizeof(double) == sizeof(long))
-               a = ccheck();
-       if (a) {
-               fprintf(f, "#define %s\n#define Arith_Kind_ASL %d\n",
-                       a->name, a->kind);
-               if (Ldef)
-                       fprintf(f, "#define Long int\n#define Intcast (int)(long)\n");
-               if (dalign)
-                       fprintf(f, "#define Double_Align\n");
-               if (sizeof(char*) == 8)
-                       fprintf(f, "#define X64_bit_pointers\n");
-#ifndef NO_LONG_LONG
-               if (sizeof(long long) < 8)
-#endif
-                       fprintf(f, "#define NO_LONG_LONG\n");
-               if (a->kind <= 2 && fzcheck())
-                       fprintf(f, "#define Sudden_Underflow\n");
-               return 0;
-               }
-       fprintf(f, "/* Unknown arithmetic */\n");
-       return 1;
-       }
diff --git a/float/gdtoa/dmisc.c b/float/gdtoa/dmisc.c
deleted file mode 100644 (file)
index 14b5d7e..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#ifndef MULTIPLE_THREADS
- char *dtoa_result;
-#endif
-
- char *
-#ifdef KR_headers
-rv_alloc(i) int i;
-#else
-rv_alloc(int i)
-#endif
-{
-       int j, k, *r;
-
-       j = sizeof(ULong);
-       for(k = 0;
-               sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i;
-               j <<= 1)
-                       k++;
-       r = (int*)Balloc(k);
-       *r = k;
-       return
-#ifndef MULTIPLE_THREADS
-       dtoa_result =
-#endif
-               (char *)(r+1);
-       }
-
- char *
-#ifdef KR_headers
-nrv_alloc(s, rve, n) char *s, **rve; int n;
-#else
-nrv_alloc(char *s, char **rve, int n)
-#endif
-{
-       char *rv, *t;
-
-       t = rv = rv_alloc(n);
-       while((*t = *s++) !=0)
-               t++;
-       if (rve)
-               *rve = t;
-       return rv;
-       }
-
-/* freedtoa(s) must be used to free values s returned by dtoa
- * when MULTIPLE_THREADS is #defined.  It should be used in all cases,
- * but for consistency with earlier versions of dtoa, it is optional
- * when MULTIPLE_THREADS is not defined.
- */
-
- void
-#ifdef KR_headers
-freedtoa(s) char *s;
-#else
-freedtoa(char *s)
-#endif
-{
-       Bigint *b = (Bigint *)((int *)s - 1);
-       b->maxwds = 1 << (b->k = *(int*)b);
-       Bfree(b);
-#ifndef MULTIPLE_THREADS
-       if (s == dtoa_result)
-               dtoa_result = 0;
-#endif
-       }
-
- int
-quorem
-#ifdef KR_headers
-       (b, S) Bigint *b, *S;
-#else
-       (Bigint *b, Bigint *S)
-#endif
-{
-       int n;
-       ULong *bx, *bxe, q, *sx, *sxe;
-#ifdef ULLong
-       ULLong borrow, carry, y, ys;
-#else
-       ULong borrow, carry, y, ys;
-#ifdef Pack_32
-       ULong si, z, zs;
-#endif
-#endif
-
-       n = S->wds;
-#ifdef DEBUG
-       /*debug*/ if (b->wds > n)
-       /*debug*/       Bug("oversize b in quorem");
-#endif
-       if (b->wds < n)
-               return 0;
-       sx = S->x;
-       sxe = sx + --n;
-       bx = b->x;
-       bxe = bx + n;
-       q = *bxe / (*sxe + 1);  /* ensure q <= true quotient */
-#ifdef DEBUG
-       /*debug*/ if (q > 9)
-       /*debug*/       Bug("oversized quotient in quorem");
-#endif
-       if (q) {
-               borrow = 0;
-               carry = 0;
-               do {
-#ifdef ULLong
-                       ys = *sx++ * (ULLong)q + carry;
-                       carry = ys >> 32;
-                       y = *bx - (ys & 0xffffffffUL) - borrow;
-                       borrow = y >> 32 & 1UL;
-                       *bx++ = y & 0xffffffffUL;
-#else
-#ifdef Pack_32
-                       si = *sx++;
-                       ys = (si & 0xffff) * q + carry;
-                       zs = (si >> 16) * q + (ys >> 16);
-                       carry = zs >> 16;
-                       y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
-                       borrow = (y & 0x10000) >> 16;
-                       z = (*bx >> 16) - (zs & 0xffff) - borrow;
-                       borrow = (z & 0x10000) >> 16;
-                       Storeinc(bx, z, y);
-#else
-                       ys = *sx++ * q + carry;
-                       carry = ys >> 16;
-                       y = *bx - (ys & 0xffff) - borrow;
-                       borrow = (y & 0x10000) >> 16;
-                       *bx++ = y & 0xffff;
-#endif
-#endif
-                       }
-                       while(sx <= sxe);
-               if (!*bxe) {
-                       bx = b->x;
-                       while(--bxe > bx && !*bxe)
-                               --n;
-                       b->wds = n;
-                       }
-               }
-       if (cmp(b, S) >= 0) {
-               q++;
-               borrow = 0;
-               carry = 0;
-               bx = b->x;
-               sx = S->x;
-               do {
-#ifdef ULLong
-                       ys = *sx++ + carry;
-                       carry = ys >> 32;
-                       y = *bx - (ys & 0xffffffffUL) - borrow;
-                       borrow = y >> 32 & 1UL;
-                       *bx++ = y & 0xffffffffUL;
-#else
-#ifdef Pack_32
-                       si = *sx++;
-                       ys = (si & 0xffff) + carry;
-                       zs = (si >> 16) + (ys >> 16);
-                       carry = zs >> 16;
-                       y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
-                       borrow = (y & 0x10000) >> 16;
-                       z = (*bx >> 16) - (zs & 0xffff) - borrow;
-                       borrow = (z & 0x10000) >> 16;
-                       Storeinc(bx, z, y);
-#else
-                       ys = *sx++ + carry;
-                       carry = ys >> 16;
-                       y = *bx - (ys & 0xffff) - borrow;
-                       borrow = (y & 0x10000) >> 16;
-                       *bx++ = y & 0xffff;
-#endif
-#endif
-                       }
-                       while(sx <= sxe);
-               bx = b->x;
-               bxe = bx + n;
-               if (!*bxe) {
-                       while(--bxe > bx && !*bxe)
-                               --n;
-                       b->wds = n;
-                       }
-               }
-       return q;
-       }
diff --git a/float/gdtoa/dtoa.c b/float/gdtoa/dtoa.c
deleted file mode 100644 (file)
index 20e2405..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- *     1. Rather than iterating, we use a simple numeric overestimate
- *        to determine k = floor(log10(d)).  We scale relevant
- *        quantities using O(log2(k)) rather than O(k) multiplications.
- *     2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- *        try to generate digits strictly left to right.  Instead, we
- *        compute with fewer bits and propagate the carry if necessary
- *        when rounding the final digit up.  This is often faster.
- *     3. Under the assumption that input will be rounded nearest,
- *        mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- *        That is, we allow equality in stopping tests when the
- *        round-nearest rule will give the same floating-point value
- *        as would satisfaction of the stopping test with strict
- *        inequality.
- *     4. We remove common factors of powers of 2 from relevant
- *        quantities.
- *     5. When converting floating-point integers less than 1e16,
- *        we use floating-point arithmetic rather than resorting
- *        to multiple-precision integers.
- *     6. When asked to produce fewer than 15 digits, we first try
- *        to get by with floating-point arithmetic; we resort to
- *        multiple-precision integer arithmetic only if we cannot
- *        guarantee that the floating-point calculation has given
- *        the correctly rounded result.  For k requested digits and
- *        "uniformly" distributed input, the probability is
- *        something like 10^(k-15) that we must resort to the Long
- *        calculation.
- */
-
-#ifdef Honor_FLT_ROUNDS
-#define Rounding rounding
-#undef Check_FLT_ROUNDS
-#define Check_FLT_ROUNDS
-#else
-#define Rounding Flt_Rounds
-#endif
-
- char *
-dtoa
-#ifdef KR_headers
-       (d, mode, ndigits, decpt, sign, rve)
-       double d; int mode, ndigits, *decpt, *sign; char **rve;
-#else
-       (double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
-#endif
-{
- /*    Arguments ndigits, decpt, sign are similar to those
-       of ecvt and fcvt; trailing zeros are suppressed from
-       the returned string.  If not null, *rve is set to point
-       to the end of the return value.  If d is +-Infinity or NaN,
-       then *decpt is set to 9999.
-
-       mode:
-               0 ==> shortest string that yields d when read in
-                       and rounded to nearest.
-               1 ==> like 0, but with Steele & White stopping rule;
-                       e.g. with IEEE P754 arithmetic , mode 0 gives
-                       1e23 whereas mode 1 gives 9.999999999999999e22.
-               2 ==> max(1,ndigits) significant digits.  This gives a
-                       return value similar to that of ecvt, except
-                       that trailing zeros are suppressed.
-               3 ==> through ndigits past the decimal point.  This
-                       gives a return value similar to that from fcvt,
-                       except that trailing zeros are suppressed, and
-                       ndigits can be negative.
-               4,5 ==> similar to 2 and 3, respectively, but (in
-                       round-nearest mode) with the tests of mode 0 to
-                       possibly return a shorter string that rounds to d.
-                       With IEEE arithmetic and compilation with
-                       -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
-                       as modes 2 and 3 when FLT_ROUNDS != 1.
-               6-9 ==> Debugging modes similar to mode - 4:  don't try
-                       fast floating-point estimate (if applicable).
-
-               Values of mode other than 0-9 are treated as mode 0.
-
-               Sufficient space is allocated to the return value
-               to hold the suppressed trailing zeros.
-       */
-
-       int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
-               j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
-               spec_case, try_quick;
-       Long L;
-#ifndef Sudden_Underflow
-       int denorm;
-       ULong x;
-#endif
-       Bigint *b, *b1, *delta, *mlo, *mhi, *S;
-       double d2, ds, eps;
-       char *s, *s0;
-#ifdef Honor_FLT_ROUNDS
-       int rounding;
-#endif
-#ifdef SET_INEXACT
-       int inexact, oldinexact;
-#endif
-
-#ifndef MULTIPLE_THREADS
-       if (dtoa_result) {
-               freedtoa(dtoa_result);
-               dtoa_result = 0;
-               }
-#endif
-
-       if (word0(d) & Sign_bit) {
-               /* set sign for everything, including 0's and NaNs */
-               *sign = 1;
-               word0(d) &= ~Sign_bit;  /* clear sign bit */
-               }
-       else
-               *sign = 0;
-
-#if defined(IEEE_Arith) + defined(VAX)
-#ifdef IEEE_Arith
-       if ((word0(d) & Exp_mask) == Exp_mask)
-#else
-       if (word0(d)  == 0x8000)
-#endif
-               {
-               /* Infinity or NaN */
-               *decpt = 9999;
-#ifdef IEEE_Arith
-               if (!word1(d) && !(word0(d) & 0xfffff))
-                       return nrv_alloc("Infinity", rve, 8);
-#endif
-               return nrv_alloc("NaN", rve, 3);
-               }
-#endif
-#ifdef IBM
-       dval(d) += 0; /* normalize */
-#endif
-       if (!dval(d)) {
-               *decpt = 1;
-               return nrv_alloc("0", rve, 1);
-               }
-
-#ifdef SET_INEXACT
-       try_quick = oldinexact = get_inexact();
-       inexact = 1;
-#endif
-#ifdef Honor_FLT_ROUNDS
-       if ((rounding = Flt_Rounds) >= 2) {
-               if (*sign)
-                       rounding = rounding == 2 ? 0 : 2;
-               else
-                       if (rounding != 2)
-                               rounding = 0;
-               }
-#endif
-
-       b = d2b(dval(d), &be, &bbits);
-#ifdef Sudden_Underflow
-       i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
-#else
-       if (( i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)) )!=0) {
-#endif
-               dval(d2) = dval(d);
-               word0(d2) &= Frac_mask1;
-               word0(d2) |= Exp_11;
-#ifdef IBM
-               if (( j = 11 - hi0bits(word0(d2) & Frac_mask) )!=0)
-                       dval(d2) /= 1 << j;
-#endif
-
-               /* log(x)       ~=~ log(1.5) + (x-1.5)/1.5
-                * log10(x)      =  log(x) / log(10)
-                *              ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
-                * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
-                *
-                * This suggests computing an approximation k to log10(d) by
-                *
-                * k = (i - Bias)*0.301029995663981
-                *      + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
-                *
-                * We want k to be too large rather than too small.
-                * The error in the first-order Taylor series approximation
-                * is in our favor, so we just round up the constant enough
-                * to compensate for any error in the multiplication of
-                * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
-                * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
-                * adding 1e-13 to the constant term more than suffices.
-                * Hence we adjust the constant term to 0.1760912590558.
-                * (We could get a more accurate k by invoking log10,
-                *  but this is probably not worthwhile.)
-                */
-
-               i -= Bias;
-#ifdef IBM
-               i <<= 2;
-               i += j;
-#endif
-#ifndef Sudden_Underflow
-               denorm = 0;
-               }
-       else {
-               /* d is denormalized */
-
-               i = bbits + be + (Bias + (P-1) - 1);
-               x = i > 32  ? word0(d) << 64 - i | word1(d) >> i - 32
-                           : word1(d) << 32 - i;
-               dval(d2) = x;
-               word0(d2) -= 31*Exp_msk1; /* adjust exponent */
-               i -= (Bias + (P-1) - 1) + 1;
-               denorm = 1;
-               }
-#endif
-       ds = (dval(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
-       k = (int)ds;
-       if (ds < 0. && ds != k)
-               k--;    /* want k = floor(ds) */
-       k_check = 1;
-       if (k >= 0 && k <= Ten_pmax) {
-               if (dval(d) < tens[k])
-                       k--;
-               k_check = 0;
-               }
-       j = bbits - i - 1;
-       if (j >= 0) {
-               b2 = 0;
-               s2 = j;
-               }
-       else {
-               b2 = -j;
-               s2 = 0;
-               }
-       if (k >= 0) {
-               b5 = 0;
-               s5 = k;
-               s2 += k;
-               }
-       else {
-               b2 -= k;
-               b5 = -k;
-               s5 = 0;
-               }
-       if (mode < 0 || mode > 9)
-               mode = 0;
-
-#ifndef SET_INEXACT
-#ifdef Check_FLT_ROUNDS
-       try_quick = Rounding == 1;
-#else
-       try_quick = 1;
-#endif
-#endif /*SET_INEXACT*/
-
-       if (mode > 5) {
-               mode -= 4;
-               try_quick = 0;
-               }
-       leftright = 1;
-       switch(mode) {
-               case 0:
-               case 1:
-                       ilim = ilim1 = -1;
-                       i = 18;
-                       ndigits = 0;
-                       break;
-               case 2:
-                       leftright = 0;
-                       /* no break */
-               case 4:
-                       if (ndigits <= 0)
-                               ndigits = 1;
-                       ilim = ilim1 = i = ndigits;
-                       break;
-               case 3:
-                       leftright = 0;
-                       /* no break */
-               case 5:
-                       i = ndigits + k + 1;
-                       ilim = i;
-                       ilim1 = i - 1;
-                       if (i <= 0)
-                               i = 1;
-               }
-       s = s0 = rv_alloc(i);
-
-#ifdef Honor_FLT_ROUNDS
-       if (mode > 1 && rounding != 1)
-               leftright = 0;
-#endif
-
-       if (ilim >= 0 && ilim <= Quick_max && try_quick) {
-
-               /* Try to get by with floating-point arithmetic. */
-
-               i = 0;
-               dval(d2) = dval(d);
-               k0 = k;
-               ilim0 = ilim;
-               ieps = 2; /* conservative */
-               if (k > 0) {
-                       ds = tens[k&0xf];
-                       j = k >> 4;
-                       if (j & Bletch) {
-                               /* prevent overflows */
-                               j &= Bletch - 1;
-                               dval(d) /= bigtens[n_bigtens-1];
-                               ieps++;
-                               }
-                       for(; j; j >>= 1, i++)
-                               if (j & 1) {
-                                       ieps++;
-                                       ds *= bigtens[i];
-                                       }
-                       dval(d) /= ds;
-                       }
-               else if (( j1 = -k )!=0) {
-                       dval(d) *= tens[j1 & 0xf];
-                       for(j = j1 >> 4; j; j >>= 1, i++)
-                               if (j & 1) {
-                                       ieps++;
-                                       dval(d) *= bigtens[i];
-                                       }
-                       }
-               if (k_check && dval(d) < 1. && ilim > 0) {
-                       if (ilim1 <= 0)
-                               goto fast_failed;
-                       ilim = ilim1;
-                       k--;
-                       dval(d) *= 10.;
-                       ieps++;
-                       }
-               dval(eps) = ieps*dval(d) + 7.;
-               word0(eps) -= (P-1)*Exp_msk1;
-               if (ilim == 0) {
-                       S = mhi = 0;
-                       dval(d) -= 5.;
-                       if (dval(d) > dval(eps))
-                               goto one_digit;
-                       if (dval(d) < -dval(eps))
-                               goto no_digits;
-                       goto fast_failed;
-                       }
-#ifndef No_leftright
-               if (leftright) {
-                       /* Use Steele & White method of only
-                        * generating digits needed.
-                        */
-                       dval(eps) = 0.5/tens[ilim-1] - dval(eps);
-                       for(i = 0;;) {
-                               L = dval(d);
-                               dval(d) -= L;
-                               *s++ = '0' + (int)L;
-                               if (dval(d) < dval(eps))
-                                       goto ret1;
-                               if (1. - dval(d) < dval(eps))
-                                       goto bump_up;
-                               if (++i >= ilim)
-                                       break;
-                               dval(eps) *= 10.;
-                               dval(d) *= 10.;
-                               }
-                       }
-               else {
-#endif
-                       /* Generate ilim digits, then fix them up. */
-                       dval(eps) *= tens[ilim-1];
-                       for(i = 1;; i++, dval(d) *= 10.) {
-                               L = (Long)(dval(d));
-                               if (!(dval(d) -= L))
-                                       ilim = i;
-                               *s++ = '0' + (int)L;
-                               if (i == ilim) {
-                                       if (dval(d) > 0.5 + dval(eps))
-                                               goto bump_up;
-                                       else if (dval(d) < 0.5 - dval(eps)) {
-                                               while(*--s == '0');
-                                               s++;
-                                               goto ret1;
-                                               }
-                                       break;
-                                       }
-                               }
-#ifndef No_leftright
-                       }
-#endif
- fast_failed:
-               s = s0;
-               dval(d) = dval(d2);
-               k = k0;
-               ilim = ilim0;
-               }
-
-       /* Do we have a "small" integer? */
-
-       if (be >= 0 && k <= Int_max) {
-               /* Yes. */
-               ds = tens[k];
-               if (ndigits < 0 && ilim <= 0) {
-                       S = mhi = 0;
-                       if (ilim < 0 || dval(d) <= 5*ds)
-                               goto no_digits;
-                       goto one_digit;
-                       }
-               for(i = 1;; i++, dval(d) *= 10.) {
-                       L = (Long)(dval(d) / ds);
-                       dval(d) -= L*ds;
-#ifdef Check_FLT_ROUNDS
-                       /* If FLT_ROUNDS == 2, L will usually be high by 1 */
-                       if (dval(d) < 0) {
-                               L--;
-                               dval(d) += ds;
-                               }
-#endif
-                       *s++ = '0' + (int)L;
-                       if (!dval(d)) {
-#ifdef SET_INEXACT
-                               inexact = 0;
-#endif
-                               break;
-                               }
-                       if (i == ilim) {
-#ifdef Honor_FLT_ROUNDS
-                               if (mode > 1)
-                               switch(rounding) {
-                                 case 0: goto ret1;
-                                 case 2: goto bump_up;
-                                 }
-#endif
-                               dval(d) += dval(d);
-                               if (dval(d) > ds || dval(d) == ds && L & 1) {
- bump_up:
-                                       while(*--s == '9')
-                                               if (s == s0) {
-                                                       k++;
-                                                       *s = '0';
-                                                       break;
-                                                       }
-                                       ++*s++;
-                                       }
-                               break;
-                               }
-                       }
-               goto ret1;
-               }
-
-       m2 = b2;
-       m5 = b5;
-       mhi = mlo = 0;
-       if (leftright) {
-               i =
-#ifndef Sudden_Underflow
-                       denorm ? be + (Bias + (P-1) - 1 + 1) :
-#endif
-#ifdef IBM
-                       1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3);
-#else
-                       1 + P - bbits;
-#endif
-               b2 += i;
-               s2 += i;
-               mhi = i2b(1);
-               }
-       if (m2 > 0 && s2 > 0) {
-               i = m2 < s2 ? m2 : s2;
-               b2 -= i;
-               m2 -= i;
-               s2 -= i;
-               }
-       if (b5 > 0) {
-               if (leftright) {
-                       if (m5 > 0) {
-                               mhi = pow5mult(mhi, m5);
-                               b1 = mult(mhi, b);
-                               Bfree(b);
-                               b = b1;
-                               }
-                       if (( j = b5 - m5 )!=0)
-                               b = pow5mult(b, j);
-                       }
-               else
-                       b = pow5mult(b, b5);
-               }
-       S = i2b(1);
-       if (s5 > 0)
-               S = pow5mult(S, s5);
-
-       /* Check for special case that d is a normalized power of 2. */
-
-       spec_case = 0;
-       if ((mode < 2 || leftright)
-#ifdef Honor_FLT_ROUNDS
-                       && rounding == 1
-#endif
-                               ) {
-               if (!word1(d) && !(word0(d) & Bndry_mask)
-#ifndef Sudden_Underflow
-                && word0(d) & (Exp_mask & ~Exp_msk1)
-#endif
-                               ) {
-                       /* The special case */
-                       b2 += Log2P;
-                       s2 += Log2P;
-                       spec_case = 1;
-                       }
-               }
-
-       /* Arrange for convenient computation of quotients:
-        * shift left if necessary so divisor has 4 leading 0 bits.
-        *
-        * Perhaps we should just compute leading 28 bits of S once
-        * and for all and pass them and a shift to quorem, so it
-        * can do shifts and ors to compute the numerator for q.
-        */
-#ifdef Pack_32
-       if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f )!=0)
-               i = 32 - i;
-#else
-       if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf )!=0)
-               i = 16 - i;
-#endif
-       if (i > 4) {
-               i -= 4;
-               b2 += i;
-               m2 += i;
-               s2 += i;
-               }
-       else if (i < 4) {
-               i += 28;
-               b2 += i;
-               m2 += i;
-               s2 += i;
-               }
-       if (b2 > 0)
-               b = lshift(b, b2);
-       if (s2 > 0)
-               S = lshift(S, s2);
-       if (k_check) {
-               if (cmp(b,S) < 0) {
-                       k--;
-                       b = multadd(b, 10, 0);  /* we botched the k estimate */
-                       if (leftright)
-                               mhi = multadd(mhi, 10, 0);
-                       ilim = ilim1;
-                       }
-               }
-       if (ilim <= 0 && (mode == 3 || mode == 5)) {
-               if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
-                       /* no digits, fcvt style */
- no_digits:
-                       k = -1 - ndigits;
-                       goto ret;
-                       }
- one_digit:
-               *s++ = '1';
-               k++;
-               goto ret;
-               }
-       if (leftright) {
-               if (m2 > 0)
-                       mhi = lshift(mhi, m2);
-
-               /* Compute mlo -- check for special case
-                * that d is a normalized power of 2.
-                */
-
-               mlo = mhi;
-               if (spec_case) {
-                       mhi = Balloc(mhi->k);
-                       Bcopy(mhi, mlo);
-                       mhi = lshift(mhi, Log2P);
-                       }
-
-               for(i = 1;;i++) {
-                       dig = quorem(b,S) + '0';
-                       /* Do we yet have the shortest decimal string
-                        * that will round to d?
-                        */
-                       j = cmp(b, mlo);
-                       delta = diff(S, mhi);
-                       j1 = delta->sign ? 1 : cmp(b, delta);
-                       Bfree(delta);
-#ifndef ROUND_BIASED
-                       if (j1 == 0 && mode != 1 && !(word1(d) & 1)
-#ifdef Honor_FLT_ROUNDS
-                               && rounding >= 1
-#endif
-                                                                  ) {
-                               if (dig == '9')
-                                       goto round_9_up;
-                               if (j > 0)
-                                       dig++;
-#ifdef SET_INEXACT
-                               else if (!b->x[0] && b->wds <= 1)
-                                       inexact = 0;
-#endif
-                               *s++ = dig;
-                               goto ret;
-                               }
-#endif
-                       if (j < 0 || j == 0 && mode != 1
-#ifndef ROUND_BIASED
-                                                       && !(word1(d) & 1)
-#endif
-                                       ) {
-                               if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
-                                       inexact = 0;
-#endif
-                                       goto accept_dig;
-                                       }
-#ifdef Honor_FLT_ROUNDS
-                               if (mode > 1)
-                                switch(rounding) {
-                                 case 0: goto accept_dig;
-                                 case 2: goto keep_dig;
-                                 }
-#endif /*Honor_FLT_ROUNDS*/
-                               if (j1 > 0) {
-                                       b = lshift(b, 1);
-                                       j1 = cmp(b, S);
-                                       if ((j1 > 0 || j1 == 0 && dig & 1)
-                                       && dig++ == '9')
-                                               goto round_9_up;
-                                       }
- accept_dig:
-                               *s++ = dig;
-                               goto ret;
-                               }
-                       if (j1 > 0) {
-#ifdef Honor_FLT_ROUNDS
-                               if (!rounding)
-                                       goto accept_dig;
-#endif
-                               if (dig == '9') { /* possible if i == 1 */
- round_9_up:
-                                       *s++ = '9';
-                                       goto roundoff;
-                                       }
-                               *s++ = dig + 1;
-                               goto ret;
-                               }
-#ifdef Honor_FLT_ROUNDS
- keep_dig:
-#endif
-                       *s++ = dig;
-                       if (i == ilim)
-                               break;
-                       b = multadd(b, 10, 0);
-                       if (mlo == mhi)
-                               mlo = mhi = multadd(mhi, 10, 0);
-                       else {
-                               mlo = multadd(mlo, 10, 0);
-                               mhi = multadd(mhi, 10, 0);
-                               }
-                       }
-               }
-       else
-               for(i = 1;; i++) {
-                       *s++ = dig = quorem(b,S) + '0';
-                       if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
-                               inexact = 0;
-#endif
-                               goto ret;
-                               }
-                       if (i >= ilim)
-                               break;
-                       b = multadd(b, 10, 0);
-                       }
-
-       /* Round off last digit */
-
-#ifdef Honor_FLT_ROUNDS
-       switch(rounding) {
-         case 0: goto trimzeros;
-         case 2: goto roundoff;
-         }
-#endif
-       b = lshift(b, 1);
-       j = cmp(b, S);
-       if (j > 0 || j == 0 && dig & 1) {
- roundoff:
-               while(*--s == '9')
-                       if (s == s0) {
-                               k++;
-                               *s++ = '1';
-                               goto ret;
-                               }
-               ++*s++;
-               }
-       else {
- trimzeros:
-               while(*--s == '0');
-               s++;
-               }
- ret:
-       Bfree(S);
-       if (mhi) {
-               if (mlo && mlo != mhi)
-                       Bfree(mlo);
-               Bfree(mhi);
-               }
- ret1:
-#ifdef SET_INEXACT
-       if (inexact) {
-               if (!oldinexact) {
-                       word0(d) = Exp_1 + (70 << Exp_shift);
-                       word1(d) = 0;
-                       dval(d) += 1.;
-                       }
-               }
-       else if (!oldinexact)
-               clear_inexact();
-#endif
-       Bfree(b);
-       *s = 0;
-       *decpt = k + 1;
-       if (rve)
-               *rve = s;
-       return s0;
-       }
diff --git a/float/gdtoa/g_Qfmt.c b/float/gdtoa/g_Qfmt.c
deleted file mode 100644 (file)
index 896b9d4..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#endif
-#ifdef IEEE_8087
-#define _0 3
-#define _1 2
-#define _2 1
-#define _3 0
-#endif
-
- char*
-#ifdef KR_headers
-g_Qfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
-#else
-g_Qfmt(char *buf, void *V, int ndig, unsigned bufsize)
-#endif
-{
-       static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0 };
-       char *b, *s, *se;
-       ULong bits[4], *L, sign;
-       int decpt, ex, i, mode;
-
-       if (ndig < 0)
-               ndig = 0;
-       if (bufsize < ndig + 10)
-               return 0;
-
-       L = (ULong*)V;
-       sign = L[_0] & 0x80000000L;
-       bits[3] = L[_0] & 0xffff;
-       bits[2] = L[_1];
-       bits[1] = L[_2];
-       bits[0] = L[_3];
-       b = buf;
-       if ( (ex = (L[_0] & 0x7fff0000L) >> 16) !=0) {
-               if (ex == 0x7fff) {
-                       /* Infinity or NaN */
-                       if (bits[0] | bits[1] | bits[2] | bits[3])
-                               b = strcpy(b, "NaN");
-                       else {
-                               b = buf;
-                               if (sign)
-                                       *b++ = '-';
-                               b = strcp(b, "Infinity");
-                               }
-                       return b;
-                       }
-               i = STRTOG_Normal;
-               bits[3] |= 0x10000;
-               }
-       else if (bits[0] | bits[1] | bits[2] | bits[3]) {
-               i = STRTOG_Denormal;
-               ex = 1;
-               }
-       else {
-#ifndef IGNORE_ZERO_SIGN
-               if (sign)
-                       *b++ = '-';
-#endif
-               *b++ = '0';
-               *b = 0;
-               return b;
-               }
-       ex -= 0x3fff + 112;
-       mode = 2;
-       if (ndig <= 0) {
-               if (bufsize < 48)
-                       return 0;
-               mode = 0;
-               }
-       s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
-       return g__fmt(buf, s, se, decpt, sign);
-       }
diff --git a/float/gdtoa/g__fmt.c b/float/gdtoa/g__fmt.c
deleted file mode 100644 (file)
index 6451b25..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- char *
-#ifdef KR_headers
-g__fmt(b, s, se, decpt, sign) char *b; char *s; char *se; int decpt; ULong sign;
-#else
-g__fmt(char *b, char *s, char *se, int decpt, ULong sign)
-#endif
-{
-       int i, j, k;
-       char *s0 = s;
-
-       if (sign)
-               *b++ = '-';
-       if (decpt <= -4 || decpt > se - s + 5) {
-               *b++ = *s++;
-               if (*s) {
-                       *b++ = '.';
-                       while((*b = *s++) !=0)
-                               b++;
-                       }
-               *b++ = 'e';
-               /* sprintf(b, "%+.2d", decpt - 1); */
-               if (--decpt < 0) {
-                       *b++ = '-';
-                       decpt = -decpt;
-                       }
-               else
-                       *b++ = '+';
-               for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10){}
-               for(;;) {
-                       i = decpt / k;
-                       *b++ = i + '0';
-                       if (--j <= 0)
-                               break;
-                       decpt -= i*k;
-                       decpt *= 10;
-                       }
-               *b = 0;
-               }
-       else if (decpt <= 0) {
-               *b++ = '.';
-               for(; decpt < 0; decpt++)
-                       *b++ = '0';
-               while((*b = *s++) !=0)
-                       b++;
-               }
-       else {
-               while((*b = *s++) !=0) {
-                       b++;
-                       if (--decpt == 0 && *s)
-                               *b++ = '.';
-                       }
-               for(; decpt > 0; decpt--)
-                       *b++ = '0';
-               *b = 0;
-               }
-       freedtoa(s0);
-       return b;
-       }
diff --git a/float/gdtoa/g_ddfmt.c b/float/gdtoa/g_ddfmt.c
deleted file mode 100644 (file)
index 7d214ba..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-#include <string.h>
-
- char *
-#ifdef KR_headers
-g_ddfmt(buf, dd, ndig, bufsize) char *buf; double *dd; int ndig; unsigned bufsize;
-#else
-g_ddfmt(char *buf, double *dd, int ndig, unsigned bufsize)
-#endif
-{
-       FPI fpi;
-       char *b, *s, *se;
-       ULong *L, bits0[4], *bits, *zx;
-       int bx, by, decpt, ex, ey, i, j, mode;
-       Bigint *x, *y, *z;
-       double ddx[2];
-
-       if (bufsize < 10 || bufsize < ndig + 8)
-               return 0;
-
-       L = (ULong*)dd;
-       if ((L[_0] & 0x7ff00000L) == 0x7ff00000L) {
-               /* Infinity or NaN */
-               if (L[_0] & 0xfffff || L[_1]) {
- nanret:
-                       return strcp(buf, "NaN");
-                       }
-               if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) {
-                       if (L[2+_0] & 0xfffff || L[2+_1])
-                               goto nanret;
-                       if ((L[_0] ^ L[2+_0]) & 0x80000000L)
-                               goto nanret;    /* Infinity - Infinity */
-                       }
- infret:
-               b = buf;
-               if (L[_0] & 0x80000000L)
-                       *b++ = '-';
-               return strcp(b, "Infinity");
-               }
-       if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) {
-               L += 2;
-               if (L[_0] & 0xfffff || L[_1])
-                       goto nanret;
-               goto infret;
-               }
-       if (dd[0] + dd[1] == 0.) {
-               b = buf;
-#ifndef IGNORE_ZERO_SIGN
-               if (L[_0] & L[2+_0] & 0x80000000L)
-                       *b++ = '-';
-#endif
-               *b++ = '0';
-               *b = 0;
-               return b;
-               }
-       if ((L[_0] & 0x7ff00000L) < (L[2+_0] & 0x7ff00000L)) {
-               ddx[1] = dd[0];
-               ddx[0] = dd[1];
-               dd = ddx;
-               L = (ULong*)dd;
-               }
-       z = d2b(dd[0], &ex, &bx);
-       if (dd[1] == 0.)
-               goto no_y;
-       x = z;
-       y = d2b(dd[1], &ey, &by);
-       if ( (i = ex - ey) !=0) {
-               if (i > 0) {
-                       x = lshift(x, i);
-                       ex = ey;
-                       }
-               else
-                       y = lshift(y, -i);
-               }
-       if ((L[_0] ^ L[2+_0]) & 0x80000000L) {
-               z = diff(x, y);
-               if (L[_0] & 0x80000000L)
-                       z->sign = 1 - z->sign;
-               }
-       else {
-               z = sum(x, y);
-               if (L[_0] & 0x80000000L)
-                       z->sign = 1;
-               }
-       Bfree(x);
-       Bfree(y);
- no_y:
-       bits = zx = z->x;
-       for(i = 0; !*zx; zx++)
-               i += 32;
-       i += lo0bits(zx);
-       if (i) {
-               rshift(z, i);
-               ex += i;
-               }
-       fpi.nbits = z->wds * 32 - hi0bits(z->x[j = z->wds-1]);
-       if (fpi.nbits < 106) {
-               fpi.nbits = 106;
-               if (j < 3) {
-                       for(i = 0; i <= j; i++)
-                               bits0[i] = bits[i];
-                       while(i < 4)
-                               bits0[i++] = 0;
-                       bits = bits0;
-                       }
-               }
-       mode = 2;
-       if (ndig <= 0) {
-               if (bufsize < (int)(fpi.nbits * .301029995664) + 10) {
-                       Bfree(z);
-                       return 0;
-                       }
-               mode = 0;
-               }
-       fpi.emin = 1-1023-53+1;
-       fpi.emax = 2046-1023-106+1;
-       fpi.rounding = FPI_Round_near;
-       fpi.sudden_underflow = 0;
-       i = STRTOG_Normal;
-       s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
-       b = g__fmt(buf, s, se, decpt, z->sign);
-       Bfree(z);
-       return b;
-       }
diff --git a/float/gdtoa/g_dfmt.c b/float/gdtoa/g_dfmt.c
deleted file mode 100644 (file)
index 1ade834..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- char*
-#ifdef KR_headers
-g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; unsigned bufsize;
-#else
-g_dfmt(char *buf, double *d, int ndig, unsigned bufsize)
-#endif
-{
-       static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0 };
-       char *b, *s, *se;
-       ULong bits[2], *L, sign;
-       int decpt, ex, i, mode;
-
-       if (ndig < 0)
-               ndig = 0;
-       if (bufsize < ndig + 10)
-               return 0;
-
-       L = (ULong*)d;
-       sign = L[_0] & 0x80000000L;
-       if ((L[_0] & 0x7ff00000) == 0x7ff00000) {
-               /* Infinity or NaN */
-               if (L[_0] & 0xfffff || L[_1]) {
-                       return strcp(buf, "NaN");
-                       }
-               b = buf;
-               if (sign)
-                       *b++ = '-';
-               return strcp(b, "Infinity");
-               }
-       if (L[_1] == 0 && (L[_0] ^ sign) == 0 /*d == 0.*/) {
-               b = buf;
-#ifndef IGNORE_ZERO_SIGN
-               if (L[_0] & 0x80000000L)
-                       *b++ = '-';
-#endif
-               *b++ = '0';
-               *b = 0;
-               return b;
-               }
-       bits[0] = L[_1];
-       bits[1] = L[_0] & 0xfffff;
-       if ( (ex = (L[_0] >> 20) & 0x7ff) !=0)
-               bits[1] |= 0x100000;
-       else
-               ex = 1;
-       ex -= 0x3ff + 52;
-       mode = 2;
-       if (ndig <= 0) {
-               if (bufsize < 25)
-                       return 0;
-               mode = 0;
-               }
-       i = STRTOG_Normal;
-       s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
-       return g__fmt(buf, s, se, decpt, sign);
-       }
diff --git a/float/gdtoa/g_ffmt.c b/float/gdtoa/g_ffmt.c
deleted file mode 100644 (file)
index 851394a..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- char*
-#ifdef KR_headers
-g_ffmt(buf, f, ndig, bufsize) char *buf; float *f; int ndig; unsigned bufsize;
-#else
-g_ffmt(char *buf, float *f, int ndig, unsigned bufsize)
-#endif
-{
-       static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, 0 };
-       char *b, *s, *se;
-       ULong bits[1], *L, sign;
-       int decpt, ex, i, mode;
-
-       if (ndig < 0)
-               ndig = 0;
-       if (bufsize < ndig + 10)
-               return 0;
-
-       L = (ULong*)f;
-       sign = L[0] & 0x80000000L;
-       if ((L[0] & 0x7f800000) == 0x7f800000) {
-               /* Infinity or NaN */
-               if (L[0] & 0x7fffff) {
-                       return strcp(buf, "NaN");
-                       }
-               b = buf;
-               if (sign)
-                       *b++ = '-';
-               return strcp(b, "Infinity");
-               }
-       if (*f == 0.) {
-               b = buf;
-#ifndef IGNORE_ZERO_SIGN
-               if (L[0] & 0x80000000L)
-                       *b++ = '-';
-#endif
-               *b++ = '0';
-               *b = 0;
-               return b;
-               }
-       bits[0] = L[0] & 0x7fffff;
-       if ( (ex = (L[0] >> 23) & 0xff) !=0)
-               bits[0] |= 0x800000;
-       else
-               ex = 1;
-       ex -= 0x7f + 23;
-       mode = 2;
-       if (ndig <= 0) {
-               if (bufsize < 16)
-                       return 0;
-               mode = 0;
-               }
-       i = STRTOG_Normal;
-       s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
-       return g__fmt(buf, s, se, decpt, sign);
-       }
diff --git a/float/gdtoa/g_xLfmt.c b/float/gdtoa/g_xLfmt.c
deleted file mode 100644 (file)
index fc17643..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#endif
-#ifdef IEEE_8087
-#define _0 2
-#define _1 1
-#define _2 0
-#endif
-
- char*
-#ifdef KR_headers
-g_xLfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
-#else
-g_xLfmt(char *buf, void *V, int ndig, unsigned bufsize)
-#endif
-{
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
-       char *b, *s, *se;
-       ULong bits[2], *L, sign;
-       int decpt, ex, i, mode;
-
-       if (ndig < 0)
-               ndig = 0;
-       if (bufsize < ndig + 10)
-               return 0;
-
-       L = (ULong*)V;
-       sign = L[_0] & 0x80000000L;
-       bits[1] = L[_1];
-       bits[0] = L[_2];
-       if ( (ex = (L[_0] >> 16) & 0x7fff) !=0) {
-               if (ex == 0x7fff) {
-                       /* Infinity or NaN */
-                       if (bits[0] | bits[1])
-                               b = strcp(buf, "NaN");
-                       else {
-                               b = buf;
-                               if (sign)
-                                       *b++ = '-';
-                               b = strcp(b, "Infinity");
-                               }
-                       return b;
-                       }
-               i = STRTOG_Normal;
-               }
-       else if (bits[0] | bits[1]) {
-               i = STRTOG_Denormal;
-               }
-       else {
-               b = buf;
-#ifndef IGNORE_ZERO_SIGN
-               if (sign)
-                       *b++ = '-';
-#endif
-               *b++ = '0';
-               *b = 0;
-               return b;
-               }
-       ex -= 0x3fff + 63;
-       mode = 2;
-       if (ndig <= 0) {
-               if (bufsize < 32)
-                       return 0;
-               mode = 0;
-               }
-       s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
-       return g__fmt(buf, s, se, decpt, sign);
-       }
diff --git a/float/gdtoa/g_xfmt.c b/float/gdtoa/g_xfmt.c
deleted file mode 100644 (file)
index 1e2a381..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_8087
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
- char*
-#ifdef KR_headers
-g_xfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
-#else
-g_xfmt(char *buf, void *V, int ndig, unsigned bufsize)
-#endif
-{
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
-       char *b, *s, *se;
-       ULong bits[2], sign;
-       UShort *L;
-       int decpt, ex, i, mode;
-
-       if (ndig < 0)
-               ndig = 0;
-       if (bufsize < ndig + 10)
-               return 0;
-
-       L = (UShort *)V;
-       sign = L[_0] & 0x8000;
-       bits[1] = (L[_1] << 16) | L[_2];
-       bits[0] = (L[_3] << 16) | L[_4];
-       if ( (ex = L[_0] & 0x7fff) !=0) {
-               if (ex == 0x7fff) {
-                       /* Infinity or NaN */
-                       if (bits[0] | bits[1])
-                               b = strcp(buf, "NaN");
-                       else {
-                               b = buf;
-                               if (sign)
-                                       *b++ = '-';
-                               b = strcp(b, "Infinity");
-                               }
-                       return b;
-                       }
-               i = STRTOG_Normal;
-               }
-       else if (bits[0] | bits[1]) {
-               i = STRTOG_Denormal;
-               }
-       else {
-               b = buf;
-#ifndef IGNORE_ZERO_SIGN
-               if (sign)
-                       *b++ = '-';
-#endif
-               *b++ = '0';
-               *b = 0;
-               return b;
-               }
-       ex -= 0x3fff + 63;
-       mode = 2;
-       if (ndig <= 0) {
-               if (bufsize < 32)
-                       return 0;
-               mode = 0;
-               }
-       s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
-       return g__fmt(buf, s, se, decpt, sign);
-       }
diff --git a/float/gdtoa/gdtoa.c b/float/gdtoa/gdtoa.c
deleted file mode 100644 (file)
index 706c055..0000000
+++ /dev/null
@@ -1,764 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- static Bigint *
-#ifdef KR_headers
-bitstob(bits, nbits, bbits) ULong *bits; int nbits; int *bbits;
-#else
-bitstob(ULong *bits, int nbits, int *bbits)
-#endif
-{
-       int i, k;
-       Bigint *b;
-       ULong *be, *x, *x0;
-
-       i = ULbits;
-       k = 0;
-       while(i < nbits) {
-               i <<= 1;
-               k++;
-               }
-#ifndef Pack_32
-       if (!k)
-               k = 1;
-#endif
-       b = Balloc(k);
-       be = bits + ((nbits - 1) >> kshift);
-       x = x0 = b->x;
-       do {
-               *x++ = *bits & ALL_ON;
-#ifdef Pack_16
-               *x++ = (*bits >> 16) & ALL_ON;
-#endif
-               } while(++bits <= be);
-       i = x - x0;
-       while(!x0[--i])
-               if (!i) {
-                       b->wds = 0;
-                       *bbits = 0;
-                       goto ret;
-                       }
-       b->wds = i + 1;
-       *bbits = i*ULbits + 32 - hi0bits(b->x[i]);
- ret:
-       return b;
-       }
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- *     1. Rather than iterating, we use a simple numeric overestimate
- *        to determine k = floor(log10(d)).  We scale relevant
- *        quantities using O(log2(k)) rather than O(k) multiplications.
- *     2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- *        try to generate digits strictly left to right.  Instead, we
- *        compute with fewer bits and propagate the carry if necessary
- *        when rounding the final digit up.  This is often faster.
- *     3. Under the assumption that input will be rounded nearest,
- *        mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- *        That is, we allow equality in stopping tests when the
- *        round-nearest rule will give the same floating-point value
- *        as would satisfaction of the stopping test with strict
- *        inequality.
- *     4. We remove common factors of powers of 2 from relevant
- *        quantities.
- *     5. When converting floating-point integers less than 1e16,
- *        we use floating-point arithmetic rather than resorting
- *        to multiple-precision integers.
- *     6. When asked to produce fewer than 15 digits, we first try
- *        to get by with floating-point arithmetic; we resort to
- *        multiple-precision integer arithmetic only if we cannot
- *        guarantee that the floating-point calculation has given
- *        the correctly rounded result.  For k requested digits and
- *        "uniformly" distributed input, the probability is
- *        something like 10^(k-15) that we must resort to the Long
- *        calculation.
- */
-
- char *
-gdtoa
-#ifdef KR_headers
-       (fpi, be, bits, kindp, mode, ndigits, decpt, rve)
-       FPI *fpi; int be; ULong *bits;
-       int *kindp, mode, ndigits, *decpt; char **rve;
-#else
-       (FPI *fpi, int be, ULong *bits, int *kindp, int mode, int ndigits, int *decpt, char **rve)
-#endif
-{
- /*    Arguments ndigits and decpt are similar to the second and third
-       arguments of ecvt and fcvt; trailing zeros are suppressed from
-       the returned string.  If not null, *rve is set to point
-       to the end of the return value.  If d is +-Infinity or NaN,
-       then *decpt is set to 9999.
-
-       mode:
-               0 ==> shortest string that yields d when read in
-                       and rounded to nearest.
-               1 ==> like 0, but with Steele & White stopping rule;
-                       e.g. with IEEE P754 arithmetic , mode 0 gives
-                       1e23 whereas mode 1 gives 9.999999999999999e22.
-               2 ==> max(1,ndigits) significant digits.  This gives a
-                       return value similar to that of ecvt, except
-                       that trailing zeros are suppressed.
-               3 ==> through ndigits past the decimal point.  This
-                       gives a return value similar to that from fcvt,
-                       except that trailing zeros are suppressed, and
-                       ndigits can be negative.
-               4-9 should give the same return values as 2-3, i.e.,
-                       4 <= mode <= 9 ==> same return as mode
-                       2 + (mode & 1).  These modes are mainly for
-                       debugging; often they run slower but sometimes
-                       faster than modes 2-3.
-               4,5,8,9 ==> left-to-right digit generation.
-               6-9 ==> don't try fast floating-point estimate
-                       (if applicable).
-
-               Values of mode other than 0-9 are treated as mode 0.
-
-               Sufficient space is allocated to the return value
-               to hold the suppressed trailing zeros.
-       */
-
-       int bbits, b2, b5, be0, dig, i, ieps, ilim, ilim0, ilim1, inex;
-       int j, j1, k, k0, k_check, kind, leftright, m2, m5, nbits;
-       int rdir, s2, s5, spec_case, try_quick;
-       Long L;
-       Bigint *b, *b1, *delta, *mlo, *mhi, *mhi1, *S;
-       double d, d2, ds, eps;
-       char *s, *s0;
-
-#ifndef MULTIPLE_THREADS
-       if (dtoa_result) {
-               freedtoa(dtoa_result);
-               dtoa_result = 0;
-               }
-#endif
-       inex = 0;
-       kind = *kindp &= ~STRTOG_Inexact;
-       switch(kind & STRTOG_Retmask) {
-         case STRTOG_Zero:
-               goto ret_zero;
-         case STRTOG_Normal:
-         case STRTOG_Denormal:
-               break;
-         case STRTOG_Infinite:
-               *decpt = -32768;
-               return nrv_alloc("Infinity", rve, 8);
-         case STRTOG_NaN:
-               *decpt = -32768;
-               return nrv_alloc("NaN", rve, 3);
-         default:
-               return 0;
-         }
-       b = bitstob(bits, nbits = fpi->nbits, &bbits);
-       be0 = be;
-       if ( (i = trailz(b)) !=0) {
-               rshift(b, i);
-               be += i;
-               bbits -= i;
-               }
-       if (!b->wds) {
-               Bfree(b);
- ret_zero:
-               *decpt = 1;
-               return nrv_alloc("0", rve, 1);
-               }
-
-       dval(d) = b2d(b, &i);
-       i = be + bbits - 1;
-       word0(d) &= Frac_mask1;
-       word0(d) |= Exp_11;
-#ifdef IBM
-       if ( (j = 11 - hi0bits(word0(d) & Frac_mask)) !=0)
-               dval(d) /= 1 << j;
-#endif
-
-       /* log(x)       ~=~ log(1.5) + (x-1.5)/1.5
-        * log10(x)      =  log(x) / log(10)
-        *              ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
-        * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
-        *
-        * This suggests computing an approximation k to log10(d) by
-        *
-        * k = (i - Bias)*0.301029995663981
-        *      + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
-        *
-        * We want k to be too large rather than too small.
-        * The error in the first-order Taylor series approximation
-        * is in our favor, so we just round up the constant enough
-        * to compensate for any error in the multiplication of
-        * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
-        * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
-        * adding 1e-13 to the constant term more than suffices.
-        * Hence we adjust the constant term to 0.1760912590558.
-        * (We could get a more accurate k by invoking log10,
-        *  but this is probably not worthwhile.)
-        */
-#ifdef IBM
-       i <<= 2;
-       i += j;
-#endif
-       ds = (dval(d)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
-
-       /* correct assumption about exponent range */
-       if ((j = i) < 0)
-               j = -j;
-       if ((j -= 1077) > 0)
-               ds += j * 7e-17;
-
-       k = (int)ds;
-       if (ds < 0. && ds != k)
-               k--;    /* want k = floor(ds) */
-       k_check = 1;
-#ifdef IBM
-       j = be + bbits - 1;
-       if ( (j1 = j & 3) !=0)
-               dval(d) *= 1 << j1;
-       word0(d) += j << Exp_shift - 2 & Exp_mask;
-#else
-       word0(d) += (be + bbits - 1) << Exp_shift;
-#endif
-       if (k >= 0 && k <= Ten_pmax) {
-               if (dval(d) < tens[k])
-                       k--;
-               k_check = 0;
-               }
-       j = bbits - i - 1;
-       if (j >= 0) {
-               b2 = 0;
-               s2 = j;
-               }
-       else {
-               b2 = -j;
-               s2 = 0;
-               }
-       if (k >= 0) {
-               b5 = 0;
-               s5 = k;
-               s2 += k;
-               }
-       else {
-               b2 -= k;
-               b5 = -k;
-               s5 = 0;
-               }
-       if (mode < 0 || mode > 9)
-               mode = 0;
-       try_quick = 1;
-       if (mode > 5) {
-               mode -= 4;
-               try_quick = 0;
-               }
-       leftright = 1;
-       switch(mode) {
-               case 0:
-               case 1:
-                       ilim = ilim1 = -1;
-                       i = (int)(nbits * .30103) + 3;
-                       ndigits = 0;
-                       break;
-               case 2:
-                       leftright = 0;
-                       /* no break */
-               case 4:
-                       if (ndigits <= 0)
-                               ndigits = 1;
-                       ilim = ilim1 = i = ndigits;
-                       break;
-               case 3:
-                       leftright = 0;
-                       /* no break */
-               case 5:
-                       i = ndigits + k + 1;
-                       ilim = i;
-                       ilim1 = i - 1;
-                       if (i <= 0)
-                               i = 1;
-               }
-       s = s0 = rv_alloc(i);
-
-       if ( (rdir = fpi->rounding - 1) !=0) {
-               if (rdir < 0)
-                       rdir = 2;
-               if (kind & STRTOG_Neg)
-                       rdir = 3 - rdir;
-               }
-
-       /* Now rdir = 0 ==> round near, 1 ==> round up, 2 ==> round down. */
-
-       if (ilim >= 0 && ilim <= Quick_max && try_quick && !rdir
-#ifndef IMPRECISE_INEXACT
-               && k == 0
-#endif
-                                                               ) {
-
-               /* Try to get by with floating-point arithmetic. */
-
-               i = 0;
-               d2 = dval(d);
-#ifdef IBM
-               if ( (j = 11 - hi0bits(word0(d) & Frac_mask)) !=0)
-                       dval(d) /= 1 << j;
-#endif
-               k0 = k;
-               ilim0 = ilim;
-               ieps = 2; /* conservative */
-               if (k > 0) {
-                       ds = tens[k&0xf];
-                       j = k >> 4;
-                       if (j & Bletch) {
-                               /* prevent overflows */
-                               j &= Bletch - 1;
-                               dval(d) /= bigtens[n_bigtens-1];
-                               ieps++;
-                               }
-                       for(; j; j >>= 1, i++)
-                               if (j & 1) {
-                                       ieps++;
-                                       ds *= bigtens[i];
-                                       }
-                       }
-               else  {
-                       ds = 1.;
-                       if ( (j1 = -k) !=0) {
-                               dval(d) *= tens[j1 & 0xf];
-                               for(j = j1 >> 4; j; j >>= 1, i++)
-                                       if (j & 1) {
-                                               ieps++;
-                                               dval(d) *= bigtens[i];
-                                               }
-                               }
-                       }
-               if (k_check && dval(d) < 1. && ilim > 0) {
-                       if (ilim1 <= 0)
-                               goto fast_failed;
-                       ilim = ilim1;
-                       k--;
-                       dval(d) *= 10.;
-                       ieps++;
-                       }
-               dval(eps) = ieps*dval(d) + 7.;
-               word0(eps) -= (P-1)*Exp_msk1;
-               if (ilim == 0) {
-                       S = mhi = 0;
-                       dval(d) -= 5.;
-                       if (dval(d) > dval(eps))
-                               goto one_digit;
-                       if (dval(d) < -dval(eps))
-                               goto no_digits;
-                       goto fast_failed;
-                       }
-#ifndef No_leftright
-               if (leftright) {
-                       /* Use Steele & White method of only
-                        * generating digits needed.
-                        */
-                       dval(eps) = ds*0.5/tens[ilim-1] - dval(eps);
-                       for(i = 0;;) {
-                               L = (Long)(dval(d)/ds);
-                               dval(d) -= L*ds;
-                               *s++ = '0' + (int)L;
-                               if (dval(d) < dval(eps)) {
-                                       if (dval(d))
-                                               inex = STRTOG_Inexlo;
-                                       goto ret1;
-                                       }
-                               if (ds - dval(d) < dval(eps))
-                                       goto bump_up;
-                               if (++i >= ilim)
-                                       break;
-                               dval(eps) *= 10.;
-                               dval(d) *= 10.;
-                               }
-                       }
-               else {
-#endif
-                       /* Generate ilim digits, then fix them up. */
-                       dval(eps) *= tens[ilim-1];
-                       for(i = 1;; i++, dval(d) *= 10.) {
-                               if ( (L = (Long)(dval(d)/ds)) !=0)
-                                       dval(d) -= L*ds;
-                               *s++ = '0' + (int)L;
-                               if (i == ilim) {
-                                       ds *= 0.5;
-                                       if (dval(d) > ds + dval(eps))
-                                               goto bump_up;
-                                       else if (dval(d) < ds - dval(eps)) {
-                                               while(*--s == '0'){}
-                                               s++;
-                                               if (dval(d))
-                                                       inex = STRTOG_Inexlo;
-                                               goto ret1;
-                                               }
-                                       break;
-                                       }
-                               }
-#ifndef No_leftright
-                       }
-#endif
- fast_failed:
-               s = s0;
-               dval(d) = d2;
-               k = k0;
-               ilim = ilim0;
-               }
-
-       /* Do we have a "small" integer? */
-
-       if (be >= 0 && k <= Int_max) {
-               /* Yes. */
-               ds = tens[k];
-               if (ndigits < 0 && ilim <= 0) {
-                       S = mhi = 0;
-                       if (ilim < 0 || dval(d) <= 5*ds)
-                               goto no_digits;
-                       goto one_digit;
-                       }
-               for(i = 1;; i++, dval(d) *= 10.) {
-                       L = dval(d) / ds;
-                       dval(d) -= L*ds;
-#ifdef Check_FLT_ROUNDS
-                       /* If FLT_ROUNDS == 2, L will usually be high by 1 */
-                       if (dval(d) < 0) {
-                               L--;
-                               dval(d) += ds;
-                               }
-#endif
-                       *s++ = '0' + (int)L;
-                       if (dval(d) == 0.)
-                               break;
-                       if (i == ilim) {
-                               if (rdir) {
-                                       if (rdir == 1)
-                                               goto bump_up;
-                                       inex = STRTOG_Inexlo;
-                                       goto ret1;
-                                       }
-                               dval(d) += dval(d);
-                               if (dval(d) > ds || dval(d) == ds && L & 1) {
- bump_up:
-                                       inex = STRTOG_Inexhi;
-                                       while(*--s == '9')
-                                               if (s == s0) {
-                                                       k++;
-                                                       *s = '0';
-                                                       break;
-                                                       }
-                                       ++*s++;
-                                       }
-                               else
-                                       inex = STRTOG_Inexlo;
-                               break;
-                               }
-                       }
-               goto ret1;
-               }
-
-       m2 = b2;
-       m5 = b5;
-       mhi = mlo = 0;
-       if (leftright) {
-               if (mode < 2) {
-                       i = nbits - bbits;
-                       if (be - i++ < fpi->emin)
-                               /* denormal */
-                               i = be - fpi->emin + 1;
-                       }
-               else {
-                       j = ilim - 1;
-                       if (m5 >= j)
-                               m5 -= j;
-                       else {
-                               s5 += j -= m5;
-                               b5 += j;
-                               m5 = 0;
-                               }
-                       if ((i = ilim) < 0) {
-                               m2 -= i;
-                               i = 0;
-                               }
-                       }
-               b2 += i;
-               s2 += i;
-               mhi = i2b(1);
-               }
-       if (m2 > 0 && s2 > 0) {
-               i = m2 < s2 ? m2 : s2;
-               b2 -= i;
-               m2 -= i;
-               s2 -= i;
-               }
-       if (b5 > 0) {
-               if (leftright) {
-                       if (m5 > 0) {
-                               mhi = pow5mult(mhi, m5);
-                               b1 = mult(mhi, b);
-                               Bfree(b);
-                               b = b1;
-                               }
-                       if ( (j = b5 - m5) !=0)
-                               b = pow5mult(b, j);
-                       }
-               else
-                       b = pow5mult(b, b5);
-               }
-       S = i2b(1);
-       if (s5 > 0)
-               S = pow5mult(S, s5);
-
-       /* Check for special case that d is a normalized power of 2. */
-
-       spec_case = 0;
-       if (mode < 2) {
-               if (bbits == 1 && be0 > fpi->emin + 1) {
-                       /* The special case */
-                       b2++;
-                       s2++;
-                       spec_case = 1;
-                       }
-               }
-
-       /* Arrange for convenient computation of quotients:
-        * shift left if necessary so divisor has 4 leading 0 bits.
-        *
-        * Perhaps we should just compute leading 28 bits of S once
-        * and for all and pass them and a shift to quorem, so it
-        * can do shifts and ors to compute the numerator for q.
-        */
-#ifdef Pack_32
-       if ( (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f) !=0)
-               i = 32 - i;
-#else
-       if ( (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf) !=0)
-               i = 16 - i;
-#endif
-       if (i > 4) {
-               i -= 4;
-               b2 += i;
-               m2 += i;
-               s2 += i;
-               }
-       else if (i < 4) {
-               i += 28;
-               b2 += i;
-               m2 += i;
-               s2 += i;
-               }
-       if (b2 > 0)
-               b = lshift(b, b2);
-       if (s2 > 0)
-               S = lshift(S, s2);
-       if (k_check) {
-               if (cmp(b,S) < 0) {
-                       k--;
-                       b = multadd(b, 10, 0);  /* we botched the k estimate */
-                       if (leftright)
-                               mhi = multadd(mhi, 10, 0);
-                       ilim = ilim1;
-                       }
-               }
-       if (ilim <= 0 && mode > 2) {
-               if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
-                       /* no digits, fcvt style */
- no_digits:
-                       k = -1 - ndigits;
-                       inex = STRTOG_Inexlo;
-                       goto ret;
-                       }
- one_digit:
-               inex = STRTOG_Inexhi;
-               *s++ = '1';
-               k++;
-               goto ret;
-               }
-       if (leftright) {
-               if (m2 > 0)
-                       mhi = lshift(mhi, m2);
-
-               /* Compute mlo -- check for special case
-                * that d is a normalized power of 2.
-                */
-
-               mlo = mhi;
-               if (spec_case) {
-                       mhi = Balloc(mhi->k);
-                       Bcopy(mhi, mlo);
-                       mhi = lshift(mhi, 1);
-                       }
-
-               for(i = 1;;i++) {
-                       dig = quorem(b,S) + '0';
-                       /* Do we yet have the shortest decimal string
-                        * that will round to d?
-                        */
-                       j = cmp(b, mlo);
-                       delta = diff(S, mhi);
-                       j1 = delta->sign ? 1 : cmp(b, delta);
-                       Bfree(delta);
-#ifndef ROUND_BIASED
-                       if (j1 == 0 && !mode && !(bits[0] & 1) && !rdir) {
-                               if (dig == '9')
-                                       goto round_9_up;
-                               if (j <= 0) {
-                                       if (b->wds > 1 || b->x[0])
-                                               inex = STRTOG_Inexlo;
-                                       }
-                               else {
-                                       dig++;
-                                       inex = STRTOG_Inexhi;
-                                       }
-                               *s++ = dig;
-                               goto ret;
-                               }
-#endif
-                       if (j < 0 || j == 0 && !mode
-#ifndef ROUND_BIASED
-                                                       && !(bits[0] & 1)
-#endif
-                                       ) {
-                               if (rdir && (b->wds > 1 || b->x[0])) {
-                                       if (rdir == 2) {
-                                               inex = STRTOG_Inexlo;
-                                               goto accept;
-                                               }
-                                       while (cmp(S,mhi) > 0) {
-                                               *s++ = dig;
-                                               mhi1 = multadd(mhi, 10, 0);
-                                               if (mlo == mhi)
-                                                       mlo = mhi1;
-                                               mhi = mhi1;
-                                               b = multadd(b, 10, 0);
-                                               dig = quorem(b,S) + '0';
-                                               }
-                                       if (dig++ == '9')
-                                               goto round_9_up;
-                                       inex = STRTOG_Inexhi;
-                                       goto accept;
-                                       }
-                               if (j1 > 0) {
-                                       b = lshift(b, 1);
-                                       j1 = cmp(b, S);
-                                       if ((j1 > 0 || j1 == 0 && dig & 1)
-                                       && dig++ == '9')
-                                               goto round_9_up;
-                                       inex = STRTOG_Inexhi;
-                                       }
-                               if (b->wds > 1 || b->x[0])
-                                       inex = STRTOG_Inexlo;
- accept:
-                               *s++ = dig;
-                               goto ret;
-                               }
-                       if (j1 > 0 && rdir != 2) {
-                               if (dig == '9') { /* possible if i == 1 */
- round_9_up:
-                                       *s++ = '9';
-                                       inex = STRTOG_Inexhi;
-                                       goto roundoff;
-                                       }
-                               inex = STRTOG_Inexhi;
-                               *s++ = dig + 1;
-                               goto ret;
-                               }
-                       *s++ = dig;
-                       if (i == ilim)
-                               break;
-                       b = multadd(b, 10, 0);
-                       if (mlo == mhi)
-                               mlo = mhi = multadd(mhi, 10, 0);
-                       else {
-                               mlo = multadd(mlo, 10, 0);
-                               mhi = multadd(mhi, 10, 0);
-                               }
-                       }
-               }
-       else
-               for(i = 1;; i++) {
-                       *s++ = dig = quorem(b,S) + '0';
-                       if (i >= ilim)
-                               break;
-                       b = multadd(b, 10, 0);
-                       }
-
-       /* Round off last digit */
-
-       if (rdir) {
-               if (rdir == 2 || b->wds <= 1 && !b->x[0])
-                       goto chopzeros;
-               goto roundoff;
-               }
-       b = lshift(b, 1);
-       j = cmp(b, S);
-       if (j > 0 || j == 0 && dig & 1) {
- roundoff:
-               inex = STRTOG_Inexhi;
-               while(*--s == '9')
-                       if (s == s0) {
-                               k++;
-                               *s++ = '1';
-                               goto ret;
-                               }
-               ++*s++;
-               }
-       else {
- chopzeros:
-               if (b->wds > 1 || b->x[0])
-                       inex = STRTOG_Inexlo;
-               while(*--s == '0'){}
-               s++;
-               }
- ret:
-       Bfree(S);
-       if (mhi) {
-               if (mlo && mlo != mhi)
-                       Bfree(mlo);
-               Bfree(mhi);
-               }
- ret1:
-       Bfree(b);
-       *s = 0;
-       *decpt = k + 1;
-       if (rve)
-               *rve = s;
-       *kindp |= inex;
-       return s0;
-       }
diff --git a/float/gdtoa/gdtoa.h b/float/gdtoa/gdtoa.h
deleted file mode 100644 (file)
index 62553f2..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#ifndef GDTOA_H_INCLUDED
-#define GDTOA_H_INCLUDED
-
-#include "arith.h"
-
-#ifndef Long
-#define Long long
-#endif
-#ifndef ULong
-typedef unsigned Long ULong;
-#endif
-#ifndef UShort
-typedef unsigned short UShort;
-#endif
-
-#ifndef ANSI
-#ifdef KR_headers
-#define ANSI(x) ()
-#define Void /*nothing*/
-#else
-#define ANSI(x) x
-#define Void void
-#endif
-#endif /* ANSI */
-
-#ifndef CONST
-#ifdef KR_headers
-#define CONST /* blank */
-#else
-#define CONST const
-#endif
-#endif /* CONST */
-
- enum {        /* return values from strtodg */
-       STRTOG_Zero     = 0,
-       STRTOG_Normal   = 1,
-       STRTOG_Denormal = 2,
-       STRTOG_Infinite = 3,
-       STRTOG_NaN      = 4,
-       STRTOG_NaNbits  = 5,
-       STRTOG_NoNumber = 6,
-       STRTOG_Retmask  = 7,
-
-       /* The following may be or-ed into one of the above values. */
-
-       STRTOG_Neg      = 0x08,
-       STRTOG_Inexlo   = 0x10,
-       STRTOG_Inexhi   = 0x20,
-       STRTOG_Inexact  = 0x30,
-       STRTOG_Underflow= 0x40,
-       STRTOG_Overflow = 0x80
-       };
-
- typedef struct
-FPI {
-       int nbits;
-       int emin;
-       int emax;
-       int rounding;
-       int sudden_underflow;
-       } FPI;
-
-enum { /* FPI.rounding values: same as FLT_ROUNDS */
-       FPI_Round_zero = 0,
-       FPI_Round_near = 1,
-       FPI_Round_up = 2,
-       FPI_Round_down = 3
-       };
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern char* dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
-                       int *sign, char **rve));
-extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
-                       int mode, int ndigits, int *decpt, char **rve));
-extern void freedtoa ANSI((char*));
-extern float  strtof ANSI((CONST char *, char **));
-extern double strtod ANSI((CONST char *, char **));
-extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
-
-extern char*   g_ddfmt  ANSI((char*, double*, int, unsigned));
-extern char*   g_dfmt   ANSI((char*, double*, int, unsigned));
-extern char*   g_ffmt   ANSI((char*, float*,  int, unsigned));
-extern char*   g_Qfmt   ANSI((char*, void*,   int, unsigned));
-extern char*   g_xfmt   ANSI((char*, void*,   int, unsigned));
-extern char*   g_xLfmt  ANSI((char*, void*,   int, unsigned));
-
-extern int     strtoId  ANSI((CONST char*, char**, double*, double*));
-extern int     strtoIdd ANSI((CONST char*, char**, double*, double*));
-extern int     strtoIf  ANSI((CONST char*, char**, float*, float*));
-extern int     strtoIQ  ANSI((CONST char*, char**, void*, void*));
-extern int     strtoIx  ANSI((CONST char*, char**, void*, void*));
-extern int     strtoIxL ANSI((CONST char*, char**, void*, void*));
-extern int     strtord  ANSI((CONST char*, char**, int, double*));
-extern int     strtordd ANSI((CONST char*, char**, int, double*));
-extern int     strtorf  ANSI((CONST char*, char**, int, float*));
-extern int     strtorQ  ANSI((CONST char*, char**, int, void*));
-extern int     strtorx  ANSI((CONST char*, char**, int, void*));
-extern int     strtorxL ANSI((CONST char*, char**, int, void*));
-#if 1
-extern int     strtodI  ANSI((CONST char*, char**, double*));
-extern int     strtopd  ANSI((CONST char*, char**, double*));
-extern int     strtopdd ANSI((CONST char*, char**, double*));
-extern int     strtopf  ANSI((CONST char*, char**, float*));
-extern int     strtopQ  ANSI((CONST char*, char**, void*));
-extern int     strtopx  ANSI((CONST char*, char**, void*));
-extern int     strtopxL ANSI((CONST char*, char**, void*));
-#else
-#define strtopd(s,se,x) strtord(s,se,1,x)
-#define strtopdd(s,se,x) strtordd(s,se,1,x)
-#define strtopf(s,se,x) strtorf(s,se,1,x)
-#define strtopQ(s,se,x) strtorQ(s,se,1,x)
-#define strtopx(s,se,x) strtorx(s,se,1,x)
-#define strtopxL(s,se,x) strtorxL(s,se,1,x)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* GDTOA_H_INCLUDED */
diff --git a/float/gdtoa/gdtoaimp.h b/float/gdtoa/gdtoaimp.h
deleted file mode 100644 (file)
index 8ba37ae..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* This is a variation on dtoa.c that converts arbitary binary
-   floating-point formats to and from decimal notation.  It uses
-   double-precision arithmetic internally, so there are still
-   various #ifdefs that adapt the calculations to the native
-   double-precision arithmetic (any of IEEE, VAX D_floating,
-   or IBM mainframe arithmetic).
-
-   Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* On a machine with IEEE extended-precision registers, it is
- * necessary to specify double-precision (53-bit) rounding precision
- * before invoking strtod or dtoa.  If the machine uses (the equivalent
- * of) Intel 80x87 arithmetic, the call
- *     _control87(PC_53, MCW_PC);
- * does this with many compilers.  Whether this or another call is
- * appropriate depends on the compiler; for this to work, it may be
- * necessary to #include "float.h" or another system-dependent header
- * file.
- */
-
-/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
- *
- * This strtod returns a nearest machine number to the input decimal
- * string (or sets errno to ERANGE).  With IEEE arithmetic, ties are
- * broken by the IEEE round-even rule.  Otherwise ties are broken by
- * biased rounding (add half and chop).
- *
- * Inspired loosely by William D. Clinger's paper "How to Read Floating
- * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- *
- *     1. We only require IEEE, IBM, or VAX double-precision
- *             arithmetic (not IEEE double-extended).
- *     2. We get by with floating-point arithmetic in a case that
- *             Clinger missed -- when we're computing d * 10^n
- *             for a small integer d and the integer n is not too
- *             much larger than 22 (the maximum integer k for which
- *             we can represent 10^k exactly), we may be able to
- *             compute (d*10^k) * 10^(e-k) with just one roundoff.
- *     3. Rather than a bit-at-a-time adjustment of the binary
- *             result in the hard case, we use floating-point
- *             arithmetic to determine the adjustment to within
- *             one bit; only in really hard cases do we need to
- *             compute a second residual.
- *     4. Because of 3., we don't need a large table of powers of 10
- *             for ten-to-e (just some small tables, e.g. of 10^k
- *             for 0 <= k <= 22).
- */
-
-/*
- * #define IEEE_8087 for IEEE-arithmetic machines where the least
- *     significant byte has the lowest address.
- * #define IEEE_MC68k for IEEE-arithmetic machines where the most
- *     significant byte has the lowest address.
- * #define Long int on machines with 32-bit ints and 64-bit longs.
- * #define Sudden_Underflow for IEEE-format machines without gradual
- *     underflow (i.e., that flush to zero on underflow).
- * #define IBM for IBM mainframe-style floating-point arithmetic.
- * #define VAX for VAX-style floating-point arithmetic (D_floating).
- * #define No_leftright to omit left-right logic in fast floating-point
- *     computation of dtoa.
- * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3.
- * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
- *     that use extended-precision instructions to compute rounded
- *     products and quotients) with IBM.
- * #define ROUND_BIASED for IEEE-format with biased rounding.
- * #define Inaccurate_Divide for IEEE-format with correctly rounded
- *     products but inaccurate quotients, e.g., for Intel i860.
- * #define NO_LONG_LONG on machines that do not have a "long long"
- *     integer type (of >= 64 bits).  On such machines, you can
- *     #define Just_16 to store 16 bits per 32-bit Long when doing
- *     high-precision integer arithmetic.  Whether this speeds things
- *     up or slows things down depends on the machine and the number
- *     being converted.  If long long is available and the name is
- *     something other than "long long", #define Llong to be the name,
- *     and if "unsigned Llong" does not work as an unsigned version of
- *     Llong, #define #ULLong to be the corresponding unsigned type.
- * #define KR_headers for old-style C function headers.
- * #define Bad_float_h if your system lacks a float.h or if it does not
- *     define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP,
- *     FLT_RADIX, FLT_ROUNDS, and DBL_MAX.
- * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n)
- *     if memory is available and otherwise does something you deem
- *     appropriate.  If MALLOC is undefined, malloc will be invoked
- *     directly -- and assumed always to succeed.
- * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making
- *     memory allocations from a private pool of memory when possible.
- *     When used, the private pool is PRIVATE_MEM bytes long:  2304 bytes,
- *     unless #defined to be a different length.  This default length
- *     suffices to get rid of MALLOC calls except for unusual cases,
- *     such as decimal-to-binary conversion of a very long string of
- *     digits.  When converting IEEE double precision values, the
- *     longest string gdtoa can return is about 751 bytes long.  For
- *     conversions by strtod of strings of 800 digits and all gdtoa
- *     conversions of IEEE doubles in single-threaded executions with
- *     8-byte pointers, PRIVATE_MEM >= 7400 appears to suffice; with
- *     4-byte pointers, PRIVATE_MEM >= 7112 appears adequate.
- * #define INFNAN_CHECK on IEEE systems to cause strtod to check for
- *     Infinity and NaN (case insensitively).  On some systems (e.g.,
- *     some HP systems), it may be necessary to #define NAN_WORD0
- *     appropriately -- to the most significant word of a quiet NaN.
- *     (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
- *     When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined,
- *     strtodg also accepts (case insensitively) strings of the form
- *     NaN(x), where x is a string of hexadecimal digits and spaces;
- *     if there is only one string of hexadecimal digits, it is taken
- *     for the fraction bits of the resulting NaN; if there are two or
- *     more strings of hexadecimal digits, each string is assigned
- *     to the next available sequence of 32-bit words of fractions
- *     bits (starting with the most significant), right-aligned in
- *     each sequence.
- * #define MULTIPLE_THREADS if the system offers preemptively scheduled
- *     multiple threads.  In this case, you must provide (or suitably
- *     #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed
- *     by FREE_DTOA_LOCK(n) for n = 0 or 1.  (The second lock, accessed
- *     in pow5mult, ensures lazy evaluation of only one copy of high
- *     powers of 5; omitting this lock would introduce a small
- *     probability of wasting memory, but would otherwise be harmless.)
- *     You must also invoke freedtoa(s) to free the value s returned by
- *     dtoa.  You may do so whether or not MULTIPLE_THREADS is #defined.
- * #define IMPRECISE_INEXACT if you do not care about the setting of
- *     the STRTOG_Inexact bits in the special case of doing IEEE double
- *     precision conversions (which could also be done by the strtog in
- *     dtoa.c).
- * #define NO_HEX_FP to disable recognition of C9x's hexadecimal
- *     floating-point constants.
- * #define -DNO_ERRNO to suppress setting errno (in strtod.c and
- *     strtodg.c).
- * #define NO_STRING_H to use private versions of memcpy.
- *     On some K&R systems, it may also be necessary to
- *     #define DECLARE_SIZE_T in this case.
- * #define YES_ALIAS to permit aliasing certain double values with
- *     arrays of ULongs.  This leads to slightly better code with
- *     some compilers and was always used prior to 19990916, but it
- *     is not strictly legal and can cause trouble with aggressively
- *     optimizing compilers (e.g., gcc 2.95.1 under -O2).
- * #define USE_LOCALE to use the current locale's decimal_point value.
- */
-
-#ifndef GDTOAIMP_H_INCLUDED
-#define GDTOAIMP_H_INCLUDED
-#include "gdtoa.h"
-
-#ifdef DEBUG
-#include "stdio.h"
-#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
-#endif
-
-#include "stdlib.h"
-#include "string.h"
-
-#ifdef KR_headers
-#define Char char
-#else
-#define Char void
-#endif
-
-#ifdef MALLOC
-extern Char *MALLOC ANSI((size_t));
-#else
-#define MALLOC malloc
-#endif
-
-#undef IEEE_Arith
-#undef Avoid_Underflow
-#ifdef IEEE_MC68k
-#define IEEE_Arith
-#endif
-#ifdef IEEE_8087
-#define IEEE_Arith
-#endif
-
-#include "errno.h"
-#ifdef Bad_float_h
-
-#ifdef IEEE_Arith
-#define DBL_DIG 15
-#define DBL_MAX_10_EXP 308
-#define DBL_MAX_EXP 1024
-#define FLT_RADIX 2
-#define DBL_MAX 1.7976931348623157e+308
-#endif
-
-#ifdef IBM
-#define DBL_DIG 16
-#define DBL_MAX_10_EXP 75
-#define DBL_MAX_EXP 63
-#define FLT_RADIX 16
-#define DBL_MAX 7.2370055773322621e+75
-#endif
-
-#ifdef VAX
-#define DBL_DIG 16
-#define DBL_MAX_10_EXP 38
-#define DBL_MAX_EXP 127
-#define FLT_RADIX 2
-#define DBL_MAX 1.7014118346046923e+38
-#define n_bigtens 2
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647
-#endif
-
-#else /* ifndef Bad_float_h */
-#include "float.h"
-#endif /* Bad_float_h */
-
-#ifdef IEEE_Arith
-#define Scale_Bit 0x10
-#define n_bigtens 5
-#endif
-
-#ifdef IBM
-#define n_bigtens 3
-#endif
-
-#ifdef VAX
-#define n_bigtens 2
-#endif
-
-#ifndef __MATH_H__
-#include "math.h"
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
-Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
-#endif
-
-typedef union { double d; ULong L[2]; } U;
-
-#ifdef YES_ALIAS
-#define dval(x) x
-#ifdef IEEE_8087
-#define word0(x) ((ULong *)&x)[1]
-#define word1(x) ((ULong *)&x)[0]
-#else
-#define word0(x) ((ULong *)&x)[0]
-#define word1(x) ((ULong *)&x)[1]
-#endif
-#else /* !YES_ALIAS */
-#ifdef IEEE_8087
-#define word0(x) ((U*)&x)->L[1]
-#define word1(x) ((U*)&x)->L[0]
-#else
-#define word0(x) ((U*)&x)->L[0]
-#define word1(x) ((U*)&x)->L[1]
-#endif
-#define dval(x) ((U*)&x)->d
-#endif /* YES_ALIAS */
-
-/* The following definition of Storeinc is appropriate for MIPS processors.
- * An alternative that might be better on some machines is
- * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
- */
-#if defined(IEEE_8087) + defined(VAX)
-#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
-((unsigned short *)a)[0] = (unsigned short)c, a++)
-#else
-#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
-((unsigned short *)a)[1] = (unsigned short)c, a++)
-#endif
-
-/* #define P DBL_MANT_DIG */
-/* Ten_pmax = floor(P*log(2)/log(5)) */
-/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
-/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
-/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
-
-#ifdef IEEE_Arith
-#define Exp_shift  20
-#define Exp_shift1 20
-#define Exp_msk1    0x100000
-#define Exp_msk11   0x100000
-#define Exp_mask  0x7ff00000
-#define P 53
-#define Bias 1023
-#define Emin (-1022)
-#define Exp_1  0x3ff00000
-#define Exp_11 0x3ff00000
-#define Ebits 11
-#define Frac_mask  0xfffff
-#define Frac_mask1 0xfffff
-#define Ten_pmax 22
-#define Bletch 0x10
-#define Bndry_mask  0xfffff
-#define Bndry_mask1 0xfffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 1
-#define Tiny0 0
-#define Tiny1 1
-#define Quick_max 14
-#define Int_max 14
-
-#ifndef Flt_Rounds
-#ifdef FLT_ROUNDS
-#define Flt_Rounds FLT_ROUNDS
-#else
-#define Flt_Rounds 1
-#endif
-#endif /*Flt_Rounds*/
-
-#else /* ifndef IEEE_Arith */
-#undef  Sudden_Underflow
-#define Sudden_Underflow
-#ifdef IBM
-#undef Flt_Rounds
-#define Flt_Rounds 0
-#define Exp_shift  24
-#define Exp_shift1 24
-#define Exp_msk1   0x1000000
-#define Exp_msk11  0x1000000
-#define Exp_mask  0x7f000000
-#define P 14
-#define Bias 65
-#define Exp_1  0x41000000
-#define Exp_11 0x41000000
-#define Ebits 8        /* exponent has 7 bits, but 8 is the right value in b2d */
-#define Frac_mask  0xffffff
-#define Frac_mask1 0xffffff
-#define Bletch 4
-#define Ten_pmax 22
-#define Bndry_mask  0xefffff
-#define Bndry_mask1 0xffffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 4
-#define Tiny0 0x100000
-#define Tiny1 0
-#define Quick_max 14
-#define Int_max 15
-#else /* VAX */
-#undef Flt_Rounds
-#define Flt_Rounds 1
-#define Exp_shift  23
-#define Exp_shift1 7
-#define Exp_msk1    0x80
-#define Exp_msk11   0x800000
-#define Exp_mask  0x7f80
-#define P 56
-#define Bias 129
-#define Exp_1  0x40800000
-#define Exp_11 0x4080
-#define Ebits 8
-#define Frac_mask  0x7fffff
-#define Frac_mask1 0xffff007f
-#define Ten_pmax 24
-#define Bletch 2
-#define Bndry_mask  0xffff007f
-#define Bndry_mask1 0xffff007f
-#define LSB 0x10000
-#define Sign_bit 0x8000
-#define Log2P 1
-#define Tiny0 0x80
-#define Tiny1 0
-#define Quick_max 15
-#define Int_max 15
-#endif /* IBM, VAX */
-#endif /* IEEE_Arith */
-
-#ifndef IEEE_Arith
-#define ROUND_BIASED
-#endif
-
-#ifdef RND_PRODQUOT
-#define rounded_product(a,b) a = rnd_prod(a, b)
-#define rounded_quotient(a,b) a = rnd_quot(a, b)
-#ifdef KR_headers
-extern double rnd_prod(), rnd_quot();
-#else
-extern double rnd_prod(double, double), rnd_quot(double, double);
-#endif
-#else
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
-#endif
-
-#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
-#define Big1 0xffffffff
-
-#undef  Pack_16
-#ifndef Pack_32
-#define Pack_32
-#endif
-
-#ifdef NO_LONG_LONG
-#undef ULLong
-#ifdef Just_16
-#undef Pack_32
-#define Pack_16
-/* When Pack_32 is not defined, we store 16 bits per 32-bit Long.
- * This makes some inner loops simpler and sometimes saves work
- * during multiplications, but it often seems to make things slightly
- * slower.  Hence the default is now to store 32 bits per Long.
- */
-#endif
-#else  /* long long available */
-#ifndef Llong
-#define Llong long long
-#endif
-#ifndef ULLong
-#define ULLong unsigned Llong
-#endif
-#endif /* NO_LONG_LONG */
-
-#ifdef Pack_32
-#define ULbits 32
-#define kshift 5
-#define kmask 31
-#define ALL_ON 0xffffffff
-#else
-#define ULbits 16
-#define kshift 4
-#define kmask 15
-#define ALL_ON 0xffff
-#endif
-
-#ifndef MULTIPLE_THREADS
-#define ACQUIRE_DTOA_LOCK(n)   /*nothing*/
-#define FREE_DTOA_LOCK(n)      /*nothing*/
-#endif
-
-#define Kmax 15
-
- struct
-Bigint {
-       struct Bigint *next;
-       int k, maxwds, sign, wds;
-       ULong x[1];
-       };
-
- typedef struct Bigint Bigint;
-
-#ifdef NO_STRING_H
-#ifdef DECLARE_SIZE_T
-typedef unsigned int size_t;
-#endif
-extern void memcpy_D2A ANSI((void*, const void*, size_t));
-#define Bcopy(x,y) memcpy_D2A(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
-#else /* !NO_STRING_H */
-#define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
-#endif /* NO_STRING_H */
-
-#define Balloc Balloc_D2A
-#define Bfree Bfree_D2A
-#define ULtoQ ULtoQ_D2A
-#define ULtof ULtof_D2A
-#define ULtod ULtod_D2A
-#define ULtodd ULtodd_D2A
-#define ULtox ULtox_D2A
-#define ULtoxL ULtoxL_D2A
-#define any_on any_on_D2A
-#define b2d b2d_D2A
-#define bigtens bigtens_D2A
-#define cmp cmp_D2A
-#define copybits copybits_D2A
-#define d2b d2b_D2A
-#define decrement decrement_D2A
-#define diff diff_D2A
-#define dtoa_result dtoa_result_D2A
-#define g__fmt g__fmt_D2A
-#define gethex gethex_D2A
-#define hexdig hexdig_D2A
-#define hexnan hexnan_D2A
-#define hi0bits hi0bits_D2A
-#define i2b i2b_D2A
-#define increment increment_D2A
-#define lo0bits lo0bits_D2A
-#define lshift lshift_D2A
-#define match match_D2A
-#define mult mult_D2A
-#define multadd multadd_D2A
-#define nrv_alloc nrv_alloc_D2A
-#define pow5mult pow5mult_D2A
-#define quorem quorem_D2A
-#define ratio ratio_D2A
-#define rshift rshift_D2A
-#define rv_alloc rv_alloc_D2A
-#define s2b s2b_D2A
-#define set_ones set_ones_D2A
-#define strcp strcp_D2A
-#define strtoIg strtoIg_D2A
-#define sum sum_D2A
-#define tens tens_D2A
-#define tinytens tinytens_D2A
-#define tinytens tinytens_D2A
-#define trailz trailz_D2A
-#define ulp ulp_D2A
-
- extern char *dtoa_result;
- extern CONST double bigtens[], tens[], tinytens[];
- extern unsigned char hexdig[];
-
- extern Bigint *Balloc ANSI((int));
- extern void Bfree ANSI((Bigint*));
- extern void ULtof ANSI((ULong*, ULong*, Long, int));
- extern void ULtod ANSI((ULong*, ULong*, Long, int));
- extern void ULtodd ANSI((ULong*, ULong*, Long, int));
- extern void ULtoQ ANSI((ULong*, ULong*, Long, int));
- extern void ULtox ANSI((UShort*, ULong*, Long, int));
- extern void ULtoxL ANSI((ULong*, ULong*, Long, int));
- extern ULong any_on ANSI((Bigint*, int));
- extern double b2d ANSI((Bigint*, int*));
- extern int cmp ANSI((Bigint*, Bigint*));
- extern void copybits ANSI((ULong*, int, Bigint*));
- extern Bigint *d2b ANSI((double, int*, int*));
- extern int decrement ANSI((Bigint*));
- extern Bigint *diff ANSI((Bigint*, Bigint*));
- extern char *dtoa ANSI((double d, int mode, int ndigits,
-                       int *decpt, int *sign, char **rve));
- extern char *g__fmt ANSI((char*, char*, char*, int, ULong));
- extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int));
- extern void hexdig_init_D2A(Void);
- extern int hexnan ANSI((CONST char**, FPI*, ULong*));
- extern int hi0bits ANSI((ULong));
- extern Bigint *i2b ANSI((int));
- extern Bigint *increment ANSI((Bigint*));
- extern int lo0bits ANSI((ULong*));
- extern Bigint *lshift ANSI((Bigint*, int));
- extern int match ANSI((CONST char**, char*));
- extern Bigint *mult ANSI((Bigint*, Bigint*));
- extern Bigint *multadd ANSI((Bigint*, int, int));
- extern char *nrv_alloc ANSI((char*, char **, int));
- extern Bigint *pow5mult ANSI((Bigint*, int));
- extern int quorem ANSI((Bigint*, Bigint*));
- extern double ratio ANSI((Bigint*, Bigint*));
- extern void rshift ANSI((Bigint*, int));
- extern char *rv_alloc ANSI((int));
- extern Bigint *s2b ANSI((CONST char*, int, int, ULong));
- extern Bigint *set_ones ANSI((Bigint*, int));
- extern char *strcp ANSI((char*, const char*));
- extern int strtoIg ANSI((CONST char*, char**, FPI*, Long*, Bigint**, int*));
- extern double strtod ANSI((const char *s00, char **se));
- extern Bigint *sum ANSI((Bigint*, Bigint*));
- extern int trailz ANSI((Bigint*));
- extern double ulp ANSI((double));
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#ifdef IEEE_Arith
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#else
-#define _0 1
-#define _1 0
-#endif
-#else
-#undef INFNAN_CHECK
-#endif
-
-#ifdef INFNAN_CHECK
-
-#ifndef NAN_WORD0
-#define NAN_WORD0 0x7ff80000
-#endif
-
-#ifndef NAN_WORD1
-#define NAN_WORD1 0
-#endif
-#endif /* INFNAN_CHECK */
-
-#undef SI
-#ifdef Sudden_Underflow
-#define SI 1
-#else
-#define SI 0
-#endif
-
-#endif /* GDTOAIMP_H_INCLUDED */
diff --git a/float/gdtoa/gethex.c b/float/gdtoa/gethex.c
deleted file mode 100644 (file)
index e3e56a6..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-gethex(sp, fpi, exp, bp, sign)
-       CONST char **sp; FPI *fpi; Long *exp; Bigint **bp; int sign;
-#else
-gethex( CONST char **sp, FPI *fpi, Long *exp, Bigint **bp, int sign)
-#endif
-{
-       static unsigned char hexdig[256];       /* assume 8-bit bytes */
-       Bigint *b;
-       CONST unsigned char *decpt, *s0, *s, *s1;
-       int esign, havedig, irv, k, n, nbits, up;
-       ULong L, lostbits, *x;
-       Long e, e1;
-
-       if (!hexdig['0'])
-               hexdig_init_D2A();
-       havedig = 0;
-       s0 = *(CONST unsigned char **)sp + 2;
-       while(s0[havedig] == '0')
-               havedig++;
-       s0 += havedig;
-       s = s0;
-       decpt = 0;
-       if (!hexdig[*s]) {
-               if (*s == '.') {
-                       decpt = ++s;
-                       if (!hexdig[*s])
-                               goto ret0;
-                       }
-               else {
- ret0:
-                       *sp = (char*)s;
-                       return havedig ? STRTOG_Zero : STRTOG_NoNumber;
-                       }
-               while(*s == '0')
-                       s++;
-               havedig = 1;
-               if (!hexdig[*s])
-                       goto ret0;
-               s0 = s;
-               }
-       while(hexdig[*s])
-               s++;
-       if (*s == '.' && !decpt) {
-               decpt = ++s;
-               while(hexdig[*s])
-                       s++;
-               }
-       e = 0;
-       if (decpt)
-               e = -(((Long)(s-decpt)) << 2);
-       s1 = s;
-       switch(*s) {
-         case 'p':
-         case 'P':
-               esign = 0;
-               switch(*++s) {
-                 case '-':
-                       esign = 1;
-                       /* no break */
-                 case '+':
-                       s++;
-                 }
-               if ((n = hexdig[*s]) == 0 || n > 0x19) {
-                       s = s1;
-                       break;
-                       }
-               e1 = n - 0x10;
-               while((n = hexdig[*++s]) !=0 && n <= 0x19)
-                       e1 = 10*e1 + n - 0x10;
-               if (esign)
-                       e1 = -e1;
-               e += e1;
-         }
-       *sp = (char*)s;
-       n = s1 - s0 - 1;
-       for(k = 0; n > 7; n >>= 1)
-               k++;
-       b = Balloc(k);
-       x = b->x;
-       n = 0;
-       L = 0;
-       while(s1 > s0) {
-               if (*--s1 == '.')
-                       continue;
-               if (n == 32) {
-                       *x++ = L;
-                       L = 0;
-                       n = 0;
-                       }
-               L |= (hexdig[*s1] & 0x0f) << n;
-               n += 4;
-               }
-       *x++ = L;
-       b->wds = n = x - b->x;
-       n = 32*n - hi0bits(L);
-       nbits = fpi->nbits;
-       lostbits = 0;
-       x = b->x;
-       if (n > nbits) {
-               n -= nbits;
-               if (any_on(b,n)) {
-                       lostbits = 1;
-                       k = n - 1;
-                       if (x[k>>kshift] & 1 << (k & kmask)) {
-                               lostbits = 2;
-                               if (k > 1 && any_on(b,k-1))
-                                       lostbits = 3;
-                               }
-                       }
-               rshift(b, n);
-               e += n;
-               }
-       else if (n < nbits) {
-               n = nbits - n;
-               b = lshift(b, n);
-               e -= n;
-               x = b->x;
-               }
-       if (e > fpi->emax) {
- ovfl:
-               Bfree(b);
-               return STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
-               }
-       irv = STRTOG_Normal;
-       if (e < fpi->emin) {
-               irv = STRTOG_Denormal;
-               n = fpi->emin - e;
-               if (n >= nbits) {
-                       switch (fpi->rounding) {
-                         case FPI_Round_near:
-                               if (n == nbits && n < 2 || any_on(b,n-1))
-                                       goto one_bit;
-                               break;
-                         case FPI_Round_up:
-                               if (!sign)
-                                       goto one_bit;
-                               break;
-                         case FPI_Round_down:
-                               if (sign) {
- one_bit:
-                                       *exp = fpi->emin;
-                                       x[0] = b->wds = 1;
-                                       *bp = b;
-                                       return STRTOG_Denormal | STRTOG_Inexhi
-                                               | STRTOG_Underflow;
-                                       }
-                         }
-                       Bfree(b);
-                       return STRTOG_Zero | STRTOG_Inexlo | STRTOG_Underflow;
-                       }
-               k = n - 1;
-               if (lostbits)
-                       lostbits = 1;
-               else if (k > 0)
-                       lostbits = any_on(b,k);
-               if (x[k>>kshift] & 1 << (k & kmask))
-                       lostbits |= 2;
-               nbits -= n;
-               rshift(b,n);
-               e = fpi->emin;
-               }
-       if (lostbits) {
-               up = 0;
-               switch(fpi->rounding) {
-                 case FPI_Round_zero:
-                       break;
-                 case FPI_Round_near:
-                       if (lostbits & 2
-                        && (lostbits & 1) | x[0] & 1)
-                               up = 1;
-                       break;
-                 case FPI_Round_up:
-                       up = 1 - sign;
-                       break;
-                 case FPI_Round_down:
-                       up = sign;
-                 }
-               if (up) {
-                       k = b->wds;
-                       b = increment(b);
-                       x = b->x;
-                       if (b->wds > k
-                        || (n = nbits & kmask) !=0
-                            && hi0bits(x[k-1]) < 32-n) {
-                               rshift(b,1);
-                               if (++e > fpi->emax)
-                                       goto ovfl;
-                               }
-                       else if (irv == STRTOG_Denormal) {
-                               k = nbits - 1;
-                               if (x[k >> kshift] & 1 << (k & kmask))
-                                       irv = STRTOG_Normal;
-                               }
-                       irv |= STRTOG_Inexhi;
-                       }
-               else
-                       irv |= STRTOG_Inexlo;
-               }
-       *bp = b;
-       *exp = e;
-       return irv;
-       }
diff --git a/float/gdtoa/gmisc.c b/float/gdtoa/gmisc.c
deleted file mode 100644 (file)
index 1607f4b..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- void
-#ifdef KR_headers
-rshift(b, k) Bigint *b; int k;
-#else
-rshift(Bigint *b, int k)
-#endif
-{
-       ULong *x, *x1, *xe, y;
-       int n;
-
-       x = x1 = b->x;
-       n = k >> kshift;
-       if (n < b->wds) {
-               xe = x + b->wds;
-               x += n;
-               if (k &= kmask) {
-                       n = ULbits - k;
-                       y = *x++ >> k;
-                       while(x < xe) {
-                               *x1++ = (y | (*x << n)) & ALL_ON;
-                               y = *x++ >> k;
-                               }
-                       if ((*x1 = y) !=0)
-                               x1++;
-                       }
-               else
-                       while(x < xe)
-                               *x1++ = *x++;
-               }
-       if ((b->wds = x1 - b->x) == 0)
-               b->x[0] = 0;
-       }
-
- int
-#ifdef KR_headers
-trailz(b) Bigint *b;
-#else
-trailz(Bigint *b)
-#endif
-{
-       ULong L, *x, *xe;
-       int n = 0;
-
-       x = b->x;
-       xe = x + b->wds;
-       for(n = 0; x < xe && !*x; x++)
-               n += ULbits;
-       if (x < xe) {
-               L = *x;
-               n += lo0bits(&L);
-               }
-       return n;
-       }
diff --git a/float/gdtoa/hd_init.c b/float/gdtoa/hd_init.c
deleted file mode 100644 (file)
index 73afca1..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- unsigned char hexdig[256];
-
- static void
-#ifdef KR_headers
-htinit(h, s, inc) unsigned char *h; unsigned char *s; int inc;
-#else
-htinit(unsigned char *h, unsigned char *s, int inc)
-#endif
-{
-       int i, j;
-       for(i = 0; (j = s[i]) !=0; i++)
-               h[j] = i + inc;
-       }
-
- void
-hexdig_init_D2A(Void)
-{
-#define USC (unsigned char *)
-       htinit(hexdig, USC "0123456789", 0x10);
-       htinit(hexdig, USC "abcdef", 0x10 + 10);
-       htinit(hexdig, USC "ABCDEF", 0x10 + 10);
-       }
diff --git a/float/gdtoa/hexnan.c b/float/gdtoa/hexnan.c
deleted file mode 100644 (file)
index 7a7e03a..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- static void
-#ifdef KR_headers
-L_shift(x, x1, i) ULong *x; ULong *x1; int i;
-#else
-L_shift(ULong *x, ULong *x1, int i)
-#endif
-{
-       int j;
-
-       i = 8 - i;
-       i <<= 2;
-       j = ULbits - i;
-       do {
-               *x |= x[1] << j;
-               x[1] >>= i;
-               } while(++x < x1);
-       }
-
- int
-#ifdef KR_headers
-hexnan(sp, fpi, x0)
-       CONST char **sp; FPI *fpi; ULong *x0;
-#else
-hexnan( CONST char **sp, FPI *fpi, ULong *x0)
-#endif
-{
-       ULong c, h, *x, *x1, *xe;
-       CONST char *s;
-       int havedig, hd0, i, nbits;
-
-       if (!hexdig['0'])
-               hexdig_init_D2A();
-       nbits = fpi->nbits;
-       x = x0 + (nbits >> kshift);
-       if (nbits & kmask)
-               x++;
-       *--x = 0;
-       x1 = xe = x;
-       havedig = hd0 = i = 0;
-       s = *sp;
-       while(c = *(CONST unsigned char*)++s) {
-               if (!(h = hexdig[c])) {
-                       if (c <= ' ') {
-                               if (hd0 < havedig) {
-                                       if (x < x1 && i < 8)
-                                               L_shift(x, x1, i);
-                                       if (x <= x0) {
-                                               i = 8;
-                                               continue;
-                                               }
-                                       hd0 = havedig;
-                                       *--x = 0;
-                                       x1 = x;
-                                       i = 0;
-                                       }
-                               continue;
-                               }
-                       if (/*(*/ c == ')' && havedig) {
-                               *sp = s + 1;
-                               break;
-                               }
-                       return STRTOG_NaN;
-                       }
-               havedig++;
-               if (++i > 8) {
-                       if (x <= x0)
-                               continue;
-                       i = 1;
-                       *--x = 0;
-                       }
-               *x = (*x << 4) | h & 0xf;
-               }
-       if (!havedig)
-               return STRTOG_NaN;
-       if (x < x1 && i < 8)
-               L_shift(x, x1, i);
-       if (x > x0) {
-               x1 = x0;
-               do *x1++ = *x++;
-                       while(x <= xe);
-               do *x1++ = 0;
-                       while(x1 <= xe);
-               }
-       else {
-               /* truncate high-order word if necessary */
-               if ( (i = nbits & (ULbits-1)) !=0)
-                       *xe &= ((ULong)0xffffffff) >> (ULbits - i);
-               }
-       for(x1 = xe;; --x1) {
-               if (*x1 != 0)
-                       break;
-               if (x1 == x0) {
-                       *x1 = 1;
-                       break;
-                       }
-               }
-       return STRTOG_NaNbits;
-       }
diff --git a/float/gdtoa/misc.c b/float/gdtoa/misc.c
deleted file mode 100644 (file)
index 5f5cbc2..0000000
+++ /dev/null
@@ -1,862 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- static Bigint *freelist[Kmax+1];
-#ifndef Omit_Private_Memory
-#ifndef PRIVATE_MEM
-#define PRIVATE_MEM 2304
-#endif
-#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
-static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
-#endif
-
- Bigint *
-Balloc
-#ifdef KR_headers
-       (k) int k;
-#else
-       (int k)
-#endif
-{
-       int x;
-       Bigint *rv;
-#ifndef Omit_Private_Memory
-       unsigned int len;
-#endif
-
-       ACQUIRE_DTOA_LOCK(0);
-       if ( (rv = freelist[k]) !=0) {
-               freelist[k] = rv->next;
-               }
-       else {
-               x = 1 << k;
-#ifdef Omit_Private_Memory
-               rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong));
-#else
-               len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
-                       /sizeof(double);
-               if (pmem_next - private_mem + len <= PRIVATE_mem) {
-                       rv = (Bigint*)pmem_next;
-                       pmem_next += len;
-                       }
-               else
-                       rv = (Bigint*)MALLOC(len*sizeof(double));
-#endif
-               rv->k = k;
-               rv->maxwds = x;
-               }
-       FREE_DTOA_LOCK(0);
-       rv->sign = rv->wds = 0;
-       return rv;
-       }
-
- void
-Bfree
-#ifdef KR_headers
-       (v) Bigint *v;
-#else
-       (Bigint *v)
-#endif
-{
-       if (v) {
-               ACQUIRE_DTOA_LOCK(0);
-               v->next = freelist[v->k];
-               freelist[v->k] = v;
-               FREE_DTOA_LOCK(0);
-               }
-       }
-
- int
-lo0bits
-#ifdef KR_headers
-       (y) ULong *y;
-#else
-       (ULong *y)
-#endif
-{
-       register int k;
-       register ULong x = *y;
-
-       if (x & 7) {
-               if (x & 1)
-                       return 0;
-               if (x & 2) {
-                       *y = x >> 1;
-                       return 1;
-                       }
-               *y = x >> 2;
-               return 2;
-               }
-       k = 0;
-       if (!(x & 0xffff)) {
-               k = 16;
-               x >>= 16;
-               }
-       if (!(x & 0xff)) {
-               k += 8;
-               x >>= 8;
-               }
-       if (!(x & 0xf)) {
-               k += 4;
-               x >>= 4;
-               }
-       if (!(x & 0x3)) {
-               k += 2;
-               x >>= 2;
-               }
-       if (!(x & 1)) {
-               k++;
-               x >>= 1;
-               if (!x & 1)
-                       return 32;
-               }
-       *y = x;
-       return k;
-       }
-
- Bigint *
-multadd
-#ifdef KR_headers
-       (b, m, a) Bigint *b; int m, a;
-#else
-       (Bigint *b, int m, int a)       /* multiply by m and add a */
-#endif
-{
-       int i, wds;
-#ifdef ULLong
-       ULong *x;
-       ULLong carry, y;
-#else
-       ULong carry, *x, y;
-#ifdef Pack_32
-       ULong xi, z;
-#endif
-#endif
-       Bigint *b1;
-
-       wds = b->wds;
-       x = b->x;
-       i = 0;
-       carry = a;
-       do {
-#ifdef ULLong
-               y = *x * (ULLong)m + carry;
-               carry = y >> 32;
-               *x++ = y & 0xffffffffUL;
-#else
-#ifdef Pack_32
-               xi = *x;
-               y = (xi & 0xffff) * m + carry;
-               z = (xi >> 16) * m + (y >> 16);
-               carry = z >> 16;
-               *x++ = (z << 16) + (y & 0xffff);
-#else
-               y = *x * m + carry;
-               carry = y >> 16;
-               *x++ = y & 0xffff;
-#endif
-#endif
-               }
-               while(++i < wds);
-       if (carry) {
-               if (wds >= b->maxwds) {
-                       b1 = Balloc(b->k+1);
-                       Bcopy(b1, b);
-                       Bfree(b);
-                       b = b1;
-                       }
-               b->x[wds++] = carry;
-               b->wds = wds;
-               }
-       return b;
-       }
-
- int
-hi0bits
-#ifdef KR_headers
-       (x) register ULong x;
-#else
-       (register ULong x)
-#endif
-{
-       register int k = 0;
-
-       if (!(x & 0xffff0000)) {
-               k = 16;
-               x <<= 16;
-               }
-       if (!(x & 0xff000000)) {
-               k += 8;
-               x <<= 8;
-               }
-       if (!(x & 0xf0000000)) {
-               k += 4;
-               x <<= 4;
-               }
-       if (!(x & 0xc0000000)) {
-               k += 2;
-               x <<= 2;
-               }
-       if (!(x & 0x80000000)) {
-               k++;
-               if (!(x & 0x40000000))
-                       return 32;
-               }
-       return k;
-       }
-
- Bigint *
-i2b
-#ifdef KR_headers
-       (i) int i;
-#else
-       (int i)
-#endif
-{
-       Bigint *b;
-
-       b = Balloc(1);
-       b->x[0] = i;
-       b->wds = 1;
-       return b;
-       }
-
- Bigint *
-mult
-#ifdef KR_headers
-       (a, b) Bigint *a, *b;
-#else
-       (Bigint *a, Bigint *b)
-#endif
-{
-       Bigint *c;
-       int k, wa, wb, wc;
-       ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
-       ULong y;
-#ifdef ULLong
-       ULLong carry, z;
-#else
-       ULong carry, z;
-#ifdef Pack_32
-       ULong z2;
-#endif
-#endif
-
-       if (a->wds < b->wds) {
-               c = a;
-               a = b;
-               b = c;
-               }
-       k = a->k;
-       wa = a->wds;
-       wb = b->wds;
-       wc = wa + wb;
-       if (wc > a->maxwds)
-               k++;
-       c = Balloc(k);
-       for(x = c->x, xa = x + wc; x < xa; x++)
-               *x = 0;
-       xa = a->x;
-       xae = xa + wa;
-       xb = b->x;
-       xbe = xb + wb;
-       xc0 = c->x;
-#ifdef ULLong
-       for(; xb < xbe; xc0++) {
-               if ( (y = *xb++) !=0) {
-                       x = xa;
-                       xc = xc0;
-                       carry = 0;
-                       do {
-                               z = *x++ * (ULLong)y + *xc + carry;
-                               carry = z >> 32;
-                               *xc++ = z & 0xffffffffUL;
-                               }
-                               while(x < xae);
-                       *xc = carry;
-                       }
-               }
-#else
-#ifdef Pack_32
-       for(; xb < xbe; xb++, xc0++) {
-               if ( (y = *xb & 0xffff) !=0) {
-                       x = xa;
-                       xc = xc0;
-                       carry = 0;
-                       do {
-                               z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
-                               carry = z >> 16;
-                               z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
-                               carry = z2 >> 16;
-                               Storeinc(xc, z2, z);
-                               }
-                               while(x < xae);
-                       *xc = carry;
-                       }
-               if ( (y = *xb >> 16) !=0) {
-                       x = xa;
-                       xc = xc0;
-                       carry = 0;
-                       z2 = *xc;
-                       do {
-                               z = (*x & 0xffff) * y + (*xc >> 16) + carry;
-                               carry = z >> 16;
-                               Storeinc(xc, z, z2);
-                               z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
-                               carry = z2 >> 16;
-                               }
-                               while(x < xae);
-                       *xc = z2;
-                       }
-               }
-#else
-       for(; xb < xbe; xc0++) {
-               if ( (y = *xb++) !=0) {
-                       x = xa;
-                       xc = xc0;
-                       carry = 0;
-                       do {
-                               z = *x++ * y + *xc + carry;
-                               carry = z >> 16;
-                               *xc++ = z & 0xffff;
-                               }
-                               while(x < xae);
-                       *xc = carry;
-                       }
-               }
-#endif
-#endif
-       for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
-       c->wds = wc;
-       return c;
-       }
-
- static Bigint *p5s;
-
- Bigint *
-pow5mult
-#ifdef KR_headers
-       (b, k) Bigint *b; int k;
-#else
-       (Bigint *b, int k)
-#endif
-{
-       Bigint *b1, *p5, *p51;
-       int i;
-       static int p05[3] = { 5, 25, 125 };
-
-       if ( (i = k & 3) !=0)
-               b = multadd(b, p05[i-1], 0);
-
-       if (!(k >>= 2))
-               return b;
-       if ((p5 = p5s) == 0) {
-               /* first time */
-#ifdef MULTIPLE_THREADS
-               ACQUIRE_DTOA_LOCK(1);
-               if (!(p5 = p5s)) {
-                       p5 = p5s = i2b(625);
-                       p5->next = 0;
-                       }
-               FREE_DTOA_LOCK(1);
-#else
-               p5 = p5s = i2b(625);
-               p5->next = 0;
-#endif
-               }
-       for(;;) {
-               if (k & 1) {
-                       b1 = mult(b, p5);
-                       Bfree(b);
-                       b = b1;
-                       }
-               if (!(k >>= 1))
-                       break;
-               if ((p51 = p5->next) == 0) {
-#ifdef MULTIPLE_THREADS
-                       ACQUIRE_DTOA_LOCK(1);
-                       if (!(p51 = p5->next)) {
-                               p51 = p5->next = mult(p5,p5);
-                               p51->next = 0;
-                               }
-                       FREE_DTOA_LOCK(1);
-#else
-                       p51 = p5->next = mult(p5,p5);
-                       p51->next = 0;
-#endif
-                       }
-               p5 = p51;
-               }
-       return b;
-       }
-
- Bigint *
-lshift
-#ifdef KR_headers
-       (b, k) Bigint *b; int k;
-#else
-       (Bigint *b, int k)
-#endif
-{
-       int i, k1, n, n1;
-       Bigint *b1;
-       ULong *x, *x1, *xe, z;
-
-       n = k >> kshift;
-       k1 = b->k;
-       n1 = n + b->wds + 1;
-       for(i = b->maxwds; n1 > i; i <<= 1)
-               k1++;
-       b1 = Balloc(k1);
-       x1 = b1->x;
-       for(i = 0; i < n; i++)
-               *x1++ = 0;
-       x = b->x;
-       xe = x + b->wds;
-       if (k &= kmask) {
-#ifdef Pack_32
-               k1 = 32 - k;
-               z = 0;
-               do {
-                       *x1++ = *x << k | z;
-                       z = *x++ >> k1;
-                       }
-                       while(x < xe);
-               if ((*x1 = z) !=0)
-                       ++n1;
-#else
-               k1 = 16 - k;
-               z = 0;
-               do {
-                       *x1++ = *x << k  & 0xffff | z;
-                       z = *x++ >> k1;
-                       }
-                       while(x < xe);
-               if (*x1 = z)
-                       ++n1;
-#endif
-               }
-       else do
-               *x1++ = *x++;
-               while(x < xe);
-       b1->wds = n1 - 1;
-       Bfree(b);
-       return b1;
-       }
-
- int
-cmp
-#ifdef KR_headers
-       (a, b) Bigint *a, *b;
-#else
-       (Bigint *a, Bigint *b)
-#endif
-{
-       ULong *xa, *xa0, *xb, *xb0;
-       int i, j;
-
-       i = a->wds;
-       j = b->wds;
-#ifdef DEBUG
-       if (i > 1 && !a->x[i-1])
-               Bug("cmp called with a->x[a->wds-1] == 0");
-       if (j > 1 && !b->x[j-1])
-               Bug("cmp called with b->x[b->wds-1] == 0");
-#endif
-       if (i -= j)
-               return i;
-       xa0 = a->x;
-       xa = xa0 + j;
-       xb0 = b->x;
-       xb = xb0 + j;
-       for(;;) {
-               if (*--xa != *--xb)
-                       return *xa < *xb ? -1 : 1;
-               if (xa <= xa0)
-                       break;
-               }
-       return 0;
-       }
-
- Bigint *
-diff
-#ifdef KR_headers
-       (a, b) Bigint *a, *b;
-#else
-       (Bigint *a, Bigint *b)
-#endif
-{
-       Bigint *c;
-       int i, wa, wb;
-       ULong *xa, *xae, *xb, *xbe, *xc;
-#ifdef ULLong
-       ULLong borrow, y;
-#else
-       ULong borrow, y;
-#ifdef Pack_32
-       ULong z;
-#endif
-#endif
-
-       i = cmp(a,b);
-       if (!i) {
-               c = Balloc(0);
-               c->wds = 1;
-               c->x[0] = 0;
-               return c;
-               }
-       if (i < 0) {
-               c = a;
-               a = b;
-               b = c;
-               i = 1;
-               }
-       else
-               i = 0;
-       c = Balloc(a->k);
-       c->sign = i;
-       wa = a->wds;
-       xa = a->x;
-       xae = xa + wa;
-       wb = b->wds;
-       xb = b->x;
-       xbe = xb + wb;
-       xc = c->x;
-       borrow = 0;
-#ifdef ULLong
-       do {
-               y = (ULLong)*xa++ - *xb++ - borrow;
-               borrow = y >> 32 & 1UL;
-               *xc++ = y & 0xffffffffUL;
-               }
-               while(xb < xbe);
-       while(xa < xae) {
-               y = *xa++ - borrow;
-               borrow = y >> 32 & 1UL;
-               *xc++ = y & 0xffffffffUL;
-               }
-#else
-#ifdef Pack_32
-       do {
-               y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
-               borrow = (y & 0x10000) >> 16;
-               z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
-               borrow = (z & 0x10000) >> 16;
-               Storeinc(xc, z, y);
-               }
-               while(xb < xbe);
-       while(xa < xae) {
-               y = (*xa & 0xffff) - borrow;
-               borrow = (y & 0x10000) >> 16;
-               z = (*xa++ >> 16) - borrow;
-               borrow = (z & 0x10000) >> 16;
-               Storeinc(xc, z, y);
-               }
-#else
-       do {
-               y = *xa++ - *xb++ - borrow;
-               borrow = (y & 0x10000) >> 16;
-               *xc++ = y & 0xffff;
-               }
-               while(xb < xbe);
-       while(xa < xae) {
-               y = *xa++ - borrow;
-               borrow = (y & 0x10000) >> 16;
-               *xc++ = y & 0xffff;
-               }
-#endif
-#endif
-       while(!*--xc)
-               wa--;
-       c->wds = wa;
-       return c;
-       }
-
- double
-b2d
-#ifdef KR_headers
-       (a, e) Bigint *a; int *e;
-#else
-       (Bigint *a, int *e)
-#endif
-{
-       ULong *xa, *xa0, w, y, z;
-       int k;
-       double d;
-#ifdef VAX
-       ULong d0, d1;
-#else
-#define d0 word0(d)
-#define d1 word1(d)
-#endif
-
-       xa0 = a->x;
-       xa = xa0 + a->wds;
-       y = *--xa;
-#ifdef DEBUG
-       if (!y) Bug("zero y in b2d");
-#endif
-       k = hi0bits(y);
-       *e = 32 - k;
-#ifdef Pack_32
-       if (k < Ebits) {
-               d0 = Exp_1 | y >> Ebits - k;
-               w = xa > xa0 ? *--xa : 0;
-               d1 = y << (32-Ebits) + k | w >> Ebits - k;
-               goto ret_d;
-               }
-       z = xa > xa0 ? *--xa : 0;
-       if (k -= Ebits) {
-               d0 = Exp_1 | y << k | z >> 32 - k;
-               y = xa > xa0 ? *--xa : 0;
-               d1 = z << k | y >> 32 - k;
-               }
-       else {
-               d0 = Exp_1 | y;
-               d1 = z;
-               }
-#else
-       if (k < Ebits + 16) {
-               z = xa > xa0 ? *--xa : 0;
-               d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k;
-               w = xa > xa0 ? *--xa : 0;
-               y = xa > xa0 ? *--xa : 0;
-               d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
-               goto ret_d;
-               }
-       z = xa > xa0 ? *--xa : 0;
-       w = xa > xa0 ? *--xa : 0;
-       k -= Ebits + 16;
-       d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
-       y = xa > xa0 ? *--xa : 0;
-       d1 = w << k + 16 | y << k;
-#endif
- ret_d:
-#ifdef VAX
-       word0(d) = d0 >> 16 | d0 << 16;
-       word1(d) = d1 >> 16 | d1 << 16;
-#endif
-       return dval(d);
-       }
-#undef d0
-#undef d1
-
- Bigint *
-d2b
-#ifdef KR_headers
-       (d, e, bits) double d; int *e, *bits;
-#else
-       (double d, int *e, int *bits)
-#endif
-{
-       Bigint *b;
-       int de, i, k;
-       ULong *x, y, z;
-#ifdef VAX
-       ULong d0, d1;
-       d0 = word0(d) >> 16 | word0(d) << 16;
-       d1 = word1(d) >> 16 | word1(d) << 16;
-#else
-#define d0 word0(d)
-#define d1 word1(d)
-#endif
-
-#ifdef Pack_32
-       b = Balloc(1);
-#else
-       b = Balloc(2);
-#endif
-       x = b->x;
-
-       z = d0 & Frac_mask;
-       d0 &= 0x7fffffff;       /* clear sign bit, which we ignore */
-#ifdef Sudden_Underflow
-       de = (int)(d0 >> Exp_shift);
-#ifndef IBM
-       z |= Exp_msk11;
-#endif
-#else
-       if ( (de = (int)(d0 >> Exp_shift)) !=0)
-               z |= Exp_msk1;
-#endif
-#ifdef Pack_32
-       if ( (y = d1) !=0) {
-               if ( (k = lo0bits(&y)) !=0) {
-                       x[0] = y | z << 32 - k;
-                       z >>= k;
-                       }
-               else
-                       x[0] = y;
-               i = b->wds = (x[1] = z) !=0 ? 2 : 1;
-               }
-       else {
-#ifdef DEBUG
-               if (!z)
-                       Bug("Zero passed to d2b");
-#endif
-               k = lo0bits(&z);
-               x[0] = z;
-               i = b->wds = 1;
-               k += 32;
-               }
-#else
-       if ( (y = d1) !=0) {
-               if ( (k = lo0bits(&y)) !=0)
-                       if (k >= 16) {
-                               x[0] = y | z << 32 - k & 0xffff;
-                               x[1] = z >> k - 16 & 0xffff;
-                               x[2] = z >> k;
-                               i = 2;
-                               }
-                       else {
-                               x[0] = y & 0xffff;
-                               x[1] = y >> 16 | z << 16 - k & 0xffff;
-                               x[2] = z >> k & 0xffff;
-                               x[3] = z >> k+16;
-                               i = 3;
-                               }
-               else {
-                       x[0] = y & 0xffff;
-                       x[1] = y >> 16;
-                       x[2] = z & 0xffff;
-                       x[3] = z >> 16;
-                       i = 3;
-                       }
-               }
-       else {
-#ifdef DEBUG
-               if (!z)
-                       Bug("Zero passed to d2b");
-#endif
-               k = lo0bits(&z);
-               if (k >= 16) {
-                       x[0] = z;
-                       i = 0;
-                       }
-               else {
-                       x[0] = z & 0xffff;
-                       x[1] = z >> 16;
-                       i = 1;
-                       }
-               k += 32;
-               }
-       while(!x[i])
-               --i;
-       b->wds = i + 1;
-#endif
-#ifndef Sudden_Underflow
-       if (de) {
-#endif
-#ifdef IBM
-               *e = (de - Bias - (P-1) << 2) + k;
-               *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
-#else
-               *e = de - Bias - (P-1) + k;
-               *bits = P - k;
-#endif
-#ifndef Sudden_Underflow
-               }
-       else {
-               *e = de - Bias - (P-1) + 1 + k;
-#ifdef Pack_32
-               *bits = 32*i - hi0bits(x[i-1]);
-#else
-               *bits = (i+2)*16 - hi0bits(x[i]);
-#endif
-               }
-#endif
-       return b;
-       }
-#undef d0
-#undef d1
-
- CONST double
-#ifdef IEEE_Arith
-bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
-CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256
-               };
-#else
-#ifdef IBM
-bigtens[] = { 1e16, 1e32, 1e64 };
-CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
-#else
-bigtens[] = { 1e16, 1e32 };
-CONST double tinytens[] = { 1e-16, 1e-32 };
-#endif
-#endif
-
- CONST double
-tens[] = {
-               1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
-               1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
-               1e20, 1e21, 1e22
-#ifdef VAX
-               , 1e23, 1e24
-#endif
-               };
-
- char *
-#ifdef KR_headers
-strcp_D2A(a, b) char *a; char *b;
-#else
-strcp_D2A(char *a, CONST char *b)
-#endif
-{
-       while(*a = *b++)
-               a++;
-       return a;
-       }
-
-#ifdef NO_STRING_H
-
- Char *
-#ifdef KR_headers
-memcpy_D2A(a, b, len) Char *a; Char *b; size_t len;
-#else
-memcpy_D2A(void *a1, void *b1, size_t len)
-#endif
-{
-       register char *a = (char*)a1, *ae = a + len;
-       register char *b = (char*)b1, *a0 = a;
-       while(a < ae)
-               *a++ = *b++;
-       return a0;
-       }
-
-#endif /* NO_STRING_H */
diff --git a/float/gdtoa/smisc.c b/float/gdtoa/smisc.c
deleted file mode 100644 (file)
index e20e9da..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- Bigint *
-s2b
-#ifdef KR_headers
-       (s, nd0, nd, y9) CONST char *s; int nd0, nd; ULong y9;
-#else
-       (CONST char *s, int nd0, int nd, ULong y9)
-#endif
-{
-       Bigint *b;
-       int i, k;
-       Long x, y;
-
-       x = (nd + 8) / 9;
-       for(k = 0, y = 1; x > y; y <<= 1, k++) ;
-#ifdef Pack_32
-       b = Balloc(k);
-       b->x[0] = y9;
-       b->wds = 1;
-#else
-       b = Balloc(k+1);
-       b->x[0] = y9 & 0xffff;
-       b->wds = (b->x[1] = y9 >> 16) ? 2 : 1;
-#endif
-
-       i = 9;
-       if (9 < nd0) {
-               s += 9;
-               do b = multadd(b, 10, *s++ - '0');
-                       while(++i < nd0);
-               s++;
-               }
-       else
-               s += 10;
-       for(; i < nd; i++)
-               b = multadd(b, 10, *s++ - '0');
-       return b;
-       }
-
- double
-ratio
-#ifdef KR_headers
-       (a, b) Bigint *a, *b;
-#else
-       (Bigint *a, Bigint *b)
-#endif
-{
-       double da, db;
-       int k, ka, kb;
-
-       dval(da) = b2d(a, &ka);
-       dval(db) = b2d(b, &kb);
-       k = ka - kb + ULbits*(a->wds - b->wds);
-#ifdef IBM
-       if (k > 0) {
-               word0(da) += (k >> 2)*Exp_msk1;
-               if (k &= 3)
-                       dval(da) *= 1 << k;
-               }
-       else {
-               k = -k;
-               word0(db) += (k >> 2)*Exp_msk1;
-               if (k &= 3)
-                       dval(db) *= 1 << k;
-               }
-#else
-       if (k > 0)
-               word0(da) += k*Exp_msk1;
-       else {
-               k = -k;
-               word0(db) += k*Exp_msk1;
-               }
-#endif
-       return dval(da) / dval(db);
-       }
-
-#ifdef INFNAN_CHECK
-
- int
-match
-#ifdef KR_headers
-       (sp, t) char **sp, *t;
-#else
-       (CONST char **sp, char *t)
-#endif
-{
-       int c, d;
-       CONST char *s = *sp;
-
-       while( (d = *t++) !=0) {
-               if ((c = *++s) >= 'A' && c <= 'Z')
-                       c += 'a' - 'A';
-               if (c != d)
-                       return 0;
-               }
-       *sp = s + 1;
-       return 1;
-       }
-#endif /* INFNAN_CHECK */
-
- void
-#ifdef KR_headers
-copybits(c, n, b) ULong *c; int n; Bigint *b;
-#else
-copybits(ULong *c, int n, Bigint *b)
-#endif
-{
-       ULong *ce, *x, *xe;
-#ifdef Pack_16
-       int nw, nw1;
-#endif
-
-       ce = c + ((n-1) >> kshift) + 1;
-       x = b->x;
-#ifdef Pack_32
-       xe = x + b->wds;
-       while(x < xe)
-               *c++ = *x++;
-#else
-       nw = b->wds;
-       nw1 = nw & 1;
-       for(xe = x + (nw - nw1); x < xe; x += 2)
-               Storeinc(c, x[1], x[0]);
-       if (nw1)
-               *c++ = *x;
-#endif
-       while(c < ce)
-               *c++ = 0;
-       }
-
- ULong
-#ifdef KR_headers
-any_on(b, k) Bigint *b; int k;
-#else
-any_on(Bigint *b, int k)
-#endif
-{
-       int n, nwds;
-       ULong *x, *x0, x1, x2;
-
-       x = b->x;
-       nwds = b->wds;
-       n = k >> kshift;
-       if (n > nwds)
-               n = nwds;
-       else if (n < nwds && (k &= kmask)) {
-               x1 = x2 = x[n];
-               x1 >>= k;
-               x1 <<= k;
-               if (x1 != x2)
-                       return 1;
-               }
-       x0 = x;
-       x += n;
-       while(x > x0)
-               if (*--x)
-                       return 1;
-       return 0;
-       }
diff --git a/float/gdtoa/strtoIQ.c b/float/gdtoa/strtoIQ.c
deleted file mode 100644 (file)
index 0ce0420..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoIQ(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
-#else
-strtoIQ(CONST char *s, char **sp, void *a, void *b)
-#endif
-{
-       static FPI fpi = { 113, 1-16383-113+1, 32766-16383-113+1, 1, SI };
-       Long exp[2];
-       Bigint *B[2];
-       int k, rv[2];
-       ULong *L = (ULong *)a, *M = (ULong *)b;
-
-       B[0] = Balloc(2);
-       B[0]->wds = 4;
-       k = strtoIg(s, sp, &fpi, exp, B, rv);
-       ULtoQ(L, B[0]->x, exp[0], rv[0]);
-       Bfree(B[0]);
-       if (B[1]) {
-               ULtoQ(M, B[1]->x, exp[1], rv[1]);
-               Bfree(B[1]);
-               }
-       else {
-               M[0] = L[0];
-               M[1] = L[1];
-               M[2] = L[2];
-               M[3] = L[3];
-               }
-       return k;
-       }
diff --git a/float/gdtoa/strtoId.c b/float/gdtoa/strtoId.c
deleted file mode 100644 (file)
index f986e04..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoId(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1;
-#else
-strtoId(CONST char *s, char **sp, double *f0, double *f1)
-#endif
-{
-       static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
-       Long exp[2];
-       Bigint *B[2];
-       int k, rv[2];
-
-       B[0] = Balloc(1);
-       B[0]->wds = 2;
-       k = strtoIg(s, sp, &fpi, exp, B, rv);
-       ULtod((ULong*)f0, B[0]->x, exp[0], rv[0]);
-       Bfree(B[0]);
-       if (B[1]) {
-               ULtod((ULong*)f1, B[1]->x, exp[1], rv[1]);
-               Bfree(B[1]);
-               }
-       else {
-               ((ULong*)f1)[0] = ((ULong*)f0)[0];
-               ((ULong*)f1)[1] = ((ULong*)f0)[1];
-               }
-       return k;
-       }
diff --git a/float/gdtoa/strtoIdd.c b/float/gdtoa/strtoIdd.c
deleted file mode 100644 (file)
index 9622c18..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoIdd(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1;
-#else
-strtoIdd(CONST char *s, char **sp, double *f0, double *f1)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 106, 1-1023, 2046-1023-106+1, 1, 1 };
-#else
-       static FPI fpi = { 106, 1-1023-53+1, 2046-1023-106+1, 1, 0 };
-#endif
-       Long exp[2];
-       Bigint *B[2];
-       int k, rv[2];
-
-       B[0] = Balloc(2);
-       B[0]->wds = 4;
-       k = strtoIg(s, sp, &fpi, exp, B, rv);
-       ULtodd((ULong*)f0, B[0]->x, exp[0], rv[0]);
-       Bfree(B[0]);
-       if (B[1]) {
-               ULtodd((ULong*)f1, B[1]->x, exp[1], rv[1]);
-               Bfree(B[1]);
-               }
-       else {
-               ((ULong*)f1)[0] = ((ULong*)f0)[0];
-               ((ULong*)f1)[1] = ((ULong*)f0)[1];
-               ((ULong*)f1)[2] = ((ULong*)f0)[2];
-               ((ULong*)f1)[3] = ((ULong*)f0)[3];
-               }
-       return k;
-       }
diff --git a/float/gdtoa/strtoIf.c b/float/gdtoa/strtoIf.c
deleted file mode 100644 (file)
index c439ff5..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoIf(s, sp, f0, f1) CONST char *s; char **sp; float *f0, *f1;
-#else
-strtoIf(CONST char *s, char **sp, float *f0, float *f1)
-#endif
-{
-       static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, SI };
-       Long exp[2];
-       Bigint *B[2];
-       int k, rv[2];
-
-       B[0] = Balloc(0);
-       B[0]->wds = 1;
-       k = strtoIg(s, sp, &fpi, exp, B, rv);
-       ULtof((ULong*)f0, B[0]->x, exp[0], rv[0]);
-       Bfree(B[0]);
-       if (B[1]) {
-               ULtof((ULong*)f1, B[1]->x, exp[1], rv[1]);
-               Bfree(B[1]);
-               }
-       else
-               *(ULong*)f1 = *(ULong*)f0;
-       return k;
-       }
diff --git a/float/gdtoa/strtoIg.c b/float/gdtoa/strtoIg.c
deleted file mode 100644 (file)
index a766813..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoIg(s00, se, fpi, exp, B, rvp) CONST char *s00; char **se; FPI *fpi; Long *exp; Bigint **B; int *rvp;
-#else
-strtoIg(CONST char *s00, char **se, FPI *fpi, Long *exp, Bigint **B, int *rvp)
-#endif
-{
-       Bigint *b, *b1;
-       int i, nb, nw, nw1, rv, rv1, swap;
-       unsigned int nb1, nb11;
-       Long e1;
-
-       b = *B;
-       rv = strtodg(s00, se, fpi, exp, b->x);
-       if (!(rv & STRTOG_Inexact)) {
-               B[1] = 0;
-               return *rvp = rv;
-               }
-       e1 = exp[0];
-       rv1 = rv ^ STRTOG_Inexact;
-       b1 = Balloc(b->k);
-       Bcopy(b1, b);
-       nb = fpi->nbits;
-       nb1 = nb & 31;
-       nb11 = (nb1 - 1) & 31;
-       nw = b->wds;
-       nw1 = nw - 1;
-       if (rv & STRTOG_Inexlo) {
-               swap = 0;
-               b1 = increment(b1);
-               if (fpi->sudden_underflow
-                && (rv & STRTOG_Retmask) == STRTOG_Zero) {
-                       b1->x[0] = 0;
-                       b1->x[nw1] = 1L << nb11;
-                       rv1 += STRTOG_Normal - STRTOG_Zero;
-                       rv1 &= ~STRTOG_Underflow;
-                       goto swapcheck;
-                       }
-               if (b1->wds > nw
-                || nb1 && b1->x[nw1] & 1L << nb1) {
-                       if (++e1 > fpi->emax)
-                               rv1 = STRTOG_Infinite | STRTOG_Inexhi;
-                       rshift(b1, 1);
-                       }
-               else if ((rv & STRTOG_Retmask) == STRTOG_Denormal) {
-                       if (b1->x[nw1] & 1L << nb11) {
-                               rv1 += STRTOG_Normal - STRTOG_Denormal;
-                               rv1 &= ~STRTOG_Underflow;
-                               }
-                       }
-               }
-       else {
-               swap = STRTOG_Neg;
-               if ((rv & STRTOG_Retmask) == STRTOG_Infinite) {
-                       b1 = set_ones(b1, nb);
-                       e1 = fpi->emax;
-                       rv1 = STRTOG_Normal | STRTOG_Inexlo;
-                       goto swapcheck;
-                       }
-               decrement(b1);
-               if ((rv & STRTOG_Retmask) == STRTOG_Denormal) {
-                       for(i = nw1; !b1->x[i]; --i)
-                               if (!i) {
-                                       rv1 = STRTOG_Zero | STRTOG_Inexlo;
-                                       break;
-                                       }
-                       goto swapcheck;
-                       }
-               if (!(b1->x[nw1] & 1L << nb11)) {
-                       if (e1 == fpi->emin) {
-                               if (fpi->sudden_underflow)
-                                       rv1 += STRTOG_Zero - STRTOG_Normal;
-                               else
-                                       rv1 += STRTOG_Denormal - STRTOG_Normal;
-                               rv1 |= STRTOG_Underflow;
-                               }
-                       else {
-                               b1 = lshift(b1, 1);
-                               b1->x[0] |= 1;
-                               --e1;
-                               }
-                       }
-               }
- swapcheck:
-       if (swap ^ (rv & STRTOG_Neg)) {
-               rvp[0] = rv1;
-               rvp[1] = rv;
-               B[0] = b1;
-               B[1] = b;
-               exp[1] = exp[0];
-               exp[0] = e1;
-               }
-       else {
-               rvp[0] = rv;
-               rvp[1] = rv1;
-               B[1] = b1;
-               exp[1] = e1;
-               }
-       return rv;
-       }
diff --git a/float/gdtoa/strtoIx.c b/float/gdtoa/strtoIx.c
deleted file mode 100644 (file)
index d699f04..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoIx(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
-#else
-strtoIx(CONST char *s, char **sp, void *a, void *b)
-#endif
-{
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
-       Long exp[2];
-       Bigint *B[2];
-       int k, rv[2];
-       UShort *L = (UShort *)a, *M = (UShort *)b;
-
-       B[0] = Balloc(1);
-       B[0]->wds = 2;
-       k = strtoIg(s, sp, &fpi, exp, B, rv);
-       ULtox(L, B[0]->x, exp[0], rv[0]);
-       Bfree(B[0]);
-       if (B[1]) {
-               ULtox(M, B[1]->x, exp[1], rv[1]);
-               Bfree(B[1]);
-               }
-       else {
-               M[0] = L[0];
-               M[1] = L[1];
-               M[2] = L[2];
-               M[3] = L[3];
-               M[4] = L[4];
-               }
-       return k;
-       }
diff --git a/float/gdtoa/strtoIxL.c b/float/gdtoa/strtoIxL.c
deleted file mode 100644 (file)
index c579589..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtoIxL(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
-#else
-strtoIxL(CONST char *s, char **sp, void *a, void *b)
-#endif
-{
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
-       Long exp[2];
-       Bigint *B[2];
-       int k, rv[2];
-       ULong *L = (ULong *)a, *M = (ULong *)b;
-
-       B[0] = Balloc(1);
-       B[0]->wds = 2;
-       k = strtoIg(s, sp, &fpi, exp, B, rv);
-       ULtoxL(L, B[0]->x, exp[0], rv[0]);
-       Bfree(B[0]);
-       if (B[1]) {
-               ULtoxL(M, B[1]->x, exp[1], rv[1]);
-               Bfree(B[1]);
-               }
-       else {
-               M[0] = L[0];
-               M[1] = L[1];
-               M[2] = L[2];
-               }
-       return k;
-       }
diff --git a/float/gdtoa/strtod.c b/float/gdtoa/strtod.c
deleted file mode 100644 (file)
index 0d8dad3..0000000
+++ /dev/null
@@ -1,985 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
-#ifdef IEEE_Arith
-#ifndef NO_IEEE_Scale
-#define Avoid_Underflow
-#undef tinytens
-/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
-/* flag unnecessarily.  It leads to a song and dance at the end of strtod. */
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
-               9007199254740992.e-256
-               };
-#endif
-#endif
-
-#ifdef Honor_FLT_ROUNDS
-#define Rounding rounding
-#undef Check_FLT_ROUNDS
-#define Check_FLT_ROUNDS
-#else
-#define Rounding Flt_Rounds
-#endif
-
- double
-strtod
-#ifdef KR_headers
-       (s00, se) CONST char *s00; char **se;
-#else
-       (CONST char *s00, char **se)
-#endif
-{
-#ifdef Avoid_Underflow
-       int scale;
-#endif
-       int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
-                e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
-       CONST char *s, *s0, *s1;
-       double aadj, aadj1, adj, rv, rv0;
-       Long L;
-       ULong y, z;
-       Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
-#ifdef SET_INEXACT
-       int inexact, oldinexact;
-#endif
-#ifdef Honor_FLT_ROUNDS
-       int rounding;
-#endif
-#ifdef USE_LOCALE
-       CONST char *s2;
-#endif
-
-       sign = nz0 = nz = 0;
-       dval(rv) = 0.;
-       for(s = s00;;s++) switch(*s) {
-               case '-':
-                       sign = 1;
-                       /* no break */
-               case '+':
-                       if (*++s)
-                               goto break2;
-                       /* no break */
-               case 0:
-                       goto ret0;
-               case '\t':
-               case '\n':
-               case '\v':
-               case '\f':
-               case '\r':
-               case ' ':
-                       continue;
-               default:
-                       goto break2;
-               }
- break2:
-       if (*s == '0') {
-#ifndef NO_HEX_FP
-               {
-               static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
-               Long exp;
-               ULong bits[2];
-               switch(s[1]) {
-                 case 'x':
-                 case 'X':
-                       i = gethex(&s, &fpi, &exp, &bb, sign);
-                       if (i == STRTOG_NoNumber) {
-                               s = s00;
-                               sign = 0;
-                               dval(rv) = 0.;
-                               }
-                       else {
-                               copybits(bits, fpi.nbits, bb);
-                               Bfree(bb);
-                               ULtod(((U*)&rv)->L, bits, exp, i);
-                               }
-                       goto ret;
-                 }
-               }
-#endif
-               nz0 = 1;
-               while(*++s == '0') ;
-               if (!*s)
-                       goto ret;
-               }
-       s0 = s;
-       y = z = 0;
-       for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
-               if (nd < 9)
-                       y = 10*y + c - '0';
-               else if (nd < 16)
-                       z = 10*z + c - '0';
-       nd0 = nd;
-#ifdef USE_LOCALE
-       s1 = localeconv()->decimal_point;
-       if (c == *s1) {
-               c = '.';
-               if (*++s1) {
-                       s2 = s;
-                       for(;;) {
-                               if (*++s2 != *s1) {
-                                       c = 0;
-                                       break;
-                                       }
-                               if (!*++s1) {
-                                       s = s2;
-                                       break;
-                                       }
-                               }
-                       }
-               }
-#endif
-       if (c == '.') {
-               c = *++s;
-               if (!nd) {
-                       for(; c == '0'; c = *++s)
-                               nz++;
-                       if (c > '0' && c <= '9') {
-                               s0 = s;
-                               nf += nz;
-                               nz = 0;
-                               goto have_dig;
-                               }
-                       goto dig_done;
-                       }
-               for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
-                       nz++;
-                       if (c -= '0') {
-                               nf += nz;
-                               for(i = 1; i < nz; i++)
-                                       if (nd++ < 9)
-                                               y *= 10;
-                                       else if (nd <= DBL_DIG + 1)
-                                               z *= 10;
-                               if (nd++ < 9)
-                                       y = 10*y + c;
-                               else if (nd <= DBL_DIG + 1)
-                                       z = 10*z + c;
-                               nz = 0;
-                               }
-                       }
-               }
- dig_done:
-       e = 0;
-       if (c == 'e' || c == 'E') {
-               if (!nd && !nz && !nz0) {
-                       goto ret0;
-                       }
-               s00 = s;
-               esign = 0;
-               switch(c = *++s) {
-                       case '-':
-                               esign = 1;
-                       case '+':
-                               c = *++s;
-                       }
-               if (c >= '0' && c <= '9') {
-                       while(c == '0')
-                               c = *++s;
-                       if (c > '0' && c <= '9') {
-                               L = c - '0';
-                               s1 = s;
-                               while((c = *++s) >= '0' && c <= '9')
-                                       L = 10*L + c - '0';
-                               if (s - s1 > 8 || L > 19999)
-                                       /* Avoid confusion from exponents
-                                        * so large that e might overflow.
-                                        */
-                                       e = 19999; /* safe for 16 bit ints */
-                               else
-                                       e = (int)L;
-                               if (esign)
-                                       e = -e;
-                               }
-                       else
-                               e = 0;
-                       }
-               else
-                       s = s00;
-               }
-       if (!nd) {
-               if (!nz && !nz0) {
-#ifdef INFNAN_CHECK
-                       /* Check for Nan and Infinity */
-                       ULong bits[2];
-                       static FPI fpinan =     /* only 52 explicit bits */
-                               { 52, 1-1023-53+1, 2046-1023-53+1, 1, SI };
-                       switch(c) {
-                         case 'i':
-                         case 'I':
-                               if (match(&s,"nf")) {
-                                       --s;
-                                       if (!match(&s,"inity"))
-                                               ++s;
-                                       word0(rv) = 0x7ff00000;
-                                       word1(rv) = 0;
-                                       goto ret;
-                                       }
-                               break;
-                         case 'n':
-                         case 'N':
-                               if (match(&s, "an")) {
-#ifndef No_Hex_NaN
-                                       if (*s == '(' /*)*/
-                                        && hexnan(&s, &fpinan, bits)
-                                                       == STRTOG_NaNbits) {
-                                               word0(rv) = 0x7ff00000 | bits[1];
-                                               word1(rv) = bits[0];
-                                               }
-                                       else {
-                                               word0(rv) = NAN_WORD0;
-                                               word1(rv) = NAN_WORD1;
-                                               }
-#endif
-                                       goto ret;
-                                       }
-                         }
-#endif /* INFNAN_CHECK */
- ret0:
-                       s = s00;
-                       sign = 0;
-                       }
-               goto ret;
-               }
-       e1 = e -= nf;
-
-       /* Now we have nd0 digits, starting at s0, followed by a
-        * decimal point, followed by nd-nd0 digits.  The number we're
-        * after is the integer represented by those digits times
-        * 10**e */
-
-       if (!nd0)
-               nd0 = nd;
-       k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
-       dval(rv) = y;
-       if (k > 9) {
-#ifdef SET_INEXACT
-               if (k > DBL_DIG)
-                       oldinexact = get_inexact();
-#endif
-               dval(rv) = tens[k - 9] * dval(rv) + z;
-               }
-       bd0 = 0;
-       if (nd <= DBL_DIG
-#ifndef RND_PRODQUOT
-#ifndef Honor_FLT_ROUNDS
-               && Flt_Rounds == 1
-#endif
-#endif
-                       ) {
-               if (!e)
-                       goto ret;
-               if (e > 0) {
-                       if (e <= Ten_pmax) {
-#ifdef VAX
-                               goto vax_ovfl_check;
-#else
-#ifdef Honor_FLT_ROUNDS
-                               /* round correctly FLT_ROUNDS = 2 or 3 */
-                               if (sign) {
-                                       rv = -rv;
-                                       sign = 0;
-                                       }
-#endif
-                               /* rv = */ rounded_product(dval(rv), tens[e]);
-                               goto ret;
-#endif
-                               }
-                       i = DBL_DIG - nd;
-                       if (e <= Ten_pmax + i) {
-                               /* A fancier test would sometimes let us do
-                                * this for larger i values.
-                                */
-#ifdef Honor_FLT_ROUNDS
-                               /* round correctly FLT_ROUNDS = 2 or 3 */
-                               if (sign) {
-                                       rv = -rv;
-                                       sign = 0;
-                                       }
-#endif
-                               e -= i;
-                               dval(rv) *= tens[i];
-#ifdef VAX
-                               /* VAX exponent range is so narrow we must
-                                * worry about overflow here...
-                                */
- vax_ovfl_check:
-                               word0(rv) -= P*Exp_msk1;
-                               /* rv = */ rounded_product(dval(rv), tens[e]);
-                               if ((word0(rv) & Exp_mask)
-                                > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
-                                       goto ovfl;
-                               word0(rv) += P*Exp_msk1;
-#else
-                               /* rv = */ rounded_product(dval(rv), tens[e]);
-#endif
-                               goto ret;
-                               }
-                       }
-#ifndef Inaccurate_Divide
-               else if (e >= -Ten_pmax) {
-#ifdef Honor_FLT_ROUNDS
-                       /* round correctly FLT_ROUNDS = 2 or 3 */
-                       if (sign) {
-                               rv = -rv;
-                               sign = 0;
-                               }
-#endif
-                       /* rv = */ rounded_quotient(dval(rv), tens[-e]);
-                       goto ret;
-                       }
-#endif
-               }
-       e1 += nd - k;
-
-#ifdef IEEE_Arith
-#ifdef SET_INEXACT
-       inexact = 1;
-       if (k <= DBL_DIG)
-               oldinexact = get_inexact();
-#endif
-#ifdef Avoid_Underflow
-       scale = 0;
-#endif
-#ifdef Honor_FLT_ROUNDS
-       if ((rounding = Flt_Rounds) >= 2) {
-               if (sign)
-                       rounding = rounding == 2 ? 0 : 2;
-               else
-                       if (rounding != 2)
-                               rounding = 0;
-               }
-#endif
-#endif /*IEEE_Arith*/
-
-       /* Get starting approximation = rv * 10**e1 */
-
-       if (e1 > 0) {
-               if ( (i = e1 & 15) !=0)
-                       dval(rv) *= tens[i];
-               if (e1 &= ~15) {
-                       if (e1 > DBL_MAX_10_EXP) {
- ovfl:
-#ifndef NO_ERRNO
-                               errno = ERANGE;
-#endif
-                               /* Can't trust HUGE_VAL */
-#ifdef IEEE_Arith
-#ifdef Honor_FLT_ROUNDS
-                               switch(rounding) {
-                                 case 0: /* toward 0 */
-                                 case 3: /* toward -infinity */
-                                       word0(rv) = Big0;
-                                       word1(rv) = Big1;
-                                       break;
-                                 default:
-                                       word0(rv) = Exp_mask;
-                                       word1(rv) = 0;
-                                 }
-#else /*Honor_FLT_ROUNDS*/
-                               word0(rv) = Exp_mask;
-                               word1(rv) = 0;
-#endif /*Honor_FLT_ROUNDS*/
-#ifdef SET_INEXACT
-                               /* set overflow bit */
-                               dval(rv0) = 1e300;
-                               dval(rv0) *= dval(rv0);
-#endif
-#else /*IEEE_Arith*/
-                               word0(rv) = Big0;
-                               word1(rv) = Big1;
-#endif /*IEEE_Arith*/
-                               if (bd0)
-                                       goto retfree;
-                               goto ret;
-                               }
-                       e1 >>= 4;
-                       for(j = 0; e1 > 1; j++, e1 >>= 1)
-                               if (e1 & 1)
-                                       dval(rv) *= bigtens[j];
-               /* The last multiplication could overflow. */
-                       word0(rv) -= P*Exp_msk1;
-                       dval(rv) *= bigtens[j];
-                       if ((z = word0(rv) & Exp_mask)
-                        > Exp_msk1*(DBL_MAX_EXP+Bias-P))
-                               goto ovfl;
-                       if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
-                               /* set to largest number */
-                               /* (Can't trust DBL_MAX) */
-                               word0(rv) = Big0;
-                               word1(rv) = Big1;
-                               }
-                       else
-                               word0(rv) += P*Exp_msk1;
-                       }
-               }
-       else if (e1 < 0) {
-               e1 = -e1;
-               if ( (i = e1 & 15) !=0)
-                       dval(rv) /= tens[i];
-               if (e1 >>= 4) {
-                       if (e1 >= 1 << n_bigtens)
-                               goto undfl;
-#ifdef Avoid_Underflow
-                       if (e1 & Scale_Bit)
-                               scale = 2*P;
-                       for(j = 0; e1 > 0; j++, e1 >>= 1)
-                               if (e1 & 1)
-                                       dval(rv) *= tinytens[j];
-                       if (scale && (j = 2*P + 1 - ((word0(rv) & Exp_mask)
-                                               >> Exp_shift)) > 0) {
-                               /* scaled rv is denormal; zap j low bits */
-                               if (j >= 32) {
-                                       word1(rv) = 0;
-                                       if (j >= 53)
-                                        word0(rv) = (P+2)*Exp_msk1;
-                                       else
-                                        word0(rv) &= 0xffffffff << j-32;
-                                       }
-                               else
-                                       word1(rv) &= 0xffffffff << j;
-                               }
-#else
-                       for(j = 0; e1 > 1; j++, e1 >>= 1)
-                               if (e1 & 1)
-                                       dval(rv) *= tinytens[j];
-                       /* The last multiplication could underflow. */
-                       dval(rv0) = dval(rv);
-                       dval(rv) *= tinytens[j];
-                       if (!dval(rv)) {
-                               dval(rv) = 2.*dval(rv0);
-                               dval(rv) *= tinytens[j];
-#endif
-                               if (!dval(rv)) {
- undfl:
-                                       dval(rv) = 0.;
-#ifndef NO_ERRNO
-                                       errno = ERANGE;
-#endif
-                                       if (bd0)
-                                               goto retfree;
-                                       goto ret;
-                                       }
-#ifndef Avoid_Underflow
-                               word0(rv) = Tiny0;
-                               word1(rv) = Tiny1;
-                               /* The refinement below will clean
-                                * this approximation up.
-                                */
-                               }
-#endif
-                       }
-               }
-
-       /* Now the hard part -- adjusting rv to the correct value.*/
-
-       /* Put digits into bd: true value = bd * 10^e */
-
-       bd0 = s2b(s0, nd0, nd, y);
-
-       for(;;) {
-               bd = Balloc(bd0->k);
-               Bcopy(bd, bd0);
-               bb = d2b(dval(rv), &bbe, &bbbits);      /* rv = bb * 2^bbe */
-               bs = i2b(1);
-
-               if (e >= 0) {
-                       bb2 = bb5 = 0;
-                       bd2 = bd5 = e;
-                       }
-               else {
-                       bb2 = bb5 = -e;
-                       bd2 = bd5 = 0;
-                       }
-               if (bbe >= 0)
-                       bb2 += bbe;
-               else
-                       bd2 -= bbe;
-               bs2 = bb2;
-#ifdef Honor_FLT_ROUNDS
-               if (rounding != 1)
-                       bs2++;
-#endif
-#ifdef Avoid_Underflow
-               j = bbe - scale;
-               i = j + bbbits - 1;     /* logb(rv) */
-               if (i < Emin)   /* denormal */
-                       j += P - Emin;
-               else
-                       j = P + 1 - bbbits;
-#else /*Avoid_Underflow*/
-#ifdef Sudden_Underflow
-#ifdef IBM
-               j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3);
-#else
-               j = P + 1 - bbbits;
-#endif
-#else /*Sudden_Underflow*/
-               j = bbe;
-               i = j + bbbits - 1;     /* logb(rv) */
-               if (i < Emin)   /* denormal */
-                       j += P - Emin;
-               else
-                       j = P + 1 - bbbits;
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
-               bb2 += j;
-               bd2 += j;
-#ifdef Avoid_Underflow
-               bd2 += scale;
-#endif
-               i = bb2 < bd2 ? bb2 : bd2;
-               if (i > bs2)
-                       i = bs2;
-               if (i > 0) {
-                       bb2 -= i;
-                       bd2 -= i;
-                       bs2 -= i;
-                       }
-               if (bb5 > 0) {
-                       bs = pow5mult(bs, bb5);
-                       bb1 = mult(bs, bb);
-                       Bfree(bb);
-                       bb = bb1;
-                       }
-               if (bb2 > 0)
-                       bb = lshift(bb, bb2);
-               if (bd5 > 0)
-                       bd = pow5mult(bd, bd5);
-               if (bd2 > 0)
-                       bd = lshift(bd, bd2);
-               if (bs2 > 0)
-                       bs = lshift(bs, bs2);
-               delta = diff(bb, bd);
-               dsign = delta->sign;
-               delta->sign = 0;
-               i = cmp(delta, bs);
-#ifdef Honor_FLT_ROUNDS
-               if (rounding != 1) {
-                       if (i < 0) {
-                               /* Error is less than an ulp */
-                               if (!delta->x[0] && delta->wds <= 1) {
-                                       /* exact */
-#ifdef SET_INEXACT
-                                       inexact = 0;
-#endif
-                                       break;
-                                       }
-                               if (rounding) {
-                                       if (dsign) {
-                                               adj = 1.;
-                                               goto apply_adj;
-                                               }
-                                       }
-                               else if (!dsign) {
-                                       adj = -1.;
-                                       if (!word1(rv)
-                                        && !(word0(rv) & Frac_mask)) {
-                                               y = word0(rv) & Exp_mask;
-#ifdef Avoid_Underflow
-                                               if (!scale || y > 2*P*Exp_msk1)
-#else
-                                               if (y)
-#endif
-                                                 {
-                                                 delta = lshift(delta,Log2P);
-                                                 if (cmp(delta, bs) <= 0)
-                                                       adj = -0.5;
-                                                 }
-                                               }
- apply_adj:
-#ifdef Avoid_Underflow
-                                       if (scale && (y = word0(rv) & Exp_mask)
-                                               <= 2*P*Exp_msk1)
-                                         word0(adj) += (2*P+1)*Exp_msk1 - y;
-#else
-#ifdef Sudden_Underflow
-                                       if ((word0(rv) & Exp_mask) <=
-                                                       P*Exp_msk1) {
-                                               word0(rv) += P*Exp_msk1;
-                                               dval(rv) += adj*ulp(dval(rv));
-                                               word0(rv) -= P*Exp_msk1;
-                                               }
-                                       else
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
-                                       dval(rv) += adj*ulp(dval(rv));
-                                       }
-                               break;
-                               }
-                       adj = ratio(delta, bs);
-                       if (adj < 1.)
-                               adj = 1.;
-                       if (adj <= 0x7ffffffe) {
-                               /* adj = rounding ? ceil(adj) : floor(adj); */
-                               y = adj;
-                               if (y != adj) {
-                                       if (!((rounding>>1) ^ dsign))
-                                               y++;
-                                       adj = y;
-                                       }
-                               }
-#ifdef Avoid_Underflow
-                       if (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1)
-                               word0(adj) += (2*P+1)*Exp_msk1 - y;
-#else
-#ifdef Sudden_Underflow
-                       if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
-                               word0(rv) += P*Exp_msk1;
-                               adj *= ulp(dval(rv));
-                               if (dsign)
-                                       dval(rv) += adj;
-                               else
-                                       dval(rv) -= adj;
-                               word0(rv) -= P*Exp_msk1;
-                               goto cont;
-                               }
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
-                       adj *= ulp(dval(rv));
-                       if (dsign)
-                               dval(rv) += adj;
-                       else
-                               dval(rv) -= adj;
-                       goto cont;
-                       }
-#endif /*Honor_FLT_ROUNDS*/
-
-               if (i < 0) {
-                       /* Error is less than half an ulp -- check for
-                        * special case of mantissa a power of two.
-                        */
-                       if (dsign || word1(rv) || word0(rv) & Bndry_mask
-#ifdef IEEE_Arith
-#ifdef Avoid_Underflow
-                        || (word0(rv) & Exp_mask) <= (2*P+1)*Exp_msk1
-#else
-                        || (word0(rv) & Exp_mask) <= Exp_msk1
-#endif
-#endif
-                               ) {
-#ifdef SET_INEXACT
-                               if (!delta->x[0] && delta->wds <= 1)
-                                       inexact = 0;
-#endif
-                               break;
-                               }
-                       if (!delta->x[0] && delta->wds <= 1) {
-                               /* exact result */
-#ifdef SET_INEXACT
-                               inexact = 0;
-#endif
-                               break;
-                               }
-                       delta = lshift(delta,Log2P);
-                       if (cmp(delta, bs) > 0)
-                               goto drop_down;
-                       break;
-                       }
-               if (i == 0) {
-                       /* exactly half-way between */
-                       if (dsign) {
-                               if ((word0(rv) & Bndry_mask1) == Bndry_mask1
-                                &&  word1(rv) == (
-#ifdef Avoid_Underflow
-                       (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1)
-               ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
-#endif
-                                                  0xffffffff)) {
-                                       /*boundary case -- increment exponent*/
-                                       word0(rv) = (word0(rv) & Exp_mask)
-                                               + Exp_msk1
-#ifdef IBM
-                                               | Exp_msk1 >> 4
-#endif
-                                               ;
-                                       word1(rv) = 0;
-#ifdef Avoid_Underflow
-                                       dsign = 0;
-#endif
-                                       break;
-                                       }
-                               }
-                       else if (!(word0(rv) & Bndry_mask) && !word1(rv)) {
- drop_down:
-                               /* boundary case -- decrement exponent */
-#ifdef Sudden_Underflow /*{{*/
-                               L = word0(rv) & Exp_mask;
-#ifdef IBM
-                               if (L <  Exp_msk1)
-#else
-#ifdef Avoid_Underflow
-                               if (L <= (scale ? (2*P+1)*Exp_msk1 : Exp_msk1))
-#else
-                               if (L <= Exp_msk1)
-#endif /*Avoid_Underflow*/
-#endif /*IBM*/
-                                       goto undfl;
-                               L -= Exp_msk1;
-#else /*Sudden_Underflow}{*/
-#ifdef Avoid_Underflow
-                               if (scale) {
-                                       L = word0(rv) & Exp_mask;
-                                       if (L <= (2*P+1)*Exp_msk1) {
-                                               if (L > (P+2)*Exp_msk1)
-                                                       /* round even ==> */
-                                                       /* accept rv */
-                                                       break;
-                                               /* rv = smallest denormal */
-                                               goto undfl;
-                                               }
-                                       }
-#endif /*Avoid_Underflow*/
-                               L = (word0(rv) & Exp_mask) - Exp_msk1;
-#endif /*Sudden_Underflow}*/
-                               word0(rv) = L | Bndry_mask1;
-                               word1(rv) = 0xffffffff;
-#ifdef IBM
-                               goto cont;
-#else
-                               break;
-#endif
-                               }
-#ifndef ROUND_BIASED
-                       if (!(word1(rv) & LSB))
-                               break;
-#endif
-                       if (dsign)
-                               dval(rv) += ulp(dval(rv));
-#ifndef ROUND_BIASED
-                       else {
-                               dval(rv) -= ulp(dval(rv));
-#ifndef Sudden_Underflow
-                               if (!dval(rv))
-                                       goto undfl;
-#endif
-                               }
-#ifdef Avoid_Underflow
-                       dsign = 1 - dsign;
-#endif
-#endif
-                       break;
-                       }
-               if ((aadj = ratio(delta, bs)) <= 2.) {
-                       if (dsign)
-                               aadj = aadj1 = 1.;
-                       else if (word1(rv) || word0(rv) & Bndry_mask) {
-#ifndef Sudden_Underflow
-                               if (word1(rv) == Tiny1 && !word0(rv))
-                                       goto undfl;
-#endif
-                               aadj = 1.;
-                               aadj1 = -1.;
-                               }
-                       else {
-                               /* special case -- power of FLT_RADIX to be */
-                               /* rounded down... */
-
-                               if (aadj < 2./FLT_RADIX)
-                                       aadj = 1./FLT_RADIX;
-                               else
-                                       aadj *= 0.5;
-                               aadj1 = -aadj;
-                               }
-                       }
-               else {
-                       aadj *= 0.5;
-                       aadj1 = dsign ? aadj : -aadj;
-#ifdef Check_FLT_ROUNDS
-                       switch(Rounding) {
-                               case 2: /* towards +infinity */
-                                       aadj1 -= 0.5;
-                                       break;
-                               case 0: /* towards 0 */
-                               case 3: /* towards -infinity */
-                                       aadj1 += 0.5;
-                               }
-#else
-                       if (Flt_Rounds == 0)
-                               aadj1 += 0.5;
-#endif /*Check_FLT_ROUNDS*/
-                       }
-               y = word0(rv) & Exp_mask;
-
-               /* Check for overflow */
-
-               if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
-                       dval(rv0) = dval(rv);
-                       word0(rv) -= P*Exp_msk1;
-                       adj = aadj1 * ulp(dval(rv));
-                       dval(rv) += adj;
-                       if ((word0(rv) & Exp_mask) >=
-                                       Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
-                               if (word0(rv0) == Big0 && word1(rv0) == Big1)
-                                       goto ovfl;
-                               word0(rv) = Big0;
-                               word1(rv) = Big1;
-                               goto cont;
-                               }
-                       else
-                               word0(rv) += P*Exp_msk1;
-                       }
-               else {
-#ifdef Avoid_Underflow
-                       if (scale && y <= 2*P*Exp_msk1) {
-                               if (aadj <= 0x7fffffff) {
-                                       if ((z = aadj) <= 0)
-                                               z = 1;
-                                       aadj = z;
-                                       aadj1 = dsign ? aadj : -aadj;
-                                       }
-                               word0(aadj1) += (2*P+1)*Exp_msk1 - y;
-                               }
-                       adj = aadj1 * ulp(dval(rv));
-                       dval(rv) += adj;
-#else
-#ifdef Sudden_Underflow
-                       if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
-                               dval(rv0) = dval(rv);
-                               word0(rv) += P*Exp_msk1;
-                               adj = aadj1 * ulp(dval(rv));
-                               dval(rv) += adj;
-#ifdef IBM
-                               if ((word0(rv) & Exp_mask) <  P*Exp_msk1)
-#else
-                               if ((word0(rv) & Exp_mask) <= P*Exp_msk1)
-#endif
-                                       {
-                                       if (word0(rv0) == Tiny0
-                                        && word1(rv0) == Tiny1)
-                                               goto undfl;
-                                       word0(rv) = Tiny0;
-                                       word1(rv) = Tiny1;
-                                       goto cont;
-                                       }
-                               else
-                                       word0(rv) -= P*Exp_msk1;
-                               }
-                       else {
-                               adj = aadj1 * ulp(dval(rv));
-                               dval(rv) += adj;
-                               }
-#else /*Sudden_Underflow*/
-                       /* Compute adj so that the IEEE rounding rules will
-                        * correctly round rv + adj in some half-way cases.
-                        * If rv * ulp(rv) is denormalized (i.e.,
-                        * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid
-                        * trouble from bits lost to denormalization;
-                        * example: 1.2e-307 .
-                        */
-                       if (y <= (P-1)*Exp_msk1 && aadj > 1.) {
-                               aadj1 = (double)(int)(aadj + 0.5);
-                               if (!dsign)
-                                       aadj1 = -aadj1;
-                               }
-                       adj = aadj1 * ulp(dval(rv));
-                       dval(rv) += adj;
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
-                       }
-               z = word0(rv) & Exp_mask;
-#ifndef SET_INEXACT
-#ifdef Avoid_Underflow
-               if (!scale)
-#endif
-               if (y == z) {
-                       /* Can we stop now? */
-                       L = (Long)aadj;
-                       aadj -= L;
-                       /* The tolerances below are conservative. */
-                       if (dsign || word1(rv) || word0(rv) & Bndry_mask) {
-                               if (aadj < .4999999 || aadj > .5000001)
-                                       break;
-                               }
-                       else if (aadj < .4999999/FLT_RADIX)
-                               break;
-                       }
-#endif
- cont:
-               Bfree(bb);
-               Bfree(bd);
-               Bfree(bs);
-               Bfree(delta);
-               }
-#ifdef SET_INEXACT
-       if (inexact) {
-               if (!oldinexact) {
-                       word0(rv0) = Exp_1 + (70 << Exp_shift);
-                       word1(rv0) = 0;
-                       dval(rv0) += 1.;
-                       }
-               }
-       else if (!oldinexact)
-               clear_inexact();
-#endif
-#ifdef Avoid_Underflow
-       if (scale) {
-               word0(rv0) = Exp_1 - 2*P*Exp_msk1;
-               word1(rv0) = 0;
-               dval(rv) *= dval(rv0);
-#ifndef NO_ERRNO
-               /* try to avoid the bug of testing an 8087 register value */
-               if (word0(rv) == 0 && word1(rv) == 0)
-                       errno = ERANGE;
-#endif
-               }
-#endif /* Avoid_Underflow */
-#ifdef SET_INEXACT
-       if (inexact && !(word0(rv) & Exp_mask)) {
-               /* set underflow bit */
-               dval(rv0) = 1e-300;
-               dval(rv0) *= dval(rv0);
-               }
-#endif
- retfree:
-       Bfree(bb);
-       Bfree(bd);
-       Bfree(bs);
-       Bfree(bd0);
-       Bfree(delta);
- ret:
-       if (se)
-               *se = (char *)s;
-       return sign ? -dval(rv) : dval(rv);
-       }
-
diff --git a/float/gdtoa/strtodI.c b/float/gdtoa/strtodI.c
deleted file mode 100644 (file)
index 163f363..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- static double
-#ifdef KR_headers
-ulpdown(d) double *d;
-#else
-ulpdown(double *d)
-#endif
-{
-       double u;
-       ULong *L = (ULong*)d;
-
-       u = ulp(*d);
-       if (!(L[_1] | L[_0] & 0xfffff)
-        && (L[_0] & 0x7ff00000) > 0x00100000)
-               u *= 0.5;
-       return u;
-       }
-
- int
-#ifdef KR_headers
-strtodI(s, sp, dd) CONST char *s; char **sp; double *dd;
-#else
-strtodI(CONST char *s, char **sp, double *dd)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 1 };
-#else
-       static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0 };
-#endif
-       ULong bits[2], sign;
-       Long exp;
-       int j, k;
-       typedef union {
-               double d[2];
-               ULong L[4];
-               } U;
-       U *u;
-
-       k = strtodg(s, sp, &fpi, &exp, bits);
-       u = (U*)dd;
-       sign = k & STRTOG_Neg ? 0x80000000L : 0;
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-               u->d[0] = u->d[1] = 0.;
-               break;
-
-         case STRTOG_Zero:
-               u->d[0] = u->d[1] = 0.;
-#ifdef Sudden_Underflow
-               if (k & STRTOG_Inexact) {
-                       if (sign)
-                               u->L[_0] = 0x80100000L;
-                       else
-                               u->L[2+_0] = 0x100000L;
-                       }
-               break;
-#else
-               goto contain;
-#endif
-
-         case STRTOG_Denormal:
-               u->L[_1] = bits[0];
-               u->L[_0] = bits[1];
-               goto contain;
-
-         case STRTOG_Normal:
-               u->L[_1] = bits[0];
-               u->L[_0] = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20);
-         contain:
-               j = k & STRTOG_Inexact;
-               if (sign) {
-                       u->L[_0] |= sign;
-                       j = STRTOG_Inexact - j;
-                       }
-               switch(j) {
-                 case STRTOG_Inexlo:
-#ifdef Sudden_Underflow
-                       if ((u->L[_0] & 0x7ff00000) < 0x3500000) {
-                               u->L[2+_0] = u->L[_0] + 0x3500000;
-                               u->L[2+_1] = u->L[_1];
-                               u->d[1] += ulp(u->d[1]);
-                               u->L[2+_0] -= 0x3500000;
-                               if (!(u->L[2+_0] & 0x7ff00000)) {
-                                       u->L[2+_0] = sign;
-                                       u->L[2+_1] = 0;
-                                       }
-                               }
-                       else
-#endif
-                       u->d[1] = u->d[0] + ulp(u->d[0]);
-                       break;
-                 case STRTOG_Inexhi:
-                       u->d[1] = u->d[0];
-#ifdef Sudden_Underflow
-                       if ((u->L[_0] & 0x7ff00000) < 0x3500000) {
-                               u->L[_0] += 0x3500000;
-                               u->d[0] -= ulpdown(u->d);
-                               u->L[_0] -= 0x3500000;
-                               if (!(u->L[_0] & 0x7ff00000)) {
-                                       u->L[_0] = sign;
-                                       u->L[_1] = 0;
-                                       }
-                               }
-                       else
-#endif
-                       u->d[0] -= ulpdown(u->d);
-                       break;
-                 default:
-                       u->d[1] = u->d[0];
-                 }
-               break;
-
-         case STRTOG_Infinite:
-               u->L[_0] = u->L[2+_0] = sign | 0x7ff00000;
-               u->L[_1] = u->L[2+_1] = 0;
-               if (k & STRTOG_Inexact) {
-                       if (sign) {
-                               u->L[2+_0] = 0xffefffffL;
-                               u->L[2+_1] = 0xffffffffL;
-                               }
-                       else {
-                               u->L[_0] = 0x7fefffffL;
-                               u->L[_1] = 0xffffffffL;
-                               }
-                       }
-               break;
-
-         case STRTOG_NaN:
-               u->L[_0] = u->L[2+_0] = 0x7fffffff | sign;
-               u->L[_1] = u->L[2+_1] = (ULong)-1;
-               break;
-
-         case STRTOG_NaNbits:
-               u->L[_0] = u->L[2+_0] = 0x7ff00000 | sign | bits[1];
-               u->L[_1] = u->L[2+_1] = bits[0];
-         }
-       return k;
-       }
diff --git a/float/gdtoa/strtodg.c b/float/gdtoa/strtodg.c
deleted file mode 100644 (file)
index ec2cbfd..0000000
+++ /dev/null
@@ -1,1022 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
- static CONST int
-fivesbits[] = {         0,  3,  5,  7, 10, 12, 14, 17, 19, 21,
-               24, 26, 28, 31, 33, 35, 38, 40, 42, 45,
-               47, 49, 52
-#ifdef VAX
-               , 54, 56
-#endif
-               };
-
- Bigint *
-#ifdef KR_headers
-increment(b) Bigint *b;
-#else
-increment(Bigint *b)
-#endif
-{
-       ULong *x, *xe;
-       Bigint *b1;
-#ifdef USE_LOCALE
-       CONST char *s2;
-#endif
-#ifdef Pack_16
-       ULong carry = 1, y;
-#endif
-
-       x = b->x;
-       xe = x + b->wds;
-#ifdef Pack_32
-       do {
-               if (*x < (ULong)0xffffffffL) {
-                       ++*x;
-                       return b;
-                       }
-               *x++ = 0;
-               } while(x < xe);
-#else
-       do {
-               y = *x + carry;
-               carry = y >> 16;
-               *x++ = y & 0xffff;
-               if (!carry)
-                       return b;
-               } while(x < xe);
-       if (carry)
-#endif
-       {
-               if (b->wds >= b->maxwds) {
-                       b1 = Balloc(b->k+1);
-                       Bcopy(b1,b);
-                       Bfree(b);
-                       b = b1;
-                       }
-               b->x[b->wds++] = 1;
-               }
-       return b;
-       }
-
- int
-#ifdef KR_headers
-decrement(b) Bigint *b;
-#else
-decrement(Bigint *b)
-#endif
-{
-       ULong *x, *xe;
-#ifdef Pack_16
-       ULong borrow = 1, y;
-#endif
-
-       x = b->x;
-       xe = x + b->wds;
-#ifdef Pack_32
-       do {
-               if (*x) {
-                       --*x;
-                       break;
-                       }
-               *x++ = 0xffffffffL;
-               }
-               while(x < xe);
-#else
-       do {
-               y = *x - borrow;
-               borrow = (y & 0x10000) >> 16;
-               *x++ = y & 0xffff;
-               } while(borrow && x < xe);
-#endif
-       return STRTOG_Inexlo;
-       }
-
- static int
-#ifdef KR_headers
-all_on(b, n) Bigint *b; int n;
-#else
-all_on(Bigint *b, int n)
-#endif
-{
-       ULong *x, *xe;
-
-       x = b->x;
-       xe = x + (n >> kshift);
-       while(x < xe)
-               if ((*x++ & ALL_ON) != ALL_ON)
-                       return 0;
-       if (n &= kmask)
-               return ((*x | (ALL_ON << n)) & ALL_ON) == ALL_ON;
-       return 1;
-       }
-
- Bigint *
-#ifdef KR_headers
-set_ones(b, n) Bigint *b; int n;
-#else
-set_ones(Bigint *b, int n)
-#endif
-{
-       int k;
-       ULong *x, *xe;
-
-       k = (n + ((1 << kshift) - 1)) >> kshift;
-       if (b->k < k) {
-               Bfree(b);
-               b = Balloc(k);
-               }
-       k = n >> kshift;
-       if (n &= kmask)
-               k++;
-       b->wds = k;
-       x = b->x;
-       xe = x + k;
-       while(x < xe)
-               *x++ = ALL_ON;
-       if (n)
-               x[-1] >>= ULbits - n;
-       return b;
-       }
-
- static int
-rvOK
-#ifdef KR_headers
- (d, fpi, exp, bits, exact, rd, irv)
- double d; FPI *fpi; Long *exp; ULong *bits; int exact, rd, *irv;
-#else
- (double d, FPI *fpi, Long *exp, ULong *bits, int exact, int rd, int *irv)
-#endif
-{
-       Bigint *b;
-       ULong carry, inex, lostbits;
-       int bdif, e, j, k, k1, nb, rv;
-
-       carry = rv = 0;
-       b = d2b(d, &e, &bdif);
-       bdif -= nb = fpi->nbits;
-       e += bdif;
-       if (bdif <= 0) {
-               if (exact)
-                       goto trunc;
-               goto ret;
-               }
-       if (P == nb) {
-               if (
-#ifndef IMPRECISE_INEXACT
-                       exact &&
-#endif
-                       fpi->rounding ==
-#ifdef RND_PRODQUOT
-                                       FPI_Round_near
-#else
-                                       Flt_Rounds
-#endif
-                       ) goto trunc;
-               goto ret;
-               }
-       switch(rd) {
-         case 1:
-               goto trunc;
-         case 2:
-               break;
-         default: /* round near */
-               k = bdif - 1;
-               if (k < 0)
-                       goto trunc;
-               if (!k) {
-                       if (!exact)
-                               goto ret;
-                       if (b->x[0] & 2)
-                               break;
-                       goto trunc;
-                       }
-               if (b->x[k>>kshift] & ((ULong)1 << (k & kmask)))
-                       break;
-               goto trunc;
-         }
-       /* "break" cases: round up 1 bit, then truncate; bdif > 0 */
-       carry = 1;
- trunc:
-       inex = lostbits = 0;
-       if (bdif > 0) {
-               if ( (lostbits = any_on(b, bdif)) !=0)
-                       inex = STRTOG_Inexlo;
-               rshift(b, bdif);
-               if (carry) {
-                       inex = STRTOG_Inexhi;
-                       b = increment(b);
-                       if ( (j = nb & kmask) !=0)
-                               j = 32 - j;
-                       if (hi0bits(b->x[b->wds - 1]) != j) {
-                               if (!lostbits)
-                                       lostbits = b->x[0] & 1;
-                               rshift(b, 1);
-                               e++;
-                               }
-                       }
-               }
-       else if (bdif < 0)
-               b = lshift(b, -bdif);
-       if (e < fpi->emin) {
-               k = fpi->emin - e;
-               e = fpi->emin;
-               if (k > nb || fpi->sudden_underflow) {
-                       b->wds = inex = 0;
-                       *irv = STRTOG_Underflow | STRTOG_Inexlo;
-                       }
-               else {
-                       k1 = k - 1;
-                       if (k1 > 0 && !lostbits)
-                               lostbits = any_on(b, k1);
-                       if (!lostbits && !exact)
-                               goto ret;
-                       lostbits |=
-                         carry = b->x[k1>>kshift] & (1 << (k1 & kmask));
-                       rshift(b, k);
-                       *irv = STRTOG_Denormal;
-                       if (carry) {
-                               b = increment(b);
-                               inex = STRTOG_Inexhi | STRTOG_Underflow;
-                               }
-                       else if (lostbits)
-                               inex = STRTOG_Inexlo | STRTOG_Underflow;
-                       }
-               }
-       else if (e > fpi->emax) {
-               e = fpi->emax + 1;
-               *irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
-#ifndef NO_ERRNO
-               errno = ERANGE;
-#endif
-               b->wds = inex = 0;
-               }
-       *exp = e;
-       copybits(bits, nb, b);
-       *irv |= inex;
-       rv = 1;
- ret:
-       Bfree(b);
-       return rv;
-       }
-
- static int
-#ifdef KR_headers
-mantbits(d) double d;
-#else
-mantbits(double d)
-#endif
-{
-       ULong L;
-#ifdef VAX
-       L = word1(d) << 16 | word1(d) >> 16;
-       if (L)
-#else
-       if ( (L = word1(d)) !=0)
-#endif
-               return P - lo0bits(&L);
-#ifdef VAX
-       L = word0(d) << 16 | word0(d) >> 16 | Exp_msk11;
-#else
-       L = word0(d) | Exp_msk1;
-#endif
-       return P - 32 - lo0bits(&L);
-       }
-
- int
-strtodg
-#ifdef KR_headers
-       (s00, se, fpi, exp, bits)
-       CONST char *s00; char **se; FPI *fpi; Long *exp; ULong *bits;
-#else
-       (CONST char *s00, char **se, FPI *fpi, Long *exp, ULong *bits)
-#endif
-{
-       int abe, abits, asub;
-       int bb0, bb2, bb5, bbe, bd2, bd5, bbbits, bs2;
-       int c, denorm, dsign, e, e1, e2, emin, esign, finished, i, inex, irv;
-       int j, k, nbits, nd, nd0, nf, nz, nz0, rd, rvbits, rve, rve1, sign;
-       int sudden_underflow;
-       CONST char *s, *s0, *s1;
-       double adj, adj0, rv, tol;
-       Long L;
-       ULong y, z;
-       Bigint *ab, *bb, *bb1, *bd, *bd0, *bs, *delta, *rvb, *rvb0;
-
-       irv = STRTOG_Zero;
-       denorm = sign = nz0 = nz = 0;
-       dval(rv) = 0.;
-       rvb = 0;
-       nbits = fpi->nbits;
-       for(s = s00;;s++) switch(*s) {
-               case '-':
-                       sign = 1;
-                       /* no break */
-               case '+':
-                       if (*++s)
-                               goto break2;
-                       /* no break */
-               case 0:
-                       sign = 0;
-                       irv = STRTOG_NoNumber;
-                       s = s00;
-                       goto ret;
-               case '\t':
-               case '\n':
-               case '\v':
-               case '\f':
-               case '\r':
-               case ' ':
-                       continue;
-               default:
-                       goto break2;
-               }
- break2:
-       if (*s == '0') {
-#ifndef NO_HEX_FP
-               switch(s[1]) {
-                 case 'x':
-                 case 'X':
-                       irv = gethex(&s, fpi, exp, &rvb, sign);
-                       if (irv == STRTOG_NoNumber) {
-                               s = s00;
-                               sign = 0;
-                               }
-                       goto ret;
-                 }
-#endif
-               nz0 = 1;
-               while(*++s == '0') ;
-               if (!*s)
-                       goto ret;
-               }
-       sudden_underflow = fpi->sudden_underflow;
-       s0 = s;
-       y = z = 0;
-       for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
-               if (nd < 9)
-                       y = 10*y + c - '0';
-               else if (nd < 16)
-                       z = 10*z + c - '0';
-       nd0 = nd;
-#ifdef USE_LOCALE
-       s1 = localeconv()->decimal_point;
-       if (c == *s1) {
-               c = '.';
-               if (*++s1) {
-                       s2 = s;
-                       for(;;) {
-                               if (*++s2 != *s1) {
-                                       c = 0;
-                                       break;
-                                       }
-                               if (!*++s1) {
-                                       s = s2;
-                                       break;
-                                       }
-                               }
-                       }
-               }
-#endif
-       if (c == '.') {
-               c = *++s;
-               if (!nd) {
-                       for(; c == '0'; c = *++s)
-                               nz++;
-                       if (c > '0' && c <= '9') {
-                               s0 = s;
-                               nf += nz;
-                               nz = 0;
-                               goto have_dig;
-                               }
-                       goto dig_done;
-                       }
-               for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
-                       nz++;
-                       if (c -= '0') {
-                               nf += nz;
-                               for(i = 1; i < nz; i++)
-                                       if (nd++ < 9)
-                                               y *= 10;
-                                       else if (nd <= DBL_DIG + 1)
-                                               z *= 10;
-                               if (nd++ < 9)
-                                       y = 10*y + c;
-                               else if (nd <= DBL_DIG + 1)
-                                       z = 10*z + c;
-                               nz = 0;
-                               }
-                       }
-               }
- dig_done:
-       e = 0;
-       if (c == 'e' || c == 'E') {
-               if (!nd && !nz && !nz0) {
-                       irv = STRTOG_NoNumber;
-                       s = s00;
-                       goto ret;
-                       }
-               s00 = s;
-               esign = 0;
-               switch(c = *++s) {
-                       case '-':
-                               esign = 1;
-                       case '+':
-                               c = *++s;
-                       }
-               if (c >= '0' && c <= '9') {
-                       while(c == '0')
-                               c = *++s;
-                       if (c > '0' && c <= '9') {
-                               L = c - '0';
-                               s1 = s;
-                               while((c = *++s) >= '0' && c <= '9')
-                                       L = 10*L + c - '0';
-                               if (s - s1 > 8 || L > 19999)
-                                       /* Avoid confusion from exponents
-                                        * so large that e might overflow.
-                                        */
-                                       e = 19999; /* safe for 16 bit ints */
-                               else
-                                       e = (int)L;
-                               if (esign)
-                                       e = -e;
-                               }
-                       else
-                               e = 0;
-                       }
-               else
-                       s = s00;
-               }
-       if (!nd) {
-               if (!nz && !nz0) {
-#ifdef INFNAN_CHECK
-                       /* Check for Nan and Infinity */
-                       switch(c) {
-                         case 'i':
-                         case 'I':
-                               if (match(&s,"nf")) {
-                                       --s;
-                                       if (!match(&s,"inity"))
-                                               ++s;
-                                       irv = STRTOG_Infinite;
-                                       goto infnanexp;
-                                       }
-                               break;
-                         case 'n':
-                         case 'N':
-                               if (match(&s, "an")) {
-                                       irv = STRTOG_NaN;
-                                       *exp = fpi->emax + 1;
-#ifndef No_Hex_NaN
-                                       if (*s == '(') /*)*/
-                                               irv = hexnan(&s, fpi, bits);
-#endif
-                                       goto infnanexp;
-                                       }
-                         }
-#endif /* INFNAN_CHECK */
-                       irv = STRTOG_NoNumber;
-                       s = s00;
-                       }
-               goto ret;
-               }
-
-       irv = STRTOG_Normal;
-       e1 = e -= nf;
-       rd = 0;
-       switch(fpi->rounding & 3) {
-         case FPI_Round_up:
-               rd = 2 - sign;
-               break;
-         case FPI_Round_zero:
-               rd = 1;
-               break;
-         case FPI_Round_down:
-               rd = 1 + sign;
-         }
-
-       /* Now we have nd0 digits, starting at s0, followed by a
-        * decimal point, followed by nd-nd0 digits.  The number we're
-        * after is the integer represented by those digits times
-        * 10**e */
-
-       if (!nd0)
-               nd0 = nd;
-       k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
-       dval(rv) = y;
-       if (k > 9)
-               dval(rv) = tens[k - 9] * dval(rv) + z;
-       bd0 = 0;
-       if (nbits <= P && nd <= DBL_DIG) {
-               if (!e) {
-                       if (rvOK(dval(rv), fpi, exp, bits, 1, rd, &irv))
-                               goto ret;
-                       }
-               else if (e > 0) {
-                       if (e <= Ten_pmax) {
-#ifdef VAX
-                               goto vax_ovfl_check;
-#else
-                               i = fivesbits[e] + mantbits(dval(rv)) <= P;
-                               /* rv = */ rounded_product(dval(rv), tens[e]);
-                               if (rvOK(dval(rv), fpi, exp, bits, i, rd, &irv))
-                                       goto ret;
-                               e1 -= e;
-                               goto rv_notOK;
-#endif
-                               }
-                       i = DBL_DIG - nd;
-                       if (e <= Ten_pmax + i) {
-                               /* A fancier test would sometimes let us do
-                                * this for larger i values.
-                                */
-                               e2 = e - i;
-                               e1 -= i;
-                               dval(rv) *= tens[i];
-#ifdef VAX
-                               /* VAX exponent range is so narrow we must
-                                * worry about overflow here...
-                                */
- vax_ovfl_check:
-                               dval(adj) = dval(rv);
-                               word0(adj) -= P*Exp_msk1;
-                               /* adj = */ rounded_product(dval(adj), tens[e2]);
-                               if ((word0(adj) & Exp_mask)
-                                > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
-                                       goto rv_notOK;
-                               word0(adj) += P*Exp_msk1;
-                               dval(rv) = dval(adj);
-#else
-                               /* rv = */ rounded_product(dval(rv), tens[e2]);
-#endif
-                               if (rvOK(dval(rv), fpi, exp, bits, 0, rd, &irv))
-                                       goto ret;
-                               e1 -= e2;
-                               }
-                       }
-#ifndef Inaccurate_Divide
-               else if (e >= -Ten_pmax) {
-                       /* rv = */ rounded_quotient(dval(rv), tens[-e]);
-                       if (rvOK(dval(rv), fpi, exp, bits, 0, rd, &irv))
-                               goto ret;
-                       e1 -= e;
-                       }
-#endif
-               }
- rv_notOK:
-       e1 += nd - k;
-
-       /* Get starting approximation = rv * 10**e1 */
-
-       e2 = 0;
-       if (e1 > 0) {
-               if ( (i = e1 & 15) !=0)
-                       dval(rv) *= tens[i];
-               if (e1 &= ~15) {
-                       e1 >>= 4;
-                       while(e1 >= (1 << n_bigtens-1)) {
-                               e2 += ((word0(rv) & Exp_mask)
-                                       >> Exp_shift1) - Bias;
-                               word0(rv) &= ~Exp_mask;
-                               word0(rv) |= Bias << Exp_shift1;
-                               dval(rv) *= bigtens[n_bigtens-1];
-                               e1 -= 1 << n_bigtens-1;
-                               }
-                       e2 += ((word0(rv) & Exp_mask) >> Exp_shift1) - Bias;
-                       word0(rv) &= ~Exp_mask;
-                       word0(rv) |= Bias << Exp_shift1;
-                       for(j = 0; e1 > 0; j++, e1 >>= 1)
-                               if (e1 & 1)
-                                       dval(rv) *= bigtens[j];
-                       }
-               }
-       else if (e1 < 0) {
-               e1 = -e1;
-               if ( (i = e1 & 15) !=0)
-                       dval(rv) /= tens[i];
-               if (e1 &= ~15) {
-                       e1 >>= 4;
-                       while(e1 >= (1 << n_bigtens-1)) {
-                               e2 += ((word0(rv) & Exp_mask)
-                                       >> Exp_shift1) - Bias;
-                               word0(rv) &= ~Exp_mask;
-                               word0(rv) |= Bias << Exp_shift1;
-                               dval(rv) *= tinytens[n_bigtens-1];
-                               e1 -= 1 << n_bigtens-1;
-                               }
-                       e2 += ((word0(rv) & Exp_mask) >> Exp_shift1) - Bias;
-                       word0(rv) &= ~Exp_mask;
-                       word0(rv) |= Bias << Exp_shift1;
-                       for(j = 0; e1 > 0; j++, e1 >>= 1)
-                               if (e1 & 1)
-                                       dval(rv) *= tinytens[j];
-                       }
-               }
-
-       rvb = d2b(dval(rv), &rve, &rvbits);     /* rv = rvb * 2^rve */
-       rve += e2;
-       if ((j = rvbits - nbits) > 0) {
-               rshift(rvb, j);
-               rvbits = nbits;
-               rve += j;
-               }
-       bb0 = 0;        /* trailing zero bits in rvb */
-       e2 = rve + rvbits - nbits;
-       if (e2 > fpi->emax) {
-               rvb->wds = 0;
-               irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
-#ifndef NO_ERRNO
-               errno = ERANGE;
-#endif
- infnanexp:
-               *exp = fpi->emax + 1;
-               goto ret;
-               }
-       rve1 = rve + rvbits - nbits;
-       if (e2 < (emin = fpi->emin)) {
-               denorm = 1;
-               j = rve - emin;
-               if (j > 0) {
-                       rvb = lshift(rvb, j);
-                       rvbits += j;
-                       }
-               else if (j < 0) {
-                       rvbits += j;
-                       if (rvbits <= 0) {
-                               if (rvbits < -1) {
- ufl:
-                                       rvb->wds = 0;
-                                       rvb->x[0] = 0;
-                                       *exp = emin;
-                                       irv = STRTOG_Underflow | STRTOG_Inexlo;
-                                       goto ret;
-                                       }
-                               rvb->x[0] = rvb->wds = rvbits = 1;
-                               }
-                       else
-                               rshift(rvb, -j);
-                       }
-               rve = rve1 = emin;
-               if (sudden_underflow && e2 + 1 < emin)
-                       goto ufl;
-               }
-
-       /* Now the hard part -- adjusting rv to the correct value.*/
-
-       /* Put digits into bd: true value = bd * 10^e */
-
-       bd0 = s2b(s0, nd0, nd, y);
-
-       for(;;) {
-               bd = Balloc(bd0->k);
-               Bcopy(bd, bd0);
-               bb = Balloc(rvb->k);
-               Bcopy(bb, rvb);
-               bbbits = rvbits - bb0;
-               bbe = rve + bb0;
-               bs = i2b(1);
-
-               if (e >= 0) {
-                       bb2 = bb5 = 0;
-                       bd2 = bd5 = e;
-                       }
-               else {
-                       bb2 = bb5 = -e;
-                       bd2 = bd5 = 0;
-                       }
-               if (bbe >= 0)
-                       bb2 += bbe;
-               else
-                       bd2 -= bbe;
-               bs2 = bb2;
-               j = nbits + 1 - bbbits;
-               i = bbe + bbbits - nbits;
-               if (i < emin)   /* denormal */
-                       j += i - emin;
-               bb2 += j;
-               bd2 += j;
-               i = bb2 < bd2 ? bb2 : bd2;
-               if (i > bs2)
-                       i = bs2;
-               if (i > 0) {
-                       bb2 -= i;
-                       bd2 -= i;
-                       bs2 -= i;
-                       }
-               if (bb5 > 0) {
-                       bs = pow5mult(bs, bb5);
-                       bb1 = mult(bs, bb);
-                       Bfree(bb);
-                       bb = bb1;
-                       }
-               bb2 -= bb0;
-               if (bb2 > 0)
-                       bb = lshift(bb, bb2);
-               else if (bb2 < 0)
-                       rshift(bb, -bb2);
-               if (bd5 > 0)
-                       bd = pow5mult(bd, bd5);
-               if (bd2 > 0)
-                       bd = lshift(bd, bd2);
-               if (bs2 > 0)
-                       bs = lshift(bs, bs2);
-               asub = 1;
-               inex = STRTOG_Inexhi;
-               delta = diff(bb, bd);
-               if (delta->wds <= 1 && !delta->x[0])
-                       break;
-               dsign = delta->sign;
-               delta->sign = finished = 0;
-               L = 0;
-               i = cmp(delta, bs);
-               if (rd && i <= 0) {
-                       irv = STRTOG_Normal;
-                       if ( (finished = dsign ^ (rd&1)) !=0) {
-                               if (dsign != 0) {
-                                       irv |= STRTOG_Inexhi;
-                                       goto adj1;
-                                       }
-                               irv |= STRTOG_Inexlo;
-                               if (rve1 == emin)
-                                       goto adj1;
-                               for(i = 0, j = nbits; j >= ULbits;
-                                               i++, j -= ULbits) {
-                                       if (rvb->x[i] & ALL_ON)
-                                               goto adj1;
-                                       }
-                               if (j > 1 && lo0bits(rvb->x + i) < j - 1)
-                                       goto adj1;
-                               rve = rve1 - 1;
-                               rvb = set_ones(rvb, rvbits = nbits);
-                               break;
-                               }
-                       irv |= dsign ? STRTOG_Inexlo : STRTOG_Inexhi;
-                       break;
-                       }
-               if (i < 0) {
-                       /* Error is less than half an ulp -- check for
-                        * special case of mantissa a power of two.
-                        */
-                       irv = dsign
-                               ? STRTOG_Normal | STRTOG_Inexlo
-                               : STRTOG_Normal | STRTOG_Inexhi;
-                       if (dsign || bbbits > 1 || denorm || rve1 == emin)
-                               break;
-                       delta = lshift(delta,1);
-                       if (cmp(delta, bs) > 0) {
-                               irv = STRTOG_Normal | STRTOG_Inexlo;
-                               goto drop_down;
-                               }
-                       break;
-                       }
-               if (i == 0) {
-                       /* exactly half-way between */
-                       if (dsign) {
-                               if (denorm && all_on(rvb, rvbits)) {
-                                       /*boundary case -- increment exponent*/
-                                       rvb->wds = 1;
-                                       rvb->x[0] = 1;
-                                       rve = emin + nbits - (rvbits = 1);
-                                       irv = STRTOG_Normal | STRTOG_Inexhi;
-                                       denorm = 0;
-                                       break;
-                                       }
-                               irv = STRTOG_Normal | STRTOG_Inexlo;
-                               }
-                       else if (bbbits == 1) {
-                               irv = STRTOG_Normal;
- drop_down:
-                               /* boundary case -- decrement exponent */
-                               if (rve1 == emin) {
-                                       irv = STRTOG_Normal | STRTOG_Inexhi;
-                                       if (rvb->wds == 1 && rvb->x[0] == 1)
-                                               sudden_underflow = 1;
-                                       break;
-                                       }
-                               rve -= nbits;
-                               rvb = set_ones(rvb, rvbits = nbits);
-                               break;
-                               }
-                       else
-                               irv = STRTOG_Normal | STRTOG_Inexhi;
-                       if (bbbits < nbits && !denorm || !(rvb->x[0] & 1))
-                               break;
-                       if (dsign) {
-                               rvb = increment(rvb);
-                               if ( (j = rvbits >> kshift) !=0)
-                                       j = 32 - j;
-                               if (hi0bits(rvb->x[(rvb->wds - 1) >> kshift])
-                                               != j)
-                                       rvbits++;
-                               irv = STRTOG_Normal | STRTOG_Inexhi;
-                               }
-                       else {
-                               if (bbbits == 1)
-                                       goto undfl;
-                               decrement(rvb);
-                               irv = STRTOG_Normal | STRTOG_Inexlo;
-                               }
-                       break;
-                       }
-               if ((dval(adj) = ratio(delta, bs)) <= 2.) {
- adj1:
-                       inex = STRTOG_Inexlo;
-                       if (dsign) {
-                               asub = 0;
-                               inex = STRTOG_Inexhi;
-                               }
-                       else if (denorm && bbbits <= 1) {
- undfl:
-                               rvb->wds = 0;
-                               rve = emin;
-                               irv = STRTOG_Underflow | STRTOG_Inexlo;
-                               break;
-                               }
-                       adj0 = dval(adj) = 1.;
-                       }
-               else {
-                       adj0 = dval(adj) *= 0.5;
-                       if (dsign) {
-                               asub = 0;
-                               inex = STRTOG_Inexlo;
-                               }
-                       if (dval(adj) < 2147483647.) {
-                               L = adj0;
-                               adj0 -= L;
-                               switch(rd) {
-                                 case 0:
-                                       if (adj0 >= .5)
-                                               goto inc_L;
-                                       break;
-                                 case 1:
-                                       if (asub && adj0 > 0.)
-                                               goto inc_L;
-                                       break;
-                                 case 2:
-                                       if (!asub && adj0 > 0.) {
- inc_L:
-                                               L++;
-                                               inex = STRTOG_Inexact - inex;
-                                               }
-                                 }
-                               dval(adj) = L;
-                               }
-                       }
-               y = rve + rvbits;
-
-               /* adj *= ulp(dval(rv)); */
-               /* if (asub) rv -= adj; else rv += adj; */
-
-               if (!denorm && rvbits < nbits) {
-                       rvb = lshift(rvb, j = nbits - rvbits);
-                       rve -= j;
-                       rvbits = nbits;
-                       }
-               ab = d2b(dval(adj), &abe, &abits);
-               if (abe < 0)
-                       rshift(ab, -abe);
-               else if (abe > 0)
-                       ab = lshift(ab, abe);
-               rvb0 = rvb;
-               if (asub) {
-                       /* rv -= adj; */
-                       j = hi0bits(rvb->x[rvb->wds-1]);
-                       rvb = diff(rvb, ab);
-                       k = rvb0->wds - 1;
-                       if (denorm)
-                               /* do nothing */;
-                       else if (rvb->wds <= k
-                               || hi0bits( rvb->x[k]) >
-                                  hi0bits(rvb0->x[k])) {
-                               /* unlikely; can only have lost 1 high bit */
-                               if (rve1 == emin) {
-                                       --rvbits;
-                                       denorm = 1;
-                                       }
-                               else {
-                                       rvb = lshift(rvb, 1);
-                                       --rve;
-                                       --rve1;
-                                       L = finished = 0;
-                                       }
-                               }
-                       }
-               else {
-                       rvb = sum(rvb, ab);
-                       k = rvb->wds - 1;
-                       if (k >= rvb0->wds
-                        || hi0bits(rvb->x[k]) < hi0bits(rvb0->x[k])) {
-                               if (denorm) {
-                                       if (++rvbits == nbits)
-                                               denorm = 0;
-                                       }
-                               else {
-                                       rshift(rvb, 1);
-                                       rve++;
-                                       rve1++;
-                                       L = 0;
-                                       }
-                               }
-                       }
-               Bfree(ab);
-               Bfree(rvb0);
-               if (finished)
-                       break;
-
-               z = rve + rvbits;
-               if (y == z && L) {
-                       /* Can we stop now? */
-                       tol = dval(adj) * 5e-16; /* > max rel error */
-                       dval(adj) = adj0 - .5;
-                       if (dval(adj) < -tol) {
-                               if (adj0 > tol) {
-                                       irv |= inex;
-                                       break;
-                                       }
-                               }
-                       else if (dval(adj) > tol && adj0 < 1. - tol) {
-                               irv |= inex;
-                               break;
-                               }
-                       }
-               bb0 = denorm ? 0 : trailz(rvb);
-               Bfree(bb);
-               Bfree(bd);
-               Bfree(bs);
-               Bfree(delta);
-               }
-       if (!denorm && rvbits < nbits) {
-               j = nbits - rvbits;
-               rvb = lshift(rvb, j);
-               rve -= j;
-               }
-       *exp = rve;
-       Bfree(bb);
-       Bfree(bd);
-       Bfree(bs);
-       Bfree(bd0);
-       Bfree(delta);
- ret:
-       if (denorm) {
-               if (sudden_underflow) {
-                       rvb->wds = 0;
-                       irv = STRTOG_Underflow | STRTOG_Inexlo;
-                       }
-               else  {
-                       irv = (irv & ~STRTOG_Retmask) |
-                               (rvb->wds > 0 ? STRTOG_Denormal : STRTOG_Zero);
-                       if (irv & STRTOG_Inexact)
-                               irv |= STRTOG_Underflow;
-                       }
-               }
-       if (se)
-               *se = (char *)s;
-       if (sign)
-               irv |= STRTOG_Neg;
-       if (rvb) {
-               copybits(bits, nbits, rvb);
-               Bfree(rvb);
-               }
-       return irv;
-       }
diff --git a/float/gdtoa/strtof.c b/float/gdtoa/strtof.c
deleted file mode 100644 (file)
index bb283ae..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- float
-#ifdef KR_headers
-strtof(s, sp) CONST char *s; char **sp;
-#else
-strtof(CONST char *s, char **sp)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, 1 };
-#else
-       static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, 0 };
-#endif
-       ULong bits[1];
-       Long exp;
-       int k;
-       union { ULong L[1]; float f; } u;
-
-       k = strtodg(s, sp, &fpi, &exp, bits);
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               u.L[0] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_NaNbits:
-               u.L[0] = bits[0] & 0x7fffff | exp + 0x7f + 23 << 23;
-               break;
-
-         case STRTOG_Denormal:
-               u.L[0] = bits[0];
-               break;
-
-         case STRTOG_Infinite:
-               u.L[0] = 0x7f800000;
-               break;
-
-         case STRTOG_NaN:
-               u.L[0] = 0x7fffffff;
-         }
-       if (k & STRTOG_Neg)
-               u.L[0] |= 0x80000000L;
-       return u.f;
-       }
diff --git a/float/gdtoa/strtopQ.c b/float/gdtoa/strtopQ.c
deleted file mode 100644 (file)
index 4bcc581..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#endif
-#ifdef IEEE_8087
-#define _0 3
-#define _1 2
-#define _2 1
-#define _3 0
-#endif
-
- int
-#ifdef KR_headers
-strtopQ(s, sp, V) CONST char *s; char **sp; void *V;
-#else
-strtopQ(CONST char *s, char **sp, void *V)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 1 };
-#else
-       static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0 };
-#endif
-       ULong bits[4];
-       Long exp;
-       int k;
-       ULong *L = (ULong*)V;
-
-       k = strtodg(s, sp, &fpi, &exp, bits);
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = L[3] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_NaNbits:
-               L[_3] = bits[0];
-               L[_2] = bits[1];
-               L[_1] = bits[2];
-               L[_0] = (bits[3] & ~0x10000) | ((exp + 0x3fff + 112) << 16);
-               break;
-
-         case STRTOG_Denormal:
-               L[_3] = bits[0];
-               L[_2] = bits[1];
-               L[_1] = bits[2];
-               L[_0] = bits[3];
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7fff0000;
-               L[_1] = L[_2] = L[_3] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fffffff;
-               L[_1] = L[_2] = L[_3] = (ULong)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x80000000L;
-       return k;
-       }
diff --git a/float/gdtoa/strtopd.c b/float/gdtoa/strtopd.c
deleted file mode 100644 (file)
index 54e0838..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtopd(s, sp, d) char *s; char **sp; double *d;
-#else
-strtopd(CONST char *s, char **sp, double *d)
-#endif
-{
-       static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
-       ULong bits[2];
-       Long exp;
-       int k;
-
-       k = strtodg(s, sp, &fpi0, &exp, bits);
-       ULtod((ULong*)d, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/strtopdd.c b/float/gdtoa/strtopdd.c
deleted file mode 100644 (file)
index f71bced..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtopdd(s, sp, dd) CONST char *s; char **sp; double *dd;
-#else
-strtopdd(CONST char *s, char **sp, double *dd)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 106, 1-1023, 2046-1023-106+1, 1, 1 };
-#else
-       static FPI fpi = { 106, 1-1023-53+1, 2046-1023-106+1, 1, 0 };
-#endif
-       ULong bits[4];
-       Long exp;
-       int i, j, rv;
-       typedef union {
-               double d[2];
-               ULong L[4];
-               } U;
-       U *u;
-
-       rv = strtodg(s, sp, &fpi, &exp, bits);
-       u = (U*)dd;
-       switch(rv & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               u->d[0] = u->d[1] = 0.;
-               break;
-
-         case STRTOG_Normal:
-               u->L[_1] = (bits[1] >> 21 | bits[2] << 11) & 0xffffffffL;
-               u->L[_0] = bits[2] >> 21 | bits[3] << 11 & 0xfffff
-                         | exp + 0x3ff + 105 << 20;
-               exp += 0x3ff + 52;
-               if (bits[1] &= 0x1fffff) {
-                       i = hi0bits(bits[1]) - 11;
-                       if (i >= exp) {
-                               i = exp - 1;
-                               exp = 0;
-                               }
-                       else
-                               exp -= i;
-                       if (i > 0) {
-                               bits[1] = bits[1] << i | bits[0] >> 32-i;
-                               bits[0] = bits[0] << i & 0xffffffffL;
-                               }
-                       }
-               else if (bits[0]) {
-                       i = hi0bits(bits[0]) + 21;
-                       if (i >= exp) {
-                               i = exp - 1;
-                               exp = 0;
-                               }
-                       else
-                               exp -= i;
-                       if (i < 32) {
-                               bits[1] = bits[0] >> 32 - i;
-                               bits[0] = bits[0] << i & 0xffffffffL;
-                               }
-                       else {
-                               bits[1] = bits[0] << i - 32;
-                               bits[0] = 0;
-                               }
-                       }
-               else {
-                       u->L[2] = u->L[3] = 0;
-                       break;
-                       }
-               u->L[2+_1] = bits[0];
-               u->L[2+_0] = bits[1] & 0xfffff | exp << 20;
-               break;
-
-         case STRTOG_Denormal:
-               if (bits[3])
-                       goto nearly_normal;
-               if (bits[2])
-                       goto partly_normal;
-               if (bits[1] & 0xffe00000)
-                       goto hardly_normal;
-               /* completely denormal */
-               u->L[2] = u->L[3] = 0;
-               u->L[_1] = bits[0];
-               u->L[_0] = bits[1];
-               break;
-
-         nearly_normal:
-               i = hi0bits(bits[3]) - 11;      /* i >= 12 */
-               j = 32 - i;
-               u->L[_0] = (bits[3] << i | bits[2] >> j) & 0xfffff
-                       | 65 - i << 20;
-               u->L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL;
-               u->L[2+_0] = bits[1] & (1L << j) - 1;
-               u->L[2+_1] = bits[0];
-               break;
-
-         partly_normal:
-               i = hi0bits(bits[2]) - 11;
-               if (i < 0) {
-                       j = -i;
-                       i += 32;
-                       u->L[_0] = bits[2] >> j & 0xfffff | (33 + j) << 20;
-                       u->L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL;
-                       u->L[2+_0] = bits[1] & (1L << j) - 1;
-                       u->L[2+_1] = bits[0];
-                       break;
-                       }
-               if (i == 0) {
-                       u->L[_0] = bits[2] & 0xfffff | 33 << 20;
-                       u->L[_1] = bits[1];
-                       u->L[2+_0] = 0;
-                       u->L[2+_1] = bits[0];
-                       break;
-                       }
-               j = 32 - i;
-               u->L[_0] = (bits[2] << i | bits[1] >> j) & 0xfffff
-                               | j + 1 << 20;
-               u->L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL;
-               u->L[2+_0] = 0;
-               u->L[2+_1] = bits[0] & (1L << j) - 1;
-               break;
-
-         hardly_normal:
-               j = 11 - hi0bits(bits[1]);
-               i = 32 - j;
-               u->L[_0] = bits[1] >> j & 0xfffff | j + 1 << 20;
-               u->L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL;
-               u->L[2+_0] = 0;
-               u->L[2+_1] = bits[0] & (1L << j) - 1;
-               break;
-
-         case STRTOG_Infinite:
-               u->L[_0] = u->L[2+_0] = 0x7ff00000;
-               u->L[_1] = u->L[2+_1] = 0;
-               break;
-
-         case STRTOG_NaN:
-               u->L[_0] = u->L[2+_0] = 0x7fffffff;
-               u->L[_1] = u->L[2+_1] = (ULong)-1;
-         }
-       if (rv & STRTOG_Neg) {
-               u->L[  _0] |= 0x80000000L;
-               u->L[2+_0] |= 0x80000000L;
-               }
-       return rv;
-       }
diff --git a/float/gdtoa/strtopf.c b/float/gdtoa/strtopf.c
deleted file mode 100644 (file)
index c49fc96..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- int
-#ifdef KR_headers
-strtopf(s, sp, f) CONST char *s; char **sp; float *f;
-#else
-strtopf(CONST char *s, char **sp, float *f)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, 1 };
-#else
-       static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, 0 };
-#endif
-       ULong bits[1], *L;
-       Long exp;
-       int k;
-
-       k = strtodg(s, sp, &fpi, &exp, bits);
-       L = (ULong*)f;
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_NaNbits:
-               L[0] = bits[0] & 0x7fffff | exp + 0x7f + 23 << 23;
-               break;
-
-         case STRTOG_Denormal:
-               L[0] = bits[0];
-               break;
-
-         case STRTOG_Infinite:
-               L[0] = 0x7f800000;
-               break;
-
-         case STRTOG_NaN:
-               L[0] = 0x7fffffff;
-         }
-       if (k & STRTOG_Neg)
-               L[0] |= 0x80000000L;
-       return k;
-       }
diff --git a/float/gdtoa/strtopx.c b/float/gdtoa/strtopx.c
deleted file mode 100644 (file)
index 190b80f..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_8087
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
- int
-#ifdef KR_headers
-strtopx(s, sp, V) CONST char *s; char **sp; void *V;
-#else
-strtopx(CONST char *s, char **sp, void *V)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 1 };
-#else
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
-#endif
-       ULong bits[2];
-       Long exp;
-       int k;
-       UShort *L = (UShort*)V;
-
-       k = strtodg(s, sp, &fpi, &exp, bits);
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = L[3] = L[4] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_Denormal:
-         case STRTOG_NaNbits:
-               L[_4] = (UShort)bits[0];
-               L[_3] = (UShort)(bits[0] >> 16);
-               L[_2] = (UShort)bits[1];
-               L[_1] = (UShort)(bits[1] >> 16);
-               L[_0] = exp + 0x3fff + 63;
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7fff;
-               L[_1] = L[_2] = L[_3] = L[_4] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fff;
-               L[_1] = L[_2] = L[_3] = L[_4] = (UShort)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x8000;
-       return k;
-       }
diff --git a/float/gdtoa/strtopxL.c b/float/gdtoa/strtopxL.c
deleted file mode 100644 (file)
index 95fd3d5..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#endif
-#ifdef IEEE_8087
-#define _0 2
-#define _1 1
-#define _2 0
-#endif
-
- int
-#ifdef KR_headers
-strtopxL(s, sp, V) CONST char *s; char **sp; void *V;
-#else
-strtopxL(CONST char *s, char **sp, void *V)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 1 };
-#else
-       static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
-#endif
-       ULong bits[2];
-       Long exp;
-       int k;
-       ULong *L = (ULong*)V;
-
-       k = strtodg(s, sp, &fpi, &exp, bits);
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_Denormal:
-         case STRTOG_NaNbits:
-               L[_2] = bits[0];
-               L[_1] = bits[1];
-               L[_0] = (exp + 0x3fff + 63) << 16;
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7fff << 16;
-               L[_1] = L[_2] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fff << 16;
-               L[_1] = L[_2] = (ULong)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x80000000L;
-       return k;
-       }
diff --git a/float/gdtoa/strtorQ.c b/float/gdtoa/strtorQ.c
deleted file mode 100644 (file)
index 63a7b6a..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#endif
-#ifdef IEEE_8087
-#define _0 3
-#define _1 2
-#define _2 1
-#define _3 0
-#endif
-
- void
-#ifdef KR_headers
-ULtoQ(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k;
-#else
-ULtoQ(ULong *L, ULong *bits, Long exp, int k)
-#endif
-{
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = L[3] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_NaNbits:
-               L[_3] = bits[0];
-               L[_2] = bits[1];
-               L[_1] = bits[2];
-               L[_0] = (bits[3] & ~0x10000) | ((exp + 0x3fff + 112) << 16);
-               break;
-
-         case STRTOG_Denormal:
-               L[_3] = bits[0];
-               L[_2] = bits[1];
-               L[_1] = bits[2];
-               L[_0] = bits[3];
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7fff0000;
-               L[_1] = L[_2] = L[_3] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fffffff;
-               L[_1] = L[_2] = L[_3] = (ULong)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x80000000L;
-       }
-
- int
-#ifdef KR_headers
-strtorQ(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
-#else
-strtorQ(CONST char *s, char **sp, int rounding, void *L)
-#endif
-{
-       static FPI fpi0 = { 113, 1-16383-113+1, 32766-16383-113+1, 1, SI };
-       FPI *fpi, fpi1;
-       ULong bits[4];
-       Long exp;
-       int k;
-
-       fpi = &fpi0;
-       if (rounding != FPI_Round_near) {
-               fpi1 = fpi0;
-               fpi1.rounding = rounding;
-               fpi = &fpi1;
-               }
-       k = strtodg(s, sp, fpi, &exp, bits);
-       ULtoQ((ULong*)L, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/strtord.c b/float/gdtoa/strtord.c
deleted file mode 100644 (file)
index 12213f9..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- void
-#ifdef KR_headers
-ULtod(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k;
-#else
-ULtod(ULong *L, ULong *bits, Long exp, int k)
-#endif
-{
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = 0;
-               break;
-
-         case STRTOG_Denormal:
-               L[_1] = bits[0];
-               L[_0] = bits[1];
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_NaNbits:
-               L[_1] = bits[0];
-               L[_0] = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20);
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7ff00000;
-               L[_1] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fffffff;
-               L[_1] = (ULong)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x80000000L;
-       }
-
- int
-#ifdef KR_headers
-strtord(s, sp, rounding, d) CONST char *s; char **sp; int rounding; double *d;
-#else
-strtord(CONST char *s, char **sp, int rounding, double *d)
-#endif
-{
-       static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
-       FPI *fpi, fpi1;
-       ULong bits[2];
-       Long exp;
-       int k;
-
-       fpi = &fpi0;
-       if (rounding != FPI_Round_near) {
-               fpi1 = fpi0;
-               fpi1.rounding = rounding;
-               fpi = &fpi1;
-               }
-       k = strtodg(s, sp, fpi, &exp, bits);
-       ULtod((ULong*)d, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/strtordd.c b/float/gdtoa/strtordd.c
deleted file mode 100644 (file)
index 626a4d3..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- void
-#ifdef KR_headers
-ULtodd(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k;
-#else
-ULtodd(ULong *L, ULong *bits, Long exp, int k)
-#endif
-{
-       int i, j;
-
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = L[3] = 0;
-               break;
-
-         case STRTOG_Normal:
-               L[_1] = (bits[1] >> 21 | bits[2] << 11) & (ULong)0xffffffffL;
-               L[_0] = bits[2] >> 21 | bits[3] << 11 & 0xfffff
-                         | exp + 0x3ff + 105 << 20;
-               exp += 0x3ff + 52;
-               if (bits[1] &= 0x1fffff) {
-                       i = hi0bits(bits[1]) - 11;
-                       if (i >= exp) {
-                               i = exp - 1;
-                               exp = 0;
-                               }
-                       else
-                               exp -= i;
-                       if (i > 0) {
-                               bits[1] = bits[1] << i | bits[0] >> 32-i;
-                               bits[0] = bits[0] << i & (ULong)0xffffffffL;
-                               }
-                       }
-               else if (bits[0]) {
-                       i = hi0bits(bits[0]) + 21;
-                       if (i >= exp) {
-                               i = exp - 1;
-                               exp = 0;
-                               }
-                       else
-                               exp -= i;
-                       if (i < 32) {
-                               bits[1] = bits[0] >> 32 - i;
-                               bits[0] = bits[0] << i & (ULong)0xffffffffL;
-                               }
-                       else {
-                               bits[1] = bits[0] << i - 32;
-                               bits[0] = 0;
-                               }
-                       }
-               else {
-                       L[2] = L[3] = 0;
-                       break;
-                       }
-               L[2+_1] = bits[0];
-               L[2+_0] = bits[1] & 0xfffff | exp << 20;
-               break;
-
-         case STRTOG_Denormal:
-               if (bits[3])
-                       goto nearly_normal;
-               if (bits[2])
-                       goto partly_normal;
-               if (bits[1] & 0xffe00000)
-                       goto hardly_normal;
-               /* completely denormal */
-               L[2] = L[3] = 0;
-               L[_1] = bits[0];
-               L[_0] = bits[1];
-               break;
-
-         nearly_normal:
-               i = hi0bits(bits[3]) - 11;      /* i >= 12 */
-               j = 32 - i;
-               L[_0] = (bits[3] << i | bits[2] >> j) & 0xfffff
-                       | 65 - i << 20;
-               L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL;
-               L[2+_0] = bits[1] & ((ULong)1L << j) - 1;
-               L[2+_1] = bits[0];
-               break;
-
-         partly_normal:
-               i = hi0bits(bits[2]) - 11;
-               if (i < 0) {
-                       j = -i;
-                       i += 32;
-                       L[_0] = bits[2] >> j & 0xfffff | (33 + j) << 20;
-                       L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL;
-                       L[2+_0] = bits[1] & ((ULong)1L << j) - 1;
-                       L[2+_1] = bits[0];
-                       break;
-                       }
-               if (i == 0) {
-                       L[_0] = bits[2] & 0xfffff | 33 << 20;
-                       L[_1] = bits[1];
-                       L[2+_0] = 0;
-                       L[2+_1] = bits[0];
-                       break;
-                       }
-               j = 32 - i;
-               L[_0] = (bits[2] << i | bits[1] >> j) & 0xfffff
-                               | j + 1 << 20;
-               L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL;
-               L[2+_0] = 0;
-               L[2+_1] = bits[0] & (1L << j) - 1;
-               break;
-
-         hardly_normal:
-               j = 11 - hi0bits(bits[1]);
-               i = 32 - j;
-               L[_0] = bits[1] >> j & 0xfffff | j + 1 << 20;
-               L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL;
-               L[2+_0] = 0;
-               L[2+_1] = bits[0] & ((ULong)1L << j) - 1;
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = L[2+_0] = 0x7ff00000;
-               L[_1] = L[2+_1] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = L[2+_0] = 0x7fffffff;
-               L[_1] = L[2+_1] = (ULong)-1;
-               break;
-
-         case STRTOG_NaNbits:
-               L[_1] = (bits[1] >> 21 | bits[2] << 11) & (ULong)0xffffffffL;
-               L[_0] = bits[2] >> 21 | bits[3] << 11
-                         | (ULong)0x7ff00000L;
-               L[2+_1] = bits[0];
-               L[2+_0] = bits[1] | (ULong)0x7ff00000L;
-         }
-       if (k & STRTOG_Neg) {
-               L[_0] |= 0x80000000L;
-               L[2+_0] |= 0x80000000L;
-               }
-       }
-
- int
-#ifdef KR_headers
-strtordd(s, sp, rounding, dd) CONST char *s; char **sp; int rounding; double *dd;
-#else
-strtordd(CONST char *s, char **sp, int rounding, double *dd)
-#endif
-{
-#ifdef Sudden_Underflow
-       static FPI fpi0 = { 106, 1-1023, 2046-1023-106+1, 1, 1 };
-#else
-       static FPI fpi0 = { 106, 1-1023-53+1, 2046-1023-106+1, 1, 0 };
-#endif
-       FPI *fpi, fpi1;
-       ULong bits[4];
-       Long exp;
-       int k;
-
-       fpi = &fpi0;
-       if (rounding != FPI_Round_near) {
-               fpi1 = fpi0;
-               fpi1.rounding = rounding;
-               fpi = &fpi1;
-               }
-       k = strtodg(s, sp, fpi, &exp, bits);
-       ULtodd((ULong*)dd, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/strtorf.c b/float/gdtoa/strtorf.c
deleted file mode 100644 (file)
index ecd1c0b..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- void
-#ifdef KR_headers
-ULtof(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k;
-#else
-ULtof(ULong *L, ULong *bits, Long exp, int k)
-#endif
-{
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               *L = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_NaNbits:
-               L[0] = bits[0] & 0x7fffff | exp + 0x7f + 23 << 23;
-               break;
-
-         case STRTOG_Denormal:
-               L[0] = bits[0];
-               break;
-
-         case STRTOG_Infinite:
-               L[0] = 0x7f800000;
-               break;
-
-         case STRTOG_NaN:
-               L[0] = 0x7fffffff;
-         }
-       if (k & STRTOG_Neg)
-               L[0] |= 0x80000000L;
-       }
-
- int
-#ifdef KR_headers
-strtorf(s, sp, rounding, f) CONST char *s; char **sp; int rounding; float *f;
-#else
-strtorf(CONST char *s, char **sp, int rounding, float *f)
-#endif
-{
-       static FPI fpi0 = { 24, 1-127-24+1,  254-127-24+1, 1, SI };
-       FPI *fpi, fpi1;
-       ULong bits[1];
-       Long exp;
-       int k;
-
-       fpi = &fpi0;
-       if (rounding != FPI_Round_near) {
-               fpi1 = fpi0;
-               fpi1.rounding = rounding;
-               fpi = &fpi1;
-               }
-       k = strtodg(s, sp, fpi, &exp, bits);
-       ULtof((ULong*)f, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/strtorx.c b/float/gdtoa/strtorx.c
deleted file mode 100644 (file)
index 0a81e95..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_8087
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
- void
-#ifdef KR_headers
-ULtox(L, bits, exp, k) UShort *L; ULong *bits; Long exp; int k;
-#else
-ULtox(UShort *L, ULong *bits, Long exp, int k)
-#endif
-{
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = L[3] = L[4] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_Denormal:
-         case STRTOG_NaNbits:
-               L[_4] = (UShort)bits[0];
-               L[_3] = (UShort)(bits[0] >> 16);
-               L[_2] = (UShort)bits[1];
-               L[_1] = (UShort)(bits[1] >> 16);
-               L[_0] = exp + 0x3fff + 63;
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7fff;
-               L[_1] = L[_2] = L[_3] = L[_4] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fff;
-               L[_1] = L[_2] = L[_3] = L[_4] = (UShort)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x8000;
-       }
-
- int
-#ifdef KR_headers
-strtorx(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
-#else
-strtorx(CONST char *s, char **sp, int rounding, void *L)
-#endif
-{
-       static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
-       FPI *fpi, fpi1;
-       ULong bits[2];
-       Long exp;
-       int k;
-
-       fpi = &fpi0;
-       if (rounding != FPI_Round_near) {
-               fpi1 = fpi0;
-               fpi1.rounding = rounding;
-               fpi = &fpi1;
-               }
-       k = strtodg(s, sp, fpi, &exp, bits);
-       ULtox((UShort*)L, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/strtorxL.c b/float/gdtoa/strtorxL.c
deleted file mode 100644 (file)
index 126cef8..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#endif
-#ifdef IEEE_8087
-#define _0 2
-#define _1 1
-#define _2 0
-#endif
-
- void
-#ifdef KR_headers
-ULtoxL(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k;
-#else
-ULtoxL(ULong *L, ULong *bits, Long exp, int k)
-#endif
-{
-       switch(k & STRTOG_Retmask) {
-         case STRTOG_NoNumber:
-         case STRTOG_Zero:
-               L[0] = L[1] = L[2] = 0;
-               break;
-
-         case STRTOG_Normal:
-         case STRTOG_Denormal:
-         case STRTOG_NaNbits:
-               L[_0] = (exp + 0x3fff + 63) << 16;
-               L[_1] = bits[1];
-               L[_2] = bits[0];
-               break;
-
-         case STRTOG_Infinite:
-               L[_0] = 0x7fff << 16;
-               L[_1] = L[_2] = 0;
-               break;
-
-         case STRTOG_NaN:
-               L[_0] = 0x7fff << 16;
-               L[_1] = L[_2] = (ULong)-1;
-         }
-       if (k & STRTOG_Neg)
-               L[_0] |= 0x80000000L;
-       }
-
- int
-#ifdef KR_headers
-strtorxL(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
-#else
-strtorxL(CONST char *s, char **sp, int rounding, void *L)
-#endif
-{
-       static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
-       FPI *fpi, fpi1;
-       ULong bits[2];
-       Long exp;
-       int k;
-
-       fpi = &fpi0;
-       if (rounding != FPI_Round_near) {
-               fpi1 = fpi0;
-               fpi1.rounding = rounding;
-               fpi = &fpi1;
-               }
-       k = strtodg(s, sp, fpi, &exp, bits);
-       ULtoxL((ULong*)L, bits, exp, k);
-       return k;
-       }
diff --git a/float/gdtoa/sum.c b/float/gdtoa/sum.c
deleted file mode 100644 (file)
index 1e1a4de..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- Bigint *
-#ifdef KR_headers
-sum(a, b) Bigint *a; Bigint *b;
-#else
-sum(Bigint *a, Bigint *b)
-#endif
-{
-       Bigint *c;
-       ULong carry, *xc, *xa, *xb, *xe, y;
-#ifdef Pack_32
-       ULong z;
-#endif
-
-       if (a->wds < b->wds) {
-               c = b; b = a; a = c;
-               }
-       c = Balloc(a->k);
-       c->wds = a->wds;
-       carry = 0;
-       xa = a->x;
-       xb = b->x;
-       xc = c->x;
-       xe = xc + b->wds;
-#ifdef Pack_32
-       do {
-               y = (*xa & 0xffff) + (*xb & 0xffff) + carry;
-               carry = (y & 0x10000) >> 16;
-               z = (*xa++ >> 16) + (*xb++ >> 16) + carry;
-               carry = (z & 0x10000) >> 16;
-               Storeinc(xc, z, y);
-               }
-               while(xc < xe);
-       xe += a->wds - b->wds;
-       while(xc < xe) {
-               y = (*xa & 0xffff) + carry;
-               carry = (y & 0x10000) >> 16;
-               z = (*xa++ >> 16) + carry;
-               carry = (z & 0x10000) >> 16;
-               Storeinc(xc, z, y);
-               }
-#else
-       do {
-               y = *xa++ + *xb++ + carry;
-               carry = (y & 0x10000) >> 16;
-               *xc++ = y & 0xffff;
-               }
-               while(xc < xe);
-       xe += a->wds - b->wds;
-       while(xc < xe) {
-               y = *xa++ + carry;
-               carry = (y & 0x10000) >> 16;
-               *xc++ = y & 0xffff;
-               }
-#endif
-       if (carry) {
-               if (c->wds == c->maxwds) {
-                       b = Balloc(c->k + 1);
-                       Bcopy(b, c);
-                       Bfree(c);
-                       c = b;
-                       }
-               c->x[c->wds++] = 1;
-               }
-       return c;
-       }
diff --git a/float/gdtoa/test/Makefile b/float/gdtoa/test/Makefile
deleted file mode 100644 (file)
index 7e48915..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-# /****************************************************************
-# Copyright (C) 1998, 2000 by Lucent Technologies
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that the copyright notice and this
-# permission notice and warranty disclaimer appear in supporting
-# documentation, and that the name of Lucent or any of its entities
-# not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-# IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-# THIS SOFTWARE.
-#
-# ****************************************************************/
-
-.SUFFIXES: .c .o
-CC = cc
-CFLAGS = -g -I..
-A = ../gdtoa.a
-
-.c.o:
-       $(CC) -c $(CFLAGS) $*.c
-
-all: dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi tests
-
-dt = dt.o $A
-dt: $(dt)
-       $(CC) -o dt $(dt)
-
-dItest = dItest.o getround.o $A
-dItest: $(dItest)
-       $(CC) -o dItest $(dItest)
-
-ddtest = ddtest.o getround.o $A
-ddtest: $(ddtest)
-       $(CC) -o ddtest $(ddtest)
-
-dtest = dtest.o getround.o $A
-dtest: $(dtest)
-       $(CC) -o dtest $(dtest)
-
-ftest = ftest.o getround.o $A
-ftest: $(ftest)
-       $(CC) -o ftest $(ftest)
-
-Qtest = Qtest.o getround.o $A
-Qtest: $(Qtest)
-       $(CC) -o Qtest $(Qtest)
-
-xtest = xtest.o getround.o $A
-xtest: $(xtest)
-       $(CC) -o xtest $(xtest)
-
-xLtest = xLtest.o getround.o $A
-xLtest: $(xLtest)
-       $(CC) -o xLtest $(xLtest)
-
-strtopddSI.o: strtopddSI.c ../strtopdd.c
-
-strtorddSI.o: strtorddSI.c ../strtordd.c
-
-strtodISI.o: strtodISI.c ../strtodI.c
-
-strtoIddSI.o: strtoIddSI.c ../strtoIdd.c
-
-strtoIdSI.o: strtoIdSI.c ../strtoId.c
-
-ddtestsi = ddtest.o strtopddSI.o strtorddSI.o strtoIddSI.o getround.o $A
-ddtestsi: $(ddtestsi)
-       $(CC) -o ddtestsi $(ddtestsi)
-
-dItestsi = dItest.o strtodISI.o strtoIdSI.o getround.o $A
-dItestsi: $(dItestsi)
-       $(CC) -o dItestsi $(dItestsi)
-
-strtodt = strtodt.o $A
-strtodt: $(strtodt)
-       $(CC) -o strtodt $(strtodt)
-
-# xQtest generates cp commands that depend on sizeof(long double).
-# See the source for details.  If you know better, create Q.out,
-# x.out and xL.out by copying the relevant *.ou0 or *.ou1 files
-# to the corresponding .out files.  In short, the *.ou0 files are
-# for long double == double; x.ou1 and xL.ou1 are for
-# long double == extended (a la 80x87 and MC680x0), and Q.ou1 is
-# for long double == quad.
-
-Q.out x.out xL.out:
-       $(CC) -o xQtest xQtest.c
-       ./xQtest | sh
-       rm -f xQtest xQtest.o
-
-## The rmdir below will fail if any test results differ.
-
-tests: Q.out x.out xL.out dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi strtodt
-       mkdir bad
-       cat testnos testnos1 | ./dt >zap 2>&1
-       cmp dtst.out zap || mv zap bad/dtst.out
-       ./dItest <testnos >zap 2>&1
-       cmp dI.out zap || mv zap bad/dI.out
-       ./dItestsi <testnos >zap 2>&1
-       cmp dIsi.out zap || mv zap bad/dIsi.out
-       ./ddtestsi <testnos >zap 2>&1
-       cmp ddsi.out zap || mv zap bad/ddsi.out
-       for i in dd d f x xL Q; do cat testnos rtestnos | \
-        ./"$$i"test >zap 2>&1;\
-       cmp $$i.out zap || mv zap bad/$$i.out; done
-       ./strtodt testnos3 >bad/strtodt.out && rm bad/strtodt.out || \
-               cat bad/strtodt.out
-       rmdir bad
-       touch tests
-
-xs0 = README Qtest.c dItest.c ddtest.c dtest.c dt.c ftest.c getround.c \
-       strtoIdSI.c strtoIddSI.c strtodISI.c strtodt.c strtopddSI.c \
-       strtorddSI.c xLtest.c xQtest.c xtest.c rtestnos testnos testnos1 \
-       testnos3 dI.out dIsi.out ddsi.out dd.out dtst.out d.out f.out \
-       x.ou0 xL.ou0 x.ou1 xL.ou1 Q.ou0 Q.ou1 makefile
-
-xsum.out: xsum0.out $(xs0)
-       xsum $(xs0) >xsum1.out
-       cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out
-
-clean:
-       rm -f *.[ao] dt *test *testsi strtodt xsum.out xsum1.out tests zap x.out xL.out Q.out
-       rm -rf bad
diff --git a/float/gdtoa/test/Q.ou0 b/float/gdtoa/test/Q.ou0
deleted file mode 100644 (file)
index 66c7e9b..0000000
+++ /dev/null
@@ -1,1180 +0,0 @@
-
-Input: 1.23
-
-strtoQ consumes 4 bytes and returns 17
-with bits = #3fff3ae1 47ae147a e147ae14 7ae147ae
-g_Qfmt(0) gives 4 bytes: "1.23"
-
-strtoIQ returns 17, consuming 4 bytes.
-fI[0] = #3fff3ae1 47ae147a e147ae14 7ae147ae
-fI[1] = #3fff3ae1 47ae147a e147ae14 7ae147af
-fI[0] == strtod
-
-
-Input: 1.23e+20
-
-strtoQ consumes 8 bytes and returns 1
-with bits = #4041aabd f2145b43 0 0
-g_Qfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIQ returns 1, consuming 8 bytes.
-fI[0] == fI[1] = #4041aabd f2145b43 0 0
-
-
-Input: 1.23e-20
-
-strtoQ consumes 8 bytes and returns 17
-with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841
-g_Qfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIQ returns 17, consuming 8 bytes.
-fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841
-fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842
-fI[0] == strtod
-
-
-Input: 1.23456789
-
-strtoQ consumes 10 bytes and returns 17
-with bits = #3fff3c0c a4283de1 b7eb6945 1304948f
-g_Qfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIQ returns 17, consuming 10 bytes.
-fI[0] = #3fff3c0c a4283de1 b7eb6945 1304948f
-fI[1] = #3fff3c0c a4283de1 b7eb6945 13049490
-fI[0] == strtod
-
-
-Input: 1.23456589e+20
-
-strtoQ consumes 14 bytes and returns 1
-with bits = #4041ac53 7a660b99 74000000 0
-g_Qfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIQ returns 1, consuming 14 bytes.
-fI[0] == fI[1] = #4041ac53 7a660b99 74000000 0
-
-
-Input: 1.23e+30
-
-strtoQ consumes 8 bytes and returns 1
-with bits = #4062f0cb 4e8fb79 4945600 0
-g_Qfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIQ returns 1, consuming 8 bytes.
-fI[0] == fI[1] = #4062f0cb 4e8fb79 4945600 0
-
-
-Input: 1.23e-30
-
-strtoQ consumes 8 bytes and returns 17
-with bits = #3f9b8f28 66f5010a a9d63f9e d7e8ba14
-g_Qfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIQ returns 17, consuming 8 bytes.
-fI[0] = #3f9b8f28 66f5010a a9d63f9e d7e8ba14
-fI[1] = #3f9b8f28 66f5010a a9d63f9e d7e8ba15
-fI[0] == strtod
-
-
-Input: 1.23456789e-20
-
-strtoQ consumes 14 bytes and returns 33
-with bits = #3fbcd268 1471e7ad a6a4a029 d86c1fa2
-g_Qfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIQ returns 33, consuming 14 bytes.
-fI[0] = #3fbcd268 1471e7ad a6a4a029 d86c1fa1
-fI[1] = #3fbcd268 1471e7ad a6a4a029 d86c1fa2
-fI[1] == strtod
-
-
-Input: 1.23456789e-30
-
-strtoQ consumes 14 bytes and returns 17
-with bits = #3f9b90a3 e33bbd99 51f85855 5a6b19d4
-g_Qfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIQ returns 17, consuming 14 bytes.
-fI[0] = #3f9b90a3 e33bbd99 51f85855 5a6b19d4
-fI[1] = #3f9b90a3 e33bbd99 51f85855 5a6b19d5
-fI[0] == strtod
-
-
-Input: 1.234567890123456789
-
-strtoQ consumes 20 bytes and returns 17
-with bits = #3fff3c0c a428c59f b71a4194 68dd175b
-g_Qfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIQ returns 17, consuming 20 bytes.
-fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b
-fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c
-fI[0] == strtod
-
-
-Input: 1.23456789012345678901234567890123456789
-
-strtoQ consumes 40 bytes and returns 17
-with bits = #3fff3c0c a428c59f b71a7be1 6b6b6d5b
-g_Qfmt(0) gives 36 bytes: "1.2345678901234567890123456789012346"
-
-strtoIQ returns 17, consuming 40 bytes.
-fI[0] = #3fff3c0c a428c59f b71a7be1 6b6b6d5b
-fI[1] = #3fff3c0c a428c59f b71a7be1 6b6b6d5c
-fI[0] == strtod
-
-
-Input: 1.23e306
-
-strtoQ consumes 8 bytes and returns 33
-with bits = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55
-g_Qfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIQ returns 33, consuming 8 bytes.
-fI[0] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b54
-fI[1] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55
-fI[1] == strtod
-
-
-Input: 1.23e-306
-
-strtoQ consumes 9 bytes and returns 17
-with bits = #3c06ba3b 85da396e 7e496ab7 d233c3dd
-g_Qfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIQ returns 17, consuming 9 bytes.
-fI[0] = #3c06ba3b 85da396e 7e496ab7 d233c3dd
-fI[1] = #3c06ba3b 85da396e 7e496ab7 d233c3de
-fI[0] == strtod
-
-
-Input: 1.23e-320
-
-strtoQ consumes 9 bytes and returns 33
-with bits = #3bd83731 86e30898 7e33b2e8 355f847b
-g_Qfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIQ returns 33, consuming 9 bytes.
-fI[0] = #3bd83731 86e30898 7e33b2e8 355f847a
-fI[1] = #3bd83731 86e30898 7e33b2e8 355f847b
-fI[1] == strtod
-
-
-Input: 1.23e-20
-
-strtoQ consumes 8 bytes and returns 17
-with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841
-g_Qfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIQ returns 17, consuming 8 bytes.
-fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841
-fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842
-fI[0] == strtod
-
-
-Input: 1.23456789e307
-
-strtoQ consumes 14 bytes and returns 17
-with bits = #43fb194b 14bdaecd bcea468c 902464cf
-g_Qfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIQ returns 17, consuming 14 bytes.
-fI[0] = #43fb194b 14bdaecd bcea468c 902464cf
-fI[1] = #43fb194b 14bdaecd bcea468c 902464d0
-fI[0] == strtod
-
-
-Input: 1.23456589e-307
-
-strtoQ consumes 15 bytes and returns 17
-with bits = #3c036319 6bb9845f a6d234e3 39163574
-g_Qfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIQ returns 17, consuming 15 bytes.
-fI[0] = #3c036319 6bb9845f a6d234e3 39163574
-fI[1] = #3c036319 6bb9845f a6d234e3 39163575
-fI[0] == strtod
-
-
-Input: 1.234567890123456789
-
-strtoQ consumes 20 bytes and returns 17
-with bits = #3fff3c0c a428c59f b71a4194 68dd175b
-g_Qfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIQ returns 17, consuming 20 bytes.
-fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b
-fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e301
-
-strtoQ consumes 24 bytes and returns 33
-with bits = #43e726f5 175f5641 3017ea80 763990ef
-g_Qfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIQ returns 33, consuming 24 bytes.
-fI[0] = #43e726f5 175f5641 3017ea80 763990ee
-fI[1] = #43e726f5 175f5641 3017ea80 763990ef
-fI[1] == strtod
-
-
-Input: 1.234567890123456789e-301
-
-strtoQ consumes 25 bytes and returns 17
-with bits = #3c1752a6 4e34ba0d 35b19b04 3222fce5
-g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIQ returns 17, consuming 25 bytes.
-fI[0] = #3c1752a6 4e34ba0d 35b19b04 3222fce5
-fI[1] = #3c1752a6 4e34ba0d 35b19b04 3222fce6
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e-321
-
-strtoQ consumes 25 bytes and returns 17
-with bits = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de
-g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-321"
-
-strtoIQ returns 17, consuming 25 bytes.
-fI[0] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de
-fI[1] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7df
-fI[0] == strtod
-
-
-Input: 1e23
-
-strtoQ consumes 4 bytes and returns 1
-with bits = #404b52d0 2c7e14af 68000000 0
-g_Qfmt(0) gives 5 bytes: "1e+23"
-
-strtoIQ returns 1, consuming 4 bytes.
-fI[0] == fI[1] = #404b52d0 2c7e14af 68000000 0
-
-
-Input: 1e310
-
-strtoQ consumes 5 bytes and returns 33
-with bits = #4404bd03 c8140697 9e9ff00e fefd4cbd
-g_Qfmt(0) gives 6 bytes: "1e+310"
-
-strtoIQ returns 33, consuming 5 bytes.
-fI[0] = #4404bd03 c8140697 9e9ff00e fefd4cbc
-fI[1] = #4404bd03 c8140697 9e9ff00e fefd4cbd
-fI[1] == strtod
-
-
-Input: 9.0259718793241475e-277
-
-strtoQ consumes 23 bytes and returns 17
-with bits = #3c69ffff ffffffff f9ed5779 ac118fe1
-g_Qfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIQ returns 17, consuming 23 bytes.
-fI[0] = #3c69ffff ffffffff f9ed5779 ac118fe1
-fI[1] = #3c69ffff ffffffff f9ed5779 ac118fe2
-fI[0] == strtod
-
-
-Input: 9.025971879324147880346310405869e-277
-
-strtoQ consumes 37 bytes and returns 33
-with bits = #3c6a0000 0 0 9a
-g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277"
-
-strtoIQ returns 33, consuming 37 bytes.
-fI[0] = #3c6a0000 0 0 99
-fI[1] = #3c6a0000 0 0 9a
-fI[1] == strtod
-
-
-Input: 9.025971879324147880346310405868e-277
-
-strtoQ consumes 37 bytes and returns 17
-with bits = #3c69ffff ffffffff ffffffff fffffcb5
-g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405868e-277"
-
-strtoIQ returns 17, consuming 37 bytes.
-fI[0] = #3c69ffff ffffffff ffffffff fffffcb5
-fI[1] = #3c69ffff ffffffff ffffffff fffffcb6
-fI[0] == strtod
-
-
-Input: 2.2250738585072014e-308
-
-strtoQ consumes 23 bytes and returns 33
-with bits = #3c010000 0 8c304c cf867de0
-g_Qfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIQ returns 33, consuming 23 bytes.
-fI[0] = #3c010000 0 8c304c cf867ddf
-fI[1] = #3c010000 0 8c304c cf867de0
-fI[1] == strtod
-
-
-Input: 2.2250738585072013e-308
-
-strtoQ consumes 23 bytes and returns 33
-with bits = #3c00ffff ffffffff fa9e4c4f 4c1e8a10
-g_Qfmt(0) gives 23 bytes: "2.2250738585072013e-308"
-
-strtoIQ returns 33, consuming 23 bytes.
-fI[0] = #3c00ffff ffffffff fa9e4c4f 4c1e8a0f
-fI[1] = #3c00ffff ffffffff fa9e4c4f 4c1e8a10
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff1999 99999999 99999999 99999999
-g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-fI[0] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff1999 99999999 99999999 99999999
-g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-fI[1] = #bfff1999 99999999 99999999 99999999
-fI[1] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff3333 33333333 33333333 33333333
-g_Qfmt(0) gives 3 bytes: "1.2"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-fI[1] = #3fff3333 33333333 33333333 33333334
-fI[0] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff3333 33333333 33333333 33333333
-g_Qfmt(0) gives 4 bytes: "-1.2"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-fI[1] = #bfff3333 33333333 33333333 33333333
-fI[1] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff4ccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-fI[0] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff4ccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-fI[1] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff6666 66666666 66666666 66666666
-g_Qfmt(0) gives 3 bytes: "1.4"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-fI[1] = #3fff6666 66666666 66666666 66666667
-fI[0] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff6666 66666666 66666666 66666666
-g_Qfmt(0) gives 4 bytes: "-1.4"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-fI[1] = #bfff6666 66666666 66666666 66666666
-fI[1] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff9999 99999999 99999999 99999999
-g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-fI[0] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff9999 99999999 99999999 99999999
-g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-fI[1] = #bfff9999 99999999 99999999 99999999
-fI[1] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffb333 33333333 33333333 33333333
-g_Qfmt(0) gives 3 bytes: "1.7"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-fI[1] = #3fffb333 33333333 33333333 33333334
-fI[0] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffb333 33333333 33333333 33333333
-g_Qfmt(0) gives 4 bytes: "-1.7"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-fI[1] = #bfffb333 33333333 33333333 33333333
-fI[1] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffcccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-fI[0] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffcccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-fI[1] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffe666 66666666 66666666 66666666
-g_Qfmt(0) gives 3 bytes: "1.9"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-fI[1] = #3fffe666 66666666 66666666 66666667
-fI[0] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffe666 66666666 66666666 66666666
-g_Qfmt(0) gives 4 bytes: "-1.9"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-fI[1] = #bfffe666 66666666 66666666 66666666
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff1999 99999999 99999999 9999999a
-g_Qfmt(0) gives 3 bytes: "1.1"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-fI[1] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff1999 99999999 99999999 9999999a
-g_Qfmt(0) gives 4 bytes: "-1.1"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-fI[1] = #bfff1999 99999999 99999999 99999999
-fI[0] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff3333 33333333 33333333 33333333
-g_Qfmt(0) gives 3 bytes: "1.2"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-fI[1] = #3fff3333 33333333 33333333 33333334
-fI[0] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff3333 33333333 33333333 33333333
-g_Qfmt(0) gives 4 bytes: "-1.2"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-fI[1] = #bfff3333 33333333 33333333 33333333
-fI[1] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff4ccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 3 bytes: "1.3"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-fI[1] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff4ccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 4 bytes: "-1.3"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-fI[0] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff6666 66666666 66666666 66666666
-g_Qfmt(0) gives 3 bytes: "1.4"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-fI[1] = #3fff6666 66666666 66666666 66666667
-fI[0] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff6666 66666666 66666666 66666666
-g_Qfmt(0) gives 4 bytes: "-1.4"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-fI[1] = #bfff6666 66666666 66666666 66666666
-fI[1] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff9999 99999999 99999999 9999999a
-g_Qfmt(0) gives 3 bytes: "1.6"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-fI[1] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff9999 99999999 99999999 9999999a
-g_Qfmt(0) gives 4 bytes: "-1.6"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-fI[1] = #bfff9999 99999999 99999999 99999999
-fI[0] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffb333 33333333 33333333 33333333
-g_Qfmt(0) gives 3 bytes: "1.7"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-fI[1] = #3fffb333 33333333 33333333 33333334
-fI[0] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffb333 33333333 33333333 33333333
-g_Qfmt(0) gives 4 bytes: "-1.7"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-fI[1] = #bfffb333 33333333 33333333 33333333
-fI[1] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffcccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 3 bytes: "1.8"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-fI[1] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffcccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 4 bytes: "-1.8"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-fI[0] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffe666 66666666 66666666 66666666
-g_Qfmt(0) gives 3 bytes: "1.9"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-fI[1] = #3fffe666 66666666 66666666 66666667
-fI[0] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffe666 66666666 66666666 66666666
-g_Qfmt(0) gives 4 bytes: "-1.9"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-fI[1] = #bfffe666 66666666 66666666 66666666
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff1999 99999999 99999999 9999999a
-g_Qfmt(0) gives 3 bytes: "1.1"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-fI[1] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff1999 99999999 99999999 99999999
-g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-fI[1] = #bfff1999 99999999 99999999 99999999
-fI[1] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff3333 33333333 33333333 33333334
-g_Qfmt(0) gives 36 bytes: "1.2000000000000000000000000000000002"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-fI[1] = #3fff3333 33333333 33333333 33333334
-fI[1] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff3333 33333333 33333333 33333333
-g_Qfmt(0) gives 4 bytes: "-1.2"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-fI[1] = #bfff3333 33333333 33333333 33333333
-fI[1] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff4ccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 3 bytes: "1.3"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-fI[1] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff4ccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-fI[1] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff6666 66666666 66666666 66666667
-g_Qfmt(0) gives 36 bytes: "1.4000000000000000000000000000000001"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-fI[1] = #3fff6666 66666666 66666666 66666667
-fI[1] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff6666 66666666 66666666 66666666
-g_Qfmt(0) gives 4 bytes: "-1.4"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-fI[1] = #bfff6666 66666666 66666666 66666666
-fI[1] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff9999 99999999 99999999 9999999a
-g_Qfmt(0) gives 3 bytes: "1.6"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-fI[1] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff9999 99999999 99999999 99999999
-g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-fI[1] = #bfff9999 99999999 99999999 99999999
-fI[1] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffb333 33333333 33333333 33333334
-g_Qfmt(0) gives 36 bytes: "1.7000000000000000000000000000000002"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-fI[1] = #3fffb333 33333333 33333333 33333334
-fI[1] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffb333 33333333 33333333 33333333
-g_Qfmt(0) gives 4 bytes: "-1.7"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-fI[1] = #bfffb333 33333333 33333333 33333333
-fI[1] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffcccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 3 bytes: "1.8"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-fI[1] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffcccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-fI[1] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffe666 66666666 66666666 66666667
-g_Qfmt(0) gives 36 bytes: "1.9000000000000000000000000000000001"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-fI[1] = #3fffe666 66666666 66666666 66666667
-fI[1] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffe666 66666666 66666666 66666666
-g_Qfmt(0) gives 4 bytes: "-1.9"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-fI[1] = #bfffe666 66666666 66666666 66666666
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff1999 99999999 99999999 99999999
-g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-fI[0] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff1999 99999999 99999999 9999999a
-g_Qfmt(0) gives 4 bytes: "-1.1"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-fI[1] = #bfff1999 99999999 99999999 99999999
-fI[0] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff3333 33333333 33333333 33333333
-g_Qfmt(0) gives 3 bytes: "1.2"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-fI[1] = #3fff3333 33333333 33333333 33333334
-fI[0] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff3333 33333333 33333333 33333334
-g_Qfmt(0) gives 37 bytes: "-1.2000000000000000000000000000000002"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-fI[1] = #bfff3333 33333333 33333333 33333333
-fI[0] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff4ccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-fI[0] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff4ccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 4 bytes: "-1.3"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-fI[0] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff6666 66666666 66666666 66666666
-g_Qfmt(0) gives 3 bytes: "1.4"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-fI[1] = #3fff6666 66666666 66666666 66666667
-fI[0] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff6666 66666666 66666666 66666667
-g_Qfmt(0) gives 37 bytes: "-1.4000000000000000000000000000000001"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-fI[1] = #bfff6666 66666666 66666666 66666666
-fI[0] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff9999 99999999 99999999 99999999
-g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-fI[0] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff9999 99999999 99999999 9999999a
-g_Qfmt(0) gives 4 bytes: "-1.6"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-fI[1] = #bfff9999 99999999 99999999 99999999
-fI[0] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffb333 33333333 33333333 33333333
-g_Qfmt(0) gives 3 bytes: "1.7"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-fI[1] = #3fffb333 33333333 33333333 33333334
-fI[0] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffb333 33333333 33333333 33333334
-g_Qfmt(0) gives 37 bytes: "-1.7000000000000000000000000000000002"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-fI[1] = #bfffb333 33333333 33333333 33333333
-fI[0] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffcccc cccccccc cccccccc cccccccc
-g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-fI[0] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffcccc cccccccc cccccccc cccccccd
-g_Qfmt(0) gives 4 bytes: "-1.8"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-fI[0] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffe666 66666666 66666666 66666666
-g_Qfmt(0) gives 3 bytes: "1.9"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-fI[1] = #3fffe666 66666666 66666666 66666667
-fI[0] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffe666 66666666 66666666 66666667
-g_Qfmt(0) gives 37 bytes: "-1.9000000000000000000000000000000001"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-fI[1] = #bfffe666 66666666 66666666 66666666
-fI[0] == strtod
-
diff --git a/float/gdtoa/test/Q.ou1 b/float/gdtoa/test/Q.ou1
deleted file mode 100644 (file)
index cb2a23f..0000000
+++ /dev/null
@@ -1,1468 +0,0 @@
-
-Input: 1.23
-
-strtoQ consumes 4 bytes and returns 17
-with bits = #3fff3ae1 47ae147a e147ae14 7ae147ae
-printf("%.35Lg") gives 1.23
-g_Qfmt(0) gives 4 bytes: "1.23"
-
-strtoIQ returns 17, consuming 4 bytes.
-fI[0] = #3fff3ae1 47ae147a e147ae14 7ae147ae
-= 1.23
-fI[1] = #3fff3ae1 47ae147a e147ae14 7ae147af
-= 1.2300000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: 1.23e+20
-
-strtoQ consumes 8 bytes and returns 1
-with bits = #4041aabd f2145b43 0 0
-printf("%.35Lg") gives 123000000000000000000
-g_Qfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIQ returns 1, consuming 8 bytes.
-fI[0] == fI[1] = #4041aabd f2145b43 0 0
-= 123000000000000000000
-
-
-Input: 1.23e-20
-
-strtoQ consumes 8 bytes and returns 17
-with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841
-printf("%.35Lg") gives 1.2299999999999999999999999999999999e-20
-g_Qfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIQ returns 17, consuming 8 bytes.
-fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841
-= 1.2299999999999999999999999999999999e-20
-fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842
-= 1.2300000000000000000000000000000001e-20
-fI[0] == strtod
-
-
-Input: 1.23456789
-
-strtoQ consumes 10 bytes and returns 17
-with bits = #3fff3c0c a4283de1 b7eb6945 1304948f
-printf("%.35Lg") gives 1.2345678899999999999999999999999999
-g_Qfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIQ returns 17, consuming 10 bytes.
-fI[0] = #3fff3c0c a4283de1 b7eb6945 1304948f
-= 1.2345678899999999999999999999999999
-fI[1] = #3fff3c0c a4283de1 b7eb6945 13049490
-= 1.2345678900000000000000000000000001
-fI[0] == strtod
-
-
-Input: 1.23456589e+20
-
-strtoQ consumes 14 bytes and returns 1
-with bits = #4041ac53 7a660b99 74000000 0
-printf("%.35Lg") gives 123456589000000000000
-g_Qfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIQ returns 1, consuming 14 bytes.
-fI[0] == fI[1] = #4041ac53 7a660b99 74000000 0
-= 123456589000000000000
-
-
-Input: 1.23e+30
-
-strtoQ consumes 8 bytes and returns 1
-with bits = #4062f0cb 4e8fb79 4945600 0
-printf("%.35Lg") gives 1230000000000000000000000000000
-g_Qfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIQ returns 1, consuming 8 bytes.
-fI[0] == fI[1] = #4062f0cb 4e8fb79 4945600 0
-= 1230000000000000000000000000000
-
-
-Input: 1.23e-30
-
-strtoQ consumes 8 bytes and returns 17
-with bits = #3f9b8f28 66f5010a a9d63f9e d7e8ba14
-printf("%.35Lg") gives 1.2299999999999999999999999999999999e-30
-g_Qfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIQ returns 17, consuming 8 bytes.
-fI[0] = #3f9b8f28 66f5010a a9d63f9e d7e8ba14
-= 1.2299999999999999999999999999999999e-30
-fI[1] = #3f9b8f28 66f5010a a9d63f9e d7e8ba15
-= 1.2300000000000000000000000000000001e-30
-fI[0] == strtod
-
-
-Input: 1.23456789e-20
-
-strtoQ consumes 14 bytes and returns 33
-with bits = #3fbcd268 1471e7ad a6a4a029 d86c1fa2
-printf("%.35Lg") gives 1.2345678900000000000000000000000001e-20
-g_Qfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIQ returns 33, consuming 14 bytes.
-fI[0] = #3fbcd268 1471e7ad a6a4a029 d86c1fa1
-= 1.2345678899999999999999999999999999e-20
-fI[1] = #3fbcd268 1471e7ad a6a4a029 d86c1fa2
-= 1.2345678900000000000000000000000001e-20
-fI[1] == strtod
-
-
-Input: 1.23456789e-30
-
-strtoQ consumes 14 bytes and returns 17
-with bits = #3f9b90a3 e33bbd99 51f85855 5a6b19d4
-printf("%.35Lg") gives 1.23456789e-30
-g_Qfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIQ returns 17, consuming 14 bytes.
-fI[0] = #3f9b90a3 e33bbd99 51f85855 5a6b19d4
-= 1.23456789e-30
-fI[1] = #3f9b90a3 e33bbd99 51f85855 5a6b19d5
-= 1.2345678900000000000000000000000001e-30
-fI[0] == strtod
-
-
-Input: 1.234567890123456789
-
-strtoQ consumes 20 bytes and returns 17
-with bits = #3fff3c0c a428c59f b71a4194 68dd175b
-printf("%.35Lg") gives 1.234567890123456789
-g_Qfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIQ returns 17, consuming 20 bytes.
-fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b
-= 1.234567890123456789
-fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c
-= 1.2345678901234567890000000000000002
-fI[0] == strtod
-
-
-Input: 1.23456789012345678901234567890123456789
-
-strtoQ consumes 40 bytes and returns 17
-with bits = #3fff3c0c a428c59f b71a7be1 6b6b6d5b
-printf("%.35Lg") gives 1.2345678901234567890123456789012346
-g_Qfmt(0) gives 36 bytes: "1.2345678901234567890123456789012346"
-
-strtoIQ returns 17, consuming 40 bytes.
-fI[0] = #3fff3c0c a428c59f b71a7be1 6b6b6d5b
-= 1.2345678901234567890123456789012346
-fI[1] = #3fff3c0c a428c59f b71a7be1 6b6b6d5c
-= 1.2345678901234567890123456789012347
-fI[0] == strtod
-
-
-Input: 1.23e306
-
-strtoQ consumes 8 bytes and returns 33
-with bits = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55
-printf("%.35Lg") gives 1.23e+306
-g_Qfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIQ returns 33, consuming 8 bytes.
-fI[0] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b54
-= 1.2299999999999999999999999999999999e+306
-fI[1] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55
-= 1.23e+306
-fI[1] == strtod
-
-
-Input: 1.23e-306
-
-strtoQ consumes 9 bytes and returns 17
-with bits = #3c06ba3b 85da396e 7e496ab7 d233c3dd
-printf("%.35Lg") gives 1.23e-306
-g_Qfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIQ returns 17, consuming 9 bytes.
-fI[0] = #3c06ba3b 85da396e 7e496ab7 d233c3dd
-= 1.23e-306
-fI[1] = #3c06ba3b 85da396e 7e496ab7 d233c3de
-= 1.2300000000000000000000000000000001e-306
-fI[0] == strtod
-
-
-Input: 1.23e-320
-
-strtoQ consumes 9 bytes and returns 33
-with bits = #3bd83731 86e30898 7e33b2e8 355f847b
-printf("%.35Lg") gives 1.2300000000000000000000000000000001e-320
-g_Qfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIQ returns 33, consuming 9 bytes.
-fI[0] = #3bd83731 86e30898 7e33b2e8 355f847a
-= 1.2299999999999999999999999999999999e-320
-fI[1] = #3bd83731 86e30898 7e33b2e8 355f847b
-= 1.2300000000000000000000000000000001e-320
-fI[1] == strtod
-
-
-Input: 1.23e-20
-
-strtoQ consumes 8 bytes and returns 17
-with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841
-printf("%.35Lg") gives 1.2299999999999999999999999999999999e-20
-g_Qfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIQ returns 17, consuming 8 bytes.
-fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841
-= 1.2299999999999999999999999999999999e-20
-fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842
-= 1.2300000000000000000000000000000001e-20
-fI[0] == strtod
-
-
-Input: 1.23456789e307
-
-strtoQ consumes 14 bytes and returns 17
-with bits = #43fb194b 14bdaecd bcea468c 902464cf
-printf("%.35Lg") gives 1.2345678899999999999999999999999999e+307
-g_Qfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIQ returns 17, consuming 14 bytes.
-fI[0] = #43fb194b 14bdaecd bcea468c 902464cf
-= 1.2345678899999999999999999999999999e+307
-fI[1] = #43fb194b 14bdaecd bcea468c 902464d0
-= 1.2345678900000000000000000000000001e+307
-fI[0] == strtod
-
-
-Input: 1.23456589e-307
-
-strtoQ consumes 15 bytes and returns 17
-with bits = #3c036319 6bb9845f a6d234e3 39163574
-printf("%.35Lg") gives 1.23456589e-307
-g_Qfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIQ returns 17, consuming 15 bytes.
-fI[0] = #3c036319 6bb9845f a6d234e3 39163574
-= 1.23456589e-307
-fI[1] = #3c036319 6bb9845f a6d234e3 39163575
-= 1.2345658900000000000000000000000002e-307
-fI[0] == strtod
-
-
-Input: 1.234567890123456789
-
-strtoQ consumes 20 bytes and returns 17
-with bits = #3fff3c0c a428c59f b71a4194 68dd175b
-printf("%.35Lg") gives 1.234567890123456789
-g_Qfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIQ returns 17, consuming 20 bytes.
-fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b
-= 1.234567890123456789
-fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c
-= 1.2345678901234567890000000000000002
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e301
-
-strtoQ consumes 24 bytes and returns 33
-with bits = #43e726f5 175f5641 3017ea80 763990ef
-printf("%.35Lg") gives 1.2345678901234567890000000000000001e+301
-g_Qfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIQ returns 33, consuming 24 bytes.
-fI[0] = #43e726f5 175f5641 3017ea80 763990ee
-= 1.2345678901234567889999999999999999e+301
-fI[1] = #43e726f5 175f5641 3017ea80 763990ef
-= 1.2345678901234567890000000000000001e+301
-fI[1] == strtod
-
-
-Input: 1.234567890123456789e-301
-
-strtoQ consumes 25 bytes and returns 17
-with bits = #3c1752a6 4e34ba0d 35b19b04 3222fce5
-printf("%.35Lg") gives 1.234567890123456789e-301
-g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIQ returns 17, consuming 25 bytes.
-fI[0] = #3c1752a6 4e34ba0d 35b19b04 3222fce5
-= 1.234567890123456789e-301
-fI[1] = #3c1752a6 4e34ba0d 35b19b04 3222fce6
-= 1.2345678901234567890000000000000002e-301
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e-321
-
-strtoQ consumes 25 bytes and returns 17
-with bits = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de
-printf("%.35Lg") gives 1.234567890123456789e-321
-g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-321"
-
-strtoIQ returns 17, consuming 25 bytes.
-fI[0] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de
-= 1.234567890123456789e-321
-fI[1] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7df
-= 1.2345678901234567890000000000000001e-321
-fI[0] == strtod
-
-
-Input: 1e23
-
-strtoQ consumes 4 bytes and returns 1
-with bits = #404b52d0 2c7e14af 68000000 0
-printf("%.35Lg") gives 100000000000000000000000
-g_Qfmt(0) gives 5 bytes: "1e+23"
-
-strtoIQ returns 1, consuming 4 bytes.
-fI[0] == fI[1] = #404b52d0 2c7e14af 68000000 0
-= 100000000000000000000000
-
-
-Input: 1e310
-
-strtoQ consumes 5 bytes and returns 33
-with bits = #4404bd03 c8140697 9e9ff00e fefd4cbd
-printf("%.35Lg") gives 1e+310
-g_Qfmt(0) gives 6 bytes: "1e+310"
-
-strtoIQ returns 33, consuming 5 bytes.
-fI[0] = #4404bd03 c8140697 9e9ff00e fefd4cbc
-= 9.9999999999999999999999999999999992e+309
-fI[1] = #4404bd03 c8140697 9e9ff00e fefd4cbd
-= 1e+310
-fI[1] == strtod
-
-
-Input: 9.0259718793241475e-277
-
-strtoQ consumes 23 bytes and returns 17
-with bits = #3c69ffff ffffffff f9ed5779 ac118fe1
-printf("%.35Lg") gives 9.0259718793241474999999999999999997e-277
-g_Qfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIQ returns 17, consuming 23 bytes.
-fI[0] = #3c69ffff ffffffff f9ed5779 ac118fe1
-= 9.0259718793241474999999999999999997e-277
-fI[1] = #3c69ffff ffffffff f9ed5779 ac118fe2
-= 9.0259718793241475000000000000000006e-277
-fI[0] == strtod
-
-
-Input: 9.025971879324147880346310405869e-277
-
-strtoQ consumes 37 bytes and returns 33
-with bits = #3c6a0000 0 0 9a
-printf("%.35Lg") gives 9.0259718793241478803463104058690004e-277
-g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277"
-
-strtoIQ returns 33, consuming 37 bytes.
-fI[0] = #3c6a0000 0 0 99
-= 9.0259718793241478803463104058689987e-277
-fI[1] = #3c6a0000 0 0 9a
-= 9.0259718793241478803463104058690004e-277
-fI[1] == strtod
-
-
-Input: 9.025971879324147880346310405868e-277
-
-strtoQ consumes 37 bytes and returns 17
-with bits = #3c69ffff ffffffff ffffffff fffffcb5
-printf("%.35Lg") gives 9.025971879324147880346310405868e-277
-g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405868e-277"
-
-strtoIQ returns 17, consuming 37 bytes.
-fI[0] = #3c69ffff ffffffff ffffffff fffffcb5
-= 9.025971879324147880346310405868e-277
-fI[1] = #3c69ffff ffffffff ffffffff fffffcb6
-= 9.0259718793241478803463104058680009e-277
-fI[0] == strtod
-
-
-Input: 2.2250738585072014e-308
-
-strtoQ consumes 23 bytes and returns 33
-with bits = #3c010000 0 8c304c cf867de0
-printf("%.35Lg") gives 2.2250738585072014000000000000000001e-308
-g_Qfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIQ returns 33, consuming 23 bytes.
-fI[0] = #3c010000 0 8c304c cf867ddf
-= 2.2250738585072013999999999999999997e-308
-fI[1] = #3c010000 0 8c304c cf867de0
-= 2.2250738585072014000000000000000001e-308
-fI[1] == strtod
-
-
-Input: 2.2250738585072013e-308
-
-strtoQ consumes 23 bytes and returns 33
-with bits = #3c00ffff ffffffff fa9e4c4f 4c1e8a10
-printf("%.35Lg") gives 2.2250738585072013e-308
-g_Qfmt(0) gives 23 bytes: "2.2250738585072013e-308"
-
-strtoIQ returns 33, consuming 23 bytes.
-fI[0] = #3c00ffff ffffffff fa9e4c4f 4c1e8a0f
-= 2.2250738585072012999999999999999998e-308
-fI[1] = #3c00ffff ffffffff fa9e4c4f 4c1e8a10
-= 2.2250738585072013e-308
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff1999 99999999 99999999 99999999
-printf("%.35Lg") gives 1.0999999999999999999999999999999999
-g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-= 1.0999999999999999999999999999999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-= 1.1000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff1999 99999999 99999999 99999999
-printf("%.35Lg") gives -1.0999999999999999999999999999999999
-g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-= -1.1000000000000000000000000000000001
-fI[1] = #bfff1999 99999999 99999999 99999999
-= -1.0999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff3333 33333333 33333333 33333333
-printf("%.35Lg") gives 1.2
-g_Qfmt(0) gives 3 bytes: "1.2"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-= 1.2
-fI[1] = #3fff3333 33333333 33333333 33333334
-= 1.2000000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff3333 33333333 33333333 33333333
-printf("%.35Lg") gives -1.2
-g_Qfmt(0) gives 4 bytes: "-1.2"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-= -1.2000000000000000000000000000000002
-fI[1] = #bfff3333 33333333 33333333 33333333
-= -1.2
-fI[1] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff4ccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives 1.2999999999999999999999999999999998
-g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-= 1.2999999999999999999999999999999998
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-= 1.3
-fI[0] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff4ccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives -1.2999999999999999999999999999999998
-g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-= -1.3
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-= -1.2999999999999999999999999999999998
-fI[1] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff6666 66666666 66666666 66666666
-printf("%.35Lg") gives 1.3999999999999999999999999999999999
-g_Qfmt(0) gives 3 bytes: "1.4"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-= 1.3999999999999999999999999999999999
-fI[1] = #3fff6666 66666666 66666666 66666667
-= 1.4000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff6666 66666666 66666666 66666666
-printf("%.35Lg") gives -1.3999999999999999999999999999999999
-g_Qfmt(0) gives 4 bytes: "-1.4"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-= -1.4000000000000000000000000000000001
-fI[1] = #bfff6666 66666666 66666666 66666666
-= -1.3999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-printf("%.35Lg") gives 1.5
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-= 1.5
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-printf("%.35Lg") gives -1.5
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-= -1.5
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff9999 99999999 99999999 99999999
-printf("%.35Lg") gives 1.5999999999999999999999999999999999
-g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-= 1.5999999999999999999999999999999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-= 1.6000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff9999 99999999 99999999 99999999
-printf("%.35Lg") gives -1.5999999999999999999999999999999999
-g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-= -1.6000000000000000000000000000000001
-fI[1] = #bfff9999 99999999 99999999 99999999
-= -1.5999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffb333 33333333 33333333 33333333
-printf("%.35Lg") gives 1.7
-g_Qfmt(0) gives 3 bytes: "1.7"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-= 1.7
-fI[1] = #3fffb333 33333333 33333333 33333334
-= 1.7000000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffb333 33333333 33333333 33333333
-printf("%.35Lg") gives -1.7
-g_Qfmt(0) gives 4 bytes: "-1.7"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-= -1.7000000000000000000000000000000002
-fI[1] = #bfffb333 33333333 33333333 33333333
-= -1.7
-fI[1] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffcccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives 1.7999999999999999999999999999999998
-g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-= 1.7999999999999999999999999999999998
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-= 1.8
-fI[0] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffcccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives -1.7999999999999999999999999999999998
-g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-= -1.8
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-= -1.7999999999999999999999999999999998
-fI[1] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffe666 66666666 66666666 66666666
-printf("%.35Lg") gives 1.8999999999999999999999999999999999
-g_Qfmt(0) gives 3 bytes: "1.9"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-= 1.8999999999999999999999999999999999
-fI[1] = #3fffe666 66666666 66666666 66666667
-= 1.9000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffe666 66666666 66666666 66666666
-printf("%.35Lg") gives -1.8999999999999999999999999999999999
-g_Qfmt(0) gives 4 bytes: "-1.9"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-= -1.9000000000000000000000000000000001
-fI[1] = #bfffe666 66666666 66666666 66666666
-= -1.8999999999999999999999999999999999
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff1999 99999999 99999999 9999999a
-printf("%.35Lg") gives 1.1000000000000000000000000000000001
-g_Qfmt(0) gives 3 bytes: "1.1"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-= 1.0999999999999999999999999999999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-= 1.1000000000000000000000000000000001
-fI[1] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff1999 99999999 99999999 9999999a
-printf("%.35Lg") gives -1.1000000000000000000000000000000001
-g_Qfmt(0) gives 4 bytes: "-1.1"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-= -1.1000000000000000000000000000000001
-fI[1] = #bfff1999 99999999 99999999 99999999
-= -1.0999999999999999999999999999999999
-fI[0] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff3333 33333333 33333333 33333333
-printf("%.35Lg") gives 1.2
-g_Qfmt(0) gives 3 bytes: "1.2"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-= 1.2
-fI[1] = #3fff3333 33333333 33333333 33333334
-= 1.2000000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff3333 33333333 33333333 33333333
-printf("%.35Lg") gives -1.2
-g_Qfmt(0) gives 4 bytes: "-1.2"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-= -1.2000000000000000000000000000000002
-fI[1] = #bfff3333 33333333 33333333 33333333
-= -1.2
-fI[1] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff4ccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives 1.3
-g_Qfmt(0) gives 3 bytes: "1.3"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-= 1.2999999999999999999999999999999998
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-= 1.3
-fI[1] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff4ccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives -1.3
-g_Qfmt(0) gives 4 bytes: "-1.3"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-= -1.3
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-= -1.2999999999999999999999999999999998
-fI[0] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff6666 66666666 66666666 66666666
-printf("%.35Lg") gives 1.3999999999999999999999999999999999
-g_Qfmt(0) gives 3 bytes: "1.4"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-= 1.3999999999999999999999999999999999
-fI[1] = #3fff6666 66666666 66666666 66666667
-= 1.4000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff6666 66666666 66666666 66666666
-printf("%.35Lg") gives -1.3999999999999999999999999999999999
-g_Qfmt(0) gives 4 bytes: "-1.4"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-= -1.4000000000000000000000000000000001
-fI[1] = #bfff6666 66666666 66666666 66666666
-= -1.3999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-printf("%.35Lg") gives 1.5
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-= 1.5
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-printf("%.35Lg") gives -1.5
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-= -1.5
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff9999 99999999 99999999 9999999a
-printf("%.35Lg") gives 1.6000000000000000000000000000000001
-g_Qfmt(0) gives 3 bytes: "1.6"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-= 1.5999999999999999999999999999999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-= 1.6000000000000000000000000000000001
-fI[1] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff9999 99999999 99999999 9999999a
-printf("%.35Lg") gives -1.6000000000000000000000000000000001
-g_Qfmt(0) gives 4 bytes: "-1.6"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-= -1.6000000000000000000000000000000001
-fI[1] = #bfff9999 99999999 99999999 99999999
-= -1.5999999999999999999999999999999999
-fI[0] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffb333 33333333 33333333 33333333
-printf("%.35Lg") gives 1.7
-g_Qfmt(0) gives 3 bytes: "1.7"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-= 1.7
-fI[1] = #3fffb333 33333333 33333333 33333334
-= 1.7000000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffb333 33333333 33333333 33333333
-printf("%.35Lg") gives -1.7
-g_Qfmt(0) gives 4 bytes: "-1.7"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-= -1.7000000000000000000000000000000002
-fI[1] = #bfffb333 33333333 33333333 33333333
-= -1.7
-fI[1] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffcccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives 1.8
-g_Qfmt(0) gives 3 bytes: "1.8"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-= 1.7999999999999999999999999999999998
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-= 1.8
-fI[1] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffcccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives -1.8
-g_Qfmt(0) gives 4 bytes: "-1.8"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-= -1.8
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-= -1.7999999999999999999999999999999998
-fI[0] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffe666 66666666 66666666 66666666
-printf("%.35Lg") gives 1.8999999999999999999999999999999999
-g_Qfmt(0) gives 3 bytes: "1.9"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-= 1.8999999999999999999999999999999999
-fI[1] = #3fffe666 66666666 66666666 66666667
-= 1.9000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffe666 66666666 66666666 66666666
-printf("%.35Lg") gives -1.8999999999999999999999999999999999
-g_Qfmt(0) gives 4 bytes: "-1.9"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-= -1.9000000000000000000000000000000001
-fI[1] = #bfffe666 66666666 66666666 66666666
-= -1.8999999999999999999999999999999999
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff1999 99999999 99999999 9999999a
-printf("%.35Lg") gives 1.1000000000000000000000000000000001
-g_Qfmt(0) gives 3 bytes: "1.1"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-= 1.0999999999999999999999999999999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-= 1.1000000000000000000000000000000001
-fI[1] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff1999 99999999 99999999 99999999
-printf("%.35Lg") gives -1.0999999999999999999999999999999999
-g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-= -1.1000000000000000000000000000000001
-fI[1] = #bfff1999 99999999 99999999 99999999
-= -1.0999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff3333 33333333 33333333 33333334
-printf("%.35Lg") gives 1.2000000000000000000000000000000002
-g_Qfmt(0) gives 36 bytes: "1.2000000000000000000000000000000002"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-= 1.2
-fI[1] = #3fff3333 33333333 33333333 33333334
-= 1.2000000000000000000000000000000002
-fI[1] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff3333 33333333 33333333 33333333
-printf("%.35Lg") gives -1.2
-g_Qfmt(0) gives 4 bytes: "-1.2"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-= -1.2000000000000000000000000000000002
-fI[1] = #bfff3333 33333333 33333333 33333333
-= -1.2
-fI[1] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff4ccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives 1.3
-g_Qfmt(0) gives 3 bytes: "1.3"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-= 1.2999999999999999999999999999999998
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-= 1.3
-fI[1] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff4ccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives -1.2999999999999999999999999999999998
-g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-= -1.3
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-= -1.2999999999999999999999999999999998
-fI[1] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff6666 66666666 66666666 66666667
-printf("%.35Lg") gives 1.4000000000000000000000000000000001
-g_Qfmt(0) gives 36 bytes: "1.4000000000000000000000000000000001"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-= 1.3999999999999999999999999999999999
-fI[1] = #3fff6666 66666666 66666666 66666667
-= 1.4000000000000000000000000000000001
-fI[1] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff6666 66666666 66666666 66666666
-printf("%.35Lg") gives -1.3999999999999999999999999999999999
-g_Qfmt(0) gives 4 bytes: "-1.4"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-= -1.4000000000000000000000000000000001
-fI[1] = #bfff6666 66666666 66666666 66666666
-= -1.3999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-printf("%.35Lg") gives 1.5
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-= 1.5
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-printf("%.35Lg") gives -1.5
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-= -1.5
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fff9999 99999999 99999999 9999999a
-printf("%.35Lg") gives 1.6000000000000000000000000000000001
-g_Qfmt(0) gives 3 bytes: "1.6"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-= 1.5999999999999999999999999999999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-= 1.6000000000000000000000000000000001
-fI[1] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfff9999 99999999 99999999 99999999
-printf("%.35Lg") gives -1.5999999999999999999999999999999999
-g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-= -1.6000000000000000000000000000000001
-fI[1] = #bfff9999 99999999 99999999 99999999
-= -1.5999999999999999999999999999999999
-fI[1] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffb333 33333333 33333333 33333334
-printf("%.35Lg") gives 1.7000000000000000000000000000000002
-g_Qfmt(0) gives 36 bytes: "1.7000000000000000000000000000000002"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-= 1.7
-fI[1] = #3fffb333 33333333 33333333 33333334
-= 1.7000000000000000000000000000000002
-fI[1] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffb333 33333333 33333333 33333333
-printf("%.35Lg") gives -1.7
-g_Qfmt(0) gives 4 bytes: "-1.7"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-= -1.7000000000000000000000000000000002
-fI[1] = #bfffb333 33333333 33333333 33333333
-= -1.7
-fI[1] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffcccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives 1.8
-g_Qfmt(0) gives 3 bytes: "1.8"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-= 1.7999999999999999999999999999999998
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-= 1.8
-fI[1] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffcccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives -1.7999999999999999999999999999999998
-g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-= -1.8
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-= -1.7999999999999999999999999999999998
-fI[1] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 33
-with bits = #3fffe666 66666666 66666666 66666667
-printf("%.35Lg") gives 1.9000000000000000000000000000000001
-g_Qfmt(0) gives 36 bytes: "1.9000000000000000000000000000000001"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-= 1.8999999999999999999999999999999999
-fI[1] = #3fffe666 66666666 66666666 66666667
-= 1.9000000000000000000000000000000001
-fI[1] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 25
-with bits = #bfffe666 66666666 66666666 66666666
-printf("%.35Lg") gives -1.8999999999999999999999999999999999
-g_Qfmt(0) gives 4 bytes: "-1.9"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-= -1.9000000000000000000000000000000001
-fI[1] = #bfffe666 66666666 66666666 66666666
-= -1.8999999999999999999999999999999999
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff1999 99999999 99999999 99999999
-printf("%.35Lg") gives 1.0999999999999999999999999999999999
-g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff1999 99999999 99999999 99999999
-= 1.0999999999999999999999999999999999
-fI[1] = #3fff1999 99999999 99999999 9999999a
-= 1.1000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.1
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff1999 99999999 99999999 9999999a
-printf("%.35Lg") gives -1.1000000000000000000000000000000001
-g_Qfmt(0) gives 4 bytes: "-1.1"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff1999 99999999 99999999 9999999a
-= -1.1000000000000000000000000000000001
-fI[1] = #bfff1999 99999999 99999999 99999999
-= -1.0999999999999999999999999999999999
-fI[0] == strtod
-
-
-Input: 1.2
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff3333 33333333 33333333 33333333
-printf("%.35Lg") gives 1.2
-g_Qfmt(0) gives 3 bytes: "1.2"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff3333 33333333 33333333 33333333
-= 1.2
-fI[1] = #3fff3333 33333333 33333333 33333334
-= 1.2000000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: -1.2
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff3333 33333333 33333333 33333334
-printf("%.35Lg") gives -1.2000000000000000000000000000000002
-g_Qfmt(0) gives 37 bytes: "-1.2000000000000000000000000000000002"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff3333 33333333 33333333 33333334
-= -1.2000000000000000000000000000000002
-fI[1] = #bfff3333 33333333 33333333 33333333
-= -1.2
-fI[0] == strtod
-
-
-Input: 1.3
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff4ccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives 1.2999999999999999999999999999999998
-g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff4ccc cccccccc cccccccc cccccccc
-= 1.2999999999999999999999999999999998
-fI[1] = #3fff4ccc cccccccc cccccccc cccccccd
-= 1.3
-fI[0] == strtod
-
-
-Input: -1.3
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff4ccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives -1.3
-g_Qfmt(0) gives 4 bytes: "-1.3"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff4ccc cccccccc cccccccc cccccccd
-= -1.3
-fI[1] = #bfff4ccc cccccccc cccccccc cccccccc
-= -1.2999999999999999999999999999999998
-fI[0] == strtod
-
-
-Input: 1.4
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff6666 66666666 66666666 66666666
-printf("%.35Lg") gives 1.3999999999999999999999999999999999
-g_Qfmt(0) gives 3 bytes: "1.4"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fff6666 66666666 66666666 66666666
-= 1.3999999999999999999999999999999999
-fI[1] = #3fff6666 66666666 66666666 66666667
-= 1.4000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.4
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff6666 66666666 66666666 66666667
-printf("%.35Lg") gives -1.4000000000000000000000000000000001
-g_Qfmt(0) gives 37 bytes: "-1.4000000000000000000000000000000001"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfff6666 66666666 66666666 66666667
-= -1.4000000000000000000000000000000001
-fI[1] = #bfff6666 66666666 66666666 66666666
-= -1.3999999999999999999999999999999999
-fI[0] == strtod
-
-
-Input: 1.5
-
-strtoQ consumes 3 bytes and returns 1
-with bits = #3fff8000 0 0 0
-printf("%.35Lg") gives 1.5
-g_Qfmt(0) gives 3 bytes: "1.5"
-
-strtoIQ returns 1, consuming 3 bytes.
-fI[0] == fI[1] = #3fff8000 0 0 0
-= 1.5
-
-
-Input: -1.5
-
-strtoQ consumes 4 bytes and returns 9
-with bits = #bfff8000 0 0 0
-printf("%.35Lg") gives -1.5
-g_Qfmt(0) gives 4 bytes: "-1.5"
-
-strtoIQ returns 9, consuming 4 bytes.
-fI[0] == fI[1] = #bfff8000 0 0 0
-= -1.5
-
-
-Input: 1.6
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fff9999 99999999 99999999 99999999
-printf("%.35Lg") gives 1.5999999999999999999999999999999999
-g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fff9999 99999999 99999999 99999999
-= 1.5999999999999999999999999999999999
-fI[1] = #3fff9999 99999999 99999999 9999999a
-= 1.6000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.6
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfff9999 99999999 99999999 9999999a
-printf("%.35Lg") gives -1.6000000000000000000000000000000001
-g_Qfmt(0) gives 4 bytes: "-1.6"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfff9999 99999999 99999999 9999999a
-= -1.6000000000000000000000000000000001
-fI[1] = #bfff9999 99999999 99999999 99999999
-= -1.5999999999999999999999999999999999
-fI[0] == strtod
-
-
-Input: 1.7
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffb333 33333333 33333333 33333333
-printf("%.35Lg") gives 1.7
-g_Qfmt(0) gives 3 bytes: "1.7"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffb333 33333333 33333333 33333333
-= 1.7
-fI[1] = #3fffb333 33333333 33333333 33333334
-= 1.7000000000000000000000000000000002
-fI[0] == strtod
-
-
-Input: -1.7
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffb333 33333333 33333333 33333334
-printf("%.35Lg") gives -1.7000000000000000000000000000000002
-g_Qfmt(0) gives 37 bytes: "-1.7000000000000000000000000000000002"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffb333 33333333 33333333 33333334
-= -1.7000000000000000000000000000000002
-fI[1] = #bfffb333 33333333 33333333 33333333
-= -1.7
-fI[0] == strtod
-
-
-Input: 1.8
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffcccc cccccccc cccccccc cccccccc
-printf("%.35Lg") gives 1.7999999999999999999999999999999998
-g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998"
-
-strtoIQ returns 33, consuming 3 bytes.
-fI[0] = #3fffcccc cccccccc cccccccc cccccccc
-= 1.7999999999999999999999999999999998
-fI[1] = #3fffcccc cccccccc cccccccc cccccccd
-= 1.8
-fI[0] == strtod
-
-
-Input: -1.8
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffcccc cccccccc cccccccc cccccccd
-printf("%.35Lg") gives -1.8
-g_Qfmt(0) gives 4 bytes: "-1.8"
-
-strtoIQ returns 41, consuming 4 bytes.
-fI[0] = #bfffcccc cccccccc cccccccc cccccccd
-= -1.8
-fI[1] = #bfffcccc cccccccc cccccccc cccccccc
-= -1.7999999999999999999999999999999998
-fI[0] == strtod
-
-
-Input: 1.9
-
-strtoQ consumes 3 bytes and returns 17
-with bits = #3fffe666 66666666 66666666 66666666
-printf("%.35Lg") gives 1.8999999999999999999999999999999999
-g_Qfmt(0) gives 3 bytes: "1.9"
-
-strtoIQ returns 17, consuming 3 bytes.
-fI[0] = #3fffe666 66666666 66666666 66666666
-= 1.8999999999999999999999999999999999
-fI[1] = #3fffe666 66666666 66666666 66666667
-= 1.9000000000000000000000000000000001
-fI[0] == strtod
-
-
-Input: -1.9
-
-strtoQ consumes 4 bytes and returns 41
-with bits = #bfffe666 66666666 66666666 66666667
-printf("%.35Lg") gives -1.9000000000000000000000000000000001
-g_Qfmt(0) gives 37 bytes: "-1.9000000000000000000000000000000001"
-
-strtoIQ returns 25, consuming 4 bytes.
-fI[0] = #bfffe666 66666666 66666666 66666667
-= -1.9000000000000000000000000000000001
-fI[1] = #bfffe666 66666666 66666666 66666666
-= -1.8999999999999999999999999999999999
-fI[0] == strtod
-
diff --git a/float/gdtoa/test/Qtest.c b/float/gdtoa/test/Qtest.c
deleted file mode 100644 (file)
index 14e5de7..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for g_Qfmt, strtoIQ, strtopQ, and strtorQ.
- *
- * Inputs (on stdin):
- *             r rounding_mode
- *             n ndig
- *             number
- *             #hex0 hex1 hex2 hex3
- *
- *     rounding_mode values:
- *             0 = toward zero
- *             1 = nearest
- *             2 = toward +Infinity
- *             3 = toward -Infinity
- *
- * where number is a decimal floating-point number,
- * hex0 is a string of <= 8 Hex digits for the most significant
- * word of the number, hex1 is a similar string for the next
- * word, etc., and ndig is a parameters to g_Qfmt.
- */
-
-#include "gdtoa.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
- extern int getround ANSI((int,char*));
-
- static char ibuf[2048], obuf[2048];
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#endif
-#ifdef IEEE_8087
-#define _0 3
-#define _1 2
-#define _2 1
-#define _3 0
-#endif
-
-#define U (unsigned long)
-
- int
-main(Void)
-{
-       char *s, *se, *se1;
-       int i, dItry, ndig = 0, r = 1;
-       union { long double d; ULong bits[4]; } u, v[2];
-
-       while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               dItry = 0;
-               switch(*s) {
-                 case 'r':
-                       r = getround(r, s);
-                       continue;
-                 case 'n':
-                       i = s[1];
-                       if (i <= ' ' || i >= '0' && i <= '9') {
-                               ndig = atoi(s+1);
-                               continue;
-                               }
-                       break; /* nan? */
-                 case '#':
-                       sscanf(s+1, "%lx %lx %lx %lx", &u.bits[_0],
-                               &u.bits[_1], &u.bits[_2], &u.bits[_3]);
-                       printf("\nInput: %s", ibuf);
-                       printf(" --> f = #%lx %lx %lx %lx\n", u.bits[_0],
-                               u.bits[_1], u.bits[_2], u.bits[_3]);
-                       goto fmt_test;
-                       }
-               dItry = 1;
-               printf("\nInput: %s", ibuf);
-               i = strtorQ(ibuf, &se, r, u.bits);
-               if (r == 1 && (strtopQ(ibuf,&se1,v[0].bits) != i
-                || se != se1 || memcmp(u.bits, v[0].bits, 16)))
-                       printf("***strtoQ and strtorQ disagree!!\n:");
-               printf("\nstrtoQ consumes %d bytes and returns %d\n",
-                               (int)(se-ibuf), i);
-               printf("with bits = #%lx %lx %lx %lx\n",
-                       U u.bits[_0], U u.bits[_1], U u.bits[_2], U u.bits[_3]);
- fmt_test:
-               if (sizeof(long double) == 16)
-                       printf("printf(\"%%.35Lg\") gives %.35Lg\n", u.d);
-               se = g_Qfmt(obuf, u.bits, ndig, sizeof(obuf));
-               printf("g_Qfmt(%d) gives %d bytes: \"%s\"\n\n", ndig,
-                       (int)(se-obuf), se ? obuf : "<null>");
-               if (!dItry)
-                       continue;
-               printf("strtoIQ returns %d,",
-                       strtoIQ(ibuf, &se, v[0].bits, v[1].bits));
-               printf(" consuming %d bytes.\n", (int)(se-ibuf));
-               if (!memcmp(v[0].bits, v[1].bits, 16)) {
-                       if (!memcpy(u.bits, v[0].bits, 16))
-                               printf("fI[0] == fI[1] == strtoQ\n");
-                       else {
-                               printf("fI[0] == fI[1] = #%lx %lx %lx %lx\n",
-                                       U v[0].bits[_0], U v[0].bits[_1],
-                                       U v[0].bits[_2], U v[0].bits[_3]);
-                               if (sizeof(long double) == 16)
-                                   printf("= %.35Lg\n", v[0].d);
-                               }
-                       }
-               else {
-                       printf("fI[0] = #%lx %lx %lx %lx\n",
-                                       U v[0].bits[_0], U v[0].bits[_1],
-                                       U v[0].bits[_2], U v[0].bits[_3]);
-                       if (sizeof(long double) == 16)
-                               printf("= %.35Lg\n", v[0].d);
-                       printf("fI[1] = #%lx %lx %lx %lx\n",
-                                       U v[1].bits[_0], U v[1].bits[_1],
-                                       U v[1].bits[_2], U v[1].bits[_3]);
-                       if (sizeof(long double) == 16)
-                               printf("= %.35Lg\n", v[1].d);
-                       if (!memcmp(v[0].bits, u.bits, 16))
-                               printf("fI[0] == strtod\n");
-                       else if (!memcmp(v[1].bits, u.bits, 16))
-                               printf("fI[1] == strtod\n");
-                       else
-                               printf("**** Both differ from strtod ****\n");
-                       }
-               printf("\n");
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/README b/float/gdtoa/test/README
deleted file mode 100644 (file)
index 79b1c91..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-This directory contains source for several test programs:
-
-dt is for conversion to/from double; it permits input of pairs of
-32-bit hex integers as #hhhhhhhh hhhhhhhh (i.e., the initial '#'
-indicates hex input).  No initial # ==> decimal input.
-After the input number is an optional : mode ndigits
-(colon, and decimal integers for parameters "mode" and "ndigits"
-to gdtoa).
-
-Qtest, ddtest, dtest, ftest, xLtest and xtest are for conversion to/from
-
-       f       IEEE single precision
-       d       IEEE double precision
-       xL      IEEE extended precision, as on Motorola 680x0 chips
-       x       IEEE extended precision, as on Intel 80x87 chips or
-                       software emulation of Motorola 680x0 chips
-       Q       quad precision, as on Sun Sparc chips
-       dd      double double, pairs of IEEE double numbers
-               whose sum is the desired value
-
-They're all similar, except for the precision.  They test both
-directed roundings and interval input (the strtoI* routines).
-Lines that begin with "r" specify or interrogate the desired rounding
-direction:
-
-       0 = toward 0
-       1 = nearest (default)
-       2 = toward +Infinity
-       3 = toward -Infinity
-
-These are the FPI_Round_* values in gdota.h.  The "r" value is sticky:
-it stays in effect til changed.  To change the value, give a line that
-starts with r followed by 0, 1, 2, or 3.  To check the value, give "r"
-by itself.
-
-Lines that begin with n followed by a number specify the ndig
-argument for subsequent calls to the relevant g_*fmt routine.
-
-Lines that start with # followed by the appropriate number of
-hexadecimal strings (see the comments) give the big-endian
-internal representation of the desired number.
-
-When routines Qtest, xLtest, and xtest are used on machines whose
-long double is of type "quad" (for Qtest) or "extended" (for x*test),
-they try to print with %Lg as another way to show binary values.
-
-Program ddtest also accepts (white-space separated) pairs of decimal
-input numbers; it converts both with strtod and feeds the result
-to g_ddfmt.
-
-Program dItest exercises strtodI and strtoId.
-
-Programs dItestsi and ddtestsi are for testing the sudden-underflow
-logic (on double and double-double conversions).
-
-Program strtodt tests strtod on some hard cases (in file testnos3)
-posted by Fred Tydeman to comp.arch.arithmetic on 26 Feb. 1996.
-
-These are simple test programs, not meant for exhaustive testing,
-but for manually testing "interesting" cases.  Paxson's testbase
-is good for more exhaustive testing, in part with random inputs.
diff --git a/float/gdtoa/test/d.out b/float/gdtoa/test/d.out
deleted file mode 100644 (file)
index a0ac991..0000000
+++ /dev/null
@@ -1,986 +0,0 @@
-
-Input: 1.23
-strtod consumes 4 bytes and returns 17 with f = 1.23 = #3ff3ae14 7ae147ae
-g_dfmt(0) gives 4 bytes: "1.23"
-
-strtoId returns 17, consuming 4 bytes.
-fI[0] = #3ff3ae14 7ae147ae = 1.23
-fI[1] = #3ff3ae14 7ae147af = 1.2300000000000002
-fI[0] == strtod
-
-
-Input: 1.23e+20
-strtod consumes 8 bytes and returns 1 with f = 1.23e+20 = #441aabdf 2145b430
-g_dfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoId returns 1, consuming 8 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: 1.23e-20
-strtod consumes 8 bytes and returns 33 with f = 1.2300000000000001e-20 = #3bcd0ae4 cf767531
-g_dfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoId returns 33, consuming 8 bytes.
-fI[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20
-fI[1] = #3bcd0ae4 cf767531 = 1.2300000000000001e-20
-fI[1] == strtod
-
-
-Input: 1.23456789
-strtod consumes 10 bytes and returns 17 with f = 1.2345678899999999 = #3ff3c0ca 4283de1b
-g_dfmt(0) gives 10 bytes: "1.23456789"
-
-strtoId returns 17, consuming 10 bytes.
-fI[0] = #3ff3c0ca 4283de1b = 1.2345678899999999
-fI[1] = #3ff3c0ca 4283de1c = 1.2345678900000001
-fI[0] == strtod
-
-
-Input: 1.23456589e+20
-strtod consumes 14 bytes and returns 17 with f = 1.23456589e+20 = #441ac537 a660b997
-g_dfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoId returns 17, consuming 14 bytes.
-fI[0] = #441ac537 a660b997 = 1.23456589e+20
-fI[1] = #441ac537 a660b998 = 1.2345658900000001e+20
-fI[0] == strtod
-
-
-Input: 1.23e+30
-strtod consumes 8 bytes and returns 17 with f = 1.23e+30 = #462f0cb0 4e8fb790
-g_dfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoId returns 17, consuming 8 bytes.
-fI[0] = #462f0cb0 4e8fb790 = 1.23e+30
-fI[1] = #462f0cb0 4e8fb791 = 1.2300000000000001e+30
-fI[0] == strtod
-
-
-Input: 1.23e-30
-strtod consumes 8 bytes and returns 33 with f = 1.2300000000000001e-30 = #39b8f286 6f5010ab
-g_dfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoId returns 33, consuming 8 bytes.
-fI[0] = #39b8f286 6f5010aa = 1.2299999999999999e-30
-fI[1] = #39b8f286 6f5010ab = 1.2300000000000001e-30
-fI[1] == strtod
-
-
-Input: 1.23456789e-20
-strtod consumes 14 bytes and returns 17 with f = 1.2345678899999999e-20 = #3bcd2681 471e7ada
-g_dfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoId returns 17, consuming 14 bytes.
-fI[0] = #3bcd2681 471e7ada = 1.2345678899999999e-20
-fI[1] = #3bcd2681 471e7adb = 1.2345678900000001e-20
-fI[0] == strtod
-
-
-Input: 1.23456789e-30
-strtod consumes 14 bytes and returns 17 with f = 1.23456789e-30 = #39b90a3e 33bbd995
-g_dfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoId returns 17, consuming 14 bytes.
-fI[0] = #39b90a3e 33bbd995 = 1.23456789e-30
-fI[1] = #39b90a3e 33bbd996 = 1.2345678900000002e-30
-fI[0] == strtod
-
-
-Input: 1.234567890123456789
-strtod consumes 20 bytes and returns 17 with f = 1.2345678901234567 = #3ff3c0ca 428c59fb
-g_dfmt(0) gives 18 bytes: "1.2345678901234567"
-
-strtoId returns 17, consuming 20 bytes.
-fI[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-fI[1] = #3ff3c0ca 428c59fc = 1.2345678901234569
-fI[0] == strtod
-
-
-Input: 1.23456789012345678901234567890123456789
-strtod consumes 40 bytes and returns 17 with f = 1.2345678901234567 = #3ff3c0ca 428c59fb
-g_dfmt(0) gives 18 bytes: "1.2345678901234567"
-
-strtoId returns 17, consuming 40 bytes.
-fI[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-fI[1] = #3ff3c0ca 428c59fc = 1.2345678901234569
-fI[0] == strtod
-
-
-Input: 1.23e306
-strtod consumes 8 bytes and returns 33 with f = 1.23e+306 = #7f7c0676 cd1c61f5
-g_dfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoId returns 33, consuming 8 bytes.
-fI[0] = #7f7c0676 cd1c61f4 = 1.2299999999999999e+306
-fI[1] = #7f7c0676 cd1c61f5 = 1.23e+306
-fI[1] == strtod
-
-
-Input: 1.23e-306
-strtod consumes 9 bytes and returns 33 with f = 1.23e-306 = #6ba3b8 5da396e8
-g_dfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoId returns 33, consuming 9 bytes.
-fI[0] = #6ba3b8 5da396e7 = 1.2299999999999999e-306
-fI[1] = #6ba3b8 5da396e8 = 1.23e-306
-fI[1] == strtod
-
-
-Input: 1.23e-320
-strtod consumes 9 bytes and returns 98 with f = 1.2302234581447039e-320 = #0 9ba
-g_dfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoId returns 98, consuming 9 bytes.
-fI[0] = #0 9b9 = 1.2297293924988626e-320
-fI[1] = #0 9ba = 1.2302234581447039e-320
-fI[1] == strtod
-
-
-Input: 1.23e-20
-strtod consumes 8 bytes and returns 33 with f = 1.2300000000000001e-20 = #3bcd0ae4 cf767531
-g_dfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoId returns 33, consuming 8 bytes.
-fI[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20
-fI[1] = #3bcd0ae4 cf767531 = 1.2300000000000001e-20
-fI[1] == strtod
-
-
-Input: 1.23456789e307
-strtod consumes 14 bytes and returns 33 with f = 1.23456789e+307 = #7fb194b1 4bdaecdc
-g_dfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoId returns 33, consuming 14 bytes.
-fI[0] = #7fb194b1 4bdaecdb = 1.2345678899999998e+307
-fI[1] = #7fb194b1 4bdaecdc = 1.23456789e+307
-fI[1] == strtod
-
-
-Input: 1.23456589e-307
-strtod consumes 15 bytes and returns 17 with f = 1.2345658899999999e-307 = #363196 bb9845fa
-g_dfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoId returns 17, consuming 15 bytes.
-fI[0] = #363196 bb9845fa = 1.2345658899999999e-307
-fI[1] = #363196 bb9845fb = 1.2345658900000001e-307
-fI[0] == strtod
-
-
-Input: 1.234567890123456789
-strtod consumes 20 bytes and returns 17 with f = 1.2345678901234567 = #3ff3c0ca 428c59fb
-g_dfmt(0) gives 18 bytes: "1.2345678901234567"
-
-strtoId returns 17, consuming 20 bytes.
-fI[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-fI[1] = #3ff3c0ca 428c59fc = 1.2345678901234569
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e301
-strtod consumes 24 bytes and returns 17 with f = 1.2345678901234568e+301 = #7e726f51 75f56413
-g_dfmt(0) gives 23 bytes: "1.2345678901234568e+301"
-
-strtoId returns 17, consuming 24 bytes.
-fI[0] = #7e726f51 75f56413 = 1.2345678901234568e+301
-fI[1] = #7e726f51 75f56414 = 1.234567890123457e+301
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e-301
-strtod consumes 25 bytes and returns 17 with f = 1.2345678901234567e-301 = #1752a64 e34ba0d3
-g_dfmt(0) gives 23 bytes: "1.2345678901234567e-301"
-
-strtoId returns 17, consuming 25 bytes.
-fI[0] = #1752a64 e34ba0d3 = 1.2345678901234567e-301
-fI[1] = #1752a64 e34ba0d4 = 1.2345678901234569e-301
-fI[0] == strtod
-
-
-Input: 1.234567890123456789e-321
-strtod consumes 25 bytes and returns 98 with f = 1.2351641146031164e-321 = #0 fa
-g_dfmt(0) gives 10 bytes: "1.235e-321"
-
-strtoId returns 98, consuming 25 bytes.
-fI[0] = #0 f9 = 1.2302234581447039e-321
-fI[1] = #0 fa = 1.2351641146031164e-321
-fI[1] == strtod
-
-
-Input: 1e23
-strtod consumes 4 bytes and returns 17 with f = 9.9999999999999992e+22 = #44b52d02 c7e14af6
-g_dfmt(0) gives 5 bytes: "1e+23"
-
-strtoId returns 17, consuming 4 bytes.
-fI[0] = #44b52d02 c7e14af6 = 9.9999999999999992e+22
-fI[1] = #44b52d02 c7e14af7 = 1.0000000000000001e+23
-fI[0] == strtod
-
-
-Input: 1e310
-strtod consumes 5 bytes and returns 163 with f = Infinity = #7ff00000 0
-g_dfmt(0) gives 8 bytes: "Infinity"
-
-strtoId returns 163, consuming 5 bytes.
-fI[0] = #7fefffff ffffffff = 1.7976931348623157e+308
-fI[1] = #7ff00000 0 = Infinity
-fI[1] == strtod
-
-
-Input: 9.0259718793241475e-277
-strtod consumes 23 bytes and returns 33 with f = 9.0259718793241479e-277 = #6a00000 0
-g_dfmt(0) gives 22 bytes: "9.025971879324148e-277"
-
-strtoId returns 33, consuming 23 bytes.
-fI[0] = #69fffff ffffffff = 9.0259718793241469e-277
-fI[1] = #6a00000 0 = 9.0259718793241479e-277
-fI[1] == strtod
-
-
-Input: 9.025971879324147880346310405869e-277
-strtod consumes 37 bytes and returns 17 with f = 9.0259718793241479e-277 = #6a00000 0
-g_dfmt(0) gives 22 bytes: "9.025971879324148e-277"
-
-strtoId returns 17, consuming 37 bytes.
-fI[0] = #6a00000 0 = 9.0259718793241479e-277
-fI[1] = #6a00000 1 = 9.0259718793241499e-277
-fI[0] == strtod
-
-
-Input: 9.025971879324147880346310405868e-277
-strtod consumes 37 bytes and returns 33 with f = 9.0259718793241479e-277 = #6a00000 0
-g_dfmt(0) gives 22 bytes: "9.025971879324148e-277"
-
-strtoId returns 33, consuming 37 bytes.
-fI[0] = #69fffff ffffffff = 9.0259718793241469e-277
-fI[1] = #6a00000 0 = 9.0259718793241479e-277
-fI[1] == strtod
-
-
-Input: 2.2250738585072014e-308
-strtod consumes 23 bytes and returns 17 with f = 2.2250738585072014e-308 = #100000 0
-g_dfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoId returns 17, consuming 23 bytes.
-fI[0] = #100000 0 = 2.2250738585072014e-308
-fI[1] = #100000 1 = 2.2250738585072019e-308
-fI[0] == strtod
-
-
-Input: 2.2250738585072013e-308
-strtod consumes 23 bytes and returns 33 with f = 2.2250738585072014e-308 = #100000 0
-g_dfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoId returns 33, consuming 23 bytes.
-fI[0] = #fffff ffffffff = 2.2250738585072009e-308
-fI[1] = #100000 0 = 2.2250738585072014e-308
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-strtod consumes 3 bytes and returns 17 with f = 1.0999999999999999 = #3ff19999 99999999
-g_dfmt(0) gives 18 bytes: "1.0999999999999999"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff19999 99999999 = 1.0999999999999999
-fI[1] = #3ff19999 9999999a = 1.1000000000000001
-fI[0] == strtod
-
-
-Input: -1.1
-strtod consumes 4 bytes and returns 25 with f = -1.0999999999999999 = #bff19999 99999999
-g_dfmt(0) gives 19 bytes: "-1.0999999999999999"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff19999 9999999a = -1.1000000000000001
-fI[1] = #bff19999 99999999 = -1.0999999999999999
-fI[1] == strtod
-
-
-Input: 1.2
-strtod consumes 3 bytes and returns 17 with f = 1.2 = #3ff33333 33333333
-g_dfmt(0) gives 3 bytes: "1.2"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 33333333 = 1.2
-fI[1] = #3ff33333 33333334 = 1.2000000000000002
-fI[0] == strtod
-
-
-Input: -1.2
-strtod consumes 4 bytes and returns 25 with f = -1.2 = #bff33333 33333333
-g_dfmt(0) gives 4 bytes: "-1.2"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff33333 33333334 = -1.2000000000000002
-fI[1] = #bff33333 33333333 = -1.2
-fI[1] == strtod
-
-
-Input: 1.3
-strtod consumes 3 bytes and returns 17 with f = 1.2999999999999998 = #3ff4cccc cccccccc
-g_dfmt(0) gives 18 bytes: "1.2999999999999998"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff4cccc cccccccc = 1.2999999999999998
-fI[1] = #3ff4cccc cccccccd = 1.3
-fI[0] == strtod
-
-
-Input: -1.3
-strtod consumes 4 bytes and returns 25 with f = -1.2999999999999998 = #bff4cccc cccccccc
-g_dfmt(0) gives 19 bytes: "-1.2999999999999998"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff4cccc cccccccd = -1.3
-fI[1] = #bff4cccc cccccccc = -1.2999999999999998
-fI[1] == strtod
-
-
-Input: 1.4
-strtod consumes 3 bytes and returns 17 with f = 1.3999999999999999 = #3ff66666 66666666
-g_dfmt(0) gives 3 bytes: "1.4"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff66666 66666666 = 1.3999999999999999
-fI[1] = #3ff66666 66666667 = 1.4000000000000001
-fI[0] == strtod
-
-
-Input: -1.4
-strtod consumes 4 bytes and returns 25 with f = -1.3999999999999999 = #bff66666 66666666
-g_dfmt(0) gives 4 bytes: "-1.4"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff66666 66666667 = -1.4000000000000001
-fI[1] = #bff66666 66666666 = -1.3999999999999999
-fI[1] == strtod
-
-
-Input: 1.5
-strtod consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0
-g_dfmt(0) gives 3 bytes: "1.5"
-
-strtoId returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: -1.5
-strtod consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0
-g_dfmt(0) gives 4 bytes: "-1.5"
-
-strtoId returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: 1.6
-strtod consumes 3 bytes and returns 17 with f = 1.5999999999999999 = #3ff99999 99999999
-g_dfmt(0) gives 18 bytes: "1.5999999999999999"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff99999 99999999 = 1.5999999999999999
-fI[1] = #3ff99999 9999999a = 1.6000000000000001
-fI[0] == strtod
-
-
-Input: -1.6
-strtod consumes 4 bytes and returns 25 with f = -1.5999999999999999 = #bff99999 99999999
-g_dfmt(0) gives 19 bytes: "-1.5999999999999999"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff99999 9999999a = -1.6000000000000001
-fI[1] = #bff99999 99999999 = -1.5999999999999999
-fI[1] == strtod
-
-
-Input: 1.7
-strtod consumes 3 bytes and returns 17 with f = 1.7 = #3ffb3333 33333333
-g_dfmt(0) gives 3 bytes: "1.7"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffb3333 33333333 = 1.7
-fI[1] = #3ffb3333 33333334 = 1.7000000000000002
-fI[0] == strtod
-
-
-Input: -1.7
-strtod consumes 4 bytes and returns 25 with f = -1.7 = #bffb3333 33333333
-g_dfmt(0) gives 4 bytes: "-1.7"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffb3333 33333334 = -1.7000000000000002
-fI[1] = #bffb3333 33333333 = -1.7
-fI[1] == strtod
-
-
-Input: 1.8
-strtod consumes 3 bytes and returns 17 with f = 1.7999999999999998 = #3ffccccc cccccccc
-g_dfmt(0) gives 18 bytes: "1.7999999999999998"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ffccccc cccccccc = 1.7999999999999998
-fI[1] = #3ffccccc cccccccd = 1.8
-fI[0] == strtod
-
-
-Input: -1.8
-strtod consumes 4 bytes and returns 25 with f = -1.7999999999999998 = #bffccccc cccccccc
-g_dfmt(0) gives 19 bytes: "-1.7999999999999998"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bffccccc cccccccd = -1.8
-fI[1] = #bffccccc cccccccc = -1.7999999999999998
-fI[1] == strtod
-
-
-Input: 1.9
-strtod consumes 3 bytes and returns 17 with f = 1.8999999999999999 = #3ffe6666 66666666
-g_dfmt(0) gives 3 bytes: "1.9"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffe6666 66666666 = 1.8999999999999999
-fI[1] = #3ffe6666 66666667 = 1.9000000000000001
-fI[0] == strtod
-
-
-Input: -1.9
-strtod consumes 4 bytes and returns 25 with f = -1.8999999999999999 = #bffe6666 66666666
-g_dfmt(0) gives 4 bytes: "-1.9"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffe6666 66666667 = -1.9000000000000001
-fI[1] = #bffe6666 66666666 = -1.8999999999999999
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-strtod consumes 3 bytes and returns 33 with f = 1.1000000000000001 = #3ff19999 9999999a
-g_dfmt(0) gives 3 bytes: "1.1"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff19999 99999999 = 1.0999999999999999
-fI[1] = #3ff19999 9999999a = 1.1000000000000001
-fI[1] == strtod
-
-
-Input: -1.1
-strtod consumes 4 bytes and returns 41 with f = -1.1000000000000001 = #bff19999 9999999a
-g_dfmt(0) gives 4 bytes: "-1.1"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff19999 9999999a = -1.1000000000000001
-fI[1] = #bff19999 99999999 = -1.0999999999999999
-fI[0] == strtod
-
-
-Input: 1.2
-strtod consumes 3 bytes and returns 17 with f = 1.2 = #3ff33333 33333333
-g_dfmt(0) gives 3 bytes: "1.2"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 33333333 = 1.2
-fI[1] = #3ff33333 33333334 = 1.2000000000000002
-fI[0] == strtod
-
-
-Input: -1.2
-strtod consumes 4 bytes and returns 25 with f = -1.2 = #bff33333 33333333
-g_dfmt(0) gives 4 bytes: "-1.2"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff33333 33333334 = -1.2000000000000002
-fI[1] = #bff33333 33333333 = -1.2
-fI[1] == strtod
-
-
-Input: 1.3
-strtod consumes 3 bytes and returns 33 with f = 1.3 = #3ff4cccc cccccccd
-g_dfmt(0) gives 3 bytes: "1.3"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff4cccc cccccccc = 1.2999999999999998
-fI[1] = #3ff4cccc cccccccd = 1.3
-fI[1] == strtod
-
-
-Input: -1.3
-strtod consumes 4 bytes and returns 41 with f = -1.3 = #bff4cccc cccccccd
-g_dfmt(0) gives 4 bytes: "-1.3"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff4cccc cccccccd = -1.3
-fI[1] = #bff4cccc cccccccc = -1.2999999999999998
-fI[0] == strtod
-
-
-Input: 1.4
-strtod consumes 3 bytes and returns 17 with f = 1.3999999999999999 = #3ff66666 66666666
-g_dfmt(0) gives 3 bytes: "1.4"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff66666 66666666 = 1.3999999999999999
-fI[1] = #3ff66666 66666667 = 1.4000000000000001
-fI[0] == strtod
-
-
-Input: -1.4
-strtod consumes 4 bytes and returns 25 with f = -1.3999999999999999 = #bff66666 66666666
-g_dfmt(0) gives 4 bytes: "-1.4"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff66666 66666667 = -1.4000000000000001
-fI[1] = #bff66666 66666666 = -1.3999999999999999
-fI[1] == strtod
-
-
-Input: 1.5
-strtod consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0
-g_dfmt(0) gives 3 bytes: "1.5"
-
-strtoId returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: -1.5
-strtod consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0
-g_dfmt(0) gives 4 bytes: "-1.5"
-
-strtoId returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: 1.6
-strtod consumes 3 bytes and returns 33 with f = 1.6000000000000001 = #3ff99999 9999999a
-g_dfmt(0) gives 3 bytes: "1.6"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff99999 99999999 = 1.5999999999999999
-fI[1] = #3ff99999 9999999a = 1.6000000000000001
-fI[1] == strtod
-
-
-Input: -1.6
-strtod consumes 4 bytes and returns 41 with f = -1.6000000000000001 = #bff99999 9999999a
-g_dfmt(0) gives 4 bytes: "-1.6"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff99999 9999999a = -1.6000000000000001
-fI[1] = #bff99999 99999999 = -1.5999999999999999
-fI[0] == strtod
-
-
-Input: 1.7
-strtod consumes 3 bytes and returns 17 with f = 1.7 = #3ffb3333 33333333
-g_dfmt(0) gives 3 bytes: "1.7"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffb3333 33333333 = 1.7
-fI[1] = #3ffb3333 33333334 = 1.7000000000000002
-fI[0] == strtod
-
-
-Input: -1.7
-strtod consumes 4 bytes and returns 25 with f = -1.7 = #bffb3333 33333333
-g_dfmt(0) gives 4 bytes: "-1.7"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffb3333 33333334 = -1.7000000000000002
-fI[1] = #bffb3333 33333333 = -1.7
-fI[1] == strtod
-
-
-Input: 1.8
-strtod consumes 3 bytes and returns 33 with f = 1.8 = #3ffccccc cccccccd
-g_dfmt(0) gives 3 bytes: "1.8"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ffccccc cccccccc = 1.7999999999999998
-fI[1] = #3ffccccc cccccccd = 1.8
-fI[1] == strtod
-
-
-Input: -1.8
-strtod consumes 4 bytes and returns 41 with f = -1.8 = #bffccccc cccccccd
-g_dfmt(0) gives 4 bytes: "-1.8"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bffccccc cccccccd = -1.8
-fI[1] = #bffccccc cccccccc = -1.7999999999999998
-fI[0] == strtod
-
-
-Input: 1.9
-strtod consumes 3 bytes and returns 17 with f = 1.8999999999999999 = #3ffe6666 66666666
-g_dfmt(0) gives 3 bytes: "1.9"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffe6666 66666666 = 1.8999999999999999
-fI[1] = #3ffe6666 66666667 = 1.9000000000000001
-fI[0] == strtod
-
-
-Input: -1.9
-strtod consumes 4 bytes and returns 25 with f = -1.8999999999999999 = #bffe6666 66666666
-g_dfmt(0) gives 4 bytes: "-1.9"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffe6666 66666667 = -1.9000000000000001
-fI[1] = #bffe6666 66666666 = -1.8999999999999999
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-strtod consumes 3 bytes and returns 33 with f = 1.1000000000000001 = #3ff19999 9999999a
-g_dfmt(0) gives 3 bytes: "1.1"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff19999 99999999 = 1.0999999999999999
-fI[1] = #3ff19999 9999999a = 1.1000000000000001
-fI[1] == strtod
-
-
-Input: -1.1
-strtod consumes 4 bytes and returns 25 with f = -1.0999999999999999 = #bff19999 99999999
-g_dfmt(0) gives 19 bytes: "-1.0999999999999999"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff19999 9999999a = -1.1000000000000001
-fI[1] = #bff19999 99999999 = -1.0999999999999999
-fI[1] == strtod
-
-
-Input: 1.2
-strtod consumes 3 bytes and returns 33 with f = 1.2000000000000002 = #3ff33333 33333334
-g_dfmt(0) gives 18 bytes: "1.2000000000000002"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 33333333 = 1.2
-fI[1] = #3ff33333 33333334 = 1.2000000000000002
-fI[1] == strtod
-
-
-Input: -1.2
-strtod consumes 4 bytes and returns 25 with f = -1.2 = #bff33333 33333333
-g_dfmt(0) gives 4 bytes: "-1.2"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff33333 33333334 = -1.2000000000000002
-fI[1] = #bff33333 33333333 = -1.2
-fI[1] == strtod
-
-
-Input: 1.3
-strtod consumes 3 bytes and returns 33 with f = 1.3 = #3ff4cccc cccccccd
-g_dfmt(0) gives 3 bytes: "1.3"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff4cccc cccccccc = 1.2999999999999998
-fI[1] = #3ff4cccc cccccccd = 1.3
-fI[1] == strtod
-
-
-Input: -1.3
-strtod consumes 4 bytes and returns 25 with f = -1.2999999999999998 = #bff4cccc cccccccc
-g_dfmt(0) gives 19 bytes: "-1.2999999999999998"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff4cccc cccccccd = -1.3
-fI[1] = #bff4cccc cccccccc = -1.2999999999999998
-fI[1] == strtod
-
-
-Input: 1.4
-strtod consumes 3 bytes and returns 33 with f = 1.4000000000000001 = #3ff66666 66666667
-g_dfmt(0) gives 18 bytes: "1.4000000000000001"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff66666 66666666 = 1.3999999999999999
-fI[1] = #3ff66666 66666667 = 1.4000000000000001
-fI[1] == strtod
-
-
-Input: -1.4
-strtod consumes 4 bytes and returns 25 with f = -1.3999999999999999 = #bff66666 66666666
-g_dfmt(0) gives 4 bytes: "-1.4"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff66666 66666667 = -1.4000000000000001
-fI[1] = #bff66666 66666666 = -1.3999999999999999
-fI[1] == strtod
-
-
-Input: 1.5
-strtod consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0
-g_dfmt(0) gives 3 bytes: "1.5"
-
-strtoId returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: -1.5
-strtod consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0
-g_dfmt(0) gives 4 bytes: "-1.5"
-
-strtoId returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: 1.6
-strtod consumes 3 bytes and returns 33 with f = 1.6000000000000001 = #3ff99999 9999999a
-g_dfmt(0) gives 3 bytes: "1.6"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff99999 99999999 = 1.5999999999999999
-fI[1] = #3ff99999 9999999a = 1.6000000000000001
-fI[1] == strtod
-
-
-Input: -1.6
-strtod consumes 4 bytes and returns 25 with f = -1.5999999999999999 = #bff99999 99999999
-g_dfmt(0) gives 19 bytes: "-1.5999999999999999"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff99999 9999999a = -1.6000000000000001
-fI[1] = #bff99999 99999999 = -1.5999999999999999
-fI[1] == strtod
-
-
-Input: 1.7
-strtod consumes 3 bytes and returns 33 with f = 1.7000000000000002 = #3ffb3333 33333334
-g_dfmt(0) gives 18 bytes: "1.7000000000000002"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffb3333 33333333 = 1.7
-fI[1] = #3ffb3333 33333334 = 1.7000000000000002
-fI[1] == strtod
-
-
-Input: -1.7
-strtod consumes 4 bytes and returns 25 with f = -1.7 = #bffb3333 33333333
-g_dfmt(0) gives 4 bytes: "-1.7"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffb3333 33333334 = -1.7000000000000002
-fI[1] = #bffb3333 33333333 = -1.7
-fI[1] == strtod
-
-
-Input: 1.8
-strtod consumes 3 bytes and returns 33 with f = 1.8 = #3ffccccc cccccccd
-g_dfmt(0) gives 3 bytes: "1.8"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ffccccc cccccccc = 1.7999999999999998
-fI[1] = #3ffccccc cccccccd = 1.8
-fI[1] == strtod
-
-
-Input: -1.8
-strtod consumes 4 bytes and returns 25 with f = -1.7999999999999998 = #bffccccc cccccccc
-g_dfmt(0) gives 19 bytes: "-1.7999999999999998"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bffccccc cccccccd = -1.8
-fI[1] = #bffccccc cccccccc = -1.7999999999999998
-fI[1] == strtod
-
-
-Input: 1.9
-strtod consumes 3 bytes and returns 33 with f = 1.9000000000000001 = #3ffe6666 66666667
-g_dfmt(0) gives 18 bytes: "1.9000000000000001"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffe6666 66666666 = 1.8999999999999999
-fI[1] = #3ffe6666 66666667 = 1.9000000000000001
-fI[1] == strtod
-
-
-Input: -1.9
-strtod consumes 4 bytes and returns 25 with f = -1.8999999999999999 = #bffe6666 66666666
-g_dfmt(0) gives 4 bytes: "-1.9"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffe6666 66666667 = -1.9000000000000001
-fI[1] = #bffe6666 66666666 = -1.8999999999999999
-fI[1] == strtod
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-strtod consumes 3 bytes and returns 17 with f = 1.0999999999999999 = #3ff19999 99999999
-g_dfmt(0) gives 18 bytes: "1.0999999999999999"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff19999 99999999 = 1.0999999999999999
-fI[1] = #3ff19999 9999999a = 1.1000000000000001
-fI[0] == strtod
-
-
-Input: -1.1
-strtod consumes 4 bytes and returns 41 with f = -1.1000000000000001 = #bff19999 9999999a
-g_dfmt(0) gives 4 bytes: "-1.1"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff19999 9999999a = -1.1000000000000001
-fI[1] = #bff19999 99999999 = -1.0999999999999999
-fI[0] == strtod
-
-
-Input: 1.2
-strtod consumes 3 bytes and returns 17 with f = 1.2 = #3ff33333 33333333
-g_dfmt(0) gives 3 bytes: "1.2"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 33333333 = 1.2
-fI[1] = #3ff33333 33333334 = 1.2000000000000002
-fI[0] == strtod
-
-
-Input: -1.2
-strtod consumes 4 bytes and returns 41 with f = -1.2000000000000002 = #bff33333 33333334
-g_dfmt(0) gives 19 bytes: "-1.2000000000000002"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff33333 33333334 = -1.2000000000000002
-fI[1] = #bff33333 33333333 = -1.2
-fI[0] == strtod
-
-
-Input: 1.3
-strtod consumes 3 bytes and returns 17 with f = 1.2999999999999998 = #3ff4cccc cccccccc
-g_dfmt(0) gives 18 bytes: "1.2999999999999998"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff4cccc cccccccc = 1.2999999999999998
-fI[1] = #3ff4cccc cccccccd = 1.3
-fI[0] == strtod
-
-
-Input: -1.3
-strtod consumes 4 bytes and returns 41 with f = -1.3 = #bff4cccc cccccccd
-g_dfmt(0) gives 4 bytes: "-1.3"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff4cccc cccccccd = -1.3
-fI[1] = #bff4cccc cccccccc = -1.2999999999999998
-fI[0] == strtod
-
-
-Input: 1.4
-strtod consumes 3 bytes and returns 17 with f = 1.3999999999999999 = #3ff66666 66666666
-g_dfmt(0) gives 3 bytes: "1.4"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ff66666 66666666 = 1.3999999999999999
-fI[1] = #3ff66666 66666667 = 1.4000000000000001
-fI[0] == strtod
-
-
-Input: -1.4
-strtod consumes 4 bytes and returns 41 with f = -1.4000000000000001 = #bff66666 66666667
-g_dfmt(0) gives 19 bytes: "-1.4000000000000001"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bff66666 66666667 = -1.4000000000000001
-fI[1] = #bff66666 66666666 = -1.3999999999999999
-fI[0] == strtod
-
-
-Input: 1.5
-strtod consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0
-g_dfmt(0) gives 3 bytes: "1.5"
-
-strtoId returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: -1.5
-strtod consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0
-g_dfmt(0) gives 4 bytes: "-1.5"
-
-strtoId returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtod
-
-
-Input: 1.6
-strtod consumes 3 bytes and returns 17 with f = 1.5999999999999999 = #3ff99999 99999999
-g_dfmt(0) gives 18 bytes: "1.5999999999999999"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ff99999 99999999 = 1.5999999999999999
-fI[1] = #3ff99999 9999999a = 1.6000000000000001
-fI[0] == strtod
-
-
-Input: -1.6
-strtod consumes 4 bytes and returns 41 with f = -1.6000000000000001 = #bff99999 9999999a
-g_dfmt(0) gives 4 bytes: "-1.6"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bff99999 9999999a = -1.6000000000000001
-fI[1] = #bff99999 99999999 = -1.5999999999999999
-fI[0] == strtod
-
-
-Input: 1.7
-strtod consumes 3 bytes and returns 17 with f = 1.7 = #3ffb3333 33333333
-g_dfmt(0) gives 3 bytes: "1.7"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffb3333 33333333 = 1.7
-fI[1] = #3ffb3333 33333334 = 1.7000000000000002
-fI[0] == strtod
-
-
-Input: -1.7
-strtod consumes 4 bytes and returns 41 with f = -1.7000000000000002 = #bffb3333 33333334
-g_dfmt(0) gives 19 bytes: "-1.7000000000000002"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffb3333 33333334 = -1.7000000000000002
-fI[1] = #bffb3333 33333333 = -1.7
-fI[0] == strtod
-
-
-Input: 1.8
-strtod consumes 3 bytes and returns 17 with f = 1.7999999999999998 = #3ffccccc cccccccc
-g_dfmt(0) gives 18 bytes: "1.7999999999999998"
-
-strtoId returns 33, consuming 3 bytes.
-fI[0] = #3ffccccc cccccccc = 1.7999999999999998
-fI[1] = #3ffccccc cccccccd = 1.8
-fI[0] == strtod
-
-
-Input: -1.8
-strtod consumes 4 bytes and returns 41 with f = -1.8 = #bffccccc cccccccd
-g_dfmt(0) gives 4 bytes: "-1.8"
-
-strtoId returns 41, consuming 4 bytes.
-fI[0] = #bffccccc cccccccd = -1.8
-fI[1] = #bffccccc cccccccc = -1.7999999999999998
-fI[0] == strtod
-
-
-Input: 1.9
-strtod consumes 3 bytes and returns 17 with f = 1.8999999999999999 = #3ffe6666 66666666
-g_dfmt(0) gives 3 bytes: "1.9"
-
-strtoId returns 17, consuming 3 bytes.
-fI[0] = #3ffe6666 66666666 = 1.8999999999999999
-fI[1] = #3ffe6666 66666667 = 1.9000000000000001
-fI[0] == strtod
-
-
-Input: -1.9
-strtod consumes 4 bytes and returns 41 with f = -1.9000000000000001 = #bffe6666 66666667
-g_dfmt(0) gives 19 bytes: "-1.9000000000000001"
-
-strtoId returns 25, consuming 4 bytes.
-fI[0] = #bffe6666 66666667 = -1.9000000000000001
-fI[1] = #bffe6666 66666666 = -1.8999999999999999
-fI[0] == strtod
-
diff --git a/float/gdtoa/test/dI.out b/float/gdtoa/test/dI.out
deleted file mode 100644 (file)
index b4070de..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-
-Input: 1.23
-strtodI consumes 4 bytes and returns 17
-dd[0] = #3ff3ae14 7ae147ae = 1.23
-dd[1] = #3ff3ae14 7ae147af = 1.2300000000000002
-
-
-Input: 1.23e+20
-strtodI consumes 8 bytes and returns 1
-dd[0] = #441aabdf 2145b430 = 1.23e+20
-dd[1] = #441aabdf 2145b430 = 1.23e+20
-
-
-Input: 1.23e-20
-strtodI consumes 8 bytes and returns 33
-dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20
-dd[1] = #3bcd0ae4 cf767531 = 1.23e-20
-
-
-Input: 1.23456789
-strtodI consumes 10 bytes and returns 17
-dd[0] = #3ff3c0ca 4283de1b = 1.23456789
-dd[1] = #3ff3c0ca 4283de1c = 1.2345678900000001
-
-
-Input: 1.23456589e+20
-strtodI consumes 14 bytes and returns 17
-dd[0] = #441ac537 a660b997 = 1.23456589e+20
-dd[1] = #441ac537 a660b998 = 123456589000000010000
-
-
-Input: 1.23e+30
-strtodI consumes 8 bytes and returns 17
-dd[0] = #462f0cb0 4e8fb790 = 1.23e+30
-dd[1] = #462f0cb0 4e8fb791 = 1.2300000000000001e+30
-
-
-Input: 1.23e-30
-strtodI consumes 8 bytes and returns 33
-dd[0] = #39b8f286 6f5010aa = 1.2299999999999999e-30
-dd[1] = #39b8f286 6f5010ab = 1.23e-30
-
-
-Input: 1.23456789e-20
-strtodI consumes 14 bytes and returns 17
-dd[0] = #3bcd2681 471e7ada = 1.23456789e-20
-dd[1] = #3bcd2681 471e7adb = 1.2345678900000001e-20
-
-
-Input: 1.23456789e-30
-strtodI consumes 14 bytes and returns 17
-dd[0] = #39b90a3e 33bbd995 = 1.23456789e-30
-dd[1] = #39b90a3e 33bbd996 = 1.2345678900000002e-30
-
-
-Input: 1.234567890123456789
-strtodI consumes 20 bytes and returns 17
-dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457
-
-
-Input: 1.23456789012345678901234567890123456789
-strtodI consumes 40 bytes and returns 17
-dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457
-
-
-Input: 1.23e306
-strtodI consumes 8 bytes and returns 33
-dd[0] = #7f7c0676 cd1c61f4 = 1.2299999999999999e+306
-dd[1] = #7f7c0676 cd1c61f5 = 1.23e+306
-
-
-Input: 1.23e-306
-strtodI consumes 9 bytes and returns 33
-dd[0] = #6ba3b8 5da396e7 = 1.2299999999999999e-306
-dd[1] = #6ba3b8 5da396e8 = 1.23e-306
-
-
-Input: 1.23e-320
-strtodI consumes 9 bytes and returns 98
-dd[0] = #0 9b9 = 1.2297e-320
-dd[1] = #0 9ba = 1.23e-320
-
-
-Input: 1.23e-20
-strtodI consumes 8 bytes and returns 33
-dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20
-dd[1] = #3bcd0ae4 cf767531 = 1.23e-20
-
-
-Input: 1.23456789e307
-strtodI consumes 14 bytes and returns 33
-dd[0] = #7fb194b1 4bdaecdb = 1.2345678899999998e+307
-dd[1] = #7fb194b1 4bdaecdc = 1.23456789e+307
-
-
-Input: 1.23456589e-307
-strtodI consumes 15 bytes and returns 17
-dd[0] = #363196 bb9845fa = 1.23456589e-307
-dd[1] = #363196 bb9845fb = 1.2345658900000001e-307
-
-
-Input: 1.234567890123456789
-strtodI consumes 20 bytes and returns 17
-dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457
-
-
-Input: 1.234567890123456789e301
-strtodI consumes 24 bytes and returns 17
-dd[0] = #7e726f51 75f56413 = 1.2345678901234568e+301
-dd[1] = #7e726f51 75f56414 = 1.234567890123457e+301
-
-
-Input: 1.234567890123456789e-301
-strtodI consumes 25 bytes and returns 17
-dd[0] = #1752a64 e34ba0d3 = 1.2345678901234567e-301
-dd[1] = #1752a64 e34ba0d4 = 1.234567890123457e-301
-
-
-Input: 1.234567890123456789e-321
-strtodI consumes 25 bytes and returns 98
-dd[0] = #0 f9 = 1.23e-321
-dd[1] = #0 fa = 1.235e-321
-
-
-Input: 1e23
-strtodI consumes 4 bytes and returns 17
-dd[0] = #44b52d02 c7e14af6 = 1e+23
-dd[1] = #44b52d02 c7e14af7 = 1.0000000000000001e+23
-
-
-Input: 1e310
-strtodI consumes 5 bytes and returns 163
-dd[0] = #7fefffff ffffffff = 1.7976931348623157e+308
-dd[1] = #7ff00000 0 = Infinity
-
-
-Input: 9.0259718793241475e-277
-strtodI consumes 23 bytes and returns 33
-dd[0] = #69fffff ffffffff = 9.025971879324147e-277
-dd[1] = #6a00000 0 = 9.025971879324148e-277
-
-
-Input: 9.025971879324147880346310405869e-277
-strtodI consumes 37 bytes and returns 17
-dd[0] = #6a00000 0 = 9.025971879324148e-277
-dd[1] = #6a00000 1 = 9.02597187932415e-277
-
-
-Input: 9.025971879324147880346310405868e-277
-strtodI consumes 37 bytes and returns 33
-dd[0] = #69fffff ffffffff = 9.025971879324147e-277
-dd[1] = #6a00000 0 = 9.025971879324148e-277
-
-
-Input: 2.2250738585072014e-308
-strtodI consumes 23 bytes and returns 17
-dd[0] = #100000 0 = 2.2250738585072014e-308
-dd[1] = #100000 1 = 2.225073858507202e-308
-
-
-Input: 2.2250738585072013e-308
-strtodI consumes 23 bytes and returns 33
-dd[0] = #fffff ffffffff = 2.225073858507201e-308
-dd[1] = #100000 0 = 2.2250738585072014e-308
-
diff --git a/float/gdtoa/test/dIsi.out b/float/gdtoa/test/dIsi.out
deleted file mode 100644 (file)
index 3388a1a..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-
-Input: 1.23
-strtodI consumes 4 bytes and returns 17
-dd[0] = #3ff3ae14 7ae147ae = 1.23
-dd[1] = #3ff3ae14 7ae147af = 1.2300000000000002
-
-
-Input: 1.23e+20
-strtodI consumes 8 bytes and returns 1
-dd[0] = #441aabdf 2145b430 = 1.23e+20
-dd[1] = #441aabdf 2145b430 = 1.23e+20
-
-
-Input: 1.23e-20
-strtodI consumes 8 bytes and returns 33
-dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20
-dd[1] = #3bcd0ae4 cf767531 = 1.23e-20
-
-
-Input: 1.23456789
-strtodI consumes 10 bytes and returns 17
-dd[0] = #3ff3c0ca 4283de1b = 1.23456789
-dd[1] = #3ff3c0ca 4283de1c = 1.2345678900000001
-
-
-Input: 1.23456589e+20
-strtodI consumes 14 bytes and returns 17
-dd[0] = #441ac537 a660b997 = 1.23456589e+20
-dd[1] = #441ac537 a660b998 = 123456589000000010000
-
-
-Input: 1.23e+30
-strtodI consumes 8 bytes and returns 17
-dd[0] = #462f0cb0 4e8fb790 = 1.23e+30
-dd[1] = #462f0cb0 4e8fb791 = 1.2300000000000001e+30
-
-
-Input: 1.23e-30
-strtodI consumes 8 bytes and returns 33
-dd[0] = #39b8f286 6f5010aa = 1.2299999999999999e-30
-dd[1] = #39b8f286 6f5010ab = 1.23e-30
-
-
-Input: 1.23456789e-20
-strtodI consumes 14 bytes and returns 17
-dd[0] = #3bcd2681 471e7ada = 1.23456789e-20
-dd[1] = #3bcd2681 471e7adb = 1.2345678900000001e-20
-
-
-Input: 1.23456789e-30
-strtodI consumes 14 bytes and returns 17
-dd[0] = #39b90a3e 33bbd995 = 1.23456789e-30
-dd[1] = #39b90a3e 33bbd996 = 1.2345678900000002e-30
-
-
-Input: 1.234567890123456789
-strtodI consumes 20 bytes and returns 17
-dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457
-
-
-Input: 1.23456789012345678901234567890123456789
-strtodI consumes 40 bytes and returns 17
-dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457
-
-
-Input: 1.23e306
-strtodI consumes 8 bytes and returns 33
-dd[0] = #7f7c0676 cd1c61f4 = 1.2299999999999999e+306
-dd[1] = #7f7c0676 cd1c61f5 = 1.23e+306
-
-
-Input: 1.23e-306
-strtodI consumes 9 bytes and returns 33
-dd[0] = #6ba3b8 5da396e7 = 1.2299999999999999e-306
-dd[1] = #6ba3b8 5da396e8 = 1.23e-306
-
-
-Input: 1.23e-320
-strtodI consumes 9 bytes and returns 80
-dd[0] = #0 0 = 0
-dd[1] = #100000 0 = 2.2250738585072014e-308
-
-
-Input: 1.23e-20
-strtodI consumes 8 bytes and returns 33
-dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20
-dd[1] = #3bcd0ae4 cf767531 = 1.23e-20
-
-
-Input: 1.23456789e307
-strtodI consumes 14 bytes and returns 33
-dd[0] = #7fb194b1 4bdaecdb = 1.2345678899999998e+307
-dd[1] = #7fb194b1 4bdaecdc = 1.23456789e+307
-
-
-Input: 1.23456589e-307
-strtodI consumes 15 bytes and returns 17
-dd[0] = #363196 bb9845fa = 1.23456589e-307
-dd[1] = #363196 bb9845fb = 1.2345658900000001e-307
-
-
-Input: 1.234567890123456789
-strtodI consumes 20 bytes and returns 17
-dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567
-dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457
-
-
-Input: 1.234567890123456789e301
-strtodI consumes 24 bytes and returns 17
-dd[0] = #7e726f51 75f56413 = 1.2345678901234568e+301
-dd[1] = #7e726f51 75f56414 = 1.234567890123457e+301
-
-
-Input: 1.234567890123456789e-301
-strtodI consumes 25 bytes and returns 17
-dd[0] = #1752a64 e34ba0d3 = 1.2345678901234567e-301
-dd[1] = #1752a64 e34ba0d4 = 1.234567890123457e-301
-
-
-Input: 1.234567890123456789e-321
-strtodI consumes 25 bytes and returns 80
-dd[0] = #0 0 = 0
-dd[1] = #100000 0 = 2.2250738585072014e-308
-
-
-Input: 1e23
-strtodI consumes 4 bytes and returns 17
-dd[0] = #44b52d02 c7e14af6 = 1e+23
-dd[1] = #44b52d02 c7e14af7 = 1.0000000000000001e+23
-
-
-Input: 1e310
-strtodI consumes 5 bytes and returns 163
-dd[0] = #7fefffff ffffffff = 1.7976931348623157e+308
-dd[1] = #7ff00000 0 = Infinity
-
-
-Input: 9.0259718793241475e-277
-strtodI consumes 23 bytes and returns 33
-dd[0] = #69fffff ffffffff = 9.025971879324147e-277
-dd[1] = #6a00000 0 = 9.025971879324148e-277
-
-
-Input: 9.025971879324147880346310405869e-277
-strtodI consumes 37 bytes and returns 17
-dd[0] = #6a00000 0 = 9.025971879324148e-277
-dd[1] = #6a00000 1 = 9.02597187932415e-277
-
-
-Input: 9.025971879324147880346310405868e-277
-strtodI consumes 37 bytes and returns 33
-dd[0] = #69fffff ffffffff = 9.025971879324147e-277
-dd[1] = #6a00000 0 = 9.025971879324148e-277
-
-
-Input: 2.2250738585072014e-308
-strtodI consumes 23 bytes and returns 17
-dd[0] = #100000 0 = 2.2250738585072014e-308
-dd[1] = #100000 1 = 2.225073858507202e-308
-
-
-Input: 2.2250738585072013e-308
-strtodI consumes 23 bytes and returns 33
-dd[0] = #0 0 = 0
-dd[1] = #100000 0 = 2.2250738585072014e-308
-
diff --git a/float/gdtoa/test/dItest.c b/float/gdtoa/test/dItest.c
deleted file mode 100644 (file)
index d9b56d5..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-#include <stdio.h>
-#include <stdlib.h>
-
- static char ibuf[2048];
-
-#define U (unsigned long)
-
- static void
-#ifdef KR_headers
-dshow(what, d) char *what; double d;
-#else
-dshow(char *what, double d)
-#endif
-{
-       char buf[32];
-       g_dfmt(buf, &d, 0, sizeof(buf));
-       printf("%s = #%lx %lx = %s\n", what,
-               U ((ULong*)&d)[_0], U ((ULong*)&d)[_1], buf);
-       }
-
- int
-main(Void)
-{
-       /* Input: one number per line */
-
-       char *s, *se, *se1;
-       int i, j;
-       double dd[2], dd1, dd2;
-       static char cfmt[] = "%s consumes %d bytes and returns %d\n";
-
-       while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               printf("\nInput: %s", ibuf);
-               i = strtodI(ibuf, &se, dd);
-               printf(cfmt, "strtodI", (int)(se-ibuf), i);
-               dshow("dd[0]", dd[0]);
-               dshow("dd[1]", dd[1]);
-               printf("\n");
-               j = strtoId(ibuf, &se1, &dd1, &dd2);
-               if (j != i || se != se1
-                || dd[0] != dd1 || dd[1] != dd2) {
-                       printf(cfmt, "**** strtoId", (int)(se-ibuf), j);
-                       dshow("dd1", dd1);
-                       dshow("dd2", dd2);
-                       }
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/dd.out b/float/gdtoa/test/dd.out
deleted file mode 100644 (file)
index b1d2744..0000000
+++ /dev/null
@@ -1,1356 +0,0 @@
-
-Input: 1.23
-strtopdd consumes 4 bytes and returns 17
-dd[0] = 1.23 = #3ff3ae14 7ae147ae
-dd[1] = 1.7763568394002496e-17 = #3c747ae1 47ae1478
-g_ddfmt(0) gives 4 bytes: "1.23"
-
-strtoIdd returns 17, consuming 4 bytes.
-ddI[0] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1478
-= 1.23 + 1.7763568394002496e-17
-ddI[1] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1480
-= 1.23 + 1.776356839400252e-17
-ddI[0] == strtod
-
-
-Input: 1.23e+20
-strtopdd consumes 8 bytes and returns 1
-dd[0] = 1.23e+20 = #441aabdf 2145b430
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIdd returns 1, consuming 8 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.23e-20
-strtopdd consumes 8 bytes and returns 33
-dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530
-dd[1] = 9.304023318521521e-37 = #3873c997 955b2691
-g_ddfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIdd returns 33, consuming 8 bytes.
-ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690
-= 1.2299999999999999e-20 + 9.3040233185215194e-37
-ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691
-= 1.2299999999999999e-20 + 9.3040233185215211e-37
-ddI[1] == strtod
-
-
-Input: 1.23456789
-strtopdd consumes 10 bytes and returns 17
-dd[0] = 1.23456789 = #3ff3c0ca 4283de1b
-dd[1] = 1.0990618193318369e-16 = #3c9fada5 144c1252
-g_ddfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIdd returns 17, consuming 10 bytes.
-ddI[0] = #3ff3c0ca 4283de1b + 3c9fada5 144c1252
-= 1.2345678899999999 + 1.0990618193318369e-16
-ddI[1] = #3ff3c0ca 4283de1b + 3c9fada5 144c1254
-= 1.2345678899999999 + 1.0990618193318371e-16
-ddI[0] == strtod
-
-
-Input: 1.23456589e+20
-strtopdd consumes 14 bytes and returns 1
-dd[0] = 1.23456589e+20 = #441ac537 a660b997
-dd[1] = 4096 = #40b00000 0
-g_ddfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIdd returns 1, consuming 14 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.23e+30
-strtopdd consumes 8 bytes and returns 1
-dd[0] = 1.23e+30 = #462f0cb0 4e8fb790
-dd[1] = 40281156091904 = #42c25158 0
-g_ddfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIdd returns 1, consuming 8 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.23e-30
-strtopdd consumes 8 bytes and returns 17
-dd[0] = 1.2299999999999999e-30 = #39b8f286 6f5010aa
-dd[1] = 1.076909723013918e-46 = #3663ac7f 3dafd174
-g_ddfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIdd returns 17, consuming 8 bytes.
-ddI[0] = #39b8f286 6f5010aa + 3663ac7f 3dafd174
-= 1.2299999999999999e-30 + 1.076909723013918e-46
-ddI[1] = #39b8f286 6f5010aa + 3663ac7f 3dafd175
-= 1.2299999999999999e-30 + 1.0769097230139181e-46
-ddI[0] == strtod
-
-
-Input: 1.23456789e-20
-strtopdd consumes 14 bytes and returns 17
-dd[0] = 1.23456789e-20 = #3bcd2681 471e7ada
-dd[1] = 6.247111971663133e-37 = #386a9280 a761b07e
-g_ddfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIdd returns 17, consuming 14 bytes.
-ddI[0] = #3bcd2681 471e7ada + 386a9280 a761b07e
-= 1.2345678899999999e-20 + 6.2471119716631328e-37
-ddI[1] = #3bcd2681 471e7ada + 386a9280 a761b080
-= 1.2345678899999999e-20 + 6.2471119716631345e-37
-ddI[0] == strtod
-
-
-Input: 1.23456789e-30
-strtopdd consumes 14 bytes and returns 33
-dd[0] = 1.23456789e-30 = #39b90a3e 33bbd995
-dd[1] = 2.1567930523648577e-47 = #363f8585 55a6b1a0
-g_ddfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIdd returns 33, consuming 14 bytes.
-ddI[0] = #39b90a3e 33bbd995 + 363f8585 55a6b198
-= 1.23456789e-30 + 2.1567930523648558e-47
-ddI[1] = #39b90a3e 33bbd995 + 363f8585 55a6b1a0
-= 1.23456789e-30 + 2.1567930523648577e-47
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789
-strtopdd consumes 20 bytes and returns 33
-dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb
-dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e
-g_ddfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIdd returns 33, consuming 20 bytes.
-ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c
-= 1.2345678901234567 + 9.8567864525888563e-17
-ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e
-= 1.2345678901234567 + 9.8567864525888588e-17
-ddI[1] == strtod
-
-
-Input: 1.23456789012345678901234567890123456789
-strtopdd consumes 40 bytes and returns 33
-dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb
-dd[1] = 9.858021020478982e-17 = #3c9c69ef 85adadb6
-g_ddfmt(0) gives 34 bytes: "1.23456789012345678901234567890124"
-
-strtoIdd returns 33, consuming 40 bytes.
-ddI[0] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb4
-= 1.2345678901234567 + 9.8580210204789798e-17
-ddI[1] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb6
-= 1.2345678901234567 + 9.8580210204789823e-17
-ddI[1] == strtod
-
-
-Input: 1.23e306
-strtopdd consumes 8 bytes and returns 33
-dd[0] = 1.2299999999999999e+306 = #7f7c0676 cd1c61f4
-dd[1] = 1.3319001448659015e+290 = #7c2b558b e3d3f477
-g_ddfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIdd returns 33, consuming 8 bytes.
-ddI[0] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f476
-= 1.2299999999999999e+306 + 1.3319001448659013e+290
-ddI[1] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f477
-= 1.2299999999999999e+306 + 1.3319001448659015e+290
-ddI[1] == strtod
-
-
-Input: 1.23e-306
-strtopdd consumes 9 bytes and returns 98
-dd[0] = 1.2299999999999999e-306 = #6ba3b8 5da396e7
-dd[1] = 1.43e-322 = #0 1d
-g_ddfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIdd returns 98, consuming 9 bytes.
-ddI[0] = #6ba3b8 5da396e7 + 0 1c
-= 1.2299999999999999e-306 + 1.3833838083554903e-322
-ddI[1] = #6ba3b8 5da396e7 + 0 1d
-= 1.2299999999999999e-306 + 1.432790372939615e-322
-ddI[1] == strtod
-
-
-Input: 1.23e-320
-strtopdd consumes 9 bytes and returns 98
-dd[0] = 1.23e-320 = #0 9ba
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIdd returns 98, consuming 9 bytes.
-ddI[0] = #0 9b9 + 0 0
-= 1.2297293924988626e-320 + 0
-ddI[1] = #0 9ba + 0 0
-= 1.2302234581447039e-320 + 0
-ddI[1] == strtod
-
-
-Input: 1.23e-20
-strtopdd consumes 8 bytes and returns 33
-dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530
-dd[1] = 9.304023318521521e-37 = #3873c997 955b2691
-g_ddfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIdd returns 33, consuming 8 bytes.
-ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690
-= 1.2299999999999999e-20 + 9.3040233185215194e-37
-ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691
-= 1.2299999999999999e-20 + 9.3040233185215211e-37
-ddI[1] == strtod
-
-
-Input: 1.23456789e307
-strtopdd consumes 14 bytes and returns 33
-dd[0] = 1.2345678899999998e+307 = #7fb194b1 4bdaecdb
-dd[1] = 2.0137933598720243e+291 = #7c69d48d 192048ca
-g_ddfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIdd returns 33, consuming 14 bytes.
-ddI[0] = #7fb194b1 4bdaecdb + 7c69d48d 192048c9
-= 1.2345678899999998e+307 + 2.013793359872024e+291
-ddI[1] = #7fb194b1 4bdaecdb + 7c69d48d 192048ca
-= 1.2345678899999998e+307 + 2.0137933598720243e+291
-ddI[1] == strtod
-
-
-Input: 1.23456589e-307
-strtopdd consumes 15 bytes and returns 98
-dd[0] = 1.23456589e-307 = #363196 bb9845fa
-dd[1] = 1e-323 = #0 2
-g_ddfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIdd returns 98, consuming 15 bytes.
-ddI[0] = #363196 bb9845fa + 0 1
-= 1.2345658899999999e-307 + 4.9406564584124654e-324
-ddI[1] = #363196 bb9845fa + 0 2
-= 1.2345658899999999e-307 + 9.8813129168249309e-324
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789
-strtopdd consumes 20 bytes and returns 33
-dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb
-dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e
-g_ddfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIdd returns 33, consuming 20 bytes.
-ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c
-= 1.2345678901234567 + 9.8567864525888563e-17
-ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e
-= 1.2345678901234567 + 9.8567864525888588e-17
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789e301
-strtopdd consumes 24 bytes and returns 33
-dd[0] = 1.2345678901234568e+301 = #7e726f51 75f56413
-dd[1] = 1.3892003943918827e+283 = #7ab7ea80 76399100
-g_ddfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIdd returns 33, consuming 24 bytes.
-ddI[0] = #7e726f51 75f56413 + 7ab7ea80 76399080
-= 1.2345678901234568e+301 + 1.3892003943918563e+283
-ddI[1] = #7e726f51 75f56413 + 7ab7ea80 76399100
-= 1.2345678901234568e+301 + 1.3892003943918827e+283
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789e-301
-strtopdd consumes 25 bytes and returns 82
-dd[0] = 1.2345678901234567e-301 = #1752a64 e34ba0d3
-dd[1] = 7.374365e-318 = #0 16c66c
-g_ddfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIdd returns 82, consuming 25 bytes.
-ddI[0] = #1752a64 e34ba0d3 + 0 16c66c
-= 1.2345678901234567e-301 + 7.374364541948945e-318
-ddI[1] = #1752a64 e34ba0d3 + 0 16c66d
-= 1.2345678901234567e-301 + 7.3743694826054034e-318
-ddI[0] == strtod
-
-
-Input: 1.234567890123456789e-321
-strtopdd consumes 25 bytes and returns 98
-dd[0] = 1.235e-321 = #0 fa
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 10 bytes: "1.235e-321"
-
-strtoIdd returns 98, consuming 25 bytes.
-ddI[0] = #0 f9 + 0 0
-= 1.2302234581447039e-321 + 0
-ddI[1] = #0 fa + 0 0
-= 1.2351641146031164e-321 + 0
-ddI[1] == strtod
-
-
-Input: 1e23
-strtopdd consumes 4 bytes and returns 1
-dd[0] = 1e+23 = #44b52d02 c7e14af6
-dd[1] = 8388608 = #41600000 0
-g_ddfmt(0) gives 5 bytes: "1e+23"
-
-strtoIdd returns 1, consuming 4 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1e310
-strtopdd consumes 5 bytes and returns 163
-dd[0] = Infinity = #7ff00000 0
-dd[1] = Infinity = #7ff00000 0
-g_ddfmt(0) gives 8 bytes: "Infinity"
-
-strtoIdd returns 163, consuming 5 bytes.
-ddI[0] = #7fefffff ffffffff + 7c9fffff ffffffff
-= 1.7976931348623157e+308 + 1.9958403095347196e+292
-ddI[1] = #7ff00000 0 + 7ff00000 0
-= Infinity + Infinity
-ddI[1] == strtod
-
-
-Input: 9.0259718793241475e-277
-strtopdd consumes 23 bytes and returns 33
-dd[0] = 9.025971879324147e-277 = #69fffff ffffffff
-dd[1] = 6.217378695986177e-293 = #343daae f3582320
-g_ddfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIdd returns 33, consuming 23 bytes.
-ddI[0] = #69fffff ffffffff + 343daae f358231f
-= 9.0259718793241469e-277 + 6.2173786959861757e-293
-ddI[1] = #69fffff ffffffff + 343daae f3582320
-= 9.0259718793241469e-277 + 6.2173786959861768e-293
-ddI[1] == strtod
-
-
-Input: 9.025971879324147880346310405869e-277
-strtopdd consumes 37 bytes and returns 17
-dd[0] = 9.025971879324148e-277 = #6a00000 0
-dd[1] = 2.2250738585072014e-308 = #100000 0
-g_ddfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277"
-
-strtoIdd returns 17, consuming 37 bytes.
-ddI[0] = #6a00000 0 + 100000 0
-= 9.0259718793241479e-277 + 2.2250738585072014e-308
-ddI[1] = #6a00000 0 + 200000 0
-= 9.0259718793241479e-277 + 4.4501477170144028e-308
-ddI[0] == strtod
-
-
-Input: 9.025971879324147880346310405868e-277
-strtopdd consumes 37 bytes and returns 17
-dd[0] = 9.025971879324147e-277 = #69fffff ffffffff
-dd[1] = 1.0020841800044856e-292 = #34fffff fffffff9
-g_ddfmt(0) gives 37 bytes: "9.025971879324147880346310405868e-277"
-
-strtoIdd returns 17, consuming 37 bytes.
-ddI[0] = #69fffff ffffffff + 34fffff fffffff9
-= 9.0259718793241469e-277 + 1.0020841800044856e-292
-ddI[1] = #69fffff ffffffff + 34fffff fffffffa
-= 9.0259718793241469e-277 + 1.0020841800044857e-292
-ddI[0] == strtod
-
-
-Input: 2.2250738585072014e-308
-strtopdd consumes 23 bytes and returns 82
-dd[0] = 2.2250738585072014e-308 = #100000 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIdd returns 82, consuming 23 bytes.
-ddI[0] = #100000 0 + 0 0
-= 2.2250738585072014e-308 + 0
-ddI[1] = #100000 1 + 0 0
-= 2.2250738585072019e-308 + 0
-ddI[0] == strtod
-
-
-Input: 2.2250738585072013e-308
-strtopdd consumes 23 bytes and returns 98
-dd[0] = 2.2250738585072014e-308 = #100000 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIdd returns 98, consuming 23 bytes.
-ddI[0] = #fffff ffffffff + 0 0
-= 2.2250738585072009e-308 + 0
-ddI[1] = #100000 0 + 0 0
-= 2.2250738585072014e-308 + 0
-ddI[1] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.0999999999999999 = #3ff19999 99999999
-dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333
-g_ddfmt(0) gives 3 bytes: "1.1"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff19999 99999999 + 3ca33333 33333333
-= 1.0999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff19999 99999999 + 3ca33333 33333334
-= 1.0999999999999999 + 1.332267629550188e-16
-ddI[0] == strtod
-
-
-Input: -1.1
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.0999999999999999 = #bff19999 99999999
-dd[1] = -1.3322676295501878e-16 = #bca33333 33333333
-g_ddfmt(0) gives 4 bytes: "-1.1"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff19999 99999999 + bca33333 33333334
-= -1.0999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff19999 99999999 + bca33333 33333333
-= -1.0999999999999999 + -1.3322676295501878e-16
-ddI[1] == strtod
-
-
-Input: 1.2
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.2 = #3ff33333 33333333
-dd[1] = 4.440892098500625e-17 = #3c899999 99999998
-g_ddfmt(0) gives 3 bytes: "1.2"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff33333 33333333 + 3c899999 99999998
-= 1.2 + 4.4408920985006252e-17
-ddI[1] = #3ff33333 33333333 + 3c899999 9999999c
-= 1.2 + 4.4408920985006276e-17
-ddI[0] == strtod
-
-
-Input: -1.2
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.2 = #bff33333 33333333
-dd[1] = -4.440892098500625e-17 = #bc899999 99999998
-g_ddfmt(0) gives 4 bytes: "-1.2"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff33333 33333333 + bc899999 9999999c
-= -1.2 + -4.4408920985006276e-17
-ddI[1] = #bff33333 33333333 + bc899999 99999998
-= -1.2 + -4.4408920985006252e-17
-ddI[1] == strtod
-
-
-Input: 1.3
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc
-dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999
-g_ddfmt(0) gives 34 bytes: "1.29999999999999999999999999999999"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999
-= 1.2999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a
-= 1.2999999999999998 + 1.7763568394002506e-16
-ddI[0] == strtod
-
-
-Input: -1.3
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.2999999999999998 = #bff4cccc cccccccc
-dd[1] = -1.7763568394002503e-16 = #bca99999 99999999
-g_ddfmt(0) gives 35 bytes: "-1.29999999999999999999999999999999"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff4cccc cccccccc + bca99999 9999999a
-= -1.2999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bff4cccc cccccccc + bca99999 99999999
-= -1.2999999999999998 + -1.7763568394002503e-16
-ddI[1] == strtod
-
-
-Input: 1.4
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.4 = #3ff66666 66666666
-dd[1] = 8.88178419700125e-17 = #3c999999 99999998
-g_ddfmt(0) gives 34 bytes: "1.39999999999999999999999999999998"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff66666 66666666 + 3c999999 99999998
-= 1.3999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ff66666 66666666 + 3c999999 9999999a
-= 1.3999999999999999 + 8.8817841970012528e-17
-ddI[0] == strtod
-
-
-Input: -1.4
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.4 = #bff66666 66666666
-dd[1] = -8.88178419700125e-17 = #bc999999 99999998
-g_ddfmt(0) gives 35 bytes: "-1.39999999999999999999999999999998"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff66666 66666666 + bc999999 9999999a
-= -1.3999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bff66666 66666666 + bc999999 99999998
-= -1.3999999999999999 + -8.8817841970012504e-17
-ddI[1] == strtod
-
-
-Input: 1.5
-strtopdd consumes 3 bytes and returns 1
-dd[0] = 1.5 = #3ff80000 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 1, consuming 3 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: -1.5
-strtopdd consumes 4 bytes and returns 9
-dd[0] = -1.5 = #bff80000 0
-dd[1] = -0 = #80000000 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 9, consuming 4 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.6
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.5999999999999999 = #3ff99999 99999999
-dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333
-g_ddfmt(0) gives 3 bytes: "1.6"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff99999 99999999 + 3ca33333 33333333
-= 1.5999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff99999 99999999 + 3ca33333 33333334
-= 1.5999999999999999 + 1.332267629550188e-16
-ddI[0] == strtod
-
-
-Input: -1.6
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.5999999999999999 = #bff99999 99999999
-dd[1] = -1.3322676295501878e-16 = #bca33333 33333333
-g_ddfmt(0) gives 4 bytes: "-1.6"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff99999 99999999 + bca33333 33333334
-= -1.5999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff99999 99999999 + bca33333 33333333
-= -1.5999999999999999 + -1.3322676295501878e-16
-ddI[1] == strtod
-
-
-Input: 1.7
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.7 = #3ffb3333 33333333
-dd[1] = 4.440892098500625e-17 = #3c899999 99999998
-g_ddfmt(0) gives 3 bytes: "1.7"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ffb3333 33333333 + 3c899999 99999998
-= 1.7 + 4.4408920985006252e-17
-ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c
-= 1.7 + 4.4408920985006276e-17
-ddI[0] == strtod
-
-
-Input: -1.7
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.7 = #bffb3333 33333333
-dd[1] = -4.440892098500625e-17 = #bc899999 99999998
-g_ddfmt(0) gives 4 bytes: "-1.7"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bffb3333 33333333 + bc899999 9999999c
-= -1.7 + -4.4408920985006276e-17
-ddI[1] = #bffb3333 33333333 + bc899999 99999998
-= -1.7 + -4.4408920985006252e-17
-ddI[1] == strtod
-
-
-Input: 1.8
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.7999999999999998 = #3ffccccc cccccccc
-dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999
-g_ddfmt(0) gives 34 bytes: "1.79999999999999999999999999999999"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999
-= 1.7999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a
-= 1.7999999999999998 + 1.7763568394002506e-16
-ddI[0] == strtod
-
-
-Input: -1.8
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.7999999999999998 = #bffccccc cccccccc
-dd[1] = -1.7763568394002503e-16 = #bca99999 99999999
-g_ddfmt(0) gives 35 bytes: "-1.79999999999999999999999999999999"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffccccc cccccccc + bca99999 9999999a
-= -1.7999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bffccccc cccccccc + bca99999 99999999
-= -1.7999999999999998 + -1.7763568394002503e-16
-ddI[1] == strtod
-
-
-Input: 1.9
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.9 = #3ffe6666 66666666
-dd[1] = 8.88178419700125e-17 = #3c999999 99999998
-g_ddfmt(0) gives 34 bytes: "1.89999999999999999999999999999998"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffe6666 66666666 + 3c999999 99999998
-= 1.8999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a
-= 1.8999999999999999 + 8.8817841970012528e-17
-ddI[0] == strtod
-
-
-Input: -1.9
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.9 = #bffe6666 66666666
-dd[1] = -8.88178419700125e-17 = #bc999999 99999998
-g_ddfmt(0) gives 35 bytes: "-1.89999999999999999999999999999998"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffe6666 66666666 + bc999999 9999999a
-= -1.8999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bffe6666 66666666 + bc999999 99999998
-= -1.8999999999999999 + -8.8817841970012504e-17
-ddI[1] == strtod
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.0999999999999999 = #3ff19999 99999999
-dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333
-g_ddfmt(0) gives 3 bytes: "1.1"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff19999 99999999 + 3ca33333 33333333
-= 1.0999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff19999 99999999 + 3ca33333 33333334
-= 1.0999999999999999 + 1.332267629550188e-16
-ddI[0] == strtod
-
-
-Input: -1.1
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.0999999999999999 = #bff19999 99999999
-dd[1] = -1.3322676295501878e-16 = #bca33333 33333333
-g_ddfmt(0) gives 4 bytes: "-1.1"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff19999 99999999 + bca33333 33333334
-= -1.0999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff19999 99999999 + bca33333 33333333
-= -1.0999999999999999 + -1.3322676295501878e-16
-ddI[1] == strtod
-
-
-Input: 1.2
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.2 = #3ff33333 33333333
-dd[1] = 4.440892098500625e-17 = #3c899999 99999998
-g_ddfmt(0) gives 3 bytes: "1.2"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff33333 33333333 + 3c899999 99999998
-= 1.2 + 4.4408920985006252e-17
-ddI[1] = #3ff33333 33333333 + 3c899999 9999999c
-= 1.2 + 4.4408920985006276e-17
-ddI[0] == strtod
-
-
-Input: -1.2
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.2 = #bff33333 33333333
-dd[1] = -4.440892098500625e-17 = #bc899999 99999998
-g_ddfmt(0) gives 4 bytes: "-1.2"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff33333 33333333 + bc899999 9999999c
-= -1.2 + -4.4408920985006276e-17
-ddI[1] = #bff33333 33333333 + bc899999 99999998
-= -1.2 + -4.4408920985006252e-17
-ddI[1] == strtod
-
-
-Input: 1.3
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc
-dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.3"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999
-= 1.2999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a
-= 1.2999999999999998 + 1.7763568394002506e-16
-ddI[1] == strtod
-
-
-Input: -1.3
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.2999999999999998 = #bff4cccc cccccccc
-dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.3"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff4cccc cccccccc + bca99999 9999999a
-= -1.2999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bff4cccc cccccccc + bca99999 99999999
-= -1.2999999999999998 + -1.7763568394002503e-16
-ddI[0] == strtod
-
-
-Input: 1.4
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.4 = #3ff66666 66666666
-dd[1] = 8.881784197001253e-17 = #3c999999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.4"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff66666 66666666 + 3c999999 99999998
-= 1.3999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ff66666 66666666 + 3c999999 9999999a
-= 1.3999999999999999 + 8.8817841970012528e-17
-ddI[1] == strtod
-
-
-Input: -1.4
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.4 = #bff66666 66666666
-dd[1] = -8.881784197001253e-17 = #bc999999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.4"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff66666 66666666 + bc999999 9999999a
-= -1.3999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bff66666 66666666 + bc999999 99999998
-= -1.3999999999999999 + -8.8817841970012504e-17
-ddI[0] == strtod
-
-
-Input: 1.5
-strtopdd consumes 3 bytes and returns 1
-dd[0] = 1.5 = #3ff80000 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 1, consuming 3 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: -1.5
-strtopdd consumes 4 bytes and returns 9
-dd[0] = -1.5 = #bff80000 0
-dd[1] = -0 = #80000000 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 9, consuming 4 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.6
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.5999999999999999 = #3ff99999 99999999
-dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333
-g_ddfmt(0) gives 3 bytes: "1.6"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff99999 99999999 + 3ca33333 33333333
-= 1.5999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff99999 99999999 + 3ca33333 33333334
-= 1.5999999999999999 + 1.332267629550188e-16
-ddI[0] == strtod
-
-
-Input: -1.6
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.5999999999999999 = #bff99999 99999999
-dd[1] = -1.3322676295501878e-16 = #bca33333 33333333
-g_ddfmt(0) gives 4 bytes: "-1.6"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff99999 99999999 + bca33333 33333334
-= -1.5999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff99999 99999999 + bca33333 33333333
-= -1.5999999999999999 + -1.3322676295501878e-16
-ddI[1] == strtod
-
-
-Input: 1.7
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.7 = #3ffb3333 33333333
-dd[1] = 4.440892098500625e-17 = #3c899999 99999998
-g_ddfmt(0) gives 3 bytes: "1.7"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ffb3333 33333333 + 3c899999 99999998
-= 1.7 + 4.4408920985006252e-17
-ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c
-= 1.7 + 4.4408920985006276e-17
-ddI[0] == strtod
-
-
-Input: -1.7
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.7 = #bffb3333 33333333
-dd[1] = -4.440892098500625e-17 = #bc899999 99999998
-g_ddfmt(0) gives 4 bytes: "-1.7"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bffb3333 33333333 + bc899999 9999999c
-= -1.7 + -4.4408920985006276e-17
-ddI[1] = #bffb3333 33333333 + bc899999 99999998
-= -1.7 + -4.4408920985006252e-17
-ddI[1] == strtod
-
-
-Input: 1.8
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.7999999999999998 = #3ffccccc cccccccc
-dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.8"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999
-= 1.7999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a
-= 1.7999999999999998 + 1.7763568394002506e-16
-ddI[1] == strtod
-
-
-Input: -1.8
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.7999999999999998 = #bffccccc cccccccc
-dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.8"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffccccc cccccccc + bca99999 9999999a
-= -1.7999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bffccccc cccccccc + bca99999 99999999
-= -1.7999999999999998 + -1.7763568394002503e-16
-ddI[0] == strtod
-
-
-Input: 1.9
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.9 = #3ffe6666 66666666
-dd[1] = 8.881784197001253e-17 = #3c999999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.9"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffe6666 66666666 + 3c999999 99999998
-= 1.8999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a
-= 1.8999999999999999 + 8.8817841970012528e-17
-ddI[1] == strtod
-
-
-Input: -1.9
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.9 = #bffe6666 66666666
-dd[1] = -8.881784197001253e-17 = #bc999999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.9"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffe6666 66666666 + bc999999 9999999a
-= -1.8999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bffe6666 66666666 + bc999999 99999998
-= -1.8999999999999999 + -8.8817841970012504e-17
-ddI[0] == strtod
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.0999999999999999 = #3ff19999 99999999
-dd[1] = 1.332267629550188e-16 = #3ca33333 33333334
-g_ddfmt(0) gives 34 bytes: "1.10000000000000000000000000000002"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff19999 99999999 + 3ca33333 33333333
-= 1.0999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff19999 99999999 + 3ca33333 33333334
-= 1.0999999999999999 + 1.332267629550188e-16
-ddI[1] == strtod
-
-
-Input: -1.1
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.0999999999999999 = #bff19999 99999999
-dd[1] = -1.3322676295501878e-16 = #bca33333 33333333
-g_ddfmt(0) gives 4 bytes: "-1.1"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff19999 99999999 + bca33333 33333334
-= -1.0999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff19999 99999999 + bca33333 33333333
-= -1.0999999999999999 + -1.3322676295501878e-16
-ddI[1] == strtod
-
-
-Input: 1.2
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.2 = #3ff33333 33333333
-dd[1] = 4.4408920985006276e-17 = #3c899999 9999999c
-g_ddfmt(0) gives 34 bytes: "1.20000000000000000000000000000001"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff33333 33333333 + 3c899999 99999998
-= 1.2 + 4.4408920985006252e-17
-ddI[1] = #3ff33333 33333333 + 3c899999 9999999c
-= 1.2 + 4.4408920985006276e-17
-ddI[1] == strtod
-
-
-Input: -1.2
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.2 = #bff33333 33333333
-dd[1] = -4.440892098500625e-17 = #bc899999 99999998
-g_ddfmt(0) gives 4 bytes: "-1.2"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff33333 33333333 + bc899999 9999999c
-= -1.2 + -4.4408920985006276e-17
-ddI[1] = #bff33333 33333333 + bc899999 99999998
-= -1.2 + -4.4408920985006252e-17
-ddI[1] == strtod
-
-
-Input: 1.3
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc
-dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.3"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999
-= 1.2999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a
-= 1.2999999999999998 + 1.7763568394002506e-16
-ddI[1] == strtod
-
-
-Input: -1.3
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.2999999999999998 = #bff4cccc cccccccc
-dd[1] = -1.7763568394002503e-16 = #bca99999 99999999
-g_ddfmt(0) gives 35 bytes: "-1.29999999999999999999999999999999"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff4cccc cccccccc + bca99999 9999999a
-= -1.2999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bff4cccc cccccccc + bca99999 99999999
-= -1.2999999999999998 + -1.7763568394002503e-16
-ddI[1] == strtod
-
-
-Input: 1.4
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.4 = #3ff66666 66666666
-dd[1] = 8.881784197001253e-17 = #3c999999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.4"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff66666 66666666 + 3c999999 99999998
-= 1.3999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ff66666 66666666 + 3c999999 9999999a
-= 1.3999999999999999 + 8.8817841970012528e-17
-ddI[1] == strtod
-
-
-Input: -1.4
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.4 = #bff66666 66666666
-dd[1] = -8.88178419700125e-17 = #bc999999 99999998
-g_ddfmt(0) gives 35 bytes: "-1.39999999999999999999999999999998"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff66666 66666666 + bc999999 9999999a
-= -1.3999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bff66666 66666666 + bc999999 99999998
-= -1.3999999999999999 + -8.8817841970012504e-17
-ddI[1] == strtod
-
-
-Input: 1.5
-strtopdd consumes 3 bytes and returns 1
-dd[0] = 1.5 = #3ff80000 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 1, consuming 3 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: -1.5
-strtopdd consumes 4 bytes and returns 9
-dd[0] = -1.5 = #bff80000 0
-dd[1] = -0 = #80000000 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 9, consuming 4 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.6
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.5999999999999999 = #3ff99999 99999999
-dd[1] = 1.332267629550188e-16 = #3ca33333 33333334
-g_ddfmt(0) gives 34 bytes: "1.60000000000000000000000000000002"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff99999 99999999 + 3ca33333 33333333
-= 1.5999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff99999 99999999 + 3ca33333 33333334
-= 1.5999999999999999 + 1.332267629550188e-16
-ddI[1] == strtod
-
-
-Input: -1.6
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.5999999999999999 = #bff99999 99999999
-dd[1] = -1.3322676295501878e-16 = #bca33333 33333333
-g_ddfmt(0) gives 4 bytes: "-1.6"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff99999 99999999 + bca33333 33333334
-= -1.5999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff99999 99999999 + bca33333 33333333
-= -1.5999999999999999 + -1.3322676295501878e-16
-ddI[1] == strtod
-
-
-Input: 1.7
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.7 = #3ffb3333 33333333
-dd[1] = 4.4408920985006276e-17 = #3c899999 9999999c
-g_ddfmt(0) gives 34 bytes: "1.70000000000000000000000000000001"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ffb3333 33333333 + 3c899999 99999998
-= 1.7 + 4.4408920985006252e-17
-ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c
-= 1.7 + 4.4408920985006276e-17
-ddI[1] == strtod
-
-
-Input: -1.7
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.7 = #bffb3333 33333333
-dd[1] = -4.440892098500625e-17 = #bc899999 99999998
-g_ddfmt(0) gives 4 bytes: "-1.7"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bffb3333 33333333 + bc899999 9999999c
-= -1.7 + -4.4408920985006276e-17
-ddI[1] = #bffb3333 33333333 + bc899999 99999998
-= -1.7 + -4.4408920985006252e-17
-ddI[1] == strtod
-
-
-Input: 1.8
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.7999999999999998 = #3ffccccc cccccccc
-dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.8"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999
-= 1.7999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a
-= 1.7999999999999998 + 1.7763568394002506e-16
-ddI[1] == strtod
-
-
-Input: -1.8
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.7999999999999998 = #bffccccc cccccccc
-dd[1] = -1.7763568394002503e-16 = #bca99999 99999999
-g_ddfmt(0) gives 35 bytes: "-1.79999999999999999999999999999999"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffccccc cccccccc + bca99999 9999999a
-= -1.7999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bffccccc cccccccc + bca99999 99999999
-= -1.7999999999999998 + -1.7763568394002503e-16
-ddI[1] == strtod
-
-
-Input: 1.9
-strtopdd consumes 3 bytes and returns 33
-dd[0] = 1.9 = #3ffe6666 66666666
-dd[1] = 8.881784197001253e-17 = #3c999999 9999999a
-g_ddfmt(0) gives 3 bytes: "1.9"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffe6666 66666666 + 3c999999 99999998
-= 1.8999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a
-= 1.8999999999999999 + 8.8817841970012528e-17
-ddI[1] == strtod
-
-
-Input: -1.9
-strtopdd consumes 4 bytes and returns 25
-dd[0] = -1.9 = #bffe6666 66666666
-dd[1] = -8.88178419700125e-17 = #bc999999 99999998
-g_ddfmt(0) gives 35 bytes: "-1.89999999999999999999999999999998"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffe6666 66666666 + bc999999 9999999a
-= -1.8999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bffe6666 66666666 + bc999999 99999998
-= -1.8999999999999999 + -8.8817841970012504e-17
-ddI[1] == strtod
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.0999999999999999 = #3ff19999 99999999
-dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333
-g_ddfmt(0) gives 3 bytes: "1.1"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff19999 99999999 + 3ca33333 33333333
-= 1.0999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff19999 99999999 + 3ca33333 33333334
-= 1.0999999999999999 + 1.332267629550188e-16
-ddI[0] == strtod
-
-
-Input: -1.1
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.0999999999999999 = #bff19999 99999999
-dd[1] = -1.332267629550188e-16 = #bca33333 33333334
-g_ddfmt(0) gives 35 bytes: "-1.10000000000000000000000000000002"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff19999 99999999 + bca33333 33333334
-= -1.0999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff19999 99999999 + bca33333 33333333
-= -1.0999999999999999 + -1.3322676295501878e-16
-ddI[0] == strtod
-
-
-Input: 1.2
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.2 = #3ff33333 33333333
-dd[1] = 4.440892098500625e-17 = #3c899999 99999998
-g_ddfmt(0) gives 3 bytes: "1.2"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff33333 33333333 + 3c899999 99999998
-= 1.2 + 4.4408920985006252e-17
-ddI[1] = #3ff33333 33333333 + 3c899999 9999999c
-= 1.2 + 4.4408920985006276e-17
-ddI[0] == strtod
-
-
-Input: -1.2
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.2 = #bff33333 33333333
-dd[1] = -4.4408920985006276e-17 = #bc899999 9999999c
-g_ddfmt(0) gives 35 bytes: "-1.20000000000000000000000000000001"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff33333 33333333 + bc899999 9999999c
-= -1.2 + -4.4408920985006276e-17
-ddI[1] = #bff33333 33333333 + bc899999 99999998
-= -1.2 + -4.4408920985006252e-17
-ddI[0] == strtod
-
-
-Input: 1.3
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc
-dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999
-g_ddfmt(0) gives 34 bytes: "1.29999999999999999999999999999999"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999
-= 1.2999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a
-= 1.2999999999999998 + 1.7763568394002506e-16
-ddI[0] == strtod
-
-
-Input: -1.3
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.2999999999999998 = #bff4cccc cccccccc
-dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.3"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff4cccc cccccccc + bca99999 9999999a
-= -1.2999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bff4cccc cccccccc + bca99999 99999999
-= -1.2999999999999998 + -1.7763568394002503e-16
-ddI[0] == strtod
-
-
-Input: 1.4
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.4 = #3ff66666 66666666
-dd[1] = 8.88178419700125e-17 = #3c999999 99999998
-g_ddfmt(0) gives 34 bytes: "1.39999999999999999999999999999998"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ff66666 66666666 + 3c999999 99999998
-= 1.3999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ff66666 66666666 + 3c999999 9999999a
-= 1.3999999999999999 + 8.8817841970012528e-17
-ddI[0] == strtod
-
-
-Input: -1.4
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.4 = #bff66666 66666666
-dd[1] = -8.881784197001253e-17 = #bc999999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.4"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bff66666 66666666 + bc999999 9999999a
-= -1.3999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bff66666 66666666 + bc999999 99999998
-= -1.3999999999999999 + -8.8817841970012504e-17
-ddI[0] == strtod
-
-
-Input: 1.5
-strtopdd consumes 3 bytes and returns 1
-dd[0] = 1.5 = #3ff80000 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 1, consuming 3 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: -1.5
-strtopdd consumes 4 bytes and returns 9
-dd[0] = -1.5 = #bff80000 0
-dd[1] = -0 = #80000000 0
-g_ddfmt(0) gives 3 bytes: "1.5"
-
-strtoIdd returns 9, consuming 4 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.6
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.5999999999999999 = #3ff99999 99999999
-dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333
-g_ddfmt(0) gives 3 bytes: "1.6"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ff99999 99999999 + 3ca33333 33333333
-= 1.5999999999999999 + 1.3322676295501878e-16
-ddI[1] = #3ff99999 99999999 + 3ca33333 33333334
-= 1.5999999999999999 + 1.332267629550188e-16
-ddI[0] == strtod
-
-
-Input: -1.6
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.5999999999999999 = #bff99999 99999999
-dd[1] = -1.332267629550188e-16 = #bca33333 33333334
-g_ddfmt(0) gives 35 bytes: "-1.60000000000000000000000000000002"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bff99999 99999999 + bca33333 33333334
-= -1.5999999999999999 + -1.332267629550188e-16
-ddI[1] = #bff99999 99999999 + bca33333 33333333
-= -1.5999999999999999 + -1.3322676295501878e-16
-ddI[0] == strtod
-
-
-Input: 1.7
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.7 = #3ffb3333 33333333
-dd[1] = 4.440892098500625e-17 = #3c899999 99999998
-g_ddfmt(0) gives 3 bytes: "1.7"
-
-strtoIdd returns 17, consuming 3 bytes.
-ddI[0] = #3ffb3333 33333333 + 3c899999 99999998
-= 1.7 + 4.4408920985006252e-17
-ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c
-= 1.7 + 4.4408920985006276e-17
-ddI[0] == strtod
-
-
-Input: -1.7
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.7 = #bffb3333 33333333
-dd[1] = -4.4408920985006276e-17 = #bc899999 9999999c
-g_ddfmt(0) gives 35 bytes: "-1.70000000000000000000000000000001"
-
-strtoIdd returns 25, consuming 4 bytes.
-ddI[0] = #bffb3333 33333333 + bc899999 9999999c
-= -1.7 + -4.4408920985006276e-17
-ddI[1] = #bffb3333 33333333 + bc899999 99999998
-= -1.7 + -4.4408920985006252e-17
-ddI[0] == strtod
-
-
-Input: 1.8
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.7999999999999998 = #3ffccccc cccccccc
-dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999
-g_ddfmt(0) gives 34 bytes: "1.79999999999999999999999999999999"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999
-= 1.7999999999999998 + 1.7763568394002503e-16
-ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a
-= 1.7999999999999998 + 1.7763568394002506e-16
-ddI[0] == strtod
-
-
-Input: -1.8
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.7999999999999998 = #bffccccc cccccccc
-dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.8"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffccccc cccccccc + bca99999 9999999a
-= -1.7999999999999998 + -1.7763568394002506e-16
-ddI[1] = #bffccccc cccccccc + bca99999 99999999
-= -1.7999999999999998 + -1.7763568394002503e-16
-ddI[0] == strtod
-
-
-Input: 1.9
-strtopdd consumes 3 bytes and returns 17
-dd[0] = 1.9 = #3ffe6666 66666666
-dd[1] = 8.88178419700125e-17 = #3c999999 99999998
-g_ddfmt(0) gives 34 bytes: "1.89999999999999999999999999999998"
-
-strtoIdd returns 33, consuming 3 bytes.
-ddI[0] = #3ffe6666 66666666 + 3c999999 99999998
-= 1.8999999999999999 + 8.8817841970012504e-17
-ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a
-= 1.8999999999999999 + 8.8817841970012528e-17
-ddI[0] == strtod
-
-
-Input: -1.9
-strtopdd consumes 4 bytes and returns 41
-dd[0] = -1.9 = #bffe6666 66666666
-dd[1] = -8.881784197001253e-17 = #bc999999 9999999a
-g_ddfmt(0) gives 4 bytes: "-1.9"
-
-strtoIdd returns 41, consuming 4 bytes.
-ddI[0] = #bffe6666 66666666 + bc999999 9999999a
-= -1.8999999999999999 + -8.8817841970012528e-17
-ddI[1] = #bffe6666 66666666 + bc999999 99999998
-= -1.8999999999999999 + -8.8817841970012504e-17
-ddI[0] == strtod
-
diff --git a/float/gdtoa/test/ddsi.out b/float/gdtoa/test/ddsi.out
deleted file mode 100644 (file)
index 1677707..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-
-Input: 1.23
-strtopdd consumes 4 bytes and returns 17
-dd[0] = 1.23 = #3ff3ae14 7ae147ae
-dd[1] = 1.7763568394002496e-17 = #3c747ae1 47ae1478
-g_ddfmt(0) gives 4 bytes: "1.23"
-
-strtoIdd returns 17, consuming 4 bytes.
-ddI[0] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1478
-= 1.23 + 1.7763568394002496e-17
-ddI[1] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1480
-= 1.23 + 1.776356839400252e-17
-ddI[0] == strtod
-
-
-Input: 1.23e+20
-strtopdd consumes 8 bytes and returns 1
-dd[0] = 1.23e+20 = #441aabdf 2145b430
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIdd returns 1, consuming 8 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.23e-20
-strtopdd consumes 8 bytes and returns 33
-dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530
-dd[1] = 9.304023318521521e-37 = #3873c997 955b2691
-g_ddfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIdd returns 33, consuming 8 bytes.
-ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690
-= 1.2299999999999999e-20 + 9.3040233185215194e-37
-ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691
-= 1.2299999999999999e-20 + 9.3040233185215211e-37
-ddI[1] == strtod
-
-
-Input: 1.23456789
-strtopdd consumes 10 bytes and returns 17
-dd[0] = 1.23456789 = #3ff3c0ca 4283de1b
-dd[1] = 1.0990618193318369e-16 = #3c9fada5 144c1252
-g_ddfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIdd returns 17, consuming 10 bytes.
-ddI[0] = #3ff3c0ca 4283de1b + 3c9fada5 144c1252
-= 1.2345678899999999 + 1.0990618193318369e-16
-ddI[1] = #3ff3c0ca 4283de1b + 3c9fada5 144c1254
-= 1.2345678899999999 + 1.0990618193318371e-16
-ddI[0] == strtod
-
-
-Input: 1.23456589e+20
-strtopdd consumes 14 bytes and returns 1
-dd[0] = 1.23456589e+20 = #441ac537 a660b997
-dd[1] = 4096 = #40b00000 0
-g_ddfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIdd returns 1, consuming 14 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.23e+30
-strtopdd consumes 8 bytes and returns 1
-dd[0] = 1.23e+30 = #462f0cb0 4e8fb790
-dd[1] = 40281156091904 = #42c25158 0
-g_ddfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIdd returns 1, consuming 8 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1.23e-30
-strtopdd consumes 8 bytes and returns 17
-dd[0] = 1.2299999999999999e-30 = #39b8f286 6f5010aa
-dd[1] = 1.076909723013918e-46 = #3663ac7f 3dafd174
-g_ddfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIdd returns 17, consuming 8 bytes.
-ddI[0] = #39b8f286 6f5010aa + 3663ac7f 3dafd174
-= 1.2299999999999999e-30 + 1.076909723013918e-46
-ddI[1] = #39b8f286 6f5010aa + 3663ac7f 3dafd175
-= 1.2299999999999999e-30 + 1.0769097230139181e-46
-ddI[0] == strtod
-
-
-Input: 1.23456789e-20
-strtopdd consumes 14 bytes and returns 17
-dd[0] = 1.23456789e-20 = #3bcd2681 471e7ada
-dd[1] = 6.247111971663133e-37 = #386a9280 a761b07e
-g_ddfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIdd returns 17, consuming 14 bytes.
-ddI[0] = #3bcd2681 471e7ada + 386a9280 a761b07e
-= 1.2345678899999999e-20 + 6.2471119716631328e-37
-ddI[1] = #3bcd2681 471e7ada + 386a9280 a761b080
-= 1.2345678899999999e-20 + 6.2471119716631345e-37
-ddI[0] == strtod
-
-
-Input: 1.23456789e-30
-strtopdd consumes 14 bytes and returns 33
-dd[0] = 1.23456789e-30 = #39b90a3e 33bbd995
-dd[1] = 2.1567930523648577e-47 = #363f8585 55a6b1a0
-g_ddfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIdd returns 33, consuming 14 bytes.
-ddI[0] = #39b90a3e 33bbd995 + 363f8585 55a6b198
-= 1.23456789e-30 + 2.1567930523648558e-47
-ddI[1] = #39b90a3e 33bbd995 + 363f8585 55a6b1a0
-= 1.23456789e-30 + 2.1567930523648577e-47
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789
-strtopdd consumes 20 bytes and returns 33
-dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb
-dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e
-g_ddfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIdd returns 33, consuming 20 bytes.
-ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c
-= 1.2345678901234567 + 9.8567864525888563e-17
-ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e
-= 1.2345678901234567 + 9.8567864525888588e-17
-ddI[1] == strtod
-
-
-Input: 1.23456789012345678901234567890123456789
-strtopdd consumes 40 bytes and returns 33
-dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb
-dd[1] = 9.858021020478982e-17 = #3c9c69ef 85adadb6
-g_ddfmt(0) gives 34 bytes: "1.23456789012345678901234567890124"
-
-strtoIdd returns 33, consuming 40 bytes.
-ddI[0] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb4
-= 1.2345678901234567 + 9.8580210204789798e-17
-ddI[1] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb6
-= 1.2345678901234567 + 9.8580210204789823e-17
-ddI[1] == strtod
-
-
-Input: 1.23e306
-strtopdd consumes 8 bytes and returns 33
-dd[0] = 1.2299999999999999e+306 = #7f7c0676 cd1c61f4
-dd[1] = 1.3319001448659015e+290 = #7c2b558b e3d3f477
-g_ddfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIdd returns 33, consuming 8 bytes.
-ddI[0] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f476
-= 1.2299999999999999e+306 + 1.3319001448659013e+290
-ddI[1] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f477
-= 1.2299999999999999e+306 + 1.3319001448659015e+290
-ddI[1] == strtod
-
-
-Input: 1.23e-306
-strtopdd consumes 9 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 9 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 1.23e-320
-strtopdd consumes 9 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 9 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 1.23e-20
-strtopdd consumes 8 bytes and returns 33
-dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530
-dd[1] = 9.304023318521521e-37 = #3873c997 955b2691
-g_ddfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIdd returns 33, consuming 8 bytes.
-ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690
-= 1.2299999999999999e-20 + 9.3040233185215194e-37
-ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691
-= 1.2299999999999999e-20 + 9.3040233185215211e-37
-ddI[1] == strtod
-
-
-Input: 1.23456789e307
-strtopdd consumes 14 bytes and returns 33
-dd[0] = 1.2345678899999998e+307 = #7fb194b1 4bdaecdb
-dd[1] = 2.0137933598720243e+291 = #7c69d48d 192048ca
-g_ddfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIdd returns 33, consuming 14 bytes.
-ddI[0] = #7fb194b1 4bdaecdb + 7c69d48d 192048c9
-= 1.2345678899999998e+307 + 2.013793359872024e+291
-ddI[1] = #7fb194b1 4bdaecdb + 7c69d48d 192048ca
-= 1.2345678899999998e+307 + 2.0137933598720243e+291
-ddI[1] == strtod
-
-
-Input: 1.23456589e-307
-strtopdd consumes 15 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 15 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 1.234567890123456789
-strtopdd consumes 20 bytes and returns 33
-dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb
-dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e
-g_ddfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIdd returns 33, consuming 20 bytes.
-ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c
-= 1.2345678901234567 + 9.8567864525888563e-17
-ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e
-= 1.2345678901234567 + 9.8567864525888588e-17
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789e301
-strtopdd consumes 24 bytes and returns 33
-dd[0] = 1.2345678901234568e+301 = #7e726f51 75f56413
-dd[1] = 1.3892003943918827e+283 = #7ab7ea80 76399100
-g_ddfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIdd returns 33, consuming 24 bytes.
-ddI[0] = #7e726f51 75f56413 + 7ab7ea80 76399080
-= 1.2345678901234568e+301 + 1.3892003943918563e+283
-ddI[1] = #7e726f51 75f56413 + 7ab7ea80 76399100
-= 1.2345678901234568e+301 + 1.3892003943918827e+283
-ddI[1] == strtod
-
-
-Input: 1.234567890123456789e-301
-strtopdd consumes 25 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 25 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 1.234567890123456789e-321
-strtopdd consumes 25 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 25 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 1e23
-strtopdd consumes 4 bytes and returns 1
-dd[0] = 1e+23 = #44b52d02 c7e14af6
-dd[1] = 8388608 = #41600000 0
-g_ddfmt(0) gives 5 bytes: "1e+23"
-
-strtoIdd returns 1, consuming 4 bytes.
-ddI[0] == ddI[1] == strtopdd
-
-
-Input: 1e310
-strtopdd consumes 5 bytes and returns 163
-dd[0] = Infinity = #7ff00000 0
-dd[1] = Infinity = #7ff00000 0
-g_ddfmt(0) gives 8 bytes: "Infinity"
-
-strtoIdd returns 163, consuming 5 bytes.
-ddI[0] = #7fefffff ffffffff + 7c9fffff ffffffff
-= 1.7976931348623157e+308 + 1.9958403095347196e+292
-ddI[1] = #7ff00000 0 + 7ff00000 0
-= Infinity + Infinity
-ddI[1] == strtod
-
-
-Input: 9.0259718793241475e-277
-strtopdd consumes 23 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 23 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 9.025971879324147880346310405869e-277
-strtopdd consumes 37 bytes and returns 17
-dd[0] = 9.025971879324148e-277 = #6a00000 0
-dd[1] = 2.2250738585072014e-308 = #100000 0
-g_ddfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277"
-
-strtoIdd returns 17, consuming 37 bytes.
-ddI[0] = #6a00000 0 + 100000 0
-= 9.0259718793241479e-277 + 2.2250738585072014e-308
-ddI[1] = #6a00000 0 + 200000 0
-= 9.0259718793241479e-277 + 4.4501477170144028e-308
-ddI[0] == strtod
-
-
-Input: 9.025971879324147880346310405868e-277
-strtopdd consumes 37 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 37 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 2.2250738585072014e-308
-strtopdd consumes 23 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 23 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
-
-Input: 2.2250738585072013e-308
-strtopdd consumes 23 bytes and returns 80
-dd[0] = 0 = #0 0
-dd[1] = 0 = #0 0
-g_ddfmt(0) gives 1 bytes: "0"
-
-strtoIdd returns 80, consuming 23 bytes.
-ddI[0] = #0 0 + 0 0
-= 0 + 0
-ddI[1] = #6a00000 0 + 0 0
-= 9.0259718793241479e-277 + 0
-ddI[0] == strtod
-
diff --git a/float/gdtoa/test/ddtest.c b/float/gdtoa/test/ddtest.c
deleted file mode 100644 (file)
index aa32e92..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for g_ddfmt, strtoIdd, strtopdd, and strtordd.
- *
- * Inputs (on stdin):
- *             r rounding_mode
- *             n ndig
- *             number
- *             #hex0 hex1 hex2 hex3
- *
- *     rounding_mode values:
- *             0 = toward zero
- *             1 = nearest
- *             2 = toward +Infinity
- *             3 = toward -Infinity
- *
- * where number is a decimal floating-point number,
- * hex0 is a string of <= 8 Hex digits for the most significant
- * word of the number, hex1 is a similar string for the next
- * word, etc., and ndig is a parameters to g_ddfmt.
- */
-
-#include "gdtoaimp.h"
-#include <stdio.h>
-#include <stdlib.h>
-
- extern int getround ANSI((int,char*));
-
- static char ibuf[2048], obuf[1024];
-
-#define U (unsigned long)
-
- static void
-#ifdef KR_headers
-dprint(what, d) char *what; double d;
-#else
-dprint(char *what, double d)
-#endif
-{
-       char buf[32];
-       ULong *L = (ULong*)&d;
-
-       g_dfmt(buf,&d,0,sizeof(buf));
-       printf("%s = %s = #%lx %lx\n", what, buf, U L[_0], U L[_1]);
-       }
-
- int
-main(Void)
-{
-       ULong *L;
-       char *s, *s1, *se, *se1;
-       int dItry, i, j, r = 1, ndig = 0;
-       double dd[2], ddI[4];
-       long LL[4];
-
-       L = (ULong*)&dd[0];
-       while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               dItry = 0;
-               switch(*s) {
-                 case 'r':
-                       r = getround(r, s);
-                       continue;
-                 case 'n':
-                       i = s[1];
-                       if (i <= ' ' || i >= '0' && i <= '9') {
-                               ndig = atoi(s+1);
-                               continue;
-                               }
-                       break; /* nan? */
-                 case '#':
-                       LL[0] = L[_0];
-                       LL[1] = L[_1];
-                       LL[2] = L[2+_0];
-                       LL[3] = L[2+_1];
-                       sscanf(s+1, "%lx %lx %lx %lx", &LL[0], &LL[1],
-                               &LL[2], &LL[3]);
-                       L[_0] = LL[0];
-                       L[_1] = LL[1];
-                       L[2+_0] = LL[2];
-                       L[2+_1] = LL[3];
-                       printf("\nInput: %s", ibuf);
-                       printf(" --> f = #%lx %lx %lx %lx\n",
-                               LL[0],LL[1],LL[2],LL[3]);
-                       goto fmt_test;
-                       }
-               printf("\nInput: %s", ibuf);
-               for(s1 = s; *s1 > ' '; s1++){};
-               while(*s1 <= ' ' && *s1) s1++;
-               if (!*s1) {
-                       dItry = 1;
-                       i = strtordd(ibuf, &se, r, dd);
-                       if (r == 1) {
-                               j = strtopdd(ibuf, &se1, ddI);
-                               if (i != j || dd[0] != ddI[0]
-                                || dd[1] != ddI[1] || se != se1)
-                                       printf("***strtopdd and strtordd disagree!!\n:");
-                               }
-                       printf("strtopdd consumes %d bytes and returns %d\n",
-                               (int)(se-ibuf), i);
-                       }
-               else {
-                       dd[0] = strtod(s, &se);
-                       dd[1] = strtod(se, &se);
-                       }
- fmt_test:
-               dprint("dd[0]", dd[0]);
-               dprint("dd[1]", dd[1]);
-               se = g_ddfmt(obuf, dd, ndig, sizeof(obuf));
-               printf("g_ddfmt(%d) gives %d bytes: \"%s\"\n\n",
-                       ndig, (int)(se-obuf), se ? obuf : "<null>");
-               if (!dItry)
-                       continue;
-               printf("strtoIdd returns %d,", strtoIdd(ibuf, &se, ddI,&ddI[2]));
-               printf(" consuming %d bytes.\n", (int)(se-ibuf));
-               if (ddI[0] == ddI[2] && ddI[1] == ddI[3]) {
-                       if (ddI[0] == dd[0] && ddI[1] == dd[1])
-                               printf("ddI[0] == ddI[1] == strtopdd\n");
-                       else
-                               printf("ddI[0] == ddI[1] = #%lx %lx + %lx %lx\n= %.17g + %17.g\n",
-                                       U ((ULong*)ddI)[_0],
-                                       U ((ULong*)ddI)[_1],
-                                       U ((ULong*)ddI)[2+_0],
-                                       U ((ULong*)ddI)[2+_1],
-                                       ddI[0], ddI[1]);
-                       }
-               else {
-                       printf("ddI[0] = #%lx %lx + %lx %lx\n= %.17g + %.17g\n",
-                               U ((ULong*)ddI)[_0], U ((ULong*)ddI)[_1],
-                               U ((ULong*)ddI)[2+_0], U ((ULong*)ddI)[2+_1],
-                               ddI[0], ddI[1]);
-                       printf("ddI[1] = #%lx %lx + %lx %lx\n= %.17g + %.17g\n",
-                               U ((ULong*)ddI)[4+_0], U ((ULong*)ddI)[4+_1],
-                               U ((ULong*)ddI)[6+_0], U ((ULong*)ddI)[6+_1],
-                               ddI[2], ddI[3]);
-                       if (ddI[0] == dd[0] && ddI[1] == dd[1])
-                               printf("ddI[0] == strtod\n");
-                       else if (ddI[2] == dd[0] && ddI[3] == dd[1])
-                               printf("ddI[1] == strtod\n");
-                       else
-                               printf("**** Both differ from strtopdd ****\n");
-                       }
-               printf("\n");
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/dt.c b/float/gdtoa/test/dt.c
deleted file mode 100644 (file)
index 1a86ba3..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for strtod and dtoa.
- *
- * Inputs (on stdin):
- *             number[: mode [ndigits]]
- * or
- *             #hex0 hex1[: mode [ndigits]]
- * where number is a decimal floating-point number,
- * hex0 is a string of Hex digits for the most significant
- * word of the number, hex1 is a similar string for the other
- * (least significant) word, and mode and ndigits are
- * parameters to dtoa.
- */
-
-#include <stdio.h>
-#include "gdtoa.h"
-#ifdef KR_headers
-#define Void /*void*/
-#else
-#define Void void
-#endif
-
-#ifdef __STDC__
-#include <stdlib.h>
-#else
-#ifdef __cplusplus
-extern "C" double atof(const char*);
-#else
-extern double atof ANSI((char*));
-#endif
-#endif
-#ifdef IEEE_8087
-#define word0(x) ((ULong *)&x)[1]
-#define word1(x) ((ULong *)&x)[0]
-#else
-#define word0(x) ((ULong *)&x)[0]
-#define word1(x) ((ULong *)&x)[1]
-#endif
-#include "errno.h"
-
-#ifdef __cplusplus
-extern "C" char *dtoa(double, int, int, int*, int*, char **);
-#else
-extern char *dtoa ANSI((double, int, int, int*, int*, char **));
-#endif
-
- static void
-#ifdef KR_headers
-g_fmt(b, x) char *b; double x;
-#else
-g_fmt(char *b, double x)
-#endif
-{
-       char *s, *se;
-       int decpt, i, j, k, sign;
-
-       if (!x) {
-               *b++ = '0';
-               *b = 0;
-               return;
-               }
-       s = dtoa(x, 0, 0, &decpt, &sign, &se);
-       if (sign)
-               *b++ = '-';
-       if (decpt == 9999) /* Infinity or Nan */ {
-               while(*b++ = *s++);
-               return;
-               }
-       if (decpt <= -4 || decpt > se - s + 5) {
-               *b++ = *s++;
-               if (*s) {
-                       *b++ = '.';
-                       while(*b = *s++)
-                               b++;
-                       }
-               *b++ = 'e';
-               /* sprintf(b, "%+.2d", decpt - 1); */
-               if (--decpt < 0) {
-                       *b++ = '-';
-                       decpt = -decpt;
-                       }
-               else
-                       *b++ = '+';
-               for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10){};
-               for(;;) {
-                       i = decpt / k;
-                       *b++ = i + '0';
-                       if (--j <= 0)
-                               break;
-                       decpt -= i*k;
-                       decpt *= 10;
-                       }
-               *b = 0;
-               }
-       else if (decpt <= 0) {
-               *b++ = '.';
-               for(; decpt < 0; decpt++)
-                       *b++ = '0';
-               while(*b++ = *s++);
-               }
-       else {
-               while(*b = *s++) {
-                       b++;
-                       if (--decpt == 0 && *s)
-                               *b++ = '.';
-                       }
-               for(; decpt > 0; decpt--)
-                       *b++ = '0';
-               *b = 0;
-               }
-       }
-
- static void
-baderrno(Void)
-{
-       fflush(stdout);
-       perror("\nerrno strtod");
-       fflush(stderr);
-       }
-
-#define U (unsigned long)
-
- static void
-#ifdef KR_headers
-check(d) double d;
-#else
-check(double d)
-#endif
-{
-       char buf[64];
-       int decpt, sign;
-       char *s, *se;
-       double d1;
-
-       s = dtoa(d, 0, 0, &decpt, &sign, &se);
-       sprintf(buf, "%s.%se%d", sign ? "-" : "", s, decpt);
-       errno = 0;
-       d1 = strtod(buf, (char **)0);
-       if (errno)
-               baderrno();
-       if (d != d1) {
-               printf("sent d = %.17g = 0x%lx %lx, buf = %s\n",
-                       d, U word0(d), U word1(d), buf);
-               printf("got d1 = %.17g = 0x%lx %lx\n",
-                       d1, U word0(d1), U word1(d1));
-               }
-       }
-
-main(Void){
-       char buf[2048], buf1[32];
-       char *fmt, *s, *se;
-       double d, d1;
-       int decpt, sign;
-       int mode = 0, ndigits = 17;
-       ULong x, y;
-#ifdef VAX
-       ULong z;
-#endif
-
-       while(fgets(buf, sizeof(buf), stdin)) {
-               if (*buf == '*') {
-                       printf("%s", buf);
-                       continue;
-                       }
-               printf("Input: %s", buf);
-               if (*buf == '#') {
-                       x = word0(d);
-                       y = word1(d);
-                       sscanf(buf+1, "%lx %lx:%d %d", &x, &y, &mode, &ndigits);
-                       word0(d) = x;
-                       word1(d) = y;
-                       fmt = "Output: d =\n%.17g = 0x%lx %lx\n";
-                       }
-               else {
-                       errno = 0;
-                       d = strtod(buf,&se);
-                       if (*se == ':')
-                               sscanf(se+1,"%d %d", &mode, &ndigits);
-                       d1 = atof(buf);
-                       fmt = "Output: d =\n%.17g = 0x%lx %lx, se = %s";
-                       if (errno)
-                               baderrno();
-                       }
-               printf(fmt, d, U word0(d), U word1(d), se);
-               g_fmt(buf1, d);
-               printf("\tg_fmt gives \"%s\"\n", buf1);
-               if (*buf != '#' && d != d1)
-                       printf("atof gives\n\
-       d1 = %.17g = 0x%lx %lx\nversus\n\
-       d  = %.17g = 0x%lx %lx\n", d1, U word0(d1), U word1(d1),
-                               d, U word0(d), U word1(d));
-               check(d);
-               s = dtoa(d, mode, ndigits, &decpt, &sign, &se);
-               printf("\tdtoa(mode = %d, ndigits = %d):\n", mode, ndigits);
-               printf("\tdtoa returns sign = %d, decpt = %d, %d digits:\n%s\n",
-                       sign, decpt, se-s, s);
-               x = word1(d);
-               if (x != 0xffffffff
-                && (word0(d) & 0x7ff00000) != 0x7ff00000) {
-#ifdef VAX
-                       z = x << 16 | x >> 16;
-                       z++;
-                       z = z << 16 | z >> 16;
-                       word1(d) = z;
-#else
-                       word1(d) = x + 1;
-#endif
-                       printf("\tnextafter(d,+Inf) = %.17g = 0x%lx %lx:\n",
-                               d, U word0(d), U word1(d));
-                       g_fmt(buf1, d);
-                       printf("\tg_fmt gives \"%s\"\n", buf1);
-                       s = dtoa(d, mode, ndigits, &decpt, &sign, &se);
-                       printf(
-               "\tdtoa returns sign = %d, decpt = %d, %d digits:\n%s\n",
-                               sign, decpt, se-s, s);
-                       check(d);
-                       }
-               if (x) {
-#ifdef VAX
-                       z = x << 16 | x >> 16;
-                       z--;
-                       z = z << 16 | z >> 16;
-                       word1(d) = z;
-#else
-                       word1(d) = x - 1;
-#endif
-                       printf("\tnextafter(d,-Inf) = %.17g = 0x%lx %lx:\n",
-                               d, U word0(d), U word1(d));
-                       g_fmt(buf1, d);
-                       printf("\tg_fmt gives \"%s\"\n", buf1);
-                       s = dtoa(d, mode, ndigits, &decpt, &sign, &se);
-                       printf(
-               "\tdtoa returns sign = %d, decpt = %d, %d digits:\n%s\n",
-                               sign, decpt, se-s, s);
-                       check(d);
-                       }
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/dtest.c b/float/gdtoa/test/dtest.c
deleted file mode 100644 (file)
index e07b1a8..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for g_dfmt, strtoId, strtod, strtopd, and strtord.
- *
- * Inputs (on stdin):
- *             r rounding_mode
- *             n ndig
- *             number
- *             #hex0 hex1
- *
- *     rounding_mode values:
- *             0 = toward zero
- *             1 = nearest
- *             2 = toward +Infinity
- *             3 = toward -Infinity
- *
- * where number is a decimal floating-point number,
- * hex0 is a string of Hex <= 8 digits for the most significant
- * word of the number, hex1 is a similar string for the other
- * (least significant) word, and ndig is a parameters to g_dfmt.
- */
-
-#include "gdtoaimp.h"
-#include <stdio.h>
-#include <stdlib.h>
-
- extern int getround ANSI((int,char*));
-
- static char ibuf[2048], obuf[1024];
-
-#define U (unsigned long)
-
- int
-main(Void)
-{
-       ULong *L;
-       char *s, *se, *se1;
-       double f, f1, fI[2];
-       int i, i1, ndig = 0, r = 1;
-       long LL[2];
-
-       L = (ULong*)&f;
-       while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               switch(*s) {
-                 case 'r':
-                       r = getround(r, s);
-                       continue;
-                 case 'n':
-                       i = s[1];
-                       if (i <= ' ' || i >= '0' && i <= '9') {
-                               ndig = atoi(s+1);
-                               continue;
-                               }
-                       break; /* nan? */
-                 case '#':
-                       LL[0] = L[_0];
-                       LL[1] = L[_1];
-                       sscanf(s+1, "%lx %lx", &LL[0], &LL[1]);
-                       L[_0] = LL[0];
-                       L[_1] = LL[1];
-                       printf("\nInput: %s", ibuf);
-                       printf("--> f = #%lx %lx\n", (long)L[_0], (long)L[_1]);
-                       goto fmt_test;
-                       }
-               printf("\nInput: %s", ibuf);
-               i = strtord(ibuf, &se, r, &f);
-               if (r == 1) {
-                       if ((f != strtod(ibuf, &se1) || se1 != se))
-                               printf("***strtod and strtord disagree!!\n");
-                       i1 = strtopd(ibuf, &se, &f1);
-                       if (i != i1 || f != f1 || se != se1)
-                               printf("***strtord and strtopd disagree!!\n");
-                       }
-               printf("strtod consumes %d bytes and returns %d with f = %.17g = #%lx %lx\n",
-                               (int)(se-ibuf), i, f, U L[_0], U L[_1]);
- fmt_test:
-               se = g_dfmt(obuf, &f, ndig, sizeof(obuf));
-               printf("g_dfmt(%d) gives %d bytes: \"%s\"\n\n",
-                       ndig, (int)(se-obuf), se ? obuf : "<null>");
-               if (*s == '#')
-                       continue;
-               printf("strtoId returns %d,", strtoId(ibuf, &se, fI, &fI[1]));
-               printf(" consuming %d bytes.\n", (int)(se-ibuf));
-               if (fI[0] == fI[1]) {
-                       if (fI[0] == f)
-                               printf("fI[0] == fI[1] == strtod\n");
-                       else
-                               printf("fI[0] == fI[1] = #%lx %lx = %.17g\n",
-                                       U ((ULong*)fI)[_0], U ((ULong*)fI)[_1],
-                                       fI[0]);
-                       }
-               else {
-                       printf("fI[0] = #%lx %lx = %.17g\n",
-                               U ((ULong*)fI)[_0], U ((ULong*)fI)[_1], fI[0]);
-                       printf("fI[1] = #%lx %lx = %.17g\n",
-                               U ((ULong*)&fI[1])[_0], U ((ULong*)&fI[1])[_1],
-                               fI[1]);
-                       if (fI[0] == f)
-                               printf("fI[0] == strtod\n");
-                       else if (fI[1] == f)
-                               printf("fI[1] == strtod\n");
-                       else
-                               printf("**** Both differ from strtod ****\n");
-                       }
-               printf("\n");
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/dtst.out b/float/gdtoa/test/dtst.out
deleted file mode 100644 (file)
index 1ec70ab..0000000
+++ /dev/null
@@ -1,686 +0,0 @@
-Input: 1.23
-Output: d =
-1.23 = 0x3ff3ae14 7ae147ae, se = 
-       g_fmt gives "1.23"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
-       g_fmt gives "1.2300000000000002"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
-       g_fmt gives "1.2299999999999998"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12299999999999998
-Input: 1.23e+20
-Output: d =
-1.23e+20 = 0x441aabdf 2145b430, se = 
-       g_fmt gives "1.23e+20"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
-       g_fmt gives "123000000000000020000"
-       dtoa returns sign = 0, decpt = 21, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
-       g_fmt gives "122999999999999980000"
-       dtoa returns sign = 0, decpt = 21, 17 digits:
-12299999999999998
-Input: 1.23e-20
-Output: d =
-1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = 
-       g_fmt gives "1.23e-20"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
-       g_fmt gives "1.2300000000000002e-20"
-       dtoa returns sign = 0, decpt = -19, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
-       g_fmt gives "1.2299999999999999e-20"
-       dtoa returns sign = 0, decpt = -19, 17 digits:
-12299999999999999
-Input: 1.23456789
-Output: d =
-1.2345678899999999 = 0x3ff3c0ca 4283de1b, se = 
-       g_fmt gives "1.23456789"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 1, 9 digits:
-123456789
-       nextafter(d,+Inf) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
-       g_fmt gives "1.2345678900000001"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678900000001
-       nextafter(d,-Inf) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
-       g_fmt gives "1.2345678899999997"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678899999997
-Input: 1.23456589e+20
-Output: d =
-1.23456589e+20 = 0x441ac537 a660b997, se = 
-       g_fmt gives "1.23456589e+20"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 21, 9 digits:
-123456589
-       nextafter(d,+Inf) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
-       g_fmt gives "123456589000000010000"
-       dtoa returns sign = 0, decpt = 21, 17 digits:
-12345658900000001
-       nextafter(d,-Inf) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
-       g_fmt gives "123456588999999980000"
-       dtoa returns sign = 0, decpt = 21, 17 digits:
-12345658899999998
-Input: 1.23e+30
-Output: d =
-1.23e+30 = 0x462f0cb0 4e8fb790, se = 
-       g_fmt gives "1.23e+30"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 31, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000001e+30 = 0x462f0cb0 4e8fb791:
-       g_fmt gives "1.2300000000000001e+30"
-       dtoa returns sign = 0, decpt = 31, 17 digits:
-12300000000000001
-       nextafter(d,-Inf) = 1.2299999999999998e+30 = 0x462f0cb0 4e8fb78f:
-       g_fmt gives "1.2299999999999998e+30"
-       dtoa returns sign = 0, decpt = 31, 17 digits:
-12299999999999998
-Input: 1.23e-30
-Output: d =
-1.2300000000000001e-30 = 0x39b8f286 6f5010ab, se = 
-       g_fmt gives "1.23e-30"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -29, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e-30 = 0x39b8f286 6f5010ac:
-       g_fmt gives "1.2300000000000002e-30"
-       dtoa returns sign = 0, decpt = -29, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999999e-30 = 0x39b8f286 6f5010aa:
-       g_fmt gives "1.2299999999999999e-30"
-       dtoa returns sign = 0, decpt = -29, 17 digits:
-12299999999999999
-Input: 1.23456789e-20
-Output: d =
-1.2345678899999999e-20 = 0x3bcd2681 471e7ada, se = 
-       g_fmt gives "1.23456789e-20"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -19, 9 digits:
-123456789
-       nextafter(d,+Inf) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
-       g_fmt gives "1.2345678900000001e-20"
-       dtoa returns sign = 0, decpt = -19, 17 digits:
-12345678900000001
-       nextafter(d,-Inf) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
-       g_fmt gives "1.2345678899999998e-20"
-       dtoa returns sign = 0, decpt = -19, 17 digits:
-12345678899999998
-Input: 1.23456789e-30
-Output: d =
-1.23456789e-30 = 0x39b90a3e 33bbd995, se = 
-       g_fmt gives "1.23456789e-30"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -29, 9 digits:
-123456789
-       nextafter(d,+Inf) = 1.2345678900000002e-30 = 0x39b90a3e 33bbd996:
-       g_fmt gives "1.2345678900000002e-30"
-       dtoa returns sign = 0, decpt = -29, 17 digits:
-12345678900000002
-       nextafter(d,-Inf) = 1.2345678899999998e-30 = 0x39b90a3e 33bbd994:
-       g_fmt gives "1.2345678899999998e-30"
-       dtoa returns sign = 0, decpt = -29, 17 digits:
-12345678899999998
-Input: 1.234567890123456789
-Output: d =
-1.2345678901234567 = 0x3ff3c0ca 428c59fb, se = 
-       g_fmt gives "1.2345678901234567"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678901234567
-       nextafter(d,+Inf) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
-       g_fmt gives "1.234567890123457"
-       dtoa returns sign = 0, decpt = 1, 16 digits:
-1234567890123457
-       nextafter(d,-Inf) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
-       g_fmt gives "1.2345678901234565"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678901234565
-Input: 1.23456789012345678901234567890123456789
-Output: d =
-1.2345678901234567 = 0x3ff3c0ca 428c59fb, se = 
-       g_fmt gives "1.2345678901234567"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678901234567
-       nextafter(d,+Inf) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
-       g_fmt gives "1.234567890123457"
-       dtoa returns sign = 0, decpt = 1, 16 digits:
-1234567890123457
-       nextafter(d,-Inf) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
-       g_fmt gives "1.2345678901234565"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678901234565
-Input: 1.23e306
-Output: d =
-1.23e+306 = 0x7f7c0676 cd1c61f5, se = 
-       g_fmt gives "1.23e+306"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 307, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e+306 = 0x7f7c0676 cd1c61f6:
-       g_fmt gives "1.2300000000000002e+306"
-       dtoa returns sign = 0, decpt = 307, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999999e+306 = 0x7f7c0676 cd1c61f4:
-       g_fmt gives "1.2299999999999999e+306"
-       dtoa returns sign = 0, decpt = 307, 17 digits:
-12299999999999999
-Input: 1.23e-306
-Output: d =
-1.23e-306 = 0x6ba3b8 5da396e8, se = 
-       g_fmt gives "1.23e-306"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -305, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e-306 = 0x6ba3b8 5da396e9:
-       g_fmt gives "1.2300000000000002e-306"
-       dtoa returns sign = 0, decpt = -305, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999999e-306 = 0x6ba3b8 5da396e7:
-       g_fmt gives "1.2299999999999999e-306"
-       dtoa returns sign = 0, decpt = -305, 17 digits:
-12299999999999999
-Input: 1.23e-320
-Output: d =
-1.2302234581447039e-320 = 0x0 9ba, se = 
-       g_fmt gives "1.23e-320"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -319, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2307175237905451e-320 = 0x0 9bb:
-       g_fmt gives "1.2307e-320"
-       dtoa returns sign = 0, decpt = -319, 5 digits:
-12307
-       nextafter(d,-Inf) = 1.2297293924988626e-320 = 0x0 9b9:
-       g_fmt gives "1.2297e-320"
-       dtoa returns sign = 0, decpt = -319, 5 digits:
-12297
-Input: 1.23e-20
-Output: d =
-1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = 
-       g_fmt gives "1.23e-20"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
-       g_fmt gives "1.2300000000000002e-20"
-       dtoa returns sign = 0, decpt = -19, 17 digits:
-12300000000000002
-       nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
-       g_fmt gives "1.2299999999999999e-20"
-       dtoa returns sign = 0, decpt = -19, 17 digits:
-12299999999999999
-Input: 1.23456789e307
-Output: d =
-1.23456789e+307 = 0x7fb194b1 4bdaecdc, se = 
-       g_fmt gives "1.23456789e+307"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 308, 9 digits:
-123456789
-       nextafter(d,+Inf) = 1.2345678900000003e+307 = 0x7fb194b1 4bdaecdd:
-       g_fmt gives "1.2345678900000003e+307"
-       dtoa returns sign = 0, decpt = 308, 17 digits:
-12345678900000003
-       nextafter(d,-Inf) = 1.2345678899999998e+307 = 0x7fb194b1 4bdaecdb:
-       g_fmt gives "1.2345678899999998e+307"
-       dtoa returns sign = 0, decpt = 308, 17 digits:
-12345678899999998
-Input: 1.23456589e-307
-Output: d =
-1.2345658899999999e-307 = 0x363196 bb9845fa, se = 
-       g_fmt gives "1.23456589e-307"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -306, 9 digits:
-123456589
-       nextafter(d,+Inf) = 1.2345658900000001e-307 = 0x363196 bb9845fb:
-       g_fmt gives "1.2345658900000001e-307"
-       dtoa returns sign = 0, decpt = -306, 17 digits:
-12345658900000001
-       nextafter(d,-Inf) = 1.2345658899999997e-307 = 0x363196 bb9845f9:
-       g_fmt gives "1.2345658899999997e-307"
-       dtoa returns sign = 0, decpt = -306, 17 digits:
-12345658899999997
-Input: 1.234567890123456789
-Output: d =
-1.2345678901234567 = 0x3ff3c0ca 428c59fb, se = 
-       g_fmt gives "1.2345678901234567"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678901234567
-       nextafter(d,+Inf) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
-       g_fmt gives "1.234567890123457"
-       dtoa returns sign = 0, decpt = 1, 16 digits:
-1234567890123457
-       nextafter(d,-Inf) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
-       g_fmt gives "1.2345678901234565"
-       dtoa returns sign = 0, decpt = 1, 17 digits:
-12345678901234565
-Input: 1.234567890123456789e301
-Output: d =
-1.2345678901234568e+301 = 0x7e726f51 75f56413, se = 
-       g_fmt gives "1.2345678901234568e+301"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 302, 17 digits:
-12345678901234568
-       nextafter(d,+Inf) = 1.234567890123457e+301 = 0x7e726f51 75f56414:
-       g_fmt gives "1.234567890123457e+301"
-       dtoa returns sign = 0, decpt = 302, 16 digits:
-1234567890123457
-       nextafter(d,-Inf) = 1.2345678901234565e+301 = 0x7e726f51 75f56412:
-       g_fmt gives "1.2345678901234565e+301"
-       dtoa returns sign = 0, decpt = 302, 17 digits:
-12345678901234565
-Input: 1.234567890123456789e-301
-Output: d =
-1.2345678901234567e-301 = 0x1752a64 e34ba0d3, se = 
-       g_fmt gives "1.2345678901234567e-301"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -300, 17 digits:
-12345678901234567
-       nextafter(d,+Inf) = 1.2345678901234569e-301 = 0x1752a64 e34ba0d4:
-       g_fmt gives "1.234567890123457e-301"
-       dtoa returns sign = 0, decpt = -300, 16 digits:
-1234567890123457
-       nextafter(d,-Inf) = 1.2345678901234565e-301 = 0x1752a64 e34ba0d2:
-       g_fmt gives "1.2345678901234565e-301"
-       dtoa returns sign = 0, decpt = -300, 17 digits:
-12345678901234565
-Input: 1.234567890123456789e-321
-Output: d =
-1.2351641146031164e-321 = 0x0 fa, se = 
-       g_fmt gives "1.235e-321"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -320, 4 digits:
-1235
-       nextafter(d,+Inf) = 1.2401047710615288e-321 = 0x0 fb:
-       g_fmt gives "1.24e-321"
-       dtoa returns sign = 0, decpt = -320, 3 digits:
-124
-       nextafter(d,-Inf) = 1.2302234581447039e-321 = 0x0 f9:
-       g_fmt gives "1.23e-321"
-       dtoa returns sign = 0, decpt = -320, 3 digits:
-123
-Input: 1e23
-Output: d =
-9.9999999999999992e+22 = 0x44b52d02 c7e14af6, se = 
-       g_fmt gives "1e+23"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 24, 1 digits:
-1
-       nextafter(d,+Inf) = 1.0000000000000001e+23 = 0x44b52d02 c7e14af7:
-       g_fmt gives "1.0000000000000001e+23"
-       dtoa returns sign = 0, decpt = 24, 17 digits:
-10000000000000001
-       nextafter(d,-Inf) = 9.9999999999999975e+22 = 0x44b52d02 c7e14af5:
-       g_fmt gives "9.999999999999997e+22"
-       dtoa returns sign = 0, decpt = 23, 16 digits:
-9999999999999997
-Input: 1e310
-
-errno strtod: Result too large
-Output: d =
-Infinity = 0x7ff00000 0, se = 
-       g_fmt gives "Infinity"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = 9999, 8 digits:
-Infinity
-Input: 9.0259718793241475e-277
-Output: d =
-9.0259718793241479e-277 = 0x6a00000 0, se = 
-       g_fmt gives "9.025971879324148e-277"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -276, 16 digits:
-9025971879324148
-       nextafter(d,+Inf) = 9.0259718793241499e-277 = 0x6a00000 1:
-       g_fmt gives "9.02597187932415e-277"
-       dtoa returns sign = 0, decpt = -276, 15 digits:
-902597187932415
-Input: 9.025971879324147880346310405869e-277
-Output: d =
-9.0259718793241479e-277 = 0x6a00000 0, se = 
-       g_fmt gives "9.025971879324148e-277"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -276, 16 digits:
-9025971879324148
-       nextafter(d,+Inf) = 9.0259718793241499e-277 = 0x6a00000 1:
-       g_fmt gives "9.02597187932415e-277"
-       dtoa returns sign = 0, decpt = -276, 15 digits:
-902597187932415
-Input: 9.025971879324147880346310405868e-277
-Output: d =
-9.0259718793241479e-277 = 0x6a00000 0, se = 
-       g_fmt gives "9.025971879324148e-277"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -276, 16 digits:
-9025971879324148
-       nextafter(d,+Inf) = 9.0259718793241499e-277 = 0x6a00000 1:
-       g_fmt gives "9.02597187932415e-277"
-       dtoa returns sign = 0, decpt = -276, 15 digits:
-902597187932415
-Input: 2.2250738585072014e-308
-Output: d =
-2.2250738585072014e-308 = 0x100000 0, se = 
-       g_fmt gives "2.2250738585072014e-308"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -307, 17 digits:
-22250738585072014
-       nextafter(d,+Inf) = 2.2250738585072019e-308 = 0x100000 1:
-       g_fmt gives "2.225073858507202e-308"
-       dtoa returns sign = 0, decpt = -307, 16 digits:
-2225073858507202
-Input: 2.2250738585072013e-308
-Output: d =
-2.2250738585072014e-308 = 0x100000 0, se = 
-       g_fmt gives "2.2250738585072014e-308"
-       dtoa(mode = 0, ndigits = 17):
-       dtoa returns sign = 0, decpt = -307, 17 digits:
-22250738585072014
-       nextafter(d,+Inf) = 2.2250738585072019e-308 = 0x100000 1:
-       g_fmt gives "2.225073858507202e-308"
-       dtoa returns sign = 0, decpt = -307, 16 digits:
-2225073858507202
-Input: 1.23:2 6
-Output: d =
-1.23 = 0x3ff3ae14 7ae147ae, se = :2 6
-       g_fmt gives "1.23"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
-       g_fmt gives "1.2300000000000002"
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-       nextafter(d,-Inf) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
-       g_fmt gives "1.2299999999999998"
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-Input: 1.23:4 6
-Output: d =
-1.23 = 0x3ff3ae14 7ae147ae, se = :4 6
-       g_fmt gives "1.23"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
-       g_fmt gives "1.2300000000000002"
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-       nextafter(d,-Inf) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
-       g_fmt gives "1.2299999999999998"
-       dtoa returns sign = 0, decpt = 1, 3 digits:
-123
-Input: 1.23e+20:2 6
-Output: d =
-1.23e+20 = 0x441aabdf 2145b430, se = :2 6
-       g_fmt gives "1.23e+20"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
-       g_fmt gives "123000000000000020000"
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-       nextafter(d,-Inf) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
-       g_fmt gives "122999999999999980000"
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-Input: 1.23e+20:4 6
-Output: d =
-1.23e+20 = 0x441aabdf 2145b430, se = :4 6
-       g_fmt gives "1.23e+20"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
-       g_fmt gives "123000000000000020000"
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-       nextafter(d,-Inf) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
-       g_fmt gives "122999999999999980000"
-       dtoa returns sign = 0, decpt = 21, 3 digits:
-123
-Input: 1.23e-20:2 6
-Output: d =
-1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = :2 6
-       g_fmt gives "1.23e-20"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
-       g_fmt gives "1.2300000000000002e-20"
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-       nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
-       g_fmt gives "1.2299999999999999e-20"
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-Input: 1.23e-20:4 6
-Output: d =
-1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = :4 6
-       g_fmt gives "1.23e-20"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-       nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
-       g_fmt gives "1.2300000000000002e-20"
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-       nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
-       g_fmt gives "1.2299999999999999e-20"
-       dtoa returns sign = 0, decpt = -19, 3 digits:
-123
-Input: 1.23456789:2 6
-Output: d =
-1.2345678899999999 = 0x3ff3c0ca 4283de1b, se = :2 6
-       g_fmt gives "1.23456789"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-       nextafter(d,+Inf) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
-       g_fmt gives "1.2345678900000001"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
-       g_fmt gives "1.2345678899999997"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-Input: 1.23456789:4 6
-Output: d =
-1.2345678899999999 = 0x3ff3c0ca 4283de1b, se = :4 6
-       g_fmt gives "1.23456789"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-       nextafter(d,+Inf) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
-       g_fmt gives "1.2345678900000001"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
-       g_fmt gives "1.2345678899999997"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-Input: 1.23456589e+20:2 6
-Output: d =
-1.23456589e+20 = 0x441ac537 a660b997, se = :2 6
-       g_fmt gives "1.23456589e+20"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-       nextafter(d,+Inf) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
-       g_fmt gives "123456589000000010000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
-       g_fmt gives "123456588999999980000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-Input: 1.23456589e+20:4 6
-Output: d =
-1.23456589e+20 = 0x441ac537 a660b997, se = :4 6
-       g_fmt gives "1.23456589e+20"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-       nextafter(d,+Inf) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
-       g_fmt gives "123456589000000010000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
-       g_fmt gives "123456588999999980000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-Input: 1.23456789e-20:2 6
-Output: d =
-1.2345678899999999e-20 = 0x3bcd2681 471e7ada, se = :2 6
-       g_fmt gives "1.23456789e-20"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-       nextafter(d,+Inf) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
-       g_fmt gives "1.2345678900000001e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
-       g_fmt gives "1.2345678899999998e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-Input: 1.23456789e-20:4 6
-Output: d =
-1.2345678899999999e-20 = 0x3bcd2681 471e7ada, se = :4 6
-       g_fmt gives "1.23456789e-20"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-       nextafter(d,+Inf) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
-       g_fmt gives "1.2345678900000001e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
-       g_fmt gives "1.2345678899999998e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-Input: 1234565:2 6
-Output: d =
-1234565 = 0x4132d685 0, se = :2 6
-       g_fmt gives "1234565"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 7, 6 digits:
-123456
-       nextafter(d,+Inf) = 1234565.0000000002 = 0x4132d685 1:
-       g_fmt gives "1234565.0000000002"
-       dtoa returns sign = 0, decpt = 7, 6 digits:
-123457
-Input: 1234565:4 6
-Output: d =
-1234565 = 0x4132d685 0, se = :4 6
-       g_fmt gives "1234565"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 7, 6 digits:
-123456
-       nextafter(d,+Inf) = 1234565.0000000002 = 0x4132d685 1:
-       g_fmt gives "1234565.0000000002"
-       dtoa returns sign = 0, decpt = 7, 6 digits:
-123457
-Input: 1.234565:2 6
-Output: d =
-1.2345649999999999 = 0x3ff3c0c7 3abc9470, se = :2 6
-       g_fmt gives "1.234565"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123456
-       nextafter(d,+Inf) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471:
-       g_fmt gives "1.2345650000000001"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f:
-       g_fmt gives "1.2345649999999997"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123456
-Input: 1.234565:4 6
-Output: d =
-1.2345649999999999 = 0x3ff3c0c7 3abc9470, se = :4 6
-       g_fmt gives "1.234565"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123456
-       nextafter(d,+Inf) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471:
-       g_fmt gives "1.2345650000000001"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f:
-       g_fmt gives "1.2345649999999997"
-       dtoa returns sign = 0, decpt = 1, 6 digits:
-123456
-Input: 1.234565e+20:2 6
-Output: d =
-1.234565e+20 = 0x441ac536 6299040d, se = :2 6
-       g_fmt gives "1.234565e+20"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123456
-       nextafter(d,+Inf) = 1.2345650000000002e+20 = 0x441ac536 6299040e:
-       g_fmt gives "123456500000000020000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345649999999998e+20 = 0x441ac536 6299040c:
-       g_fmt gives "123456499999999980000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123456
-Input: 1.234565e+20:4 6
-Output: d =
-1.234565e+20 = 0x441ac536 6299040d, se = :4 6
-       g_fmt gives "1.234565e+20"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123456
-       nextafter(d,+Inf) = 1.2345650000000002e+20 = 0x441ac536 6299040e:
-       g_fmt gives "123456500000000020000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345649999999998e+20 = 0x441ac536 6299040c:
-       g_fmt gives "123456499999999980000"
-       dtoa returns sign = 0, decpt = 21, 6 digits:
-123456
-Input: 1.234565e-20:2 6
-Output: d =
-1.234565e-20 = 0x3bcd267c ce45a93f, se = :2 6
-       g_fmt gives "1.234565e-20"
-       dtoa(mode = 2, ndigits = 6):
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123456
-       nextafter(d,+Inf) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940:
-       g_fmt gives "1.2345650000000001e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e:
-       g_fmt gives "1.2345649999999998e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123456
-Input: 1.234565e-20:4 6
-Output: d =
-1.234565e-20 = 0x3bcd267c ce45a93f, se = :4 6
-       g_fmt gives "1.234565e-20"
-       dtoa(mode = 4, ndigits = 6):
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123456
-       nextafter(d,+Inf) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940:
-       g_fmt gives "1.2345650000000001e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123457
-       nextafter(d,-Inf) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e:
-       g_fmt gives "1.2345649999999998e-20"
-       dtoa returns sign = 0, decpt = -19, 6 digits:
-123456
diff --git a/float/gdtoa/test/f.out b/float/gdtoa/test/f.out
deleted file mode 100644 (file)
index ca8d6eb..0000000
+++ /dev/null
@@ -1,968 +0,0 @@
-
-Input: 1.23
-strtof consumes 4 bytes and returns 1.23 = #3f9d70a4
-g_ffmt(0) gives 4 bytes: "1.23"
-
-strtoIf returns 33, consuming 4 bytes.
-fI[0] = #3f9d70a3 = 1.2299999
-fI[1] = #3f9d70a4 = 1.23
-fI[1] == strtof
-
-
-Input: 1.23e+20
-strtof consumes 8 bytes and returns 1.23e+20 = #60d55ef9
-g_ffmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIf returns 17, consuming 8 bytes.
-fI[0] = #60d55ef9 = 1.23e+20
-fI[1] = #60d55efa = 1.2300001e+20
-fI[0] == strtof
-
-
-Input: 1.23e-20
-strtof consumes 8 bytes and returns 1.23e-20 = #1e685726
-g_ffmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIf returns 17, consuming 8 bytes.
-fI[0] = #1e685726 = 1.23e-20
-fI[1] = #1e685727 = 1.23e-20
-fI[0] == strtof
-
-
-Input: 1.23456789
-strtof consumes 10 bytes and returns 1.2345679 = #3f9e0652
-g_ffmt(0) gives 9 bytes: "1.2345679"
-
-strtoIf returns 17, consuming 10 bytes.
-fI[0] = #3f9e0652 = 1.2345679
-fI[1] = #3f9e0653 = 1.234568
-fI[0] == strtof
-
-
-Input: 1.23456589e+20
-strtof consumes 14 bytes and returns 1.2345659e+20 = #60d629bd
-g_ffmt(0) gives 13 bytes: "1.2345659e+20"
-
-strtoIf returns 17, consuming 14 bytes.
-fI[0] = #60d629bd = 1.2345659e+20
-fI[1] = #60d629be = 1.234566e+20
-fI[0] == strtof
-
-
-Input: 1.23e+30
-strtof consumes 8 bytes and returns 1.23e+30 = #71786582
-g_ffmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIf returns 17, consuming 8 bytes.
-fI[0] = #71786582 = 1.23e+30
-fI[1] = #71786583 = 1.23e+30
-fI[0] == strtof
-
-
-Input: 1.23e-30
-strtof consumes 8 bytes and returns 1.23e-30 = #dc79433
-g_ffmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIf returns 17, consuming 8 bytes.
-fI[0] = #dc79433 = 1.23e-30
-fI[1] = #dc79434 = 1.23e-30
-fI[0] == strtof
-
-
-Input: 1.23456789e-20
-strtof consumes 14 bytes and returns 1.2345679e-20 = #1e69340a
-g_ffmt(0) gives 13 bytes: "1.2345679e-20"
-
-strtoIf returns 17, consuming 14 bytes.
-fI[0] = #1e69340a = 1.2345679e-20
-fI[1] = #1e69340b = 1.234568e-20
-fI[0] == strtof
-
-
-Input: 1.23456789e-30
-strtof consumes 14 bytes and returns 1.2345679e-30 = #dc851f2
-g_ffmt(0) gives 13 bytes: "1.2345679e-30"
-
-strtoIf returns 33, consuming 14 bytes.
-fI[0] = #dc851f1 = 1.2345678e-30
-fI[1] = #dc851f2 = 1.2345679e-30
-fI[1] == strtof
-
-
-Input: 1.234567890123456789
-strtof consumes 20 bytes and returns 1.2345679 = #3f9e0652
-g_ffmt(0) gives 9 bytes: "1.2345679"
-
-strtoIf returns 17, consuming 20 bytes.
-fI[0] = #3f9e0652 = 1.2345679
-fI[1] = #3f9e0653 = 1.234568
-fI[0] == strtof
-
-
-Input: 1.23456789012345678901234567890123456789
-strtof consumes 40 bytes and returns 1.2345679 = #3f9e0652
-g_ffmt(0) gives 9 bytes: "1.2345679"
-
-strtoIf returns 17, consuming 40 bytes.
-fI[0] = #3f9e0652 = 1.2345679
-fI[1] = #3f9e0653 = 1.234568
-fI[0] == strtof
-
-
-Input: 1.23e306
-strtof consumes 8 bytes and returns Infinity = #7f800000
-g_ffmt(0) gives 8 bytes: "Infinity"
-
-strtoIf returns 163, consuming 8 bytes.
-fI[0] = #7f7fffff = 3.4028235e+38
-fI[1] = #7f800000 = Infinity
-fI[1] == strtof
-
-
-Input: 1.23e-306
-strtof consumes 9 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 9 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.23e-320
-strtof consumes 9 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 9 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.23e-20
-strtof consumes 8 bytes and returns 1.23e-20 = #1e685726
-g_ffmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIf returns 17, consuming 8 bytes.
-fI[0] = #1e685726 = 1.23e-20
-fI[1] = #1e685727 = 1.23e-20
-fI[0] == strtof
-
-
-Input: 1.23456789e307
-strtof consumes 14 bytes and returns Infinity = #7f800000
-g_ffmt(0) gives 8 bytes: "Infinity"
-
-strtoIf returns 163, consuming 14 bytes.
-fI[0] = #7f7fffff = 3.4028235e+38
-fI[1] = #7f800000 = Infinity
-fI[1] == strtof
-
-
-Input: 1.23456589e-307
-strtof consumes 15 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 15 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.234567890123456789
-strtof consumes 20 bytes and returns 1.2345679 = #3f9e0652
-g_ffmt(0) gives 9 bytes: "1.2345679"
-
-strtoIf returns 17, consuming 20 bytes.
-fI[0] = #3f9e0652 = 1.2345679
-fI[1] = #3f9e0653 = 1.234568
-fI[0] == strtof
-
-
-Input: 1.234567890123456789e301
-strtof consumes 24 bytes and returns Infinity = #7f800000
-g_ffmt(0) gives 8 bytes: "Infinity"
-
-strtoIf returns 163, consuming 24 bytes.
-fI[0] = #7f7fffff = 3.4028235e+38
-fI[1] = #7f800000 = Infinity
-fI[1] == strtof
-
-
-Input: 1.234567890123456789e-301
-strtof consumes 25 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 25 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.234567890123456789e-321
-strtof consumes 25 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 25 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1e23
-strtof consumes 4 bytes and returns 9.9999998e+22 = #65a96816
-g_ffmt(0) gives 5 bytes: "1e+23"
-
-strtoIf returns 17, consuming 4 bytes.
-fI[0] = #65a96816 = 9.9999998e+22
-fI[1] = #65a96817 = 1.0000001e+23
-fI[0] == strtof
-
-
-Input: 1e310
-strtof consumes 5 bytes and returns Infinity = #7f800000
-g_ffmt(0) gives 8 bytes: "Infinity"
-
-strtoIf returns 163, consuming 5 bytes.
-fI[0] = #7f7fffff = 3.4028235e+38
-fI[1] = #7f800000 = Infinity
-fI[1] == strtof
-
-
-Input: 9.0259718793241475e-277
-strtof consumes 23 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 23 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 9.025971879324147880346310405869e-277
-strtof consumes 37 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 37 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 9.025971879324147880346310405868e-277
-strtof consumes 37 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 37 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 2.2250738585072014e-308
-strtof consumes 23 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 23 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 2.2250738585072013e-308
-strtof consumes 23 bytes and returns 0 = #0
-g_ffmt(0) gives 1 bytes: "0"
-
-strtoIf returns 80, consuming 23 bytes.
-fI[0] == fI[1] == strtof
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-strtof consumes 3 bytes and returns 1.0999999 = #3f8ccccc
-g_ffmt(0) gives 9 bytes: "1.0999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f8ccccc = 1.0999999
-fI[1] = #3f8ccccd = 1.1
-fI[0] == strtof
-
-
-Input: -1.1
-strtof consumes 4 bytes and returns -1.0999999 = #bf8ccccc
-g_ffmt(0) gives 10 bytes: "-1.0999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf8ccccd = -1.1
-fI[1] = #bf8ccccc = -1.0999999
-fI[1] == strtof
-
-
-Input: 1.2
-strtof consumes 3 bytes and returns 1.1999999 = #3f999999
-g_ffmt(0) gives 9 bytes: "1.1999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f999999 = 1.1999999
-fI[1] = #3f99999a = 1.2
-fI[0] == strtof
-
-
-Input: -1.2
-strtof consumes 4 bytes and returns -1.1999999 = #bf999999
-g_ffmt(0) gives 10 bytes: "-1.1999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf99999a = -1.2
-fI[1] = #bf999999 = -1.1999999
-fI[1] == strtof
-
-
-Input: 1.3
-strtof consumes 3 bytes and returns 1.3 = #3fa66666
-g_ffmt(0) gives 3 bytes: "1.3"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fa66666 = 1.3
-fI[1] = #3fa66667 = 1.3000001
-fI[0] == strtof
-
-
-Input: -1.3
-strtof consumes 4 bytes and returns -1.3 = #bfa66666
-g_ffmt(0) gives 4 bytes: "-1.3"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfa66667 = -1.3000001
-fI[1] = #bfa66666 = -1.3
-fI[1] == strtof
-
-
-Input: 1.4
-strtof consumes 3 bytes and returns 1.4 = #3fb33333
-g_ffmt(0) gives 3 bytes: "1.4"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fb33333 = 1.4
-fI[1] = #3fb33334 = 1.4000001
-fI[0] == strtof
-
-
-Input: -1.4
-strtof consumes 4 bytes and returns -1.4 = #bfb33333
-g_ffmt(0) gives 4 bytes: "-1.4"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfb33334 = -1.4000001
-fI[1] = #bfb33333 = -1.4
-fI[1] == strtof
-
-
-Input: 1.5
-strtof consumes 3 bytes and returns 1.5 = #3fc00000
-g_ffmt(0) gives 3 bytes: "1.5"
-
-strtoIf returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: -1.5
-strtof consumes 4 bytes and returns -1.5 = #bfc00000
-g_ffmt(0) gives 4 bytes: "-1.5"
-
-strtoIf returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.6
-strtof consumes 3 bytes and returns 1.5999999 = #3fcccccc
-g_ffmt(0) gives 9 bytes: "1.5999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fcccccc = 1.5999999
-fI[1] = #3fcccccd = 1.6
-fI[0] == strtof
-
-
-Input: -1.6
-strtof consumes 4 bytes and returns -1.5999999 = #bfcccccc
-g_ffmt(0) gives 10 bytes: "-1.5999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfcccccd = -1.6
-fI[1] = #bfcccccc = -1.5999999
-fI[1] == strtof
-
-
-Input: 1.7
-strtof consumes 3 bytes and returns 1.6999999 = #3fd99999
-g_ffmt(0) gives 9 bytes: "1.6999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fd99999 = 1.6999999
-fI[1] = #3fd9999a = 1.7
-fI[0] == strtof
-
-
-Input: -1.7
-strtof consumes 4 bytes and returns -1.6999999 = #bfd99999
-g_ffmt(0) gives 10 bytes: "-1.6999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfd9999a = -1.7
-fI[1] = #bfd99999 = -1.6999999
-fI[1] == strtof
-
-
-Input: 1.8
-strtof consumes 3 bytes and returns 1.8 = #3fe66666
-g_ffmt(0) gives 3 bytes: "1.8"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fe66666 = 1.8
-fI[1] = #3fe66667 = 1.8000001
-fI[0] == strtof
-
-
-Input: -1.8
-strtof consumes 4 bytes and returns -1.8 = #bfe66666
-g_ffmt(0) gives 4 bytes: "-1.8"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfe66667 = -1.8000001
-fI[1] = #bfe66666 = -1.8
-fI[1] == strtof
-
-
-Input: 1.9
-strtof consumes 3 bytes and returns 1.9 = #3ff33333
-g_ffmt(0) gives 3 bytes: "1.9"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 = 1.9
-fI[1] = #3ff33334 = 1.9000001
-fI[0] == strtof
-
-
-Input: -1.9
-strtof consumes 4 bytes and returns -1.9 = #bff33333
-g_ffmt(0) gives 4 bytes: "-1.9"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bff33334 = -1.9000001
-fI[1] = #bff33333 = -1.9
-fI[1] == strtof
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-strtof consumes 3 bytes and returns 1.1 = #3f8ccccd
-g_ffmt(0) gives 3 bytes: "1.1"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f8ccccc = 1.0999999
-fI[1] = #3f8ccccd = 1.1
-fI[1] == strtof
-
-
-Input: -1.1
-strtof consumes 4 bytes and returns -1.1 = #bf8ccccd
-g_ffmt(0) gives 4 bytes: "-1.1"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf8ccccd = -1.1
-fI[1] = #bf8ccccc = -1.0999999
-fI[0] == strtof
-
-
-Input: 1.2
-strtof consumes 3 bytes and returns 1.2 = #3f99999a
-g_ffmt(0) gives 3 bytes: "1.2"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f999999 = 1.1999999
-fI[1] = #3f99999a = 1.2
-fI[1] == strtof
-
-
-Input: -1.2
-strtof consumes 4 bytes and returns -1.2 = #bf99999a
-g_ffmt(0) gives 4 bytes: "-1.2"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf99999a = -1.2
-fI[1] = #bf999999 = -1.1999999
-fI[0] == strtof
-
-
-Input: 1.3
-strtof consumes 3 bytes and returns 1.3 = #3fa66666
-g_ffmt(0) gives 3 bytes: "1.3"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fa66666 = 1.3
-fI[1] = #3fa66667 = 1.3000001
-fI[0] == strtof
-
-
-Input: -1.3
-strtof consumes 4 bytes and returns -1.3 = #bfa66666
-g_ffmt(0) gives 4 bytes: "-1.3"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfa66667 = -1.3000001
-fI[1] = #bfa66666 = -1.3
-fI[1] == strtof
-
-
-Input: 1.4
-strtof consumes 3 bytes and returns 1.4 = #3fb33333
-g_ffmt(0) gives 3 bytes: "1.4"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fb33333 = 1.4
-fI[1] = #3fb33334 = 1.4000001
-fI[0] == strtof
-
-
-Input: -1.4
-strtof consumes 4 bytes and returns -1.4 = #bfb33333
-g_ffmt(0) gives 4 bytes: "-1.4"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfb33334 = -1.4000001
-fI[1] = #bfb33333 = -1.4
-fI[1] == strtof
-
-
-Input: 1.5
-strtof consumes 3 bytes and returns 1.5 = #3fc00000
-g_ffmt(0) gives 3 bytes: "1.5"
-
-strtoIf returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: -1.5
-strtof consumes 4 bytes and returns -1.5 = #bfc00000
-g_ffmt(0) gives 4 bytes: "-1.5"
-
-strtoIf returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.6
-strtof consumes 3 bytes and returns 1.6 = #3fcccccd
-g_ffmt(0) gives 3 bytes: "1.6"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fcccccc = 1.5999999
-fI[1] = #3fcccccd = 1.6
-fI[1] == strtof
-
-
-Input: -1.6
-strtof consumes 4 bytes and returns -1.6 = #bfcccccd
-g_ffmt(0) gives 4 bytes: "-1.6"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfcccccd = -1.6
-fI[1] = #bfcccccc = -1.5999999
-fI[0] == strtof
-
-
-Input: 1.7
-strtof consumes 3 bytes and returns 1.7 = #3fd9999a
-g_ffmt(0) gives 3 bytes: "1.7"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fd99999 = 1.6999999
-fI[1] = #3fd9999a = 1.7
-fI[1] == strtof
-
-
-Input: -1.7
-strtof consumes 4 bytes and returns -1.7 = #bfd9999a
-g_ffmt(0) gives 4 bytes: "-1.7"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfd9999a = -1.7
-fI[1] = #bfd99999 = -1.6999999
-fI[0] == strtof
-
-
-Input: 1.8
-strtof consumes 3 bytes and returns 1.8 = #3fe66666
-g_ffmt(0) gives 3 bytes: "1.8"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fe66666 = 1.8
-fI[1] = #3fe66667 = 1.8000001
-fI[0] == strtof
-
-
-Input: -1.8
-strtof consumes 4 bytes and returns -1.8 = #bfe66666
-g_ffmt(0) gives 4 bytes: "-1.8"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfe66667 = -1.8000001
-fI[1] = #bfe66666 = -1.8
-fI[1] == strtof
-
-
-Input: 1.9
-strtof consumes 3 bytes and returns 1.9 = #3ff33333
-g_ffmt(0) gives 3 bytes: "1.9"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 = 1.9
-fI[1] = #3ff33334 = 1.9000001
-fI[0] == strtof
-
-
-Input: -1.9
-strtof consumes 4 bytes and returns -1.9 = #bff33333
-g_ffmt(0) gives 4 bytes: "-1.9"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bff33334 = -1.9000001
-fI[1] = #bff33333 = -1.9
-fI[1] == strtof
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-strtof consumes 3 bytes and returns 1.1 = #3f8ccccd
-g_ffmt(0) gives 3 bytes: "1.1"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f8ccccc = 1.0999999
-fI[1] = #3f8ccccd = 1.1
-fI[1] == strtof
-
-
-Input: -1.1
-strtof consumes 4 bytes and returns -1.0999999 = #bf8ccccc
-g_ffmt(0) gives 10 bytes: "-1.0999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf8ccccd = -1.1
-fI[1] = #bf8ccccc = -1.0999999
-fI[1] == strtof
-
-
-Input: 1.2
-strtof consumes 3 bytes and returns 1.2 = #3f99999a
-g_ffmt(0) gives 3 bytes: "1.2"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f999999 = 1.1999999
-fI[1] = #3f99999a = 1.2
-fI[1] == strtof
-
-
-Input: -1.2
-strtof consumes 4 bytes and returns -1.1999999 = #bf999999
-g_ffmt(0) gives 10 bytes: "-1.1999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf99999a = -1.2
-fI[1] = #bf999999 = -1.1999999
-fI[1] == strtof
-
-
-Input: 1.3
-strtof consumes 3 bytes and returns 1.3000001 = #3fa66667
-g_ffmt(0) gives 9 bytes: "1.3000001"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fa66666 = 1.3
-fI[1] = #3fa66667 = 1.3000001
-fI[1] == strtof
-
-
-Input: -1.3
-strtof consumes 4 bytes and returns -1.3 = #bfa66666
-g_ffmt(0) gives 4 bytes: "-1.3"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfa66667 = -1.3000001
-fI[1] = #bfa66666 = -1.3
-fI[1] == strtof
-
-
-Input: 1.4
-strtof consumes 3 bytes and returns 1.4000001 = #3fb33334
-g_ffmt(0) gives 9 bytes: "1.4000001"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fb33333 = 1.4
-fI[1] = #3fb33334 = 1.4000001
-fI[1] == strtof
-
-
-Input: -1.4
-strtof consumes 4 bytes and returns -1.4 = #bfb33333
-g_ffmt(0) gives 4 bytes: "-1.4"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfb33334 = -1.4000001
-fI[1] = #bfb33333 = -1.4
-fI[1] == strtof
-
-
-Input: 1.5
-strtof consumes 3 bytes and returns 1.5 = #3fc00000
-g_ffmt(0) gives 3 bytes: "1.5"
-
-strtoIf returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: -1.5
-strtof consumes 4 bytes and returns -1.5 = #bfc00000
-g_ffmt(0) gives 4 bytes: "-1.5"
-
-strtoIf returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.6
-strtof consumes 3 bytes and returns 1.6 = #3fcccccd
-g_ffmt(0) gives 3 bytes: "1.6"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fcccccc = 1.5999999
-fI[1] = #3fcccccd = 1.6
-fI[1] == strtof
-
-
-Input: -1.6
-strtof consumes 4 bytes and returns -1.5999999 = #bfcccccc
-g_ffmt(0) gives 10 bytes: "-1.5999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfcccccd = -1.6
-fI[1] = #bfcccccc = -1.5999999
-fI[1] == strtof
-
-
-Input: 1.7
-strtof consumes 3 bytes and returns 1.7 = #3fd9999a
-g_ffmt(0) gives 3 bytes: "1.7"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fd99999 = 1.6999999
-fI[1] = #3fd9999a = 1.7
-fI[1] == strtof
-
-
-Input: -1.7
-strtof consumes 4 bytes and returns -1.6999999 = #bfd99999
-g_ffmt(0) gives 10 bytes: "-1.6999999"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfd9999a = -1.7
-fI[1] = #bfd99999 = -1.6999999
-fI[1] == strtof
-
-
-Input: 1.8
-strtof consumes 3 bytes and returns 1.8000001 = #3fe66667
-g_ffmt(0) gives 9 bytes: "1.8000001"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fe66666 = 1.8
-fI[1] = #3fe66667 = 1.8000001
-fI[1] == strtof
-
-
-Input: -1.8
-strtof consumes 4 bytes and returns -1.8 = #bfe66666
-g_ffmt(0) gives 4 bytes: "-1.8"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfe66667 = -1.8000001
-fI[1] = #bfe66666 = -1.8
-fI[1] == strtof
-
-
-Input: 1.9
-strtof consumes 3 bytes and returns 1.9000001 = #3ff33334
-g_ffmt(0) gives 9 bytes: "1.9000001"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 = 1.9
-fI[1] = #3ff33334 = 1.9000001
-fI[1] == strtof
-
-
-Input: -1.9
-strtof consumes 4 bytes and returns -1.9 = #bff33333
-g_ffmt(0) gives 4 bytes: "-1.9"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bff33334 = -1.9000001
-fI[1] = #bff33333 = -1.9
-fI[1] == strtof
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-strtof consumes 3 bytes and returns 1.0999999 = #3f8ccccc
-g_ffmt(0) gives 9 bytes: "1.0999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f8ccccc = 1.0999999
-fI[1] = #3f8ccccd = 1.1
-fI[0] == strtof
-
-
-Input: -1.1
-strtof consumes 4 bytes and returns -1.1 = #bf8ccccd
-g_ffmt(0) gives 4 bytes: "-1.1"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf8ccccd = -1.1
-fI[1] = #bf8ccccc = -1.0999999
-fI[0] == strtof
-
-
-Input: 1.2
-strtof consumes 3 bytes and returns 1.1999999 = #3f999999
-g_ffmt(0) gives 9 bytes: "1.1999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3f999999 = 1.1999999
-fI[1] = #3f99999a = 1.2
-fI[0] == strtof
-
-
-Input: -1.2
-strtof consumes 4 bytes and returns -1.2 = #bf99999a
-g_ffmt(0) gives 4 bytes: "-1.2"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bf99999a = -1.2
-fI[1] = #bf999999 = -1.1999999
-fI[0] == strtof
-
-
-Input: 1.3
-strtof consumes 3 bytes and returns 1.3 = #3fa66666
-g_ffmt(0) gives 3 bytes: "1.3"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fa66666 = 1.3
-fI[1] = #3fa66667 = 1.3000001
-fI[0] == strtof
-
-
-Input: -1.3
-strtof consumes 4 bytes and returns -1.3000001 = #bfa66667
-g_ffmt(0) gives 10 bytes: "-1.3000001"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfa66667 = -1.3000001
-fI[1] = #bfa66666 = -1.3
-fI[0] == strtof
-
-
-Input: 1.4
-strtof consumes 3 bytes and returns 1.4 = #3fb33333
-g_ffmt(0) gives 3 bytes: "1.4"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fb33333 = 1.4
-fI[1] = #3fb33334 = 1.4000001
-fI[0] == strtof
-
-
-Input: -1.4
-strtof consumes 4 bytes and returns -1.4000001 = #bfb33334
-g_ffmt(0) gives 10 bytes: "-1.4000001"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfb33334 = -1.4000001
-fI[1] = #bfb33333 = -1.4
-fI[0] == strtof
-
-
-Input: 1.5
-strtof consumes 3 bytes and returns 1.5 = #3fc00000
-g_ffmt(0) gives 3 bytes: "1.5"
-
-strtoIf returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: -1.5
-strtof consumes 4 bytes and returns -1.5 = #bfc00000
-g_ffmt(0) gives 4 bytes: "-1.5"
-
-strtoIf returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtof
-
-
-Input: 1.6
-strtof consumes 3 bytes and returns 1.5999999 = #3fcccccc
-g_ffmt(0) gives 9 bytes: "1.5999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fcccccc = 1.5999999
-fI[1] = #3fcccccd = 1.6
-fI[0] == strtof
-
-
-Input: -1.6
-strtof consumes 4 bytes and returns -1.6 = #bfcccccd
-g_ffmt(0) gives 4 bytes: "-1.6"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfcccccd = -1.6
-fI[1] = #bfcccccc = -1.5999999
-fI[0] == strtof
-
-
-Input: 1.7
-strtof consumes 3 bytes and returns 1.6999999 = #3fd99999
-g_ffmt(0) gives 9 bytes: "1.6999999"
-
-strtoIf returns 33, consuming 3 bytes.
-fI[0] = #3fd99999 = 1.6999999
-fI[1] = #3fd9999a = 1.7
-fI[0] == strtof
-
-
-Input: -1.7
-strtof consumes 4 bytes and returns -1.7 = #bfd9999a
-g_ffmt(0) gives 4 bytes: "-1.7"
-
-strtoIf returns 41, consuming 4 bytes.
-fI[0] = #bfd9999a = -1.7
-fI[1] = #bfd99999 = -1.6999999
-fI[0] == strtof
-
-
-Input: 1.8
-strtof consumes 3 bytes and returns 1.8 = #3fe66666
-g_ffmt(0) gives 3 bytes: "1.8"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3fe66666 = 1.8
-fI[1] = #3fe66667 = 1.8000001
-fI[0] == strtof
-
-
-Input: -1.8
-strtof consumes 4 bytes and returns -1.8000001 = #bfe66667
-g_ffmt(0) gives 10 bytes: "-1.8000001"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bfe66667 = -1.8000001
-fI[1] = #bfe66666 = -1.8
-fI[0] == strtof
-
-
-Input: 1.9
-strtof consumes 3 bytes and returns 1.9 = #3ff33333
-g_ffmt(0) gives 3 bytes: "1.9"
-
-strtoIf returns 17, consuming 3 bytes.
-fI[0] = #3ff33333 = 1.9
-fI[1] = #3ff33334 = 1.9000001
-fI[0] == strtof
-
-
-Input: -1.9
-strtof consumes 4 bytes and returns -1.9000001 = #bff33334
-g_ffmt(0) gives 10 bytes: "-1.9000001"
-
-strtoIf returns 25, consuming 4 bytes.
-fI[0] = #bff33334 = -1.9000001
-fI[1] = #bff33333 = -1.9
-fI[0] == strtof
-
diff --git a/float/gdtoa/test/ftest.c b/float/gdtoa/test/ftest.c
deleted file mode 100644 (file)
index afafe85..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for g_ffmt, strtof, strtoIf, strtopf, and strtorf.
- *
- * Inputs (on stdin):
- *             r rounding_mode
- *             n ndig
- *             number
- *             #hex
- *
- *     rounding_mode values:
- *             0 = toward zero
- *             1 = nearest
- *             2 = toward +Infinity
- *             3 = toward -Infinity
- *
- * where number is a decimal floating-point number,
- * hex is a string of <= 8 Hex digits for the internal representation
- * of the number, and ndig is a parameters to g_ffmt.
- */
-
-#include "gdtoa.h"
-#include <stdio.h>
-#include <stdlib.h>
-
- extern int getround ANSI((int,char*));
-
- static char ibuf[2048], obuf[1024];
-
-#define U (unsigned long)
-
- int
-main(Void)
-{
-       ULong *L;
-       char *s, *se, *se1;
-       int dItry, i, i1, ndig = 0, r = 1;
-       float f, f1, fI[2];
-
-       L = (ULong*)&f;
-       while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               dItry = 0;
-               switch(*s) {
-                 case 'r':
-                       r = getround(r, s);
-                       continue;
-                 case 'n':
-                       i = s[1];
-                       if (i <= ' ' || i >= '0' && i <= '9') {
-                               ndig = atoi(s+1);
-                               continue;
-                               }
-                       break; /* nan? */
-                 case '#':
-                       sscanf(s+1, "%lx", &L[0]);
-                       printf("\nInput: %s", ibuf);
-                       printf(" --> f = #%lx\n", L[0]);
-                       goto fmt_test;
-                       }
-               dItry = 1;
-               printf("\nInput: %s", ibuf);
-               i = strtorf(ibuf, &se, r, &f);
-               if (r == 1) {
-                   if (f != (i1 = strtopf(ibuf, &se1, &f1), f1)
-                                || se != se1 || i != i1) {
-                       printf("***strtopf and strtorf disagree!!\n");
-                       if (f != f1)
-                               printf("\tf1 = %g\n", (double)f1);
-                       if (i != i1)
-                               printf("\ti = %d but i1 = %d\n", i, i1);
-                       if (se != se1)
-                               printf("se - se1 = %d\n", (int)(se-se1));
-                       }
-                   if (f != strtof(ibuf, &se1) || se != se1)
-                       printf("***strtof and strtorf disagree!\n");
-                   }
-               printf("strtof consumes %d bytes and returns %.8g = #%lx\n",
-                               (int)(se-ibuf), f, U *(ULong*)&f);
- fmt_test:
-               se = g_ffmt(obuf, &f, ndig, sizeof(obuf));
-               printf("g_ffmt(%d) gives %d bytes: \"%s\"\n\n",
-                       ndig, (int)(se-obuf), se ? obuf : "<null>");
-               if (!dItry)
-                       continue;
-               printf("strtoIf returns %d,", strtoIf(ibuf, &se, fI, &fI[1]));
-               printf(" consuming %d bytes.\n", (int)(se-ibuf));
-               if (fI[0] == fI[1]) {
-                       if (fI[0] == f)
-                               printf("fI[0] == fI[1] == strtof\n");
-                       else
-                               printf("fI[0] == fI[1] = #%lx = %.8g\n",
-                                       U *(ULong*)fI, fI[0]);
-                       }
-               else {
-                       printf("fI[0] = #%lx = %.8g\nfI[1] = #%lx = %.8g\n",
-                               U *(ULong*)fI, fI[0],
-                               U *(ULong*)&fI[1], fI[1]);
-                       if (fI[0] == f)
-                               printf("fI[0] == strtof\n");
-                       else if (fI[1] == f)
-                               printf("fI[1] == strtof\n");
-                       else
-                               printf("**** Both differ from strtof ****\n");
-                       }
-               printf("\n");
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/getround.c b/float/gdtoa/test/getround.c
deleted file mode 100644 (file)
index ec1ca11..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static char *dir[4] = { "toward zero", "nearest", "toward +Infinity",
-                       "toward -Infinity" };
-
- int
-#ifdef KR_headers
-getround(r, s) int r; char *s;
-#else
-getround(int r, char *s)
-#endif
-{
-       int i;
-
-       i = atoi(s+1);
-       if (i >= 0 && i < 4) {
-               printf("Rounding mode for strtor... ");
-               if (i == r)
-                       printf("was and is %d (%s)\n", i, dir[i]);
-               else
-                       printf("changed from %d (%s) to %d (%s)\n",
-                               r, dir[r], i, dir[i]);
-               return i;
-               }
-       printf("Bad rounding direction %d: choose among\n", i);
-       for(i = 0; i < 4; i++)
-               printf("\t%d (%s)\n", i, dir[i]);
-       printf("Leaving rounding mode for strtor... at %d (%s)\n", r, dir[r]);
-       return r;
-       }
diff --git a/float/gdtoa/test/rtestnos b/float/gdtoa/test/rtestnos
deleted file mode 100644 (file)
index cde95b7..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-r0
-1.1
--1.1
-1.2
--1.2
-1.3
--1.3
-1.4
--1.4
-1.5
--1.5
-1.6
--1.6
-1.7
--1.7
-1.8
--1.8
-1.9
--1.9
-r1
-1.1
--1.1
-1.2
--1.2
-1.3
--1.3
-1.4
--1.4
-1.5
--1.5
-1.6
--1.6
-1.7
--1.7
-1.8
--1.8
-1.9
--1.9
-r2
-1.1
--1.1
-1.2
--1.2
-1.3
--1.3
-1.4
--1.4
-1.5
--1.5
-1.6
--1.6
-1.7
--1.7
-1.8
--1.8
-1.9
--1.9
-r3
-1.1
--1.1
-1.2
--1.2
-1.3
--1.3
-1.4
--1.4
-1.5
--1.5
-1.6
--1.6
-1.7
--1.7
-1.8
--1.8
-1.9
--1.9
diff --git a/float/gdtoa/test/strtoIdSI.c b/float/gdtoa/test/strtoIdSI.c
deleted file mode 100644 (file)
index c5342ed..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define Sudden_Underflow
-#include "../strtoId.c"
diff --git a/float/gdtoa/test/strtoIddSI.c b/float/gdtoa/test/strtoIddSI.c
deleted file mode 100644 (file)
index 2966259..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define Sudden_Underflow
-#include "../strtoIdd.c"
diff --git a/float/gdtoa/test/strtodISI.c b/float/gdtoa/test/strtodISI.c
deleted file mode 100644 (file)
index 66d2add..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define Sudden_Underflow
-#include "../strtodI.c"
diff --git a/float/gdtoa/test/strtodt.c b/float/gdtoa/test/strtodt.c
deleted file mode 100644 (file)
index da74660..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test strtod.  */
-
-/* On stdin, read triples: d x y:
- *     d = decimal string
- *     x = high-order Hex value expected from strtod
- *     y = low-order Hex value
- * Complain about errors.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
- static int W0, W1;
- typedef union {
-               double d;
-               long L[2];
-               } U;
-
- static int
-process(char *fname, FILE *f)
-{
-       U a, b;
-       char buf[2048];
-       double d;
-       char *s;
-       int line, n;
-
-       line = n = 0;
-
- top:
-       while(fgets(s = buf, sizeof(buf), f)) {
-               line++;
-               while(*s <= ' ')
-                       if (!*s++)
-                               goto top; /* break 2 */
-               if (*s == '#')
-                       continue;
-               while(*s > ' ')
-                       s++;
-               if (sscanf(s,"\t%lx\t%lx", &a.L[0], &a.L[1]) != 2) {
-                       printf("Badly formatted line %d of %s\n",
-                               line, fname);
-                       n++;
-                       continue;
-                       }
-               b.d = strtod(buf,0);
-               if (b.L[W0] != a.L[0] || b.L[W1] != a.L[1]) {
-                       n++;
-                       printf("Line %d of %s: got %lx %lx; expected %lx %lx\n",
-                               line, fname, b.L[W0], b.L[W1], a.L[0], a.L[1]);
-                       }
-               }
-       return n;
-       }
-
- int
-main(int argc, char **argv)
-{
-       FILE *f;
-       char *prog, *s;
-       int n, rc;
-       U u;
-
-       prog = argv[0];
-       if (argc == 2 && !strcmp(argv[1],"-?")) {
-               fprintf(stderr, "Usage: %s [file [file...]]\n"
-                       "\tto read data file(s) of tab-separated triples d x y with\n"
-                       "\t\td decimal string\n"
-                       "\t\tx = high-order Hex value expected from strtod\n"
-                       "\t\ty = low-order Hex value\n"
-                       "\tComplain about errors by strtod.\n"
-                       "\tIf no files, read triples from stdin.\n",
-                       prog);
-               return 0;
-               }
-
-       /* determine endian-ness */
-
-       u.d = 1.;
-       W0 = u.L[0] == 0;
-       W1 = 1 - W0;
-
-       /* test */
-
-       n = rc = 0;
-       if (argc <= 1)
-               n = process("<stdin>", stdin);
-       else
-               while(s = *++argv)
-                       if (f = fopen(s,"r")) {
-                               n += process(s, f);
-                               fclose(f);
-                               }
-                       else {
-                               rc = 2;
-                               fprintf(stderr, "Cannot open %s\n", s);
-                               }
-       printf("%d bad conversions\n", n);
-       if (n)
-               rc |= 1;
-       return rc;
-       }
diff --git a/float/gdtoa/test/strtopddSI.c b/float/gdtoa/test/strtopddSI.c
deleted file mode 100644 (file)
index d2004e5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define Sudden_Underflow
-#include "../strtopdd.c"
diff --git a/float/gdtoa/test/strtorddSI.c b/float/gdtoa/test/strtorddSI.c
deleted file mode 100644 (file)
index dd6a381..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define Sudden_Underflow
-#include "../strtordd.c"
diff --git a/float/gdtoa/test/testnos b/float/gdtoa/test/testnos
deleted file mode 100644 (file)
index a36a986..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-1.23
-1.23e+20
-1.23e-20
-1.23456789
-1.23456589e+20
-1.23e+30
-1.23e-30
-1.23456789e-20
-1.23456789e-30
-1.234567890123456789
-1.23456789012345678901234567890123456789
-1.23e306
-1.23e-306
-1.23e-320
-1.23e-20
-1.23456789e307
-1.23456589e-307
-1.234567890123456789
-1.234567890123456789e301
-1.234567890123456789e-301
-1.234567890123456789e-321
-1e23
-1e310
-9.0259718793241475e-277
-9.025971879324147880346310405869e-277
-9.025971879324147880346310405868e-277
-2.2250738585072014e-308
-2.2250738585072013e-308
diff --git a/float/gdtoa/test/testnos1 b/float/gdtoa/test/testnos1
deleted file mode 100644 (file)
index d734b35..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-1.23:2 6
-1.23:4 6
-1.23e+20:2 6
-1.23e+20:4 6
-1.23e-20:2 6
-1.23e-20:4 6
-1.23456789:2 6
-1.23456789:4 6
-1.23456589e+20:2 6
-1.23456589e+20:4 6
-1.23456789e-20:2 6
-1.23456789e-20:4 6
-1234565:2 6
-1234565:4 6
-1.234565:2 6
-1.234565:4 6
-1.234565e+20:2 6
-1.234565e+20:4 6
-1.234565e-20:2 6
-1.234565e-20:4 6
diff --git a/float/gdtoa/test/testnos3 b/float/gdtoa/test/testnos3
deleted file mode 100644 (file)
index be48902..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-# Test triples for strtodt, derived from Fred Tydeman's posting
-# of 26 February 1996 to comp.arch.arithmetic.
-
-9e0306 7fa9a202        8368022e
-4e-079 2fa7b6d7        1d20b96c
-7e-261 9eb8d7e 32be6396
-6e-025 3ae7361c        b863de62
-7e-161 1eaf7e0d        b3799aa3
-7e0289 7c1cbb54        7777a285
-5e0079 507afcef        51f0fb5f
-1e0080 508afcef        51f0fb5f
-7e-303 1333391 31c46f8b
-5e0152 5fa317e5        ef3ab327
-5e0125 5a07a2ec        c414a03f
-2e0126 5a27a2ec        c414a03f
-7e-141 22d5570f        59bd178c
-4e-192 18323ff0        6eea847a
-9e0043 49102498        ea6df0c4
-1e0303 7ed754e3        1cd072da
-95e-089        2dde3cbc        9907fdc8
-85e0194        689d1c26        db7d0dae
-69e0267        77c0b7cb        60c994da
-97e-019        3c665dde        8e688ba6
-37e0046        49d033d7        eca0adef
-74e0046        49e033d7        eca0adef
-61e-099        2bc0ad83        6f269a17
-53e-208        151b39ae        1909c31b
-93e-234        fc27b2e 4f210075
-79e-095        2c9a5db8        12948281
-87e-274        772d36c f48e7abd
-83e0025        4585747a        b143e353
-17e-036        38b698cc        dc60015a
-53e0033        47246a34        18629ef6
-51e-074        30ecd5be        e57763e6
-63e-022        3bbdc03b        8fd7016a
-839e0143       5e3ae03f        245703e2
-749e-182       1abf1472        7744c63e
-999e-026       3b282782        afe1869e
-345e0266       77b0b7cb        60c994da
-914e-102       2b5ffc81        bc29f02b
-829e0102       55b7221a        79cdd1d9
-307e0090       5322d6b1        83fe4b55
-859e0182       6654374d        8b87ac63
-283e0085       5216c309        24bab4b
-589e0187       675526be        9c22eb17
-302e0176       64fdcf7d        f8f573b7
-604e0176       650dcf7d        f8f573b7
-761e-244       de03cea 3586452e
-647e0230       7044d64d        4079150c
-755e0174       64a7d931        93f78fc6
-255e-075       30dcd5be        e57763e6
-3391e0055      4c159bd3        ad46e346
-4147e-015      3d923d1b        5eb1d778
-3996e-026      3b482782        afe1869e
-1998e-026      3b382782        afe1869e
-3338e-296      335519a c5142aab
-1669e-296      325519a c5142aab
-8699e-276      772d2df 246ecd2d
-5311e0243      73284e91        f4aa0fdb
-7903e-096      2cd07c2d        27a5b989
-7611e-226      11d19b87        44033457
-3257e0058      4cb444b3        4a6fb3eb
-6514e0058      4cc444b3        4a6fb3eb
-3571e0263      77462644        c61d41aa
-7142e0263      77562644        c61d41aa
-5311e0242      72f3720e        5d54d97c
-1617e-063      3384c98f        ce16152e
-51881e0037     4897d295        dc76da4
-31441e-118     285ef890        f5de4c86
-30179e0079     5143e272        a77478e8
-60358e0079     5153e272        a77478e8
-63876e-020     3cc70385        6844bdbf
-31938e-020     3cb70385        6844bdbf
-46073e-032     3a42405b        773fbdf3
-32941e0051     4b757eb8        ad52a5c9
-82081e0041     49770105        df3d47cb
-38701e-215     1440492a        4a8a37fd
-62745e0047     4ab0c52f        e6dc6a1b
-12549e0048     4ac0c52f        e6dc6a1b
-64009e-183     1af099b3        93b84832
-89275e0261     77262644        c61d41aa
-75859e0025     46232645        e1ba93f0
-57533e0287     7c8272ed        2307f56a
-584169e0229    70ad6570        59dc79aa
-940189e-112    29eb99d6        240c1a28
-416121e0197    6a00fd07        ed297f80
-832242e0197    6a10fd07        ed297f80
-584738e0076    50e8a85e        b277e645
-933587e-140    241b2487        28b9c117
-252601e0121    5a2dda59        2e398dd7
-358423e0274    79f9463b        59b8f2bd
-892771e-213    14f25818        c7294f27
-410405e0040    49670105        df3d47cb
-928609e-261    afbe2dd 66200bef
-302276e-254    c55a462 d91c6ab3
-920657e-023    3c653a99        85dbde6c
-609019e-025    3bf1f99e        11ea0a24
-252601e0120    59f7e1e0        f1c7a4ac
-654839e-060    34b00e7d        b3b3f242
-8823691e0130   5c5e597c        b94b7ae
-2920845e0228   709d6570        59dc79aa
-9210917e0080   51fda232        347e6032
-5800419e-303   26e58ff a48f4fce
-6119898e-243   ee3ecf2 2ea07863
-3059949e-243   ed3ecf2 2ea07863
-2572231e0223   6f90f73b        e1dff9ad
-5444097e-021   3cf8849d        d33c95af
-5783893e-127   26f7e590        2ce0e151
-3865421e-225   1295d4fe        53afec65
-4590831e0156   61b4689b        4a5fa201
-9181662e0156   61c4689b        4a5fa201
-5906361e-027   3bbbe45a        312d08a0
-7315057e0235   7225f0d4        8362a72
-9088115e0106   5762e51a        84a3c6a0
-1817623e0107   5772e51a        84a3c6a0
-44118455e0129  5c4e597c        b94b7ae
-35282041e0293  7e5512d5        273e62e8
-31279898e-291  5129b01 b6885d36
-15639949e-291  5029b01 b6885d36
-27966061e0145  5f955bcf        72fd10f9
-55932122e0145  5fa55bcf        72fd10f9
-70176353e-053  36900683        a21de855
-40277543e-032  3adf29ca        ff893b1
-50609263e0157  622193af        f1f1c8e3
-66094077e0077  518b37c4        b7928317
-84863171e0114  59406e98        f5ec8f37
-89396333e0264  786526f0        61ca9053
-87575437e-309  16e0732 602056c
-78693511e-044  3870bc7b        7603a2ca
-90285923e-206  16d14700        83f89d48
-30155207e-030  3b423a4a        d20748a2
-245540327e0121 5acc569e        968e0944
-263125459e0287 7d44997a        298b2f2e
-566446538e-257 c64472b a9550e86
-283223269e-257 c54472b a9550e86
-245540327e0122 5b01b623        1e18c5cb
-491080654e0122 5b11b623        1e18c5cb
-971212611e-126 27a397d3        c9745d2f
-229058583e0052 4c76ce94        febdc7a5
-325270231e0039 49cc7ccf        90c9f8ab
-989648089e-035 3a8880a3        d515e849
-653777767e0273 7a720223        f2b3a881
-923091487e0209 6d30bc60        e6896717
-526250918e0288 7d89bfd8        b3edfafa
-350301748e-309 18e0732 602056c
-741111169e-203 17a14fe7        daf8f3ae
-667284113e-240 ff09355 f8050c02
-1227701635e0120        5abc569e        968e0944
-9981396317e-182        1c38afe1        a2a66aa
-5232604057e-298        41465b8 96c24520
-5572170023e-088        2fb08478        22f765b2
-1964322616e0122        5b31b623        1e18c5cb
-3928645232e0122        5b41b623        1e18c5cb
-8715380633e-058        35f4614c        3219891f
-4856063055e-127        279397d3        c9745d2f
-8336960483e-153        223a06a1        24b95e1
-1007046393e-155        21a01891        fc4717fd
-5378822089e-176        1d695fd4        c88d4b1b
-5981342308e-190        1a83db11        ac608107
-7214782613e-086        3020b552        d2edcdea
-5458466829e0142        5f70acde        6a98eb4c
-9078555839e-109        2b5fc575        867314ee
-6418488827e0079        526021f1        4ed7b3fa
-65325840981e0069       5081a151        ddbd3c4a
-49573485983e0089       54a221bd        871d2cf4
-46275205733e0074       51830e6c        7d4e3480
-92550411466e0074       51930e6c        7d4e3480
-41129842097e-202       1832c3e7        2d179607
-93227267727e-049       380960fe        8d5847f
-41297294357e0185       688c4943        7fccfadb
-41534892987e-067       343a1266        6477886d
-42333842451e0201       6be0189a        26df575f
-78564021519e-227       13115551        5fd37265
-53587107423e-061       35800a19        a3ffd981
-53827010643e-200       18a32fa6        9a69bd6d
-83356057653e0193       6a4544e6        daee2a18
-45256834646e-118       29a541ec        dfd48694
-45392779195e-110       2b4fc575        867314ee
-23934638219e0291       7e81deaf        40ead9a0
-995779191233e0113      59e2d44e        dcc51304
-997422852243e-265      b676688 faee99bc
-653532977297e-123      28d925a0        aabcdc68
-938885684947e0147      60f11894        b202e9f4
-619534293513e0124      5c210c20        303fe0f1
-539879452414e-042      39a5e66d        c3d6bdb5
-742522891517e0259      782c1c35        2fc3c309
-254901016865e-022      3dbc06d3        66394441
-685763015669e0280      7c85fd7a        a44d9477
-384865004907e-285      72aa65b 58639e69
-286556458711e0081      5321958b        36c5102b
-573112917422e0081      5331958b        36c5102b
-769525178383e-150      234253ec        e161420
-416780288265e0192      6a3544e6        daee2a18
-226963895975e-111      2b3fc575        867314ee
-665592809339e0063      4f778b65        16c2b478
-3891901811465e0217     6f99ab82        61990292
-4764593340755e0069     50e4177a        9915fbf8
-6336156586177e0269     7a7173f7        6c63b792
-8233559360849e0095     56566fee        5649a7a
-3662265515198e-107     2c538e6e        dd48f2a3
-1831132757599e-107     2c438e6e        dd48f2a3
-7812878489261e-179     1d726dae        7bbeda75
-6363857920591e0145     60b28a61        cf9483b7
-8811915538555e0082     53a51f50        8b287ae7
-9997878507563e-195     1a253db2        fea1ea31
-9224786422069e-291     634ee5d 56b32957
-6284426329974e-294     58d3409 dfbca26f
-9199302046091e-062     35c13597        2630774c
-6070482281213e-122     29423fa9        e6fcf47e
-2780161250963e-301     405acc2 53064c2
-8233559360849e0094     5621f324        d11d4862
-72027097041701e0206    6d946778        12d3a606
-97297545286625e0215    6f79ab82        61990292
-99021992302453e-025    3da5c671        4def374c
-54104687080198e-022    3e373cdf        8db7a7bc
-33519685743233e0089    5537f203        339c9629
-67039371486466e0089    5547f203        339c9629
-39064392446305e-180    1d626dae        7bbeda75
-17796979903653e0261    78e072f3        819c1321
-28921916763211e0038    4a9eebab        e0957af3
-87605699161665e0155    6302920f        96e7f9ef
-41921560615349e-067    34d9b2a5        c4041e4b
-80527976643809e0061    4f7c7c5a        ea080a49
-72335858886654e-159    21cce77c        2b3328fc
-52656615219377e0102    57f561de        f4a9ee32
-15400733123779e-072    33b8bf7e        7fa6f02a
-77003665618895e-073    33a8bf7e        7fa6f02a
-475603213226859e-042   3a42d730        88f4050a
-972708181182949e0116   5b218a7f        36172332
-246411729980464e-071   342eef5e        1f90ac34
-123205864990232e-071   341eef5e        1f90ac34
-609610927149051e-255   e104273 b18918b1
-475603213226859e-041   3a778cfc        ab31064d
-672574798934795e0065   508226c6        84c87261
-134514959786959e0066   509226c6        84c87261
-294897574603217e-151   2395f2df        5e675a0f
-723047919080275e0036   4a7eebab        e0957af3
-660191429952702e-088   30bddc7e        975c5045
-330095714976351e-088   30addc7e        975c5045
-578686871093232e-159   21fce77c        2b3328fc
-144671717773308e-159   21dce77c        2b3328fc
-385018328094475e-074   3398bf7e        7fa6f02a
-330095714976351e-089   3077e398        7916a69e
-2215901545757777e-212  171a80a6        e566428c
-1702061899637397e-276  9cacc46 749dccfe
-1864950924021923e0213  6f53ae60        753af6ca
-3729901848043846e0213  6f63ae60        753af6ca
-7487252720986826e-165  20f8823a        57adbef9
-3743626360493413e-165  20e8823a        57adbef9
-4988915232824583e0119  5be5f6de        9d5d6b5b
-3771476185376383e0277  7cae3c14        d6916ce9
-6182410494241627e-119  2a81b964        58445d07
-2572981889477453e0142  609dfc11        fbf46087
-7793560217139653e0051  4dd28046        1b856ec5
-9163942927285259e-202  194fe601        457dce4d
-6353227084707473e0155  63650aff        653ffe8a
-4431803091515554e-211  17609068        4f5fe998
-9324754620109615e0211  6f0f7d67        21f7f144
-8870461176410409e0263  79d90529        a37b7e22
-90372559027740405e0143 612491da        ad0ba280
-18074511805548081e0146 61a011f2        d73116f4
-54897030182071313e0029 496ec556        66d8f9ec
-76232626624829156e-032 3ccb7738        11e75fe
-59898021767894608e-165 2128823a        57adbef9
-29949010883947304e-165 2118823a        57adbef9
-26153245263757307e0049 4d83de00        5bd620df
-27176258005319167e-261 d27c074 7bd76fa1
-18074511805548081e0147 61d4166f        8cfd5cb1
-24691002732654881e-115 2b759a27        83ce70ab
-58483921078398283e0057 4f408ce4        99519ce3
-64409240769861689e-159 22692238        f7987779
-94080055902682397e-242 11364981        e39e66ca
-31766135423537365e0154 63550aff        653ffe8a
-68985865317742005e0164 657a999d        dec72aca
-13797173063548401e0165 658a999d        dec72aca
-902042358290366539e-281        9522dc0 1ca1cb8c
-238296178309629163e0272        7c038fd9        3f1f5342
-783308178698887621e0226        72925ae6        2cb346d8
-439176241456570504e0029        499ec556        66d8f9ec
-899810892172646163e0283        7e6adf51        fa055e03
-926145344610700019e-225        14f307a6        7f1f69ff
-653831131593932675e0047        4d63de00        5bd620df
-130766226318786535e0048        4d73de00        5bd620df
-557035730189854663e-294        693bfac 6bc4767b
-902042358290366539e-280        986b930 23ca3e6f
-272104041512242479e0200        6d13bbb4        bf05f087
-544208083024484958e0200        6d23bbb4        bf05f087
-680429695511221511e0192        6b808ebc        116f8a20
-308975121073410857e0236        7490db75        cc001072
-792644927852378159e0078        53d7bff3        36d8ff06
-783308178698887621e0223        71f2cbac        35f71140
-8396094300569779681e-252       f8ab223 efcee35a
-3507665085003296281e-074       346b85c0        26a264e4
-7322325862592278999e0074       5336775b        6caa5ae0
-6014546754280072926e0209       6f396397        b06732a4
-7120190517612959703e0120       5cc3220d        cd5899fd
-3507665085003296281e-073       34a13398        18257f0f
-4345544743100783551e-218       168a9c42        e5b6d89f
-9778613303868468131e-090       313146fe        1075e1ef
-7539204280836061195e-082       32d3d969        e3dbe723
-7862637540082247119e-202       19eaba32        62ee707b
-2176832332097939832e0200       6d43bbb4        bf05f087
-8643988913946659879e0115       5bbe71ec        1ed0a4f9
-5529436763613147623e0138       6079c677        be6f236e
-6764958008109694533e-173       1fed0669        2e6f5ef6
-6802601037806061975e0197       6cbf92ba        cb3cb40c
-1360520207561212395e0198       6ccf92ba        cb3cb40c
-62259110684423957791e0047      4dcd8f2c        fc20d6e8
-88800290202542652011e-226      1526cec5        1a43f41a
-41010852717673354694e-221      16201295        4b6aabba
-20505426358836677347e-221      16101295        4b6aabba
-66102447903809911604e0055      4f776206        8a24fd55
-35600952588064798515e0119      5cb3220d        cd5899fd
-14371240869903838702e0205      6e78d92d        2bcc7a81
-57500690832492901689e0043      4cf65d3e        2acd616b
-23432630639573022093e-107      2dbdd54c        40a2f25f
-62259110684423957791e0048      4e02797c        1d948651
-35620497849450218807e-306      475b220 82529425
-69658634627134074624e0200      6d93bbb4        bf05f087
-99440755792436956989e-062      37362d10        462a26f4
-55277197169490210673e0081      54d945bf        a911e32a
-36992084760177624177e-318      1f8c5f9 551c2f9a
-30888265282878466443e-111      2cf01b8e        f28251fc
-
-# examples of bugs introduced 20001113, fixed 20010207
-# first is 2^-1075 (half the smallest denormal)
-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324 0       0
-2.47032822920623272e-324       0       0
diff --git a/float/gdtoa/test/x.ou0 b/float/gdtoa/test/x.ou0
deleted file mode 100644 (file)
index 83daa47..0000000
+++ /dev/null
@@ -1,1182 +0,0 @@
-
-Input: 1.23
-
-strtox consumes 4 bytes and returns 33
-with bits = #3fff 9d70 a3d7 a3d 70a4
-g_xfmt(0) gives 4 bytes: "1.23"
-
-strtoIx returns 33, consuming 4 bytes.
-fI[0] = #3fff 9d70 a3d7 a3d 70a3
-fI[1] = #3fff 9d70 a3d7 a3d 70a3
-fI[1] == strtox
-
-
-Input: 1.23e+20
-
-strtox consumes 8 bytes and returns 1
-with bits = #4041 d55e f90a 2da1 8000
-g_xfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIx returns 1, consuming 8 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.23e-20
-
-strtox consumes 8 bytes and returns 17
-with bits = #3fbc e857 267b b3a9 84f2
-g_xfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #3fbc e857 267b b3a9 84f2
-fI[1] = #3fbc e857 267b b3a9 84f2
-fI[0] == strtox
-
-
-Input: 1.23456789
-
-strtox consumes 10 bytes and returns 33
-with bits = #3fff 9e06 5214 1ef0 dbf6
-g_xfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIx returns 33, consuming 10 bytes.
-fI[0] = #3fff 9e06 5214 1ef0 dbf5
-fI[1] = #3fff 9e06 5214 1ef0 dbf5
-fI[1] == strtox
-
-
-Input: 1.23456589e+20
-
-strtox consumes 14 bytes and returns 1
-with bits = #4041 d629 bd33 5cc ba00
-g_xfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIx returns 1, consuming 14 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.23e+30
-
-strtox consumes 8 bytes and returns 17
-with bits = #4062 f865 8274 7dbc 824a
-g_xfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #4062 f865 8274 7dbc 824a
-fI[1] = #4062 f865 8274 7dbc 824a
-fI[0] == strtox
-
-
-Input: 1.23e-30
-
-strtox consumes 8 bytes and returns 17
-with bits = #3f9b c794 337a 8085 54eb
-g_xfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #3f9b c794 337a 8085 54eb
-fI[1] = #3f9b c794 337a 8085 54eb
-fI[0] == strtox
-
-
-Input: 1.23456789e-20
-
-strtox consumes 14 bytes and returns 17
-with bits = #3fbc e934 a38 f3d6 d352
-g_xfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIx returns 17, consuming 14 bytes.
-fI[0] = #3fbc e934 a38 f3d6 d352
-fI[1] = #3fbc e934 a38 f3d6 d352
-fI[0] == strtox
-
-
-Input: 1.23456789e-30
-
-strtox consumes 14 bytes and returns 17
-with bits = #3f9b c851 f19d decc a8fc
-g_xfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIx returns 17, consuming 14 bytes.
-fI[0] = #3f9b c851 f19d decc a8fc
-fI[1] = #3f9b c851 f19d decc a8fc
-fI[0] == strtox
-
-
-Input: 1.234567890123456789
-
-strtox consumes 20 bytes and returns 17
-with bits = #3fff 9e06 5214 62cf db8d
-g_xfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIx returns 17, consuming 20 bytes.
-fI[0] = #3fff 9e06 5214 62cf db8d
-fI[1] = #3fff 9e06 5214 62cf db8d
-fI[0] == strtox
-
-
-Input: 1.23456789012345678901234567890123456789
-
-strtox consumes 40 bytes and returns 17
-with bits = #3fff 9e06 5214 62cf db8d
-g_xfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIx returns 17, consuming 40 bytes.
-fI[0] = #3fff 9e06 5214 62cf db8d
-fI[1] = #3fff 9e06 5214 62cf db8d
-fI[0] == strtox
-
-
-Input: 1.23e306
-
-strtox consumes 8 bytes and returns 17
-with bits = #43f7 e033 b668 e30f a6d5
-g_xfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #43f7 e033 b668 e30f a6d5
-fI[1] = #43f7 e033 b668 e30f a6d5
-fI[0] == strtox
-
-
-Input: 1.23e-306
-
-strtox consumes 9 bytes and returns 33
-with bits = #3c06 dd1d c2ed 1cb7 3f25
-g_xfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIx returns 33, consuming 9 bytes.
-fI[0] = #3c06 dd1d c2ed 1cb7 3f24
-fI[1] = #3c06 dd1d c2ed 1cb7 3f24
-fI[1] == strtox
-
-
-Input: 1.23e-320
-
-strtox consumes 9 bytes and returns 33
-with bits = #3bd8 9b98 c371 844c 3f1a
-g_xfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIx returns 33, consuming 9 bytes.
-fI[0] = #3bd8 9b98 c371 844c 3f19
-fI[1] = #3bd8 9b98 c371 844c 3f19
-fI[1] == strtox
-
-
-Input: 1.23e-20
-
-strtox consumes 8 bytes and returns 17
-with bits = #3fbc e857 267b b3a9 84f2
-g_xfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #3fbc e857 267b b3a9 84f2
-fI[1] = #3fbc e857 267b b3a9 84f2
-fI[0] == strtox
-
-
-Input: 1.23456789e307
-
-strtox consumes 14 bytes and returns 17
-with bits = #43fb 8ca5 8a5e d766 de75
-g_xfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIx returns 17, consuming 14 bytes.
-fI[0] = #43fb 8ca5 8a5e d766 de75
-fI[1] = #43fb 8ca5 8a5e d766 de75
-fI[0] == strtox
-
-
-Input: 1.23456589e-307
-
-strtox consumes 15 bytes and returns 17
-with bits = #3c03 b18c b5dc c22f d369
-g_xfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIx returns 17, consuming 15 bytes.
-fI[0] = #3c03 b18c b5dc c22f d369
-fI[1] = #3c03 b18c b5dc c22f d369
-fI[0] == strtox
-
-
-Input: 1.234567890123456789
-
-strtox consumes 20 bytes and returns 17
-with bits = #3fff 9e06 5214 62cf db8d
-g_xfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIx returns 17, consuming 20 bytes.
-fI[0] = #3fff 9e06 5214 62cf db8d
-fI[1] = #3fff 9e06 5214 62cf db8d
-fI[0] == strtox
-
-
-Input: 1.234567890123456789e301
-
-strtox consumes 24 bytes and returns 33
-with bits = #43e7 937a 8baf ab20 980c
-g_xfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIx returns 33, consuming 24 bytes.
-fI[0] = #43e7 937a 8baf ab20 980b
-fI[1] = #43e7 937a 8baf ab20 980b
-fI[1] == strtox
-
-
-Input: 1.234567890123456789e-301
-
-strtox consumes 25 bytes and returns 33
-with bits = #3c17 a953 271a 5d06 9ad9
-g_xfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIx returns 33, consuming 25 bytes.
-fI[0] = #3c17 a953 271a 5d06 9ad8
-fI[1] = #3c17 a953 271a 5d06 9ad8
-fI[1] == strtox
-
-
-Input: 1.234567890123456789e-321
-
-strtox consumes 25 bytes and returns 33
-with bits = #3bd4 f9e1 1b4c ea6d cce9
-g_xfmt(0) gives 25 bytes: "1.234567890123456789e-321"
-
-strtoIx returns 33, consuming 25 bytes.
-fI[0] = #3bd4 f9e1 1b4c ea6d cce8
-fI[1] = #3bd4 f9e1 1b4c ea6d cce8
-fI[1] == strtox
-
-
-Input: 1e23
-
-strtox consumes 4 bytes and returns 1
-with bits = #404b a968 163f a57 b400
-g_xfmt(0) gives 5 bytes: "1e+23"
-
-strtoIx returns 1, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1e310
-
-strtox consumes 5 bytes and returns 33
-with bits = #4404 de81 e40a 34b cf50
-g_xfmt(0) gives 6 bytes: "1e+310"
-
-strtoIx returns 33, consuming 5 bytes.
-fI[0] = #4404 de81 e40a 34b cf4f
-fI[1] = #4404 de81 e40a 34b cf4f
-fI[1] == strtox
-
-
-Input: 9.0259718793241475e-277
-
-strtox consumes 23 bytes and returns 33
-with bits = #3c69 ffff ffff ffff fcf7
-g_xfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIx returns 33, consuming 23 bytes.
-fI[0] = #3c69 ffff ffff ffff fcf6
-fI[1] = #3c69 ffff ffff ffff fcf6
-fI[1] == strtox
-
-
-Input: 9.025971879324147880346310405869e-277
-
-strtox consumes 37 bytes and returns 17
-with bits = #3c6a 8000 0 0 0
-g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIx returns 17, consuming 37 bytes.
-fI[0] = #3c6a 8000 0 0 0
-fI[1] = #3c6a 8000 0 0 0
-fI[0] == strtox
-
-
-Input: 9.025971879324147880346310405868e-277
-
-strtox consumes 37 bytes and returns 33
-with bits = #3c6a 8000 0 0 0
-g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIx returns 33, consuming 37 bytes.
-fI[0] = #3c69 ffff ffff ffff ffff
-fI[1] = #3c6a 8000 0 ffff ffff
-fI[1] == strtox
-
-
-Input: 2.2250738585072014e-308
-
-strtox consumes 23 bytes and returns 17
-with bits = #3c01 8000 0 0 46
-g_xfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIx returns 17, consuming 23 bytes.
-fI[0] = #3c01 8000 0 0 46
-fI[1] = #3c01 8000 0 0 46
-fI[0] == strtox
-
-
-Input: 2.2250738585072013e-308
-
-strtox consumes 23 bytes and returns 17
-with bits = #3c00 ffff ffff ffff fd4f
-g_xfmt(0) gives 23 bytes: "2.2250738585072013e-308"
-
-strtoIx returns 17, consuming 23 bytes.
-fI[0] = #3c00 ffff ffff ffff fd4f
-fI[1] = #3c00 ffff ffff ffff fd4f
-fI[0] == strtox
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 8ccc cccc cccc cccc
-g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-fI[1] = #3fff 8ccc cccc cccc cccc
-fI[0] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 8ccc cccc cccc cccc
-g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-fI[1] = #bfff 8ccc cccc cccc cccd
-fI[1] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 9999 9999 9999 9999
-g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-fI[1] = #3fff 9999 9999 9999 9999
-fI[0] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 9999 9999 9999 9999
-g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-fI[1] = #bfff 9999 9999 9999 999a
-fI[1] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff a666 6666 6666 6666
-g_xfmt(0) gives 3 bytes: "1.3"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-fI[1] = #3fff a666 6666 6666 6666
-fI[0] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff a666 6666 6666 6666
-g_xfmt(0) gives 4 bytes: "-1.3"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-fI[1] = #bfff a666 6666 6666 6667
-fI[1] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff b333 3333 3333 3333
-g_xfmt(0) gives 3 bytes: "1.4"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-fI[1] = #3fff b333 3333 3333 3333
-fI[0] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff b333 3333 3333 3333
-g_xfmt(0) gives 4 bytes: "-1.4"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-fI[1] = #bfff b333 3333 3333 3334
-fI[1] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff cccc cccc cccc cccc
-g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-fI[1] = #3fff cccc cccc cccc cccc
-fI[0] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff cccc cccc cccc cccc
-g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-fI[1] = #bfff cccc cccc cccc cccd
-fI[1] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff d999 9999 9999 9999
-g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-fI[1] = #3fff d999 9999 9999 9999
-fI[0] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff d999 9999 9999 9999
-g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-fI[1] = #bfff d999 9999 9999 999a
-fI[1] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff e666 6666 6666 6666
-g_xfmt(0) gives 3 bytes: "1.8"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-fI[1] = #3fff e666 6666 6666 6666
-fI[0] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff e666 6666 6666 6666
-g_xfmt(0) gives 4 bytes: "-1.8"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-fI[1] = #bfff e666 6666 6666 6667
-fI[1] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff f333 3333 3333 3333
-g_xfmt(0) gives 3 bytes: "1.9"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-fI[1] = #3fff f333 3333 3333 3333
-fI[0] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff f333 3333 3333 3333
-g_xfmt(0) gives 4 bytes: "-1.9"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-fI[1] = #bfff f333 3333 3333 3334
-fI[1] == strtox
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 8ccc cccc cccc cccd
-g_xfmt(0) gives 3 bytes: "1.1"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-fI[1] = #3fff 8ccc cccc cccc cccc
-fI[1] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 8ccc cccc cccc cccd
-g_xfmt(0) gives 4 bytes: "-1.1"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-fI[1] = #bfff 8ccc cccc cccc cccd
-fI[0] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 9999 9999 9999 999a
-g_xfmt(0) gives 3 bytes: "1.2"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-fI[1] = #3fff 9999 9999 9999 9999
-fI[1] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 9999 9999 9999 999a
-g_xfmt(0) gives 4 bytes: "-1.2"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-fI[1] = #bfff 9999 9999 9999 999a
-fI[0] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff a666 6666 6666 6666
-g_xfmt(0) gives 3 bytes: "1.3"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-fI[1] = #3fff a666 6666 6666 6666
-fI[0] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff a666 6666 6666 6666
-g_xfmt(0) gives 4 bytes: "-1.3"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-fI[1] = #bfff a666 6666 6666 6667
-fI[1] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff b333 3333 3333 3333
-g_xfmt(0) gives 3 bytes: "1.4"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-fI[1] = #3fff b333 3333 3333 3333
-fI[0] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff b333 3333 3333 3333
-g_xfmt(0) gives 4 bytes: "-1.4"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-fI[1] = #bfff b333 3333 3333 3334
-fI[1] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff cccc cccc cccc cccd
-g_xfmt(0) gives 3 bytes: "1.6"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-fI[1] = #3fff cccc cccc cccc cccc
-fI[1] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff cccc cccc cccc cccd
-g_xfmt(0) gives 4 bytes: "-1.6"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-fI[1] = #bfff cccc cccc cccc cccd
-fI[0] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff d999 9999 9999 999a
-g_xfmt(0) gives 3 bytes: "1.7"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-fI[1] = #3fff d999 9999 9999 9999
-fI[1] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff d999 9999 9999 999a
-g_xfmt(0) gives 4 bytes: "-1.7"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-fI[1] = #bfff d999 9999 9999 999a
-fI[0] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff e666 6666 6666 6666
-g_xfmt(0) gives 3 bytes: "1.8"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-fI[1] = #3fff e666 6666 6666 6666
-fI[0] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff e666 6666 6666 6666
-g_xfmt(0) gives 4 bytes: "-1.8"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-fI[1] = #bfff e666 6666 6666 6667
-fI[1] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff f333 3333 3333 3333
-g_xfmt(0) gives 3 bytes: "1.9"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-fI[1] = #3fff f333 3333 3333 3333
-fI[0] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff f333 3333 3333 3333
-g_xfmt(0) gives 4 bytes: "-1.9"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-fI[1] = #bfff f333 3333 3333 3334
-fI[1] == strtox
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 8ccc cccc cccc cccd
-g_xfmt(0) gives 3 bytes: "1.1"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-fI[1] = #3fff 8ccc cccc cccc cccc
-fI[1] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 8ccc cccc cccc cccc
-g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-fI[1] = #bfff 8ccc cccc cccc cccd
-fI[1] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 9999 9999 9999 999a
-g_xfmt(0) gives 3 bytes: "1.2"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-fI[1] = #3fff 9999 9999 9999 9999
-fI[1] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 9999 9999 9999 9999
-g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-fI[1] = #bfff 9999 9999 9999 999a
-fI[1] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff a666 6666 6666 6667
-g_xfmt(0) gives 21 bytes: "1.3000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-fI[1] = #3fff a666 6666 6666 6666
-fI[1] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff a666 6666 6666 6666
-g_xfmt(0) gives 4 bytes: "-1.3"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-fI[1] = #bfff a666 6666 6666 6667
-fI[1] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff b333 3333 3333 3334
-g_xfmt(0) gives 21 bytes: "1.4000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-fI[1] = #3fff b333 3333 3333 3333
-fI[1] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff b333 3333 3333 3333
-g_xfmt(0) gives 4 bytes: "-1.4"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-fI[1] = #bfff b333 3333 3333 3334
-fI[1] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff cccc cccc cccc cccd
-g_xfmt(0) gives 3 bytes: "1.6"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-fI[1] = #3fff cccc cccc cccc cccc
-fI[1] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff cccc cccc cccc cccc
-g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-fI[1] = #bfff cccc cccc cccc cccd
-fI[1] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff d999 9999 9999 999a
-g_xfmt(0) gives 3 bytes: "1.7"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-fI[1] = #3fff d999 9999 9999 9999
-fI[1] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff d999 9999 9999 9999
-g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-fI[1] = #bfff d999 9999 9999 999a
-fI[1] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff e666 6666 6666 6667
-g_xfmt(0) gives 21 bytes: "1.8000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-fI[1] = #3fff e666 6666 6666 6666
-fI[1] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff e666 6666 6666 6666
-g_xfmt(0) gives 4 bytes: "-1.8"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-fI[1] = #bfff e666 6666 6666 6667
-fI[1] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff f333 3333 3333 3334
-g_xfmt(0) gives 21 bytes: "1.9000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-fI[1] = #3fff f333 3333 3333 3333
-fI[1] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff f333 3333 3333 3333
-g_xfmt(0) gives 4 bytes: "-1.9"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-fI[1] = #bfff f333 3333 3333 3334
-fI[1] == strtox
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 8ccc cccc cccc cccc
-g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-fI[1] = #3fff 8ccc cccc cccc cccc
-fI[0] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 8ccc cccc cccc cccd
-g_xfmt(0) gives 4 bytes: "-1.1"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-fI[1] = #bfff 8ccc cccc cccc cccd
-fI[0] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 9999 9999 9999 9999
-g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-fI[1] = #3fff 9999 9999 9999 9999
-fI[0] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 9999 9999 9999 999a
-g_xfmt(0) gives 4 bytes: "-1.2"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-fI[1] = #bfff 9999 9999 9999 999a
-fI[0] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff a666 6666 6666 6666
-g_xfmt(0) gives 3 bytes: "1.3"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-fI[1] = #3fff a666 6666 6666 6666
-fI[0] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff a666 6666 6666 6667
-g_xfmt(0) gives 22 bytes: "-1.3000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-fI[1] = #bfff a666 6666 6666 6667
-fI[0] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff b333 3333 3333 3333
-g_xfmt(0) gives 3 bytes: "1.4"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-fI[1] = #3fff b333 3333 3333 3333
-fI[0] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff b333 3333 3333 3334
-g_xfmt(0) gives 22 bytes: "-1.4000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-fI[1] = #bfff b333 3333 3333 3334
-fI[0] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff cccc cccc cccc cccc
-g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-fI[1] = #3fff cccc cccc cccc cccc
-fI[0] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff cccc cccc cccc cccd
-g_xfmt(0) gives 4 bytes: "-1.6"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-fI[1] = #bfff cccc cccc cccc cccd
-fI[0] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff d999 9999 9999 9999
-g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-fI[1] = #3fff d999 9999 9999 9999
-fI[0] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff d999 9999 9999 999a
-g_xfmt(0) gives 4 bytes: "-1.7"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-fI[1] = #bfff d999 9999 9999 999a
-fI[0] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff e666 6666 6666 6666
-g_xfmt(0) gives 3 bytes: "1.8"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-fI[1] = #3fff e666 6666 6666 6666
-fI[0] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff e666 6666 6666 6667
-g_xfmt(0) gives 22 bytes: "-1.8000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-fI[1] = #bfff e666 6666 6666 6667
-fI[0] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff f333 3333 3333 3333
-g_xfmt(0) gives 3 bytes: "1.9"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-fI[1] = #3fff f333 3333 3333 3333
-fI[0] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff f333 3333 3333 3334
-g_xfmt(0) gives 22 bytes: "-1.9000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-fI[1] = #bfff f333 3333 3333 3334
-fI[0] == strtox
-
diff --git a/float/gdtoa/test/x.ou1 b/float/gdtoa/test/x.ou1
deleted file mode 100644 (file)
index 3ebe74a..0000000
+++ /dev/null
@@ -1,1460 +0,0 @@
-
-Input: 1.23
-
-strtox consumes 4 bytes and returns 33
-with bits = #3fff 9d70 a3d7 a3d 70a4
-printf("%.21Lg") gives 1.23000000000000000002
-g_xfmt(0) gives 4 bytes: "1.23"
-
-strtoIx returns 33, consuming 4 bytes.
-fI[0] = #3fff 9d70 a3d7 a3d 70a3
-= 1.22999999999999999991
-fI[1] = #3fff 9d70 a3d7 a3d 70a3
-= 1.23000000000000000002
-fI[1] == strtox
-
-
-Input: 1.23e+20
-
-strtox consumes 8 bytes and returns 1
-with bits = #4041 d55e f90a 2da1 8000
-printf("%.21Lg") gives 123000000000000000000
-g_xfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIx returns 1, consuming 8 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.23e-20
-
-strtox consumes 8 bytes and returns 17
-with bits = #3fbc e857 267b b3a9 84f2
-printf("%.21Lg") gives 1.22999999999999999997e-20
-g_xfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #3fbc e857 267b b3a9 84f2
-= 1.22999999999999999997e-20
-fI[1] = #3fbc e857 267b b3a9 84f2
-= 1.23000000000000000004e-20
-fI[0] == strtox
-
-
-Input: 1.23456789
-
-strtox consumes 10 bytes and returns 33
-with bits = #3fff 9e06 5214 1ef0 dbf6
-printf("%.21Lg") gives 1.23456789000000000003
-g_xfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIx returns 33, consuming 10 bytes.
-fI[0] = #3fff 9e06 5214 1ef0 dbf5
-= 1.23456788999999999992
-fI[1] = #3fff 9e06 5214 1ef0 dbf5
-= 1.23456789000000000003
-fI[1] == strtox
-
-
-Input: 1.23456589e+20
-
-strtox consumes 14 bytes and returns 1
-with bits = #4041 d629 bd33 5cc ba00
-printf("%.21Lg") gives 123456589000000000000
-g_xfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIx returns 1, consuming 14 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.23e+30
-
-strtox consumes 8 bytes and returns 17
-with bits = #4062 f865 8274 7dbc 824a
-printf("%.21Lg") gives 1.22999999999999999999e+30
-g_xfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #4062 f865 8274 7dbc 824a
-= 1.22999999999999999999e+30
-fI[1] = #4062 f865 8274 7dbc 824a
-= 1.23000000000000000006e+30
-fI[0] == strtox
-
-
-Input: 1.23e-30
-
-strtox consumes 8 bytes and returns 17
-with bits = #3f9b c794 337a 8085 54eb
-printf("%.21Lg") gives 1.22999999999999999999e-30
-g_xfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #3f9b c794 337a 8085 54eb
-= 1.22999999999999999999e-30
-fI[1] = #3f9b c794 337a 8085 54eb
-= 1.23000000000000000007e-30
-fI[0] == strtox
-
-
-Input: 1.23456789e-20
-
-strtox consumes 14 bytes and returns 17
-with bits = #3fbc e934 a38 f3d6 d352
-printf("%.21Lg") gives 1.23456788999999999998e-20
-g_xfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIx returns 17, consuming 14 bytes.
-fI[0] = #3fbc e934 a38 f3d6 d352
-= 1.23456788999999999998e-20
-fI[1] = #3fbc e934 a38 f3d6 d352
-= 1.23456789000000000005e-20
-fI[0] == strtox
-
-
-Input: 1.23456789e-30
-
-strtox consumes 14 bytes and returns 17
-with bits = #3f9b c851 f19d decc a8fc
-printf("%.21Lg") gives 1.23456788999999999999e-30
-g_xfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIx returns 17, consuming 14 bytes.
-fI[0] = #3f9b c851 f19d decc a8fc
-= 1.23456788999999999999e-30
-fI[1] = #3f9b c851 f19d decc a8fc
-= 1.23456789000000000007e-30
-fI[0] == strtox
-
-
-Input: 1.234567890123456789
-
-strtox consumes 20 bytes and returns 17
-with bits = #3fff 9e06 5214 62cf db8d
-printf("%.21Lg") gives 1.23456789012345678899
-g_xfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIx returns 17, consuming 20 bytes.
-fI[0] = #3fff 9e06 5214 62cf db8d
-= 1.23456789012345678899
-fI[1] = #3fff 9e06 5214 62cf db8d
-= 1.23456789012345678909
-fI[0] == strtox
-
-
-Input: 1.23456789012345678901234567890123456789
-
-strtox consumes 40 bytes and returns 17
-with bits = #3fff 9e06 5214 62cf db8d
-printf("%.21Lg") gives 1.23456789012345678899
-g_xfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIx returns 17, consuming 40 bytes.
-fI[0] = #3fff 9e06 5214 62cf db8d
-= 1.23456789012345678899
-fI[1] = #3fff 9e06 5214 62cf db8d
-= 1.23456789012345678909
-fI[0] == strtox
-
-
-Input: 1.23e306
-
-strtox consumes 8 bytes and returns 17
-with bits = #43f7 e033 b668 e30f a6d5
-printf("%.21Lg") gives 1.22999999999999999997e+306
-g_xfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #43f7 e033 b668 e30f a6d5
-= 1.22999999999999999997e+306
-fI[1] = #43f7 e033 b668 e30f a6d5
-= 1.23000000000000000005e+306
-fI[0] == strtox
-
-
-Input: 1.23e-306
-
-strtox consumes 9 bytes and returns 33
-with bits = #3c06 dd1d c2ed 1cb7 3f25
-printf("%.21Lg") gives 1.23000000000000000002e-306
-g_xfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIx returns 33, consuming 9 bytes.
-fI[0] = #3c06 dd1d c2ed 1cb7 3f24
-= 1.22999999999999999995e-306
-fI[1] = #3c06 dd1d c2ed 1cb7 3f24
-= 1.23000000000000000002e-306
-fI[1] == strtox
-
-
-Input: 1.23e-320
-
-strtox consumes 9 bytes and returns 33
-with bits = #3bd8 9b98 c371 844c 3f1a
-printf("%.21Lg") gives 1.23000000000000000002e-320
-g_xfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIx returns 33, consuming 9 bytes.
-fI[0] = #3bd8 9b98 c371 844c 3f19
-= 1.22999999999999999991e-320
-fI[1] = #3bd8 9b98 c371 844c 3f19
-= 1.23000000000000000002e-320
-fI[1] == strtox
-
-
-Input: 1.23e-20
-
-strtox consumes 8 bytes and returns 17
-with bits = #3fbc e857 267b b3a9 84f2
-printf("%.21Lg") gives 1.22999999999999999997e-20
-g_xfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIx returns 17, consuming 8 bytes.
-fI[0] = #3fbc e857 267b b3a9 84f2
-= 1.22999999999999999997e-20
-fI[1] = #3fbc e857 267b b3a9 84f2
-= 1.23000000000000000004e-20
-fI[0] == strtox
-
-
-Input: 1.23456789e307
-
-strtox consumes 14 bytes and returns 17
-with bits = #43fb 8ca5 8a5e d766 de75
-printf("%.21Lg") gives 1.23456788999999999998e+307
-g_xfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIx returns 17, consuming 14 bytes.
-fI[0] = #43fb 8ca5 8a5e d766 de75
-= 1.23456788999999999998e+307
-fI[1] = #43fb 8ca5 8a5e d766 de75
-= 1.23456789000000000011e+307
-fI[0] == strtox
-
-
-Input: 1.23456589e-307
-
-strtox consumes 15 bytes and returns 17
-with bits = #3c03 b18c b5dc c22f d369
-printf("%.21Lg") gives 1.23456588999999999999e-307
-g_xfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIx returns 17, consuming 15 bytes.
-fI[0] = #3c03 b18c b5dc c22f d369
-= 1.23456588999999999999e-307
-fI[1] = #3c03 b18c b5dc c22f d369
-= 1.23456589000000000009e-307
-fI[0] == strtox
-
-
-Input: 1.234567890123456789
-
-strtox consumes 20 bytes and returns 17
-with bits = #3fff 9e06 5214 62cf db8d
-printf("%.21Lg") gives 1.23456789012345678899
-g_xfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIx returns 17, consuming 20 bytes.
-fI[0] = #3fff 9e06 5214 62cf db8d
-= 1.23456789012345678899
-fI[1] = #3fff 9e06 5214 62cf db8d
-= 1.23456789012345678909
-fI[0] == strtox
-
-
-Input: 1.234567890123456789e301
-
-strtox consumes 24 bytes and returns 33
-with bits = #43e7 937a 8baf ab20 980c
-printf("%.21Lg") gives 1.234567890123456789e+301
-g_xfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIx returns 33, consuming 24 bytes.
-fI[0] = #43e7 937a 8baf ab20 980b
-= 1.23456789012345678889e+301
-fI[1] = #43e7 937a 8baf ab20 980b
-= 1.234567890123456789e+301
-fI[1] == strtox
-
-
-Input: 1.234567890123456789e-301
-
-strtox consumes 25 bytes and returns 33
-with bits = #3c17 a953 271a 5d06 9ad9
-printf("%.21Lg") gives 1.23456789012345678902e-301
-g_xfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIx returns 33, consuming 25 bytes.
-fI[0] = #3c17 a953 271a 5d06 9ad8
-= 1.23456789012345678892e-301
-fI[1] = #3c17 a953 271a 5d06 9ad8
-= 1.23456789012345678902e-301
-fI[1] == strtox
-
-
-Input: 1.234567890123456789e-321
-
-strtox consumes 25 bytes and returns 33
-with bits = #3bd4 f9e1 1b4c ea6d cce9
-printf("%.21Lg") gives 1.234567890123456789e-321
-g_xfmt(0) gives 25 bytes: "1.234567890123456789e-321"
-
-strtoIx returns 33, consuming 25 bytes.
-fI[0] = #3bd4 f9e1 1b4c ea6d cce8
-= 1.23456789012345678893e-321
-fI[1] = #3bd4 f9e1 1b4c ea6d cce8
-= 1.234567890123456789e-321
-fI[1] == strtox
-
-
-Input: 1e23
-
-strtox consumes 4 bytes and returns 1
-with bits = #404b a968 163f a57 b400
-printf("%.21Lg") gives 1e+23
-g_xfmt(0) gives 5 bytes: "1e+23"
-
-strtoIx returns 1, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1e310
-
-strtox consumes 5 bytes and returns 33
-with bits = #4404 de81 e40a 34b cf50
-printf("%.21Lg") gives 1e+310
-g_xfmt(0) gives 6 bytes: "1e+310"
-
-strtoIx returns 33, consuming 5 bytes.
-fI[0] = #4404 de81 e40a 34b cf4f
-= 9.9999999999999999994e+309
-fI[1] = #4404 de81 e40a 34b cf4f
-= 1e+310
-fI[1] == strtox
-
-
-Input: 9.0259718793241475e-277
-
-strtox consumes 23 bytes and returns 33
-with bits = #3c69 ffff ffff ffff fcf7
-printf("%.21Lg") gives 9.02597187932414750016e-277
-g_xfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIx returns 33, consuming 23 bytes.
-fI[0] = #3c69 ffff ffff ffff fcf6
-= 9.02597187932414749967e-277
-fI[1] = #3c69 ffff ffff ffff fcf6
-= 9.02597187932414750016e-277
-fI[1] == strtox
-
-
-Input: 9.025971879324147880346310405869e-277
-
-strtox consumes 37 bytes and returns 17
-with bits = #3c6a 8000 0 0 0
-printf("%.21Lg") gives 9.02597187932414788035e-277
-g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIx returns 17, consuming 37 bytes.
-fI[0] = #3c6a 8000 0 0 0
-= 9.02597187932414788035e-277
-fI[1] = #3c6a 8000 0 0 0
-= 9.02597187932414788132e-277
-fI[0] == strtox
-
-
-Input: 9.025971879324147880346310405868e-277
-
-strtox consumes 37 bytes and returns 33
-with bits = #3c6a 8000 0 0 0
-printf("%.21Lg") gives 9.02597187932414788035e-277
-g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIx returns 33, consuming 37 bytes.
-fI[0] = #3c69 ffff ffff ffff ffff
-= 9.02597187932414787986e-277
-fI[1] = #3c6a 8000 0 ffff ffff
-= 9.02597187932414788035e-277
-fI[1] == strtox
-
-
-Input: 2.2250738585072014e-308
-
-strtox consumes 23 bytes and returns 17
-with bits = #3c01 8000 0 0 46
-printf("%.21Lg") gives 2.22507385850720139998e-308
-g_xfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIx returns 17, consuming 23 bytes.
-fI[0] = #3c01 8000 0 0 46
-= 2.22507385850720139998e-308
-fI[1] = #3c01 8000 0 0 46
-= 2.22507385850720140022e-308
-fI[0] == strtox
-
-
-Input: 2.2250738585072013e-308
-
-strtox consumes 23 bytes and returns 17
-with bits = #3c00 ffff ffff ffff fd4f
-printf("%.21Lg") gives 2.22507385850720129998e-308
-g_xfmt(0) gives 23 bytes: "2.2250738585072013e-308"
-
-strtoIx returns 17, consuming 23 bytes.
-fI[0] = #3c00 ffff ffff ffff fd4f
-= 2.22507385850720129998e-308
-fI[1] = #3c00 ffff ffff ffff fd4f
-= 2.2250738585072013001e-308
-fI[0] == strtox
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 8ccc cccc cccc cccc
-printf("%.21Lg") gives 1.09999999999999999991
-g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-= 1.09999999999999999991
-fI[1] = #3fff 8ccc cccc cccc cccc
-= 1.10000000000000000002
-fI[0] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 8ccc cccc cccc cccc
-printf("%.21Lg") gives -1.09999999999999999991
-g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-= -1.10000000000000000002
-fI[1] = #bfff 8ccc cccc cccc cccd
-= -1.09999999999999999991
-fI[1] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 9999 9999 9999 9999
-printf("%.21Lg") gives 1.19999999999999999993
-g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-= 1.19999999999999999993
-fI[1] = #3fff 9999 9999 9999 9999
-= 1.20000000000000000004
-fI[0] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 9999 9999 9999 9999
-printf("%.21Lg") gives -1.19999999999999999993
-g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-= -1.20000000000000000004
-fI[1] = #bfff 9999 9999 9999 999a
-= -1.19999999999999999993
-fI[1] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff a666 6666 6666 6666
-printf("%.21Lg") gives 1.29999999999999999996
-g_xfmt(0) gives 3 bytes: "1.3"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-= 1.29999999999999999996
-fI[1] = #3fff a666 6666 6666 6666
-= 1.30000000000000000007
-fI[0] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff a666 6666 6666 6666
-printf("%.21Lg") gives -1.29999999999999999996
-g_xfmt(0) gives 4 bytes: "-1.3"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-= -1.30000000000000000007
-fI[1] = #bfff a666 6666 6666 6667
-= -1.29999999999999999996
-fI[1] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff b333 3333 3333 3333
-printf("%.21Lg") gives 1.39999999999999999998
-g_xfmt(0) gives 3 bytes: "1.4"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-= 1.39999999999999999998
-fI[1] = #3fff b333 3333 3333 3333
-= 1.40000000000000000009
-fI[0] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff b333 3333 3333 3333
-printf("%.21Lg") gives -1.39999999999999999998
-g_xfmt(0) gives 4 bytes: "-1.4"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-= -1.40000000000000000009
-fI[1] = #bfff b333 3333 3333 3334
-= -1.39999999999999999998
-fI[1] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-printf("%.21Lg") gives 1.5
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-printf("%.21Lg") gives -1.5
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff cccc cccc cccc cccc
-printf("%.21Lg") gives 1.59999999999999999991
-g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-= 1.59999999999999999991
-fI[1] = #3fff cccc cccc cccc cccc
-= 1.60000000000000000002
-fI[0] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff cccc cccc cccc cccc
-printf("%.21Lg") gives -1.59999999999999999991
-g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-= -1.60000000000000000002
-fI[1] = #bfff cccc cccc cccc cccd
-= -1.59999999999999999991
-fI[1] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff d999 9999 9999 9999
-printf("%.21Lg") gives 1.69999999999999999993
-g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-= 1.69999999999999999993
-fI[1] = #3fff d999 9999 9999 9999
-= 1.70000000000000000004
-fI[0] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff d999 9999 9999 9999
-printf("%.21Lg") gives -1.69999999999999999993
-g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-= -1.70000000000000000004
-fI[1] = #bfff d999 9999 9999 999a
-= -1.69999999999999999993
-fI[1] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff e666 6666 6666 6666
-printf("%.21Lg") gives 1.79999999999999999996
-g_xfmt(0) gives 3 bytes: "1.8"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-= 1.79999999999999999996
-fI[1] = #3fff e666 6666 6666 6666
-= 1.80000000000000000007
-fI[0] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff e666 6666 6666 6666
-printf("%.21Lg") gives -1.79999999999999999996
-g_xfmt(0) gives 4 bytes: "-1.8"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-= -1.80000000000000000007
-fI[1] = #bfff e666 6666 6666 6667
-= -1.79999999999999999996
-fI[1] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff f333 3333 3333 3333
-printf("%.21Lg") gives 1.89999999999999999998
-g_xfmt(0) gives 3 bytes: "1.9"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-= 1.89999999999999999998
-fI[1] = #3fff f333 3333 3333 3333
-= 1.90000000000000000009
-fI[0] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff f333 3333 3333 3333
-printf("%.21Lg") gives -1.89999999999999999998
-g_xfmt(0) gives 4 bytes: "-1.9"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-= -1.90000000000000000009
-fI[1] = #bfff f333 3333 3333 3334
-= -1.89999999999999999998
-fI[1] == strtox
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 8ccc cccc cccc cccd
-printf("%.21Lg") gives 1.10000000000000000002
-g_xfmt(0) gives 3 bytes: "1.1"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-= 1.09999999999999999991
-fI[1] = #3fff 8ccc cccc cccc cccc
-= 1.10000000000000000002
-fI[1] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 8ccc cccc cccc cccd
-printf("%.21Lg") gives -1.10000000000000000002
-g_xfmt(0) gives 4 bytes: "-1.1"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-= -1.10000000000000000002
-fI[1] = #bfff 8ccc cccc cccc cccd
-= -1.09999999999999999991
-fI[0] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 9999 9999 9999 999a
-printf("%.21Lg") gives 1.20000000000000000004
-g_xfmt(0) gives 3 bytes: "1.2"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-= 1.19999999999999999993
-fI[1] = #3fff 9999 9999 9999 9999
-= 1.20000000000000000004
-fI[1] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 9999 9999 9999 999a
-printf("%.21Lg") gives -1.20000000000000000004
-g_xfmt(0) gives 4 bytes: "-1.2"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-= -1.20000000000000000004
-fI[1] = #bfff 9999 9999 9999 999a
-= -1.19999999999999999993
-fI[0] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff a666 6666 6666 6666
-printf("%.21Lg") gives 1.29999999999999999996
-g_xfmt(0) gives 3 bytes: "1.3"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-= 1.29999999999999999996
-fI[1] = #3fff a666 6666 6666 6666
-= 1.30000000000000000007
-fI[0] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff a666 6666 6666 6666
-printf("%.21Lg") gives -1.29999999999999999996
-g_xfmt(0) gives 4 bytes: "-1.3"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-= -1.30000000000000000007
-fI[1] = #bfff a666 6666 6666 6667
-= -1.29999999999999999996
-fI[1] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff b333 3333 3333 3333
-printf("%.21Lg") gives 1.39999999999999999998
-g_xfmt(0) gives 3 bytes: "1.4"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-= 1.39999999999999999998
-fI[1] = #3fff b333 3333 3333 3333
-= 1.40000000000000000009
-fI[0] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff b333 3333 3333 3333
-printf("%.21Lg") gives -1.39999999999999999998
-g_xfmt(0) gives 4 bytes: "-1.4"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-= -1.40000000000000000009
-fI[1] = #bfff b333 3333 3333 3334
-= -1.39999999999999999998
-fI[1] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-printf("%.21Lg") gives 1.5
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-printf("%.21Lg") gives -1.5
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff cccc cccc cccc cccd
-printf("%.21Lg") gives 1.60000000000000000002
-g_xfmt(0) gives 3 bytes: "1.6"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-= 1.59999999999999999991
-fI[1] = #3fff cccc cccc cccc cccc
-= 1.60000000000000000002
-fI[1] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff cccc cccc cccc cccd
-printf("%.21Lg") gives -1.60000000000000000002
-g_xfmt(0) gives 4 bytes: "-1.6"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-= -1.60000000000000000002
-fI[1] = #bfff cccc cccc cccc cccd
-= -1.59999999999999999991
-fI[0] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff d999 9999 9999 999a
-printf("%.21Lg") gives 1.70000000000000000004
-g_xfmt(0) gives 3 bytes: "1.7"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-= 1.69999999999999999993
-fI[1] = #3fff d999 9999 9999 9999
-= 1.70000000000000000004
-fI[1] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff d999 9999 9999 999a
-printf("%.21Lg") gives -1.70000000000000000004
-g_xfmt(0) gives 4 bytes: "-1.7"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-= -1.70000000000000000004
-fI[1] = #bfff d999 9999 9999 999a
-= -1.69999999999999999993
-fI[0] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff e666 6666 6666 6666
-printf("%.21Lg") gives 1.79999999999999999996
-g_xfmt(0) gives 3 bytes: "1.8"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-= 1.79999999999999999996
-fI[1] = #3fff e666 6666 6666 6666
-= 1.80000000000000000007
-fI[0] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff e666 6666 6666 6666
-printf("%.21Lg") gives -1.79999999999999999996
-g_xfmt(0) gives 4 bytes: "-1.8"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-= -1.80000000000000000007
-fI[1] = #bfff e666 6666 6666 6667
-= -1.79999999999999999996
-fI[1] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff f333 3333 3333 3333
-printf("%.21Lg") gives 1.89999999999999999998
-g_xfmt(0) gives 3 bytes: "1.9"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-= 1.89999999999999999998
-fI[1] = #3fff f333 3333 3333 3333
-= 1.90000000000000000009
-fI[0] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff f333 3333 3333 3333
-printf("%.21Lg") gives -1.89999999999999999998
-g_xfmt(0) gives 4 bytes: "-1.9"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-= -1.90000000000000000009
-fI[1] = #bfff f333 3333 3333 3334
-= -1.89999999999999999998
-fI[1] == strtox
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 8ccc cccc cccc cccd
-printf("%.21Lg") gives 1.10000000000000000002
-g_xfmt(0) gives 3 bytes: "1.1"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-= 1.09999999999999999991
-fI[1] = #3fff 8ccc cccc cccc cccc
-= 1.10000000000000000002
-fI[1] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 8ccc cccc cccc cccc
-printf("%.21Lg") gives -1.09999999999999999991
-g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-= -1.10000000000000000002
-fI[1] = #bfff 8ccc cccc cccc cccd
-= -1.09999999999999999991
-fI[1] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff 9999 9999 9999 999a
-printf("%.21Lg") gives 1.20000000000000000004
-g_xfmt(0) gives 3 bytes: "1.2"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-= 1.19999999999999999993
-fI[1] = #3fff 9999 9999 9999 9999
-= 1.20000000000000000004
-fI[1] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff 9999 9999 9999 9999
-printf("%.21Lg") gives -1.19999999999999999993
-g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-= -1.20000000000000000004
-fI[1] = #bfff 9999 9999 9999 999a
-= -1.19999999999999999993
-fI[1] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff a666 6666 6666 6667
-printf("%.21Lg") gives 1.30000000000000000007
-g_xfmt(0) gives 21 bytes: "1.3000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-= 1.29999999999999999996
-fI[1] = #3fff a666 6666 6666 6666
-= 1.30000000000000000007
-fI[1] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff a666 6666 6666 6666
-printf("%.21Lg") gives -1.29999999999999999996
-g_xfmt(0) gives 4 bytes: "-1.3"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-= -1.30000000000000000007
-fI[1] = #bfff a666 6666 6666 6667
-= -1.29999999999999999996
-fI[1] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff b333 3333 3333 3334
-printf("%.21Lg") gives 1.40000000000000000009
-g_xfmt(0) gives 21 bytes: "1.4000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-= 1.39999999999999999998
-fI[1] = #3fff b333 3333 3333 3333
-= 1.40000000000000000009
-fI[1] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff b333 3333 3333 3333
-printf("%.21Lg") gives -1.39999999999999999998
-g_xfmt(0) gives 4 bytes: "-1.4"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-= -1.40000000000000000009
-fI[1] = #bfff b333 3333 3333 3334
-= -1.39999999999999999998
-fI[1] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-printf("%.21Lg") gives 1.5
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-printf("%.21Lg") gives -1.5
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff cccc cccc cccc cccd
-printf("%.21Lg") gives 1.60000000000000000002
-g_xfmt(0) gives 3 bytes: "1.6"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-= 1.59999999999999999991
-fI[1] = #3fff cccc cccc cccc cccc
-= 1.60000000000000000002
-fI[1] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff cccc cccc cccc cccc
-printf("%.21Lg") gives -1.59999999999999999991
-g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-= -1.60000000000000000002
-fI[1] = #bfff cccc cccc cccc cccd
-= -1.59999999999999999991
-fI[1] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff d999 9999 9999 999a
-printf("%.21Lg") gives 1.70000000000000000004
-g_xfmt(0) gives 3 bytes: "1.7"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-= 1.69999999999999999993
-fI[1] = #3fff d999 9999 9999 9999
-= 1.70000000000000000004
-fI[1] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff d999 9999 9999 9999
-printf("%.21Lg") gives -1.69999999999999999993
-g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-= -1.70000000000000000004
-fI[1] = #bfff d999 9999 9999 999a
-= -1.69999999999999999993
-fI[1] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff e666 6666 6666 6667
-printf("%.21Lg") gives 1.80000000000000000007
-g_xfmt(0) gives 21 bytes: "1.8000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-= 1.79999999999999999996
-fI[1] = #3fff e666 6666 6666 6666
-= 1.80000000000000000007
-fI[1] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff e666 6666 6666 6666
-printf("%.21Lg") gives -1.79999999999999999996
-g_xfmt(0) gives 4 bytes: "-1.8"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-= -1.80000000000000000007
-fI[1] = #bfff e666 6666 6666 6667
-= -1.79999999999999999996
-fI[1] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 33
-with bits = #3fff f333 3333 3333 3334
-printf("%.21Lg") gives 1.90000000000000000009
-g_xfmt(0) gives 21 bytes: "1.9000000000000000001"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-= 1.89999999999999999998
-fI[1] = #3fff f333 3333 3333 3333
-= 1.90000000000000000009
-fI[1] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 25
-with bits = #bfff f333 3333 3333 3333
-printf("%.21Lg") gives -1.89999999999999999998
-g_xfmt(0) gives 4 bytes: "-1.9"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-= -1.90000000000000000009
-fI[1] = #bfff f333 3333 3333 3334
-= -1.89999999999999999998
-fI[1] == strtox
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 8ccc cccc cccc cccc
-printf("%.21Lg") gives 1.09999999999999999991
-g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 8ccc cccc cccc cccc
-= 1.09999999999999999991
-fI[1] = #3fff 8ccc cccc cccc cccc
-= 1.10000000000000000002
-fI[0] == strtox
-
-
-Input: -1.1
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 8ccc cccc cccc cccd
-printf("%.21Lg") gives -1.10000000000000000002
-g_xfmt(0) gives 4 bytes: "-1.1"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 8ccc cccc cccc cccd
-= -1.10000000000000000002
-fI[1] = #bfff 8ccc cccc cccc cccd
-= -1.09999999999999999991
-fI[0] == strtox
-
-
-Input: 1.2
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff 9999 9999 9999 9999
-printf("%.21Lg") gives 1.19999999999999999993
-g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff 9999 9999 9999 9999
-= 1.19999999999999999993
-fI[1] = #3fff 9999 9999 9999 9999
-= 1.20000000000000000004
-fI[0] == strtox
-
-
-Input: -1.2
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff 9999 9999 9999 999a
-printf("%.21Lg") gives -1.20000000000000000004
-g_xfmt(0) gives 4 bytes: "-1.2"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff 9999 9999 9999 999a
-= -1.20000000000000000004
-fI[1] = #bfff 9999 9999 9999 999a
-= -1.19999999999999999993
-fI[0] == strtox
-
-
-Input: 1.3
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff a666 6666 6666 6666
-printf("%.21Lg") gives 1.29999999999999999996
-g_xfmt(0) gives 3 bytes: "1.3"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff a666 6666 6666 6666
-= 1.29999999999999999996
-fI[1] = #3fff a666 6666 6666 6666
-= 1.30000000000000000007
-fI[0] == strtox
-
-
-Input: -1.3
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff a666 6666 6666 6667
-printf("%.21Lg") gives -1.30000000000000000007
-g_xfmt(0) gives 22 bytes: "-1.3000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff a666 6666 6666 6667
-= -1.30000000000000000007
-fI[1] = #bfff a666 6666 6666 6667
-= -1.29999999999999999996
-fI[0] == strtox
-
-
-Input: 1.4
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff b333 3333 3333 3333
-printf("%.21Lg") gives 1.39999999999999999998
-g_xfmt(0) gives 3 bytes: "1.4"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff b333 3333 3333 3333
-= 1.39999999999999999998
-fI[1] = #3fff b333 3333 3333 3333
-= 1.40000000000000000009
-fI[0] == strtox
-
-
-Input: -1.4
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff b333 3333 3333 3334
-printf("%.21Lg") gives -1.40000000000000000009
-g_xfmt(0) gives 22 bytes: "-1.4000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff b333 3333 3333 3334
-= -1.40000000000000000009
-fI[1] = #bfff b333 3333 3333 3334
-= -1.39999999999999999998
-fI[0] == strtox
-
-
-Input: 1.5
-
-strtox consumes 3 bytes and returns 1
-with bits = #3fff c000 0 0 0
-printf("%.21Lg") gives 1.5
-g_xfmt(0) gives 3 bytes: "1.5"
-
-strtoIx returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: -1.5
-
-strtox consumes 4 bytes and returns 9
-with bits = #bfff c000 0 0 0
-printf("%.21Lg") gives -1.5
-g_xfmt(0) gives 4 bytes: "-1.5"
-
-strtoIx returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtox
-
-
-Input: 1.6
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff cccc cccc cccc cccc
-printf("%.21Lg") gives 1.59999999999999999991
-g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff cccc cccc cccc cccc
-= 1.59999999999999999991
-fI[1] = #3fff cccc cccc cccc cccc
-= 1.60000000000000000002
-fI[0] == strtox
-
-
-Input: -1.6
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff cccc cccc cccc cccd
-printf("%.21Lg") gives -1.60000000000000000002
-g_xfmt(0) gives 4 bytes: "-1.6"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff cccc cccc cccc cccd
-= -1.60000000000000000002
-fI[1] = #bfff cccc cccc cccc cccd
-= -1.59999999999999999991
-fI[0] == strtox
-
-
-Input: 1.7
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff d999 9999 9999 9999
-printf("%.21Lg") gives 1.69999999999999999993
-g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIx returns 33, consuming 3 bytes.
-fI[0] = #3fff d999 9999 9999 9999
-= 1.69999999999999999993
-fI[1] = #3fff d999 9999 9999 9999
-= 1.70000000000000000004
-fI[0] == strtox
-
-
-Input: -1.7
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff d999 9999 9999 999a
-printf("%.21Lg") gives -1.70000000000000000004
-g_xfmt(0) gives 4 bytes: "-1.7"
-
-strtoIx returns 41, consuming 4 bytes.
-fI[0] = #bfff d999 9999 9999 999a
-= -1.70000000000000000004
-fI[1] = #bfff d999 9999 9999 999a
-= -1.69999999999999999993
-fI[0] == strtox
-
-
-Input: 1.8
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff e666 6666 6666 6666
-printf("%.21Lg") gives 1.79999999999999999996
-g_xfmt(0) gives 3 bytes: "1.8"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff e666 6666 6666 6666
-= 1.79999999999999999996
-fI[1] = #3fff e666 6666 6666 6666
-= 1.80000000000000000007
-fI[0] == strtox
-
-
-Input: -1.8
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff e666 6666 6666 6667
-printf("%.21Lg") gives -1.80000000000000000007
-g_xfmt(0) gives 22 bytes: "-1.8000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff e666 6666 6666 6667
-= -1.80000000000000000007
-fI[1] = #bfff e666 6666 6666 6667
-= -1.79999999999999999996
-fI[0] == strtox
-
-
-Input: 1.9
-
-strtox consumes 3 bytes and returns 17
-with bits = #3fff f333 3333 3333 3333
-printf("%.21Lg") gives 1.89999999999999999998
-g_xfmt(0) gives 3 bytes: "1.9"
-
-strtoIx returns 17, consuming 3 bytes.
-fI[0] = #3fff f333 3333 3333 3333
-= 1.89999999999999999998
-fI[1] = #3fff f333 3333 3333 3333
-= 1.90000000000000000009
-fI[0] == strtox
-
-
-Input: -1.9
-
-strtox consumes 4 bytes and returns 41
-with bits = #bfff f333 3333 3333 3334
-printf("%.21Lg") gives -1.90000000000000000009
-g_xfmt(0) gives 22 bytes: "-1.9000000000000000001"
-
-strtoIx returns 25, consuming 4 bytes.
-fI[0] = #bfff f333 3333 3333 3334
-= -1.90000000000000000009
-fI[1] = #bfff f333 3333 3333 3334
-= -1.89999999999999999998
-fI[0] == strtox
-
diff --git a/float/gdtoa/test/xL.ou0 b/float/gdtoa/test/xL.ou0
deleted file mode 100644 (file)
index dc75f91..0000000
+++ /dev/null
@@ -1,1182 +0,0 @@
-
-Input: 1.23
-
-strtoxL consumes 4 bytes and returns 33
-with bits = #3fff0000 9d70a3d7 a3d70a4
-g_xLfmt(0) gives 4 bytes: "1.23"
-
-strtoIxL returns 33, consuming 4 bytes.
-fI[0] = #3fff0000 9d70a3d7 a3d70a3
-fI[1] = #3fff0000 9d70a3d7 a3d70a4
-fI[1] == strtoxL
-
-
-Input: 1.23e+20
-
-strtoxL consumes 8 bytes and returns 1
-with bits = #40410000 d55ef90a 2da18000
-g_xLfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIxL returns 1, consuming 8 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.23e-20
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #3fbc0000 e857267b b3a984f2
-g_xLfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #3fbc0000 e857267b b3a984f2
-fI[1] = #3fbc0000 e857267b b3a984f3
-fI[0] == strtoxL
-
-
-Input: 1.23456789
-
-strtoxL consumes 10 bytes and returns 33
-with bits = #3fff0000 9e065214 1ef0dbf6
-g_xLfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIxL returns 33, consuming 10 bytes.
-fI[0] = #3fff0000 9e065214 1ef0dbf5
-fI[1] = #3fff0000 9e065214 1ef0dbf6
-fI[1] == strtoxL
-
-
-Input: 1.23456589e+20
-
-strtoxL consumes 14 bytes and returns 1
-with bits = #40410000 d629bd33 5ccba00
-g_xLfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIxL returns 1, consuming 14 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.23e+30
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #40620000 f8658274 7dbc824a
-g_xLfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #40620000 f8658274 7dbc824a
-fI[1] = #40620000 f8658274 7dbc824b
-fI[0] == strtoxL
-
-
-Input: 1.23e-30
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #3f9b0000 c794337a 808554eb
-g_xLfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #3f9b0000 c794337a 808554eb
-fI[1] = #3f9b0000 c794337a 808554ec
-fI[0] == strtoxL
-
-
-Input: 1.23456789e-20
-
-strtoxL consumes 14 bytes and returns 17
-with bits = #3fbc0000 e9340a38 f3d6d352
-g_xLfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIxL returns 17, consuming 14 bytes.
-fI[0] = #3fbc0000 e9340a38 f3d6d352
-fI[1] = #3fbc0000 e9340a38 f3d6d353
-fI[0] == strtoxL
-
-
-Input: 1.23456789e-30
-
-strtoxL consumes 14 bytes and returns 17
-with bits = #3f9b0000 c851f19d decca8fc
-g_xLfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIxL returns 17, consuming 14 bytes.
-fI[0] = #3f9b0000 c851f19d decca8fc
-fI[1] = #3f9b0000 c851f19d decca8fd
-fI[0] == strtoxL
-
-
-Input: 1.234567890123456789
-
-strtoxL consumes 20 bytes and returns 17
-with bits = #3fff0000 9e065214 62cfdb8d
-g_xLfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIxL returns 17, consuming 20 bytes.
-fI[0] = #3fff0000 9e065214 62cfdb8d
-fI[1] = #3fff0000 9e065214 62cfdb8e
-fI[0] == strtoxL
-
-
-Input: 1.23456789012345678901234567890123456789
-
-strtoxL consumes 40 bytes and returns 17
-with bits = #3fff0000 9e065214 62cfdb8d
-g_xLfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIxL returns 17, consuming 40 bytes.
-fI[0] = #3fff0000 9e065214 62cfdb8d
-fI[1] = #3fff0000 9e065214 62cfdb8e
-fI[0] == strtoxL
-
-
-Input: 1.23e306
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #43f70000 e033b668 e30fa6d5
-g_xLfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #43f70000 e033b668 e30fa6d5
-fI[1] = #43f70000 e033b668 e30fa6d6
-fI[0] == strtoxL
-
-
-Input: 1.23e-306
-
-strtoxL consumes 9 bytes and returns 33
-with bits = #3c060000 dd1dc2ed 1cb73f25
-g_xLfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIxL returns 33, consuming 9 bytes.
-fI[0] = #3c060000 dd1dc2ed 1cb73f24
-fI[1] = #3c060000 dd1dc2ed 1cb73f25
-fI[1] == strtoxL
-
-
-Input: 1.23e-320
-
-strtoxL consumes 9 bytes and returns 33
-with bits = #3bd80000 9b98c371 844c3f1a
-g_xLfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIxL returns 33, consuming 9 bytes.
-fI[0] = #3bd80000 9b98c371 844c3f19
-fI[1] = #3bd80000 9b98c371 844c3f1a
-fI[1] == strtoxL
-
-
-Input: 1.23e-20
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #3fbc0000 e857267b b3a984f2
-g_xLfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #3fbc0000 e857267b b3a984f2
-fI[1] = #3fbc0000 e857267b b3a984f3
-fI[0] == strtoxL
-
-
-Input: 1.23456789e307
-
-strtoxL consumes 14 bytes and returns 17
-with bits = #43fb0000 8ca58a5e d766de75
-g_xLfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIxL returns 17, consuming 14 bytes.
-fI[0] = #43fb0000 8ca58a5e d766de75
-fI[1] = #43fb0000 8ca58a5e d766de76
-fI[0] == strtoxL
-
-
-Input: 1.23456589e-307
-
-strtoxL consumes 15 bytes and returns 17
-with bits = #3c030000 b18cb5dc c22fd369
-g_xLfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIxL returns 17, consuming 15 bytes.
-fI[0] = #3c030000 b18cb5dc c22fd369
-fI[1] = #3c030000 b18cb5dc c22fd36a
-fI[0] == strtoxL
-
-
-Input: 1.234567890123456789
-
-strtoxL consumes 20 bytes and returns 17
-with bits = #3fff0000 9e065214 62cfdb8d
-g_xLfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIxL returns 17, consuming 20 bytes.
-fI[0] = #3fff0000 9e065214 62cfdb8d
-fI[1] = #3fff0000 9e065214 62cfdb8e
-fI[0] == strtoxL
-
-
-Input: 1.234567890123456789e301
-
-strtoxL consumes 24 bytes and returns 33
-with bits = #43e70000 937a8baf ab20980c
-g_xLfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIxL returns 33, consuming 24 bytes.
-fI[0] = #43e70000 937a8baf ab20980b
-fI[1] = #43e70000 937a8baf ab20980c
-fI[1] == strtoxL
-
-
-Input: 1.234567890123456789e-301
-
-strtoxL consumes 25 bytes and returns 33
-with bits = #3c170000 a953271a 5d069ad9
-g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIxL returns 33, consuming 25 bytes.
-fI[0] = #3c170000 a953271a 5d069ad8
-fI[1] = #3c170000 a953271a 5d069ad9
-fI[1] == strtoxL
-
-
-Input: 1.234567890123456789e-321
-
-strtoxL consumes 25 bytes and returns 33
-with bits = #3bd40000 f9e11b4c ea6dcce9
-g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-321"
-
-strtoIxL returns 33, consuming 25 bytes.
-fI[0] = #3bd40000 f9e11b4c ea6dcce8
-fI[1] = #3bd40000 f9e11b4c ea6dcce9
-fI[1] == strtoxL
-
-
-Input: 1e23
-
-strtoxL consumes 4 bytes and returns 1
-with bits = #404b0000 a968163f a57b400
-g_xLfmt(0) gives 5 bytes: "1e+23"
-
-strtoIxL returns 1, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1e310
-
-strtoxL consumes 5 bytes and returns 33
-with bits = #44040000 de81e40a 34bcf50
-g_xLfmt(0) gives 6 bytes: "1e+310"
-
-strtoIxL returns 33, consuming 5 bytes.
-fI[0] = #44040000 de81e40a 34bcf4f
-fI[1] = #44040000 de81e40a 34bcf50
-fI[1] == strtoxL
-
-
-Input: 9.0259718793241475e-277
-
-strtoxL consumes 23 bytes and returns 33
-with bits = #3c690000 ffffffff fffffcf7
-g_xLfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIxL returns 33, consuming 23 bytes.
-fI[0] = #3c690000 ffffffff fffffcf6
-fI[1] = #3c690000 ffffffff fffffcf7
-fI[1] == strtoxL
-
-
-Input: 9.025971879324147880346310405869e-277
-
-strtoxL consumes 37 bytes and returns 17
-with bits = #3c6a0000 80000000 0
-g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIxL returns 17, consuming 37 bytes.
-fI[0] = #3c6a0000 80000000 0
-fI[1] = #3c6a0000 80000000 1
-fI[0] == strtoxL
-
-
-Input: 9.025971879324147880346310405868e-277
-
-strtoxL consumes 37 bytes and returns 33
-with bits = #3c6a0000 80000000 0
-g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIxL returns 33, consuming 37 bytes.
-fI[0] = #3c690000 ffffffff ffffffff
-fI[1] = #3c6a0000 80000000 0
-fI[1] == strtoxL
-
-
-Input: 2.2250738585072014e-308
-
-strtoxL consumes 23 bytes and returns 17
-with bits = #3c010000 80000000 46
-g_xLfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIxL returns 17, consuming 23 bytes.
-fI[0] = #3c010000 80000000 46
-fI[1] = #3c010000 80000000 47
-fI[0] == strtoxL
-
-
-Input: 2.2250738585072013e-308
-
-strtoxL consumes 23 bytes and returns 17
-with bits = #3c000000 ffffffff fffffd4f
-g_xLfmt(0) gives 23 bytes: "2.2250738585072013e-308"
-
-strtoIxL returns 17, consuming 23 bytes.
-fI[0] = #3c000000 ffffffff fffffd4f
-fI[1] = #3c000000 ffffffff fffffd50
-fI[0] == strtoxL
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 99999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 99999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 a6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.3"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 a6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.3"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 b3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.4"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 b3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.4"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[1] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 cccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 cccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 d9999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 d9999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 e6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.8"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 e6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.8"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 f3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.9"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 f3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.9"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[1] == strtoxL
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.1"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.1"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 99999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.2"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 99999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.2"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 a6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.3"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 a6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.3"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 b3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.4"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 b3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.4"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[1] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 cccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.6"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 cccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.6"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 d9999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.7"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 d9999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.7"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 e6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.8"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 e6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.8"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 f3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.9"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 f3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.9"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[1] == strtoxL
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.1"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 99999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.2"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 99999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 a6666666 66666667
-g_xLfmt(0) gives 21 bytes: "1.3000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[1] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 a6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.3"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 b3333333 33333334
-g_xLfmt(0) gives 21 bytes: "1.4000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[1] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 b3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.4"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[1] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 cccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.6"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 cccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 d9999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.7"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 d9999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 e6666666 66666667
-g_xLfmt(0) gives 21 bytes: "1.8000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[1] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 e6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.8"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 f3333333 33333334
-g_xLfmt(0) gives 21 bytes: "1.9000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[1] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 f3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.9"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[1] == strtoxL
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.1"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 99999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 99999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.2"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 a6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.3"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 a6666666 66666667
-g_xLfmt(0) gives 22 bytes: "-1.3000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[0] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 b3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.4"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 b3333333 33333334
-g_xLfmt(0) gives 22 bytes: "-1.4000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[0] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 cccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 cccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.6"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 d9999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 d9999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.7"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 e6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.8"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 e6666666 66666667
-g_xLfmt(0) gives 22 bytes: "-1.8000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[0] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 f3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.9"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 f3333333 33333334
-g_xLfmt(0) gives 22 bytes: "-1.9000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[0] == strtoxL
-
diff --git a/float/gdtoa/test/xL.ou1 b/float/gdtoa/test/xL.ou1
deleted file mode 100644 (file)
index 054690e..0000000
+++ /dev/null
@@ -1,1183 +0,0 @@
-***** This file is not right.  It needs to be generated on a
-***** system with a Motorla 68881 or the equivalent.
-Input: 1.23
-
-strtoxL consumes 4 bytes and returns 33
-with bits = #3fff0000 9d70a3d7 a3d70a4
-g_xLfmt(0) gives 4 bytes: "1.23"
-
-strtoIxL returns 33, consuming 4 bytes.
-fI[0] = #3fff0000 9d70a3d7 a3d70a3
-fI[1] = #3fff0000 9d70a3d7 a3d70a4
-fI[1] == strtoxL
-
-
-Input: 1.23e+20
-
-strtoxL consumes 8 bytes and returns 1
-with bits = #40410000 d55ef90a 2da18000
-g_xLfmt(0) gives 8 bytes: "1.23e+20"
-
-strtoIxL returns 1, consuming 8 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.23e-20
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #3fbc0000 e857267b b3a984f2
-g_xLfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #3fbc0000 e857267b b3a984f2
-fI[1] = #3fbc0000 e857267b b3a984f3
-fI[0] == strtoxL
-
-
-Input: 1.23456789
-
-strtoxL consumes 10 bytes and returns 33
-with bits = #3fff0000 9e065214 1ef0dbf6
-g_xLfmt(0) gives 10 bytes: "1.23456789"
-
-strtoIxL returns 33, consuming 10 bytes.
-fI[0] = #3fff0000 9e065214 1ef0dbf5
-fI[1] = #3fff0000 9e065214 1ef0dbf6
-fI[1] == strtoxL
-
-
-Input: 1.23456589e+20
-
-strtoxL consumes 14 bytes and returns 1
-with bits = #40410000 d629bd33 5ccba00
-g_xLfmt(0) gives 14 bytes: "1.23456589e+20"
-
-strtoIxL returns 1, consuming 14 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.23e+30
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #40620000 f8658274 7dbc824a
-g_xLfmt(0) gives 8 bytes: "1.23e+30"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #40620000 f8658274 7dbc824a
-fI[1] = #40620000 f8658274 7dbc824b
-fI[0] == strtoxL
-
-
-Input: 1.23e-30
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #3f9b0000 c794337a 808554eb
-g_xLfmt(0) gives 8 bytes: "1.23e-30"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #3f9b0000 c794337a 808554eb
-fI[1] = #3f9b0000 c794337a 808554ec
-fI[0] == strtoxL
-
-
-Input: 1.23456789e-20
-
-strtoxL consumes 14 bytes and returns 17
-with bits = #3fbc0000 e9340a38 f3d6d352
-g_xLfmt(0) gives 14 bytes: "1.23456789e-20"
-
-strtoIxL returns 17, consuming 14 bytes.
-fI[0] = #3fbc0000 e9340a38 f3d6d352
-fI[1] = #3fbc0000 e9340a38 f3d6d353
-fI[0] == strtoxL
-
-
-Input: 1.23456789e-30
-
-strtoxL consumes 14 bytes and returns 17
-with bits = #3f9b0000 c851f19d decca8fc
-g_xLfmt(0) gives 14 bytes: "1.23456789e-30"
-
-strtoIxL returns 17, consuming 14 bytes.
-fI[0] = #3f9b0000 c851f19d decca8fc
-fI[1] = #3f9b0000 c851f19d decca8fd
-fI[0] == strtoxL
-
-
-Input: 1.234567890123456789
-
-strtoxL consumes 20 bytes and returns 17
-with bits = #3fff0000 9e065214 62cfdb8d
-g_xLfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIxL returns 17, consuming 20 bytes.
-fI[0] = #3fff0000 9e065214 62cfdb8d
-fI[1] = #3fff0000 9e065214 62cfdb8e
-fI[0] == strtoxL
-
-
-Input: 1.23456789012345678901234567890123456789
-
-strtoxL consumes 40 bytes and returns 17
-with bits = #3fff0000 9e065214 62cfdb8d
-g_xLfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIxL returns 17, consuming 40 bytes.
-fI[0] = #3fff0000 9e065214 62cfdb8d
-fI[1] = #3fff0000 9e065214 62cfdb8e
-fI[0] == strtoxL
-
-
-Input: 1.23e306
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #43f70000 e033b668 e30fa6d5
-g_xLfmt(0) gives 9 bytes: "1.23e+306"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #43f70000 e033b668 e30fa6d5
-fI[1] = #43f70000 e033b668 e30fa6d6
-fI[0] == strtoxL
-
-
-Input: 1.23e-306
-
-strtoxL consumes 9 bytes and returns 33
-with bits = #3c060000 dd1dc2ed 1cb73f25
-g_xLfmt(0) gives 9 bytes: "1.23e-306"
-
-strtoIxL returns 33, consuming 9 bytes.
-fI[0] = #3c060000 dd1dc2ed 1cb73f24
-fI[1] = #3c060000 dd1dc2ed 1cb73f25
-fI[1] == strtoxL
-
-
-Input: 1.23e-320
-
-strtoxL consumes 9 bytes and returns 33
-with bits = #3bd80000 9b98c371 844c3f1a
-g_xLfmt(0) gives 9 bytes: "1.23e-320"
-
-strtoIxL returns 33, consuming 9 bytes.
-fI[0] = #3bd80000 9b98c371 844c3f19
-fI[1] = #3bd80000 9b98c371 844c3f1a
-fI[1] == strtoxL
-
-
-Input: 1.23e-20
-
-strtoxL consumes 8 bytes and returns 17
-with bits = #3fbc0000 e857267b b3a984f2
-g_xLfmt(0) gives 8 bytes: "1.23e-20"
-
-strtoIxL returns 17, consuming 8 bytes.
-fI[0] = #3fbc0000 e857267b b3a984f2
-fI[1] = #3fbc0000 e857267b b3a984f3
-fI[0] == strtoxL
-
-
-Input: 1.23456789e307
-
-strtoxL consumes 14 bytes and returns 17
-with bits = #43fb0000 8ca58a5e d766de75
-g_xLfmt(0) gives 15 bytes: "1.23456789e+307"
-
-strtoIxL returns 17, consuming 14 bytes.
-fI[0] = #43fb0000 8ca58a5e d766de75
-fI[1] = #43fb0000 8ca58a5e d766de76
-fI[0] == strtoxL
-
-
-Input: 1.23456589e-307
-
-strtoxL consumes 15 bytes and returns 17
-with bits = #3c030000 b18cb5dc c22fd369
-g_xLfmt(0) gives 15 bytes: "1.23456589e-307"
-
-strtoIxL returns 17, consuming 15 bytes.
-fI[0] = #3c030000 b18cb5dc c22fd369
-fI[1] = #3c030000 b18cb5dc c22fd36a
-fI[0] == strtoxL
-
-
-Input: 1.234567890123456789
-
-strtoxL consumes 20 bytes and returns 17
-with bits = #3fff0000 9e065214 62cfdb8d
-g_xLfmt(0) gives 20 bytes: "1.234567890123456789"
-
-strtoIxL returns 17, consuming 20 bytes.
-fI[0] = #3fff0000 9e065214 62cfdb8d
-fI[1] = #3fff0000 9e065214 62cfdb8e
-fI[0] == strtoxL
-
-
-Input: 1.234567890123456789e301
-
-strtoxL consumes 24 bytes and returns 33
-with bits = #43e70000 937a8baf ab20980c
-g_xLfmt(0) gives 25 bytes: "1.234567890123456789e+301"
-
-strtoIxL returns 33, consuming 24 bytes.
-fI[0] = #43e70000 937a8baf ab20980b
-fI[1] = #43e70000 937a8baf ab20980c
-fI[1] == strtoxL
-
-
-Input: 1.234567890123456789e-301
-
-strtoxL consumes 25 bytes and returns 33
-with bits = #3c170000 a953271a 5d069ad9
-g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-301"
-
-strtoIxL returns 33, consuming 25 bytes.
-fI[0] = #3c170000 a953271a 5d069ad8
-fI[1] = #3c170000 a953271a 5d069ad9
-fI[1] == strtoxL
-
-
-Input: 1.234567890123456789e-321
-
-strtoxL consumes 25 bytes and returns 33
-with bits = #3bd40000 f9e11b4c ea6dcce9
-g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-321"
-
-strtoIxL returns 33, consuming 25 bytes.
-fI[0] = #3bd40000 f9e11b4c ea6dcce8
-fI[1] = #3bd40000 f9e11b4c ea6dcce9
-fI[1] == strtoxL
-
-
-Input: 1e23
-
-strtoxL consumes 4 bytes and returns 1
-with bits = #404b0000 a968163f a57b400
-g_xLfmt(0) gives 5 bytes: "1e+23"
-
-strtoIxL returns 1, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1e310
-
-strtoxL consumes 5 bytes and returns 33
-with bits = #44040000 de81e40a 34bcf50
-g_xLfmt(0) gives 6 bytes: "1e+310"
-
-strtoIxL returns 33, consuming 5 bytes.
-fI[0] = #44040000 de81e40a 34bcf4f
-fI[1] = #44040000 de81e40a 34bcf50
-fI[1] == strtoxL
-
-
-Input: 9.0259718793241475e-277
-
-strtoxL consumes 23 bytes and returns 33
-with bits = #3c690000 ffffffff fffffcf7
-g_xLfmt(0) gives 23 bytes: "9.0259718793241475e-277"
-
-strtoIxL returns 33, consuming 23 bytes.
-fI[0] = #3c690000 ffffffff fffffcf6
-fI[1] = #3c690000 ffffffff fffffcf7
-fI[1] == strtoxL
-
-
-Input: 9.025971879324147880346310405869e-277
-
-strtoxL consumes 37 bytes and returns 17
-with bits = #3c6a0000 80000000 0
-g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIxL returns 17, consuming 37 bytes.
-fI[0] = #3c6a0000 80000000 0
-fI[1] = #3c6a0000 80000000 1
-fI[0] == strtoxL
-
-
-Input: 9.025971879324147880346310405868e-277
-
-strtoxL consumes 37 bytes and returns 33
-with bits = #3c6a0000 80000000 0
-g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
-
-strtoIxL returns 33, consuming 37 bytes.
-fI[0] = #3c690000 ffffffff ffffffff
-fI[1] = #3c6a0000 80000000 0
-fI[1] == strtoxL
-
-
-Input: 2.2250738585072014e-308
-
-strtoxL consumes 23 bytes and returns 17
-with bits = #3c010000 80000000 46
-g_xLfmt(0) gives 23 bytes: "2.2250738585072014e-308"
-
-strtoIxL returns 17, consuming 23 bytes.
-fI[0] = #3c010000 80000000 46
-fI[1] = #3c010000 80000000 47
-fI[0] == strtoxL
-
-
-Input: 2.2250738585072013e-308
-
-strtoxL consumes 23 bytes and returns 17
-with bits = #3c000000 ffffffff fffffd4f
-g_xLfmt(0) gives 23 bytes: "2.2250738585072013e-308"
-
-strtoIxL returns 17, consuming 23 bytes.
-fI[0] = #3c000000 ffffffff fffffd4f
-fI[1] = #3c000000 ffffffff fffffd50
-fI[0] == strtoxL
-
-Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 99999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 99999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 a6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.3"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 a6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.3"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 b3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.4"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 b3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.4"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[1] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 cccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 cccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 d9999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 d9999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 e6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.8"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 e6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.8"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 f3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.9"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 f3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.9"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[1] == strtoxL
-
-Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.1"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.1"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 99999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.2"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 99999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.2"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 a6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.3"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 a6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.3"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 b3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.4"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 b3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.4"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[1] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 cccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.6"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 cccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.6"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 d9999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.7"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 d9999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.7"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 e6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.8"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 e6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.8"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 f3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.9"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 f3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.9"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[1] == strtoxL
-
-Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.1"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 99999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.2"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 99999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 a6666666 66666667
-g_xLfmt(0) gives 21 bytes: "1.3000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[1] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 a6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.3"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 b3333333 33333334
-g_xLfmt(0) gives 21 bytes: "1.4000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[1] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 b3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.4"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[1] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 cccccccc cccccccd
-g_xLfmt(0) gives 3 bytes: "1.6"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[1] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 cccccccc cccccccc
-g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[1] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 d9999999 9999999a
-g_xLfmt(0) gives 3 bytes: "1.7"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[1] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 d9999999 99999999
-g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[1] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 e6666666 66666667
-g_xLfmt(0) gives 21 bytes: "1.8000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[1] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 e6666666 66666666
-g_xLfmt(0) gives 4 bytes: "-1.8"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[1] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 33
-with bits = #3fff0000 f3333333 33333334
-g_xLfmt(0) gives 21 bytes: "1.9000000000000000001"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[1] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 25
-with bits = #bfff0000 f3333333 33333333
-g_xLfmt(0) gives 4 bytes: "-1.9"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[1] == strtoxL
-
-Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
-
-Input: 1.1
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 8ccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.0999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 8ccccccc cccccccc
-fI[1] = #3fff0000 8ccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.1
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 8ccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.1"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 8ccccccc cccccccd
-fI[1] = #bfff0000 8ccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.2
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 99999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.1999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 99999999 99999999
-fI[1] = #3fff0000 99999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.2
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 99999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.2"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 99999999 9999999a
-fI[1] = #bfff0000 99999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.3
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 a6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.3"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 a6666666 66666666
-fI[1] = #3fff0000 a6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.3
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 a6666666 66666667
-g_xLfmt(0) gives 22 bytes: "-1.3000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 a6666666 66666667
-fI[1] = #bfff0000 a6666666 66666666
-fI[0] == strtoxL
-
-
-Input: 1.4
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 b3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.4"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 b3333333 33333333
-fI[1] = #3fff0000 b3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.4
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 b3333333 33333334
-g_xLfmt(0) gives 22 bytes: "-1.4000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 b3333333 33333334
-fI[1] = #bfff0000 b3333333 33333333
-fI[0] == strtoxL
-
-
-Input: 1.5
-
-strtoxL consumes 3 bytes and returns 1
-with bits = #3fff0000 c0000000 0
-g_xLfmt(0) gives 3 bytes: "1.5"
-
-strtoIxL returns 1, consuming 3 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: -1.5
-
-strtoxL consumes 4 bytes and returns 9
-with bits = #bfff0000 c0000000 0
-g_xLfmt(0) gives 4 bytes: "-1.5"
-
-strtoIxL returns 9, consuming 4 bytes.
-fI[0] == fI[1] == strtoxL
-
-
-Input: 1.6
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 cccccccc cccccccc
-g_xLfmt(0) gives 21 bytes: "1.5999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 cccccccc cccccccc
-fI[1] = #3fff0000 cccccccc cccccccd
-fI[0] == strtoxL
-
-
-Input: -1.6
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 cccccccc cccccccd
-g_xLfmt(0) gives 4 bytes: "-1.6"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 cccccccc cccccccd
-fI[1] = #bfff0000 cccccccc cccccccc
-fI[0] == strtoxL
-
-
-Input: 1.7
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 d9999999 99999999
-g_xLfmt(0) gives 21 bytes: "1.6999999999999999999"
-
-strtoIxL returns 33, consuming 3 bytes.
-fI[0] = #3fff0000 d9999999 99999999
-fI[1] = #3fff0000 d9999999 9999999a
-fI[0] == strtoxL
-
-
-Input: -1.7
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 d9999999 9999999a
-g_xLfmt(0) gives 4 bytes: "-1.7"
-
-strtoIxL returns 41, consuming 4 bytes.
-fI[0] = #bfff0000 d9999999 9999999a
-fI[1] = #bfff0000 d9999999 99999999
-fI[0] == strtoxL
-
-
-Input: 1.8
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 e6666666 66666666
-g_xLfmt(0) gives 3 bytes: "1.8"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 e6666666 66666666
-fI[1] = #3fff0000 e6666666 66666667
-fI[0] == strtoxL
-
-
-Input: -1.8
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 e6666666 66666667
-g_xLfmt(0) gives 22 bytes: "-1.8000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 e6666666 66666667
-fI[1] = #bfff0000 e6666666 66666666
-fI[0] == strtoxL
-
-
-Input: 1.9
-
-strtoxL consumes 3 bytes and returns 17
-with bits = #3fff0000 f3333333 33333333
-g_xLfmt(0) gives 3 bytes: "1.9"
-
-strtoIxL returns 17, consuming 3 bytes.
-fI[0] = #3fff0000 f3333333 33333333
-fI[1] = #3fff0000 f3333333 33333334
-fI[0] == strtoxL
-
-
-Input: -1.9
-
-strtoxL consumes 4 bytes and returns 41
-with bits = #bfff0000 f3333333 33333334
-g_xLfmt(0) gives 22 bytes: "-1.9000000000000000001"
-
-strtoIxL returns 25, consuming 4 bytes.
-fI[0] = #bfff0000 f3333333 33333334
-fI[1] = #bfff0000 f3333333 33333333
-fI[0] == strtoxL
-
diff --git a/float/gdtoa/test/xLtest.c b/float/gdtoa/test/xLtest.c
deleted file mode 100644 (file)
index c923e19..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for g_xLfmt, strtoIxL, strtopxL, and strtorxL.
- *
- * Inputs (on stdin):
- *             r rounding_mode
- *             n ndig
- *             number
- *             #hex0 hex1 hex2
- *
- *     rounding_mode values:
- *             0 = toward zero
- *             1 = nearest
- *             2 = toward +Infinity
- *             3 = toward -Infinity
- *
- * where number is a decimal floating-point number,
- * hex0 is a string of <= 8 Hex digits for the most significant
- * word of the number, hex1 is a similar string for the next
- * word, etc., and ndig is a parameters to g_xLfmt.
- */
-
-#include "gdtoa.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
- extern int getround ANSI((int,char*));
-
- static char ibuf[2048], obuf[2048];
-
-#define U (unsigned long)
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#endif
-#ifdef IEEE_8087
-#define _0 2
-#define _1 1
-#define _2 0
-#endif
-
- int
-main(Void)
-{
-       char *s, *se, *se1;
-       int dItry, i, ndig = 0, r = 1;
-       union { long double d; ULong bits[3]; } u, v[2];
-
-       while(s = fgets(ibuf, sizeof(ibuf), stdin)) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               dItry = 0;
-               switch(*s) {
-                 case 'r':
-                       r = getround(r, s);
-                       continue;
-                 case 'n':
-                       i = s[1];
-                       if (i <= ' ' || i >= '0' && i <= '9') {
-                               ndig = atoi(s+1);
-                               continue;
-                               }
-                       break; /* nan? */
-                 case '#':
-                       sscanf(s+1, "%lx %lx %lx", &u.bits[_0],
-                               &u.bits[_1], &u.bits[_2]);
-                       printf("\nInput: %s", ibuf);
-                       printf(" --> f = #%lx %lx %lx\n", u.bits[_0],
-                               u.bits[_1], u.bits[_2]);
-                       goto fmt_test;
-                       }
-               dItry = 1;
-               printf("\nInput: %s", ibuf);
-               i = strtorxL(ibuf, &se, r, u.bits);
-               if (r == 1 && (i != strtopxL(ibuf, &se1, v[0].bits) || se1 != se
-                || memcmp(u.bits, v[0].bits, 12)))
-                       printf("***strtoxL and strtorxL disagree!!\n:");
-               printf("\nstrtoxL consumes %d bytes and returns %d\n",
-                               (int)(se-ibuf), i);
-               printf("with bits = #%lx %lx %lx\n",
-                       U u.bits[_0], U u.bits[_1], U u.bits[_2]);
-               if (sizeof(long double) == 12)
-                       printf("printf(\"%%.21Lg\") gives %.21Lg\n", u.d);
- fmt_test:
-               se = g_xLfmt(obuf, u.bits, ndig, sizeof(obuf));
-               printf("g_xLfmt(%d) gives %d bytes: \"%s\"\n\n",
-                       ndig, (int)(se-obuf), se ? obuf : "<null>");
-               if (!dItry)
-                       continue;
-               printf("strtoIxL returns %d,",
-                       strtoIxL(ibuf, &se, v[0].bits, v[1].bits));
-               printf(" consuming %d bytes.\n", (int)(se-ibuf));
-               if (!memcmp(v[0].bits, v[1].bits, 12)) {
-                       if (!memcmp(u.bits, v[0].bits, 12))
-                               printf("fI[0] == fI[1] == strtoxL\n");
-                       else {
-                               printf("fI[0] == fI[1] = #%lx %lx %lx\n",
-                                       U v[0].bits[_0], U v[0].bits[_1],
-                                       U v[0].bits[_2]);
-                               if (sizeof(long double) == 12)
-                                   printf("= %.21Lg\n", v[0].d);
-                               }
-                       }
-               else {
-                       printf("fI[0] = #%lx %lx %lx\n",
-                                       U v[0].bits[_0], U v[0].bits[_1],
-                                       U v[0].bits[_2]);
-                       if (sizeof(long double) == 12)
-                               printf("= %.21Lg\n", v[0].d);
-                       printf("fI[1] = #%lx %lx %lx\n",
-                                       U v[1].bits[_0], U v[1].bits[_1],
-                                       U v[1].bits[_2]);
-                       if (sizeof(long double) == 12)
-                               printf("= %.21Lg\n", v[1].d);
-                       if (!memcmp(v[0].bits, u.bits, 12))
-                               printf("fI[0] == strtoxL\n");
-                       else if (!memcmp(v[1].bits, u.bits, 12))
-                               printf("fI[1] == strtoxL\n");
-                       else
-                               printf("**** Both differ from strtod ****\n");
-                       }
-               printf("\n");
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/test/xQtest.c b/float/gdtoa/test/xQtest.c
deleted file mode 100644 (file)
index 8dfe365..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2002 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-#include <stdio.h>
-
- int
-main(void)
-{
-       switch(sizeof(long double)) {
-         case 10:
-         case 12:
-               printf("cp x.ou1 x.out; cp xL.ou1 xL.out; cp Q.ou0 Q.out\n");
-               break;
-         case 16:
-               printf("cp x.ou0 x.out; cp xL.ou0 xL.out; cp Q.ou1 Q.out\n");
-               break;
-         default:
-               printf("cp x.ou0 x.out; cp xL.ou0 xL.out; cp Q.ou0 Q.out\n");
-         }
-       return 0;
-       }
diff --git a/float/gdtoa/test/xsum0.out b/float/gdtoa/test/xsum0.out
deleted file mode 100644 (file)
index ee59cda..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-README e6ebdc91        2429
-Qtest.c        140625e2        4778
-dItest.c       8689031 2401
-ddtest.c       ea24d330        4943
-dtest.c        900d971 4071
-dt.c   addb61c 6198
-ftest.c        f609ce43        3958
-getround.c     f471599 2041
-strtoIdSI.c    7bfb88b 49
-strtoIddSI.c   72e8852 50
-strtodISI.c    ed08b740        49
-strtodt.c      17aca428        3213
-strtopddSI.c   13e7138d        50
-strtorddSI.c   f7e4b1d5        50
-xLtest.c       faca328f        4646
-xQtest.c       efdea3a2        1549
-xtest.c        1f19b87 4858
-rtestnos       f94bcdf6        336
-testnos        e89999d6        485
-testnos1       7e16229 294
-testnos3       fa5c8aca        11998
-dI.out d522eef 4369
-dIsi.out       1dd6d02f        4350
-ddsi.out       1f94bbe2        10251
-dd.out e262456e        40923
-dtst.out       ee75f6b9        23308
-d.out  f271efc9        28131
-f.out  4b0bd51 21207
-x.ou0  1cfc5d22        25378
-xL.ou0 faa3a741        26363
-x.ou1  1a7e9dd4        34587
-xL.ou1 418057a 26476
-Q.ou0  e4592b85        28742
-Q.ou1  ea0b344d        39572
-makefile       ebbea1e1        4191
diff --git a/float/gdtoa/test/xtest.c b/float/gdtoa/test/xtest.c
deleted file mode 100644 (file)
index bd2b008..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-/* Test program for g_xfmt, strtoIx, strtopx, and strtorx.
- *
- * Inputs (on stdin):
- *             r rounding_mode
- *             n ndig
- *             number
- *             #hex0 hex1 hex2 hex3 hex4
- *
- *     rounding_mode values:
- *             0 = toward zero
- *             1 = nearest
- *             2 = toward +Infinity
- *             3 = toward -Infinity
- *
- * where number is a decimal floating-point number,
- * hex0 is a string of <= 4 Hex digits for the most significant
- * half-word of the number, hex1 is a similar string for the next
- * half-word, etc., and ndig is a parameters to g_xfmt.
- */
-
-#include "gdtoa.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
- extern int getround ANSI((int,char*));
-
- static char ibuf[2048], obuf[2048];
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_8087
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
- int
-main(Void)
-{
-       char *s, *se, *se1;
-       int i, dItry, ndig = 0, r = 1;
-       union { long double d; UShort bits[5]; } u, v[2];
-
-       while(s = fgets(ibuf, sizeof(ibuf), stdin)) {
-               while(*s <= ' ')
-                       if (!*s++)
-                               continue;
-               dItry = 0;
-               switch(*s) {
-                 case 'r':
-                       r = getround(r, s);
-                       continue;
-                 case 'n':
-                       i = s[1];
-                       if (i <= ' ' || i >= '0' && i <= '9') {
-                               ndig = atoi(s+1);
-                               continue;
-                               }
-                       break; /* nan? */
-                 case '#':
-                       sscanf(s+1, "%hx %hx %hx %hx hx", &u.bits[_0],
-                               &u.bits[_1], &u.bits[_2], &u.bits[_3],
-                               &u.bits[_4]);
-                       printf("\nInput: %s", ibuf);
-                       printf(" --> f = #%x %x %x %x %x\n", u.bits[_0],
-                               u.bits[_1], u.bits[_2], u.bits[_3], u.bits[4]);
-                       goto fmt_test;
-                       }
-               dItry = 1;
-               printf("\nInput: %s", ibuf);
-               i = strtorx(ibuf, &se, r, u.bits);
-               if (r == 1 && (i != strtopx(ibuf, &se1, v[0].bits) || se1 != se
-                || memcmp(u.bits, v[0].bits, 10)))
-                       printf("***strtox and strtorx disagree!!\n:");
-               printf("\nstrtox consumes %d bytes and returns %d\n",
-                               (int)(se-ibuf), i);
-               printf("with bits = #%x %x %x %x %x\n",
-                       u.bits[_0], u.bits[_1], u.bits[_2],
-                       u.bits[_3], u.bits[_4]);
-               if (sizeof(long double) == 12)
-                       printf("printf(\"%%.21Lg\") gives %.21Lg\n", u.d);
- fmt_test:
-               se = g_xfmt(obuf, u.bits, ndig, sizeof(obuf));
-               printf("g_xfmt(%d) gives %d bytes: \"%s\"\n\n",
-                       ndig, (int)(se-obuf), se ? obuf : "<null>");
-               if (!dItry)
-                       continue;
-               printf("strtoIx returns %d,",
-                       strtoIx(ibuf, &se, v[0].bits, v[1].bits));
-               printf(" consuming %d bytes.\n", (int)(se-ibuf));
-               if (!memcmp(v[0].bits, v[1].bits, 10)) {
-                       if (!memcmp(u.bits, v[0].bits, 10))
-                               printf("fI[0] == fI[1] == strtox\n");
-                       else {
-                               printf("fI[0] == fI[1] = #%x %x %x %x %x\n",
-                                       v[0].bits[_0], v[0].bits[_1],
-                                       v[0].bits[_2], v[0].bits[_3],
-                                       v[0].bits[_4]);
-                               if (sizeof(long double) == 12)
-                                   printf("= %.21Lg\n", v[0].d);
-                               }
-                       }
-               else {
-                       printf("fI[0] = #%x %x %x %x %x\n",
-                                       v[0].bits[_0], v[0].bits[_1],
-                                       v[0].bits[_2], v[0].bits[_3],
-                                       v[0].bits[_4]);
-                       if (sizeof(long double) == 12)
-                               printf("= %.21Lg\n", v[0].d);
-                       printf("fI[1] = #%x %x %x %x %x\n",
-                                       v[1].bits[_0], v[1].bits[_1],
-                                       v[1].bits[_2], v[0].bits[_3],
-                                       v[0].bits[_4]);
-                       if (sizeof(long double) == 12)
-                               printf("= %.21Lg\n", v[1].d);
-                       if (!memcmp(v[0].bits, u.bits, 10))
-                               printf("fI[0] == strtox\n");
-                       else if (!memcmp(v[1].bits, u.bits, 10))
-                               printf("fI[1] == strtox\n");
-                       else
-                               printf("**** Both differ from strtod ****\n");
-                       }
-               printf("\n");
-               }
-       return 0;
-       }
diff --git a/float/gdtoa/ulp.c b/float/gdtoa/ulp.c
deleted file mode 100644 (file)
index 536994a..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to
-       David M. Gay
-       Bell Laboratories, Room 2C-463
-       600 Mountain Avenue
-       Murray Hill, NJ 07974-0636
-       U.S.A.
-       dmg@bell-labs.com
- */
-
-#include "gdtoaimp.h"
-
- double
-ulp
-#ifdef KR_headers
-       (x) double x;
-#else
-       (double x)
-#endif
-{
-       Long L;
-       double a;
-
-       L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
-#ifndef Sudden_Underflow
-       if (L > 0) {
-#endif
-#ifdef IBM
-               L |= Exp_msk1 >> 4;
-#endif
-               word0(a) = L;
-               word1(a) = 0;
-#ifndef Sudden_Underflow
-               }
-       else {
-               L = -L >> Exp_shift;
-               if (L < Exp_shift) {
-                       word0(a) = 0x80000 >> L;
-                       word1(a) = 0;
-                       }
-               else {
-                       word0(a) = 0;
-                       L -= Exp_shift;
-                       word1(a) = L >= 31 ? 1 : 1 << 31 - L;
-                       }
-               }
-#endif
-       return a;
-       }
diff --git a/float/gdtoa/xsum0.out b/float/gdtoa/xsum0.out
deleted file mode 100644 (file)
index 85eabe4..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-README 10a65619        13093
-arithchk.c     e37b8a75        4070
-dmisc.c        e8d262b6        4712
-dtoa.c f3c132b3        16905
-g_Qfmt.c       e5847e9 2870
-g__fmt.c       f2d66617        2355
-g_ddfmt.c      fcf94527        3790
-g_dfmt.c       f30e55a9        2533
-g_ffmt.c       7c4ea96 2459
-g_xLfmt.c      36ee116 2716
-g_xfmt.c       c20a5e4 2795
-gdtoa.c        364a0d2 17017
-gdtoa.h        1eb440de        4810
-gdtoaimp.h     6a955ba 19106
-gethex.c       f56c1968        5041
-gmisc.c        e1a268ea        2114
-hd_init.c      cf9a94e 1827
-hexnan.c       f53be1da        2988
-makefile       e84d078f        2802
-misc.c ea539bdb        14168
-smisc.c        f659f036        3685
-strtoIQ.c      13ac9f44        1969
-strtoId.c      d05a7a6 1961
-strtoIdd.c     fa36260d        2135
-strtoIf.c      eb75ac99        1905
-strtoIg.c      ec59c2fa        3484
-strtoIx.c      8f8c9d  1990
-strtoIxL.c     1313ff7f        1961
-strtod.c       1390a957        20277
-strtodI.c      e58338e0        4062
-strtodg.c      1cba0060        19769
-strtof.c       1e7a787a        2202
-strtopQ.c      e232c542        2685
-strtopd.c      e865dc64        1701
-strtopdd.c     1c240126        4540
-strtopf.c      1c762782        2196
-strtopx.c      17c3fafb        2665
-strtopxL.c     ed474cdb        2505
-strtorQ.c      126cc92b        2898
-strtord.c      1fce44b9        2528
-strtordd.c     c32bca0 4979
-strtorf.c      fe6a2687        2430
-strtorx.c      18389f0c        2888
-strtorxL.c     f63fc249        2730
-sum.c  dc07b9b 2524
-ulp.c  f6db0b4d        1894
diff --git a/float/softfloat/processors/386-GCC.h b/float/softfloat/processors/386-GCC.h
deleted file mode 100644 (file)
index d7e1d76..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-\r
-/*----------------------------------------------------------------------------\r
-| One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined.\r
-*----------------------------------------------------------------------------*/\r
-#define LITTLEENDIAN\r
-\r
-/*----------------------------------------------------------------------------\r
-| The macro `BITS64' can be defined to indicate that 64-bit integer types are\r
-| supported by the compiler.\r
-*----------------------------------------------------------------------------*/\r
-#define BITS64\r
-\r
-/*----------------------------------------------------------------------------\r
-| Each of the following `typedef's defines the most convenient type that holds\r
-| integers of at least as many bits as specified.  For example, `uint8' should\r
-| be the most convenient type that can hold unsigned integers of as many as\r
-| 8 bits.  The `flag' type must be able to hold either a 0 or 1.  For most\r
-| implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed\r
-| to the same as `int'.\r
-*----------------------------------------------------------------------------*/\r
-typedef char flag;\r
-typedef unsigned char uint8;\r
-typedef signed char int8;\r
-typedef int uint16;\r
-typedef int int16;\r
-typedef unsigned int uint32;\r
-typedef signed int int32;\r
-#ifdef BITS64\r
-typedef unsigned long long int uint64;\r
-typedef signed long long int int64;\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Each of the following `typedef's defines a type that holds integers\r
-| of _exactly_ the number of bits specified.  For instance, for most\r
-| implementation of C, `bits16' and `sbits16' should be `typedef'ed to\r
-| `unsigned short int' and `signed short int' (or `short int'), respectively.\r
-*----------------------------------------------------------------------------*/\r
-typedef unsigned char bits8;\r
-typedef signed char sbits8;\r
-typedef unsigned short int bits16;\r
-typedef signed short int sbits16;\r
-typedef unsigned int bits32;\r
-typedef signed int sbits32;\r
-#ifdef BITS64\r
-typedef unsigned long long int bits64;\r
-typedef signed long long int sbits64;\r
-#endif\r
-\r
-#ifdef BITS64\r
-/*----------------------------------------------------------------------------\r
-| The `LIT64' macro takes as its argument a textual integer literal and\r
-| if necessary ``marks'' the literal as having a 64-bit integer type.\r
-| For example, the GNU C Compiler (`gcc') requires that 64-bit literals be\r
-| appended with the letters `LL' standing for `long long', which is `gcc's\r
-| name for the 64-bit integer type.  Some compilers may allow `LIT64' to be\r
-| defined as the identity macro:  `#define LIT64( a ) a'.\r
-*----------------------------------------------------------------------------*/\r
-#define LIT64( a ) a##LL\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| The macro `INLINE' can be used before functions that should be inlined.  If\r
-| a compiler does not support explicit inlining, this macro should be defined\r
-| to be `static'.\r
-*----------------------------------------------------------------------------*/\r
-#define INLINE extern inline\r
-\r
diff --git a/float/softfloat/processors/SPARC-GCC.h b/float/softfloat/processors/SPARC-GCC.h
deleted file mode 100644 (file)
index ab3d371..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-
-/*----------------------------------------------------------------------------
-| One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined.
-*----------------------------------------------------------------------------*/
-#define BIGENDIAN
-
-/*----------------------------------------------------------------------------
-| The macro `BITS64' can be defined to indicate that 64-bit integer types are
-| supported by the compiler.
-*----------------------------------------------------------------------------*/
-#define BITS64
-
-/*----------------------------------------------------------------------------
-| Each of the following `typedef's defines the most convenient type that holds
-| integers of at least as many bits as specified.  For example, `uint8' should
-| be the most convenient type that can hold unsigned integers of as many as
-| 8 bits.  The `flag' type must be able to hold either a 0 or 1.  For most
-| implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed
-| to the same as `int'.
-*----------------------------------------------------------------------------*/
-typedef int flag;
-typedef int uint8;
-typedef int int8;
-typedef int uint16;
-typedef int int16;
-typedef unsigned int uint32;
-typedef signed int int32;
-#ifdef BITS64
-typedef unsigned long long int uint64;
-typedef signed long long int int64;
-#endif
-
-/*----------------------------------------------------------------------------
-| Each of the following `typedef's defines a type that holds integers
-| of _exactly_ the number of bits specified.  For instance, for most
-| implementation of C, `bits16' and `sbits16' should be `typedef'ed to
-| `unsigned short int' and `signed short int' (or `short int'), respectively.
-*----------------------------------------------------------------------------*/
-typedef unsigned char bits8;
-typedef signed char sbits8;
-typedef unsigned short int bits16;
-typedef signed short int sbits16;
-typedef unsigned int bits32;
-typedef signed int sbits32;
-#ifdef BITS64
-typedef unsigned long long int bits64;
-typedef signed long long int sbits64;
-#endif
-
-#ifdef BITS64
-/*----------------------------------------------------------------------------
-| The `LIT64' macro takes as its argument a textual integer literal and
-| if necessary ``marks'' the literal as having a 64-bit integer type.
-| For example, the GNU C Compiler (`gcc') requires that 64-bit literals be
-| appended with the letters `LL' standing for `long long', which is `gcc's
-| name for the 64-bit integer type.  Some compilers may allow `LIT64' to be
-| defined as the identity macro:  `#define LIT64( a ) a'.
-*----------------------------------------------------------------------------*/
-#define LIT64( a ) a##LL
-#endif
-
-/*----------------------------------------------------------------------------
-| The macro `INLINE' can be used before functions that should be inlined.  If
-| a compiler does not support explicit inlining, this macro should be defined
-| to be `static'.
-*----------------------------------------------------------------------------*/
-#define INLINE extern inline
-
diff --git a/float/softfloat/softfloat/README.txt b/float/softfloat/softfloat/README.txt
deleted file mode 100644 (file)
index 6fa43b4..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-\r
-Package Overview for SoftFloat Release 2b\r
-\r
-John R. Hauser\r
-2002 May 27\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Overview\r
-\r
-SoftFloat is a software implementation of floating-point that conforms to\r
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic.  SoftFloat is\r
-distributed in the form of C source code.  Compiling the SoftFloat sources\r
-generates two things:\r
-\r
--- A SoftFloat object file (typically `softfloat.o') containing the complete\r
-   set of IEC/IEEE floating-point routines.\r
-\r
--- A `timesoftfloat' program for evaluating the speed of the SoftFloat\r
-   routines.  (The SoftFloat module is linked into this program.)\r
-\r
-The SoftFloat package is documented in four text files:\r
-\r
-   SoftFloat.txt          Documentation for using the SoftFloat functions.\r
-   SoftFloat-source.txt   Documentation for compiling SoftFloat.\r
-   SoftFloat-history.txt  History of major changes to SoftFloat.\r
-   timesoftfloat.txt      Documentation for using `timesoftfloat'.\r
-\r
-Other files in the package comprise the source code for SoftFloat.\r
-\r
-Please be aware that some work is involved in porting this software to other\r
-targets.  It is not just a matter of getting `make' to complete without\r
-error messages.  I would have written the code that way if I could, but\r
-there are fundamental differences between systems that can't be hidden.\r
-You should not attempt to compile SoftFloat without first reading both\r
-`SoftFloat.txt' and `SoftFloat-source.txt'.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Legal Notice\r
-\r
-SoftFloat was written by me, John R. Hauser.  This work was made possible in\r
-part by the International Computer Science Institute, located at Suite 600,\r
-1947 Center Street, Berkeley, California 94704.  Funding was partially\r
-provided by the National Science Foundation under grant MIP-9311980.  The\r
-original version of this code was written as part of a project to build\r
-a fixed-point vector processor in collaboration with the University of\r
-California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort\r
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT\r
-TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO\r
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL\r
-LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO\r
-FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER\r
-SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE\r
-SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, provided\r
-that the minimal documentation requirements stated in the source code are\r
-satisfied.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Contact Information\r
-\r
-At the time of this writing, the most up-to-date information about\r
-SoftFloat and the latest release can be found at the Web page `http://\r
-www.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html'.\r
-\r
-\r
diff --git a/float/softfloat/softfloat/SoftFloat-history.txt b/float/softfloat/softfloat/SoftFloat-history.txt
deleted file mode 100644 (file)
index f58687d..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-\r
-History of Major Changes to SoftFloat, up to Release 2b\r
-\r
-John R. Hauser\r
-2002 May 27\r
-\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Release 2b (2002 May)\r
-\r
--- Made minor updates to the documentation, including improved wording of\r
-   the legal restrictions on using SoftFloat.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Release 2a (1998 December)\r
-\r
--- Added functions to convert between 64-bit integers (int64) and all\r
-   supported floating-point formats.\r
-\r
--- Fixed a bug in all 64-bit-version square root functions except\r
-   `float32_sqrt' that caused the result sometimes to be off by 1 unit in\r
-   the last place (1 ulp) from what it should be.  (Bug discovered by Paul\r
-   Donahue.)\r
-\r
--- Improved the makefiles.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Release 2 (1997 June)\r
-\r
--- Created the 64-bit (bits64) version, adding the floatx80 and float128\r
-   formats.\r
-\r
--- Changed the source directory structure, splitting the sources into a\r
-   `bits32' and a `bits64' version.  Renamed `environment.h' to `milieu.h'\r
-   to avoid confusion with environment variables.\r
-\r
--- Fixed a small error that caused `float64_round_to_int' often to round the\r
-   wrong way in nearest/even mode when the operand was between 2^20 and 2^21\r
-   and halfway between two integers.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Release 1a (1996 July)\r
-\r
--- Corrected a mistake that caused borderline underflow cases not to raise\r
-   the underflow flag when they should have.  (Problem reported by Doug\r
-   Priest.)\r
-\r
--- Added the `float_detect_tininess' variable to control whether tininess is\r
-   detected before or after rounding.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Release 1 (1996 July)\r
-\r
--- Original release.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-\r
diff --git a/float/softfloat/softfloat/SoftFloat-source.txt b/float/softfloat/softfloat/SoftFloat-source.txt
deleted file mode 100644 (file)
index 4099a55..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-\r
-SoftFloat Release 2b Source Documentation\r
-\r
-John R. Hauser\r
-2002 May 27\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Introduction\r
-\r
-SoftFloat is a software implementation of floating-point that conforms to\r
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic.  SoftFloat can\r
-support four floating-point formats:  single precision, double precision,\r
-extended double precision, and quadruple precision.  All operations required\r
-by the IEEE Standard are implemented, except for conversions to and from\r
-decimal.  SoftFloat is distributed in the form of C source code, so a\r
-C compiler is needed to compile the code.  Support for the extended double-\r
-precision and quadruple-precision formats is dependent on the C compiler\r
-implementing a 64-bit integer type.\r
-\r
-This document gives information needed for compiling and/or porting\r
-SoftFloat.\r
-\r
-The source code for SoftFloat is intended to be relatively machine-\r
-independent and should be compilable using most any ISO/ANSI C compiler.  At\r
-the time of this writing, SoftFloat has been successfully compiled with the\r
-GNU C Compiler (`gcc') for several platforms.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Limitations\r
-\r
-As supplied, SoftFloat requires an ISO/ANSI-style C compiler.  No attempt\r
-has been made to accomodate compilers that are not ISO-conformant.  Older\r
-``K&R-style'' compilers are not adequate for compiling SoftFloat.  All\r
-testing I have done so far has been with the GNU C Compiler.  Compilation\r
-with other compilers should be possible but has not been tested by me.\r
-\r
-The SoftFloat sources assume that source code file names can be longer than\r
-8 characters.  In order to compile under an MS-DOS-type system, many of the\r
-source files will need to be renamed, and the source and makefiles edited\r
-appropriately.  Once compiled, the SoftFloat binary does not depend on the\r
-existence of long file names.\r
-\r
-The underlying machine is assumed to be binary with a word size that is a\r
-power of 2.  Bytes are 8 bits.  Arithmetic on signed integers must modularly\r
-wrap around on overflows (as is already required for unsigned integers\r
-in C).\r
-\r
-Support for the extended double-precision and quadruple-precision formats\r
-depends on the C compiler implementing a 64-bit integer type.  If the\r
-largest integer type supported by the C compiler is 32 bits, SoftFloat is\r
-limited to the single- and double-precision formats.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Contents\r
-\r
-    Introduction\r
-    Limitations\r
-    Contents\r
-    Legal Notice\r
-    SoftFloat Source Directory Structure\r
-    SoftFloat Source Files\r
-        processors/*.h\r
-        softfloat/bits*/*/softfloat.h\r
-        softfloat/bits*/*/milieu.h\r
-        softfloat/bits*/*/softfloat-specialize\r
-        softfloat/bits*/softfloat-macros\r
-        softfloat/bits*/softfloat.c\r
-    Steps to Creating a `softfloat.o'\r
-    Making `softfloat.o' a Library\r
-    Testing SoftFloat\r
-    Timing SoftFloat\r
-    Compiler Options and Efficiency\r
-    Processor-Specific Optimization of `softfloat.c' Using `softfloat-macros'\r
-    Contact Information\r
-\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Legal Notice\r
-\r
-SoftFloat was written by John R. Hauser.  This work was made possible in\r
-part by the International Computer Science Institute, located at Suite 600,\r
-1947 Center Street, Berkeley, California 94704.  Funding was partially\r
-provided by the National Science Foundation under grant MIP-9311980.  The\r
-original version of this code was written as part of a project to build\r
-a fixed-point vector processor in collaboration with the University of\r
-California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort\r
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT\r
-TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO\r
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL\r
-LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO\r
-FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER\r
-SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE\r
-SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, provided\r
-that the minimal documentation requirements stated in the source code are\r
-satisfied.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-SoftFloat Source Directory Structure\r
-\r
-Because SoftFloat is targeted to multiple platforms, its source code\r
-is slightly scattered between target-specific and target-independent\r
-directories and files.  The directory structure is as follows:\r
-\r
-    processors\r
-    softfloat\r
-        bits64\r
-            templates\r
-            386-Win32-GCC\r
-            SPARC-Solaris-GCC\r
-        bits32\r
-            templates\r
-            386-Win32-GCC\r
-            SPARC-Solaris-GCC\r
-\r
-The two topmost directories and their contents are:\r
-\r
-    softfloat    - Most of the source code needed for SoftFloat.\r
-    processors   - Target-specific header files that are not specific to\r
-                       SoftFloat.\r
-\r
-The `softfloat' directory is further split into two parts:\r
-\r
-    bits64       - SoftFloat implementation using 64-bit integers.\r
-    bits32       - SoftFloat implementation using only 32-bit integers.\r
-\r
-Within these directories are subdirectories for each of the targeted\r
-platforms.  The SoftFloat source code is distributed with targets\r
-`386-Win32-GCC' and `SPARC-Solaris-GCC' (and perhaps others) already\r
-prepared for both the 32-bit and 64-bit implementations.  Source files that\r
-are not within these target-specific subdirectories are intended to be\r
-target-independent.\r
-\r
-The naming convention used for the target-specific directories is\r
-`<processor>-<executable-type>-<compiler>'.  The names of the supplied\r
-target directories should be interpreted as follows:\r
-\r
-  <processor>:\r
-    386          - Intel 386-compatible processor.\r
-    SPARC        - SPARC processor (as used by Sun computers).\r
-  <executable-type>:\r
-    Win32        - Microsoft Win32 executable.\r
-    Solaris      - Sun Solaris executable.\r
-  <compiler>:\r
-    GCC          - GNU C Compiler.\r
-\r
-You do not need to maintain this convention if you do not want to.\r
-\r
-Alongside the supplied target-specific directories is a `templates'\r
-directory containing a set of ``generic'' target-specific source files.  A\r
-new target directory can be created by copying the `templates' directory and\r
-editing the files inside.  (Complete instructions for porting SoftFloat to a\r
-new target are in the section _Steps to Creating a `softfloat.o'_.)  Note\r
-that the `templates' directory will not work as a target directory without\r
-some editing.  To avoid confusion, it would be wise to refrain from editing\r
-the files inside `templates' directly.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-SoftFloat Source Files\r
-\r
-The purpose of each source file is described below.  In the following,\r
-the `*' symbol is used in place of the name of a specific target, such as\r
-`386-Win32-GCC' or `SPARC-Solaris-GCC', or in place of some other text, as\r
-in `bits*' for either `bits32' or `bits64'.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-processors/*.h\r
-\r
-The target-specific `processors' header file defines integer types\r
-of various sizes, and also defines certain C preprocessor macros that\r
-characterize the target.  The two examples supplied are `386-GCC.h' and\r
-`SPARC-GCC.h'.  The naming convention used for processor header files is\r
-`<processor>-<compiler>.h'.\r
-\r
-If 64-bit integers are supported by the compiler, the macro name `BITS64'\r
-should be defined here along with the corresponding 64-bit integer\r
-types.  In addition, the function-like macro `LIT64' must be defined for\r
-constructing 64-bit integer literals (constants).  The `LIT64' macro is used\r
-consistently in the SoftFloat code to annotate 64-bit literals.\r
-\r
-If `BITS64' is not defined, only the 32-bit version of SoftFloat can be\r
-compiled.  If `BITS64' _is_ defined, either can be compiled.\r
-\r
-If an inlining attribute (such as an `inline' keyword) is provided by the\r
-compiler, the macro `INLINE' should be defined to the appropriate keyword.\r
-If not, `INLINE' can be set to the keyword `static'.  The `INLINE' macro\r
-appears in the SoftFloat source code before every function that should\r
-be inlined by the compiler.  SoftFloat depends on inlining to obtain\r
-good speed.  Even if inlining cannot be forced with a language keyword,\r
-the compiler may still be able to perform inlining on its own as an\r
-optimization.  If a command-line option is needed to convince the compiler\r
-to perform this optimization, this should be assured in the makefile.  (See\r
-the section _Compiler Options and Efficiency_ below.)\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-softfloat/bits*/*/softfloat.h\r
-\r
-The target-specific `softfloat.h' header file defines the SoftFloat\r
-interface as seen by clients.\r
-\r
-Unlike the actual function definitions in `softfloat.c', the declarations\r
-in `softfloat.h' do not use any of the types defined by the `processors'\r
-header file.  This is done so that clients will not have to include the\r
-`processors' header file in order to use SoftFloat.  Nevertheless, the\r
-target-specific declarations in `softfloat.h' must match what `softfloat.c'\r
-expects.  For example, if `int32' is defined as `int' in the `processors'\r
-header file, then in `softfloat.h' the output of `float32_to_int32' should\r
-be stated as `int', although in `softfloat.c' it is given in target-\r
-independent form as `int32'.\r
-\r
-For the `bits64' implementation of SoftFloat, the macro names `FLOATX80' and\r
-`FLOAT128' must be defined in order for the extended double-precision and\r
-quadruple-precision formats to be enabled in the code.  Conversely, either\r
-or both of the extended formats can be disabled by simply removing the\r
-`#define' of the respective macro.  When an extended format is not enabled,\r
-none of the functions that either input or output the format are defined,\r
-and no space is taken up in `softfloat.o' by such functions.  There is no\r
-provision for disabling the usual single- and double-precision formats.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-softfloat/bits*/*/milieu.h\r
-\r
-The target-specific `milieu.h' header file provides declarations that are\r
-needed to compile SoftFloat.  In addition, deviations from ISO/ANSI C by\r
-the compiler (such as names not properly declared in system header files)\r
-are corrected in this header if possible.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-softfloat/bits*/*/softfloat-specialize\r
-\r
-This target-specific C source fragment defines:\r
-\r
--- whether tininess for underflow is detected before or after rounding by\r
-       default;\r
--- what (if anything) special happens when exceptions are raised;\r
--- how signaling NaNs are distinguished from quiet NaNs;\r
--- the default generated quiet NaNs; and\r
--- how NaNs are propagated from function inputs to output.\r
-\r
-These details are not decided by the IEC/IEEE Standard.  This fragment is\r
-included verbatim within `softfloat.c' when SoftFloat is compiled.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-softfloat/bits*/softfloat-macros\r
-\r
-This target-independent C source fragment defines a number of arithmetic\r
-functions used as primitives within the `softfloat.c' source.  Most of\r
-the functions defined here are intended to be inlined for efficiency.\r
-This fragment is included verbatim within `softfloat.c' when SoftFloat is\r
-compiled.\r
-\r
-Target-specific variations on this file are possible.  See the section\r
-_Processor-Specific Optimization of `softfloat.c' Using `softfloat-macros'_\r
-below.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-softfloat/bits*/softfloat.c\r
-\r
-The target-independent `softfloat.c' source file contains the body of the\r
-SoftFloat implementation.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-\r
-The inclusion of the files above within each other (using `#include') can be\r
-shown graphically as follows:\r
-\r
-    softfloat/bits*/softfloat.c\r
-        softfloat/bits*/*/milieu.h\r
-            processors/*.h\r
-        softfloat/bits*/*/softfloat.h\r
-        softfloat/bits*/*/softfloat-specialize\r
-        softfloat/bits*/softfloat-macros\r
-\r
-Note in particular that `softfloat.c' does not include the `processors'\r
-header file directly.  Rather, `softfloat.c' includes the target-specific\r
-`milieu.h' header file, which in turn includes the appropriate processor\r
-header file.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Steps to Creating a `softfloat.o'\r
-\r
-Porting and/or compiling SoftFloat involves the following steps:\r
-\r
-1. If one does not already exist, create an appropriate `.h' file in the\r
-   `processors' directory.\r
-\r
-2. If `BITS64' is defined in the `processors' header file, choose whether\r
-   to compile the 32-bit or 64-bit implementation of SoftFloat.  If\r
-   `BITS64' is not defined, your only choice is the 32-bit implementation.\r
-   The remaining steps occur within either the `bits32' or `bits64'\r
-   subdirectories.\r
-\r
-3. If one does not already exist, create an appropriate target-specific\r
-   subdirectory by copying the given `templates' directory.\r
-\r
-4. In the target-specific subdirectory, edit the files `softfloat-specialize'\r
-   and `softfloat.h' to define the desired exception handling functions\r
-   and mode control values.  In the `softfloat.h' header file, ensure also\r
-   that all declarations give the proper target-specific type (such as\r
-   `int' or `long') corresponding to the target-independent type used in\r
-   `softfloat.c' (such as `int32').  None of the type names declared in the\r
-   `processors' header file should appear in `softfloat.h'.\r
-\r
-5. In the target-specific subdirectory, edit the files `milieu.h' and\r
-   `Makefile' to reflect the current environment.\r
-\r
-6. In the target-specific subdirectory, execute `make'.\r
-\r
-For the targets that are supplied, if the expected compiler is available\r
-(usually `gcc'), it should only be necessary to execute `make' in the\r
-target-specific subdirectory.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Making `softfloat.o' a Library\r
-\r
-SoftFloat is not made into a software library by the supplied makefile.\r
-If desired, `softfloat.o' can easily be put into its own library (in Unix,\r
-`softfloat.a') using the usual system tool (in Unix, `ar').\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Testing SoftFloat\r
-\r
-SoftFloat can be tested using the `testsoftfloat' program by the same\r
-author.  The `testsoftfloat' program is part of the TestFloat package\r
-available at the Web page `http://www.cs.berkeley.edu/~jhauser/arithmetic/\r
-TestFloat.html'.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Timing SoftFloat\r
-\r
-A program called `timesoftfloat' for timing the SoftFloat functions is\r
-included with the SoftFloat source code.  Compiling `timesoftfloat' should\r
-pose no difficulties once `softfloat.o' exists.  The supplied makefile\r
-will create a `timesoftfloat' executable by default after generating\r
-`softfloat.o'.  See `timesoftfloat.txt' for documentation about using\r
-`timesoftfloat'.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Compiler Options and Efficiency\r
-\r
-In order to get good speed with SoftFloat, it is important that the compiler\r
-inline the routines that have been marked `INLINE' in the code.  Even if\r
-inlining cannot be forced by an appropriate definition of the `INLINE'\r
-macro, the compiler may still be able to perform inlining on its own as\r
-an optimization.  In that case, the makefile should be edited to give the\r
-compiler whatever option is required to cause it to inline small functions.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Processor-Specific Optimization of `softfloat.c' Using `softfloat-macros'\r
-\r
-The `softfloat-macros' source fragment defines arithmetic functions used\r
-as primitives by `softfloat.c'.  This file has been written in a target-\r
-independent form.  For a given target, it may be possible to improve on\r
-these functions using target-specific and/or non-ISO-C features (such\r
-as `asm' statements).  For example, one of the ``macro'' functions takes\r
-two word-size integers and returns their full product in two words.\r
-This operation can be done directly in hardware on many processors; but\r
-because it is not available through standard C, the function defined in\r
-`softfloat-macros' uses four multiplications to achieve the same result.\r
-\r
-To address these shortcomings, a customized version of `softfloat-macros'\r
-can be created in any of the target-specific subdirectories.  A simple\r
-modification to the target's makefile should be sufficient to ensure that\r
-the custom version is used instead of the generic one.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Contact Information\r
-\r
-At the time of this writing, the most up-to-date information about\r
-SoftFloat and the latest release can be found at the Web page `http://\r
-www.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html'.\r
-\r
-\r
diff --git a/float/softfloat/softfloat/SoftFloat.txt b/float/softfloat/softfloat/SoftFloat.txt
deleted file mode 100644 (file)
index 59555a0..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-\r
-SoftFloat Release 2b General Documentation\r
-\r
-John R. Hauser\r
-2002 May 27\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Introduction\r
-\r
-SoftFloat is a software implementation of floating-point that conforms to\r
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic.  As many as four\r
-formats are supported:  single precision, double precision, extended double\r
-precision, and quadruple precision.  All operations required by the standard\r
-are implemented, except for conversions to and from decimal.\r
-\r
-This document gives information about the types defined and the routines\r
-implemented by SoftFloat.  It does not attempt to define or explain the\r
-IEC/IEEE Floating-Point Standard.  Details about the standard are available\r
-elsewhere.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Limitations\r
-\r
-SoftFloat is written in C and is designed to work with other C code.  The\r
-SoftFloat header files assume an ISO/ANSI-style C compiler.  No attempt\r
-has been made to accomodate compilers that are not ISO-conformant.  In\r
-particular, the distributed header files will not be acceptable to any\r
-compiler that does not recognize function prototypes.\r
-\r
-Support for the extended double-precision and quadruple-precision formats\r
-depends on a C compiler that implements 64-bit integer arithmetic.  If the\r
-largest integer format supported by the C compiler is 32 bits, SoftFloat\r
-is limited to only single and double precisions.  When that is the case,\r
-all references in this document to extended double precision, quadruple\r
-precision, and 64-bit integers should be ignored.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Contents\r
-\r
-    Introduction\r
-    Limitations\r
-    Contents\r
-    Legal Notice\r
-    Types and Functions\r
-    Rounding Modes\r
-    Extended Double-Precision Rounding Precision\r
-    Exceptions and Exception Flags\r
-    Function Details\r
-        Conversion Functions\r
-        Standard Arithmetic Functions\r
-        Remainder Functions\r
-        Round-to-Integer Functions\r
-        Comparison Functions\r
-        Signaling NaN Test Functions\r
-        Raise-Exception Function\r
-    Contact Information\r
-\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Legal Notice\r
-\r
-SoftFloat was written by John R. Hauser.  This work was made possible in\r
-part by the International Computer Science Institute, located at Suite 600,\r
-1947 Center Street, Berkeley, California 94704.  Funding was partially\r
-provided by the National Science Foundation under grant MIP-9311980.  The\r
-original version of this code was written as part of a project to build\r
-a fixed-point vector processor in collaboration with the University of\r
-California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort\r
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT\r
-TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO\r
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL\r
-LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO\r
-FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER\r
-SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE\r
-SOFTWARE.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Types and Functions\r
-\r
-When 64-bit integers are supported by the compiler, the `softfloat.h'\r
-header file defines four types:  `float32' (single precision), `float64'\r
-(double precision), `floatx80' (extended double precision), and `float128'\r
-(quadruple precision).  The `float32' and `float64' types are defined in\r
-terms of 32-bit and 64-bit integer types, respectively, while the `float128'\r
-type is defined as a structure of two 64-bit integers, taking into account\r
-the byte order of the particular machine being used.  The `floatx80' type\r
-is defined as a structure containing one 16-bit and one 64-bit integer, with\r
-the machine's byte order again determining the order within the structure.\r
-\r
-When 64-bit integers are _not_ supported by the compiler, the `softfloat.h'\r
-header file defines only two types:  `float32' and `float64'.  Because\r
-ISO/ANSI C guarantees at least one built-in integer type of 32 bits,\r
-the `float32' type is identified with an appropriate integer type.  The\r
-`float64' type is defined as a structure of two 32-bit integers, with the\r
-machine's byte order determining the order of the fields.\r
-\r
-In either case, the types in `softfloat.h' are defined such that if a system\r
-implements the usual C `float' and `double' types according to the IEC/IEEE\r
-Standard, then the `float32' and `float64' types should be indistinguishable\r
-in memory from the native `float' and `double' types.  (On the other hand,\r
-when `float32' or `float64' values are placed in processor registers by\r
-the compiler, the type of registers used may differ from those used for the\r
-native `float' and `double' types.)\r
-\r
-SoftFloat implements the following arithmetic operations:\r
-\r
--- Conversions among all the floating-point formats, and also between\r
-   integers (32-bit and 64-bit) and any of the floating-point formats.\r
-\r
--- The usual add, subtract, multiply, divide, and square root operations\r
-   for all floating-point formats.\r
-\r
--- For each format, the floating-point remainder operation defined by the\r
-   IEC/IEEE Standard.\r
-\r
--- For each floating-point format, a ``round to integer'' operation that\r
-   rounds to the nearest integer value in the same format.  (The floating-\r
-   point formats can hold integer values, of course.)\r
-\r
--- Comparisons between two values in the same floating-point format.\r
-\r
-The only functions required by the IEC/IEEE Standard that are not provided\r
-are conversions to and from decimal.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Rounding Modes\r
-\r
-All four rounding modes prescribed by the IEC/IEEE Standard are implemented\r
-for all operations that require rounding.  The rounding mode is selected\r
-by the global variable `float_rounding_mode'.  This variable may be set\r
-to one of the values `float_round_nearest_even', `float_round_to_zero',\r
-`float_round_down', or `float_round_up'.  The rounding mode is initialized\r
-to nearest/even.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Extended Double-Precision Rounding Precision\r
-\r
-For extended double precision (`floatx80') only, the rounding precision\r
-of the standard arithmetic operations is controlled by the global variable\r
-`floatx80_rounding_precision'.  The operations affected are:\r
-\r
-   floatx80_add   floatx80_sub   floatx80_mul   floatx80_div   floatx80_sqrt\r
-\r
-When `floatx80_rounding_precision' is set to its default value of 80, these\r
-operations are rounded (as usual) to the full precision of the extended\r
-double-precision format.  Setting `floatx80_rounding_precision' to 32\r
-or to 64 causes the operations listed to be rounded to reduced precision\r
-equivalent to single precision (`float32') or to double precision\r
-(`float64'), respectively.  When rounding to reduced precision, additional\r
-bits in the result significand beyond the rounding point are set to zero.\r
-The consequences of setting `floatx80_rounding_precision' to a value other\r
-than 32, 64, or 80 is not specified.  Operations other than the ones listed\r
-above are not affected by `floatx80_rounding_precision'.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Exceptions and Exception Flags\r
-\r
-All five exception flags required by the IEC/IEEE Standard are\r
-implemented.  Each flag is stored as a unique bit in the global variable\r
-`float_exception_flags'.  The positions of the exception flag bits within\r
-this variable are determined by the bit masks `float_flag_inexact',\r
-`float_flag_underflow', `float_flag_overflow', `float_flag_divbyzero', and\r
-`float_flag_invalid'.  The exception flags variable is initialized to all 0,\r
-meaning no exceptions.\r
-\r
-An individual exception flag can be cleared with the statement\r
-\r
-    float_exception_flags &= ~ float_flag_<exception>;\r
-\r
-where `<exception>' is the appropriate name.  To raise a floating-point\r
-exception, the SoftFloat function `float_raise' should be used (see below).\r
-\r
-In the terminology of the IEC/IEEE Standard, SoftFloat can detect tininess\r
-for underflow either before or after rounding.  The choice is made by\r
-the global variable `float_detect_tininess', which can be set to either\r
-`float_tininess_before_rounding' or `float_tininess_after_rounding'.\r
-Detecting tininess after rounding is better because it results in fewer\r
-spurious underflow signals.  The other option is provided for compatibility\r
-with some systems.  Like most systems, SoftFloat always detects loss of\r
-accuracy for underflow as an inexact result.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Function Details\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Conversion Functions\r
-\r
-All conversions among the floating-point formats are supported, as are all\r
-conversions between a floating-point format and 32-bit and 64-bit signed\r
-integers.  The complete set of conversion functions is:\r
-\r
-   int32_to_float32      int64_to_float32\r
-   int32_to_float64      int64_to_float32\r
-   int32_to_floatx80     int64_to_floatx80\r
-   int32_to_float128     int64_to_float128\r
-\r
-   float32_to_int32      float32_to_int64\r
-   float32_to_int32      float64_to_int64\r
-   floatx80_to_int32     floatx80_to_int64\r
-   float128_to_int32     float128_to_int64\r
-\r
-   float32_to_float64    float32_to_floatx80   float32_to_float128\r
-   float64_to_float32    float64_to_floatx80   float64_to_float128\r
-   floatx80_to_float32   floatx80_to_float64   floatx80_to_float128\r
-   float128_to_float32   float128_to_float64   float128_to_floatx80\r
-\r
-Each conversion function takes one operand of the appropriate type and\r
-returns one result.  Conversions from a smaller to a larger floating-point\r
-format are always exact and so require no rounding.  Conversions from 32-bit\r
-integers to double precision and larger formats are also exact, and likewise\r
-for conversions from 64-bit integers to extended double and quadruple\r
-precisions.\r
-\r
-Conversions from floating-point to integer raise the invalid exception if\r
-the source value cannot be rounded to a representable integer of the desired\r
-size (32 or 64 bits).  If the floating-point operand is a NaN, the largest\r
-positive integer is returned.  Otherwise, if the conversion overflows, the\r
-largest integer with the same sign as the operand is returned.\r
-\r
-On conversions to integer, if the floating-point operand is not already\r
-an integer value, the operand is rounded according to the current rounding\r
-mode as specified by `float_rounding_mode'.  Because C (and perhaps other\r
-languages) require that conversions to integers be rounded toward zero, the\r
-following functions are provided for improved speed and convenience:\r
-\r
-   float32_to_int32_round_to_zero    float32_to_int64_round_to_zero\r
-   float64_to_int32_round_to_zero    float64_to_int64_round_to_zero\r
-   floatx80_to_int32_round_to_zero   floatx80_to_int64_round_to_zero\r
-   float128_to_int32_round_to_zero   float128_to_int64_round_to_zero\r
-\r
-These variant functions ignore `float_rounding_mode' and always round toward\r
-zero.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Standard Arithmetic Functions\r
-\r
-The following standard arithmetic functions are provided:\r
-\r
-   float32_add    float32_sub    float32_mul    float32_div    float32_sqrt\r
-   float64_add    float64_sub    float64_mul    float64_div    float64_sqrt\r
-   floatx80_add   floatx80_sub   floatx80_mul   floatx80_div   floatx80_sqrt\r
-   float128_add   float128_sub   float128_mul   float128_div   float128_sqrt\r
-\r
-Each function takes two operands, except for `sqrt' which takes only one.\r
-The operands and result are all of the same type.\r
-\r
-Rounding of the extended double-precision (`floatx80') functions is affected\r
-by the `floatx80_rounding_precision' variable, as explained above in the\r
-section _Extended Double-Precision Rounding Precision_.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Remainder Functions\r
-\r
-For each format, SoftFloat implements the remainder function according to\r
-the IEC/IEEE Standard.  The remainder functions are:\r
-\r
-   float32_rem\r
-   float64_rem\r
-   floatx80_rem\r
-   float128_rem\r
-\r
-Each remainder function takes two operands.  The operands and result are all\r
-of the same type.  Given operands x and y, the remainder functions return\r
-the value x - n*y, where n is the integer closest to x/y.  If x/y is exactly\r
-halfway between two integers, n is the even integer closest to x/y.  The\r
-remainder functions are always exact and so require no rounding.\r
-\r
-Depending on the relative magnitudes of the operands, the remainder\r
-functions can take considerably longer to execute than the other SoftFloat\r
-functions.  This is inherent in the remainder operation itself and is not a\r
-flaw in the SoftFloat implementation.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Round-to-Integer Functions\r
-\r
-For each format, SoftFloat implements the round-to-integer function\r
-specified by the IEC/IEEE Standard.  The functions are:\r
-\r
-   float32_round_to_int\r
-   float64_round_to_int\r
-   floatx80_round_to_int\r
-   float128_round_to_int\r
-\r
-Each function takes a single floating-point operand and returns a result of\r
-the same type.  (Note that the result is not an integer type.)  The operand\r
-is rounded to an exact integer according to the current rounding mode, and\r
-the resulting integer value is returned in the same floating-point format.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Comparison Functions\r
-\r
-The following floating-point comparison functions are provided:\r
-\r
-   float32_eq    float32_le    float32_lt\r
-   float64_eq    float64_le    float64_lt\r
-   floatx80_eq   floatx80_le   floatx80_lt\r
-   float128_eq   float128_le   float128_lt\r
-\r
-Each function takes two operands of the same type and returns a 1 or 0\r
-representing either _true_ or _false_.  The abbreviation `eq' stands for\r
-``equal'' (=); `le' stands for ``less than or equal'' (<=); and `lt' stands\r
-for ``less than'' (<).\r
-\r
-The standard greater-than (>), greater-than-or-equal (>=), and not-equal\r
-(!=) functions are easily obtained using the functions provided.  The\r
-not-equal function is just the logical complement of the equal function.\r
-The greater-than-or-equal function is identical to the less-than-or-equal\r
-function with the operands reversed, and the greater-than function is\r
-identical to the less-than function with the operands reversed.\r
-\r
-The IEC/IEEE Standard specifies that the less-than-or-equal and less-than\r
-functions raise the invalid exception if either input is any kind of NaN.\r
-The equal functions, on the other hand, are defined not to raise the invalid\r
-exception on quiet NaNs.  For completeness, SoftFloat provides the following\r
-additional functions:\r
-\r
-   float32_eq_signaling    float32_le_quiet    float32_lt_quiet\r
-   float64_eq_signaling    float64_le_quiet    float64_lt_quiet\r
-   floatx80_eq_signaling   floatx80_le_quiet   floatx80_lt_quiet\r
-   float128_eq_signaling   float128_le_quiet   float128_lt_quiet\r
-\r
-The `signaling' equal functions are identical to the standard functions\r
-except that the invalid exception is raised for any NaN input.  Likewise,\r
-the `quiet' comparison functions are identical to their counterparts except\r
-that the invalid exception is not raised for quiet NaNs.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Signaling NaN Test Functions\r
-\r
-The following functions test whether a floating-point value is a signaling\r
-NaN:\r
-\r
-   float32_is_signaling_nan\r
-   float64_is_signaling_nan\r
-   floatx80_is_signaling_nan\r
-   float128_is_signaling_nan\r
-\r
-The functions take one operand and return 1 if the operand is a signaling\r
-NaN and 0 otherwise.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-Raise-Exception Function\r
-\r
-SoftFloat provides a function for raising floating-point exceptions:\r
-\r
-    float_raise\r
-\r
-The function takes a mask indicating the set of exceptions to raise.  No\r
-result is returned.  In addition to setting the specified exception flags,\r
-this function may cause a trap or abort appropriate for the current system.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Contact Information\r
-\r
-At the time of this writing, the most up-to-date information about\r
-SoftFloat and the latest release can be found at the Web page `http://\r
-www.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html'.\r
-\r
-\r
diff --git a/float/softfloat/softfloat/bits32/386-Win32-GCC/milieu.h b/float/softfloat/softfloat/bits32/386-Win32-GCC/milieu.h
deleted file mode 100644 (file)
index 2da74cd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Include common integer types and flags.\r
-*----------------------------------------------------------------------------*/\r
-#include "../../../processors/386-GCC.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Symbolic Boolean literals.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    FALSE = 0,\r
-    TRUE  = 1\r
-};\r
-\r
diff --git a/float/softfloat/softfloat/bits32/386-Win32-GCC/softfloat-specialize b/float/softfloat/softfloat/bits32/386-Win32-GCC/softfloat-specialize
deleted file mode 100644 (file)
index 7c360a0..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point\r
-Arithmetic Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Underflow tininess-detection mode, statically initialized to default value.\r
-| (The declaration in `softfloat.h' must match the `int8' type here.)\r
-*----------------------------------------------------------------------------*/\r
-int8 float_detect_tininess = float_tininess_after_rounding;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Raises the exceptions specified by `flags'.  Floating-point traps can be\r
-| defined here if desired.  It is currently not possible for such a trap\r
-| to substitute a result value.  If traps are not implemented, this routine\r
-| should be simply `float_exception_flags |= flags;'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-void float_raise( int8 flags )\r
-{\r
-\r
-    float_exception_flags |= flags;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Internal canonical NaN format.\r
-*----------------------------------------------------------------------------*/\r
-typedef struct {\r
-    flag sign;\r
-    bits32 high, low;\r
-} commonNaNT;\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated single-precision NaN.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    float32_default_nan = 0xFFC00000\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_nan( float32 a )\r
-{\r
-\r
-    return ( 0xFF000000 < (bits32) ( a<<1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_signaling_nan( float32 a )\r
-{\r
-\r
-    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float32ToCommonNaN( float32 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a>>31;\r
-    z.low = 0;\r
-    z.high = a<<9;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the single-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 commonNaNToFloat32( commonNaNT a )\r
-{\r
-\r
-    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>9 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two single-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 propagateFloat32NaN( float32 a, float32 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float32_is_nan( a );\r
-    aIsSignalingNaN = float32_is_signaling_nan( a );\r
-    bIsNaN = float32_is_nan( b );\r
-    bIsSignalingNaN = float32_is_signaling_nan( b );\r
-    a |= 0x00400000;\r
-    b |= 0x00400000;\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsSignalingNaN ) {\r
-        if ( bIsSignalingNaN ) goto returnLargerSignificand;\r
-        return bIsNaN ? b : a;\r
-    }\r
-    else if ( aIsNaN ) {\r
-        if ( bIsSignalingNaN | ! bIsNaN ) return a;\r
- returnLargerSignificand:\r
-        if ( (bits32) ( a<<1 ) < (bits32) ( b<<1 ) ) return b;\r
-        if ( (bits32) ( b<<1 ) < (bits32) ( a<<1 ) ) return a;\r
-        return ( a < b ) ? a : b;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated double-precision NaN.  The `high' and\r
-| `low' values hold the most- and least-significant bits, respectively.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    float64_default_nan_high = 0xFFF80000,\r
-    float64_default_nan_low  = 0x00000000\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_nan( float64 a )\r
-{\r
-\r
-    return\r
-           ( 0xFFE00000 <= (bits32) ( a.high<<1 ) )\r
-        && ( a.low || ( a.high & 0x000FFFFF ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_signaling_nan( float64 a )\r
-{\r
-\r
-    return\r
-           ( ( ( a.high>>19 ) & 0xFFF ) == 0xFFE )\r
-        && ( a.low || ( a.high & 0x0007FFFF ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float64ToCommonNaN( float64 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a.high>>31;\r
-    shortShift64Left( a.high, a.low, 12, &z.high, &z.low );\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the double-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 commonNaNToFloat64( commonNaNT a )\r
-{\r
-    float64 z;\r
-\r
-    shift64Right( a.high, a.low, 12, &z.high, &z.low );\r
-    z.high |= ( ( (bits32) a.sign )<<31 ) | 0x7FF80000;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two double-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 propagateFloat64NaN( float64 a, float64 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float64_is_nan( a );\r
-    aIsSignalingNaN = float64_is_signaling_nan( a );\r
-    bIsNaN = float64_is_nan( b );\r
-    bIsSignalingNaN = float64_is_signaling_nan( b );\r
-    a.high |= 0x00080000;\r
-    b.high |= 0x00080000;\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsSignalingNaN ) {\r
-        if ( bIsSignalingNaN ) goto returnLargerSignificand;\r
-        return bIsNaN ? b : a;\r
-    }\r
-    else if ( aIsNaN ) {\r
-        if ( bIsSignalingNaN | ! bIsNaN ) return a;\r
- returnLargerSignificand:\r
-        if ( lt64( a.high<<1, a.low, b.high<<1, b.low ) ) return b;\r
-        if ( lt64( b.high<<1, b.low, a.high<<1, a.low ) ) return a;\r
-        return ( a.high < b.high ) ? a : b;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/bits32/386-Win32-GCC/softfloat.h b/float/softfloat/softfloat/bits32/386-Win32-GCC/softfloat.h
deleted file mode 100644 (file)
index 89df732..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point types.\r
-*----------------------------------------------------------------------------*/\r
-typedef unsigned int float32;\r
-typedef struct {\r
-    unsigned int low, high;\r
-} float64;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point underflow tininess-detection mode.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char float_detect_tininess;\r
-enum {\r
-    float_tininess_after_rounding  = 0,\r
-    float_tininess_before_rounding = 1\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point rounding mode.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char float_rounding_mode;\r
-enum {\r
-    float_round_nearest_even = 0,\r
-    float_round_down         = 1,\r
-    float_round_up           = 2,\r
-    float_round_to_zero      = 3\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point exception flags.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char float_exception_flags;\r
-enum {\r
-    float_flag_invalid   =  1,\r
-    float_flag_divbyzero =  4,\r
-    float_flag_overflow  =  8,\r
-    float_flag_underflow = 16,\r
-    float_flag_inexact   = 32\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Routine to raise any or all of the software IEC/IEEE floating-point\r
-| exception flags.\r
-*----------------------------------------------------------------------------*/\r
-void float_raise( signed char );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE integer-to-floating-point conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-float32 int32_to_float32( int );\r
-float64 int32_to_float64( int );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-int float32_to_int32( float32 );\r
-int float32_to_int32_round_to_zero( float32 );\r
-float64 float32_to_float64( float32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float32 float32_round_to_int( float32 );\r
-float32 float32_add( float32, float32 );\r
-float32 float32_sub( float32, float32 );\r
-float32 float32_mul( float32, float32 );\r
-float32 float32_div( float32, float32 );\r
-float32 float32_rem( float32, float32 );\r
-float32 float32_sqrt( float32 );\r
-char float32_eq( float32, float32 );\r
-char float32_le( float32, float32 );\r
-char float32_lt( float32, float32 );\r
-char float32_eq_signaling( float32, float32 );\r
-char float32_le_quiet( float32, float32 );\r
-char float32_lt_quiet( float32, float32 );\r
-char float32_is_signaling_nan( float32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-int float64_to_int32( float64 );\r
-int float64_to_int32_round_to_zero( float64 );\r
-float32 float64_to_float32( float64 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float64 float64_round_to_int( float64 );\r
-float64 float64_add( float64, float64 );\r
-float64 float64_sub( float64, float64 );\r
-float64 float64_mul( float64, float64 );\r
-float64 float64_div( float64, float64 );\r
-float64 float64_rem( float64, float64 );\r
-float64 float64_sqrt( float64 );\r
-char float64_eq( float64, float64 );\r
-char float64_le( float64, float64 );\r
-char float64_lt( float64, float64 );\r
-char float64_eq_signaling( float64, float64 );\r
-char float64_le_quiet( float64, float64 );\r
-char float64_lt_quiet( float64, float64 );\r
-char float64_is_signaling_nan( float64 );\r
-\r
diff --git a/float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/milieu.h b/float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/milieu.h
deleted file mode 100644 (file)
index 9c75338..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic
-Package, Release 2b.
-
-Written by John R. Hauser.  This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704.  Funding was partially provided by the
-National Science Foundation under grant MIP-9311980.  The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
-
-=============================================================================*/
-
-/*----------------------------------------------------------------------------
-| Include common integer types and flags.
-*----------------------------------------------------------------------------*/
-#include "../../../processors/SPARC-GCC.h"
-
-/*----------------------------------------------------------------------------
-| Symbolic Boolean literals.
-*----------------------------------------------------------------------------*/
-enum {
-    FALSE = 0,
-    TRUE  = 1
-};
-
diff --git a/float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat-specialize b/float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat-specialize
deleted file mode 100644 (file)
index 946e700..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-
-/*============================================================================
-
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2b.
-
-Written by John R. Hauser.  This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704.  Funding was partially provided by the
-National Science Foundation under grant MIP-9311980.  The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
-
-=============================================================================*/
-
-/*----------------------------------------------------------------------------
-| Underflow tininess-detection mode, statically initialized to default value.
-| (The declaration in `softfloat.h' must match the `int8' type here.)
-*----------------------------------------------------------------------------*/
-int8 float_detect_tininess = float_tininess_before_rounding;
-
-/*----------------------------------------------------------------------------
-| Raises the exceptions specified by `flags'.  Floating-point traps can be
-| defined here if desired.  It is currently not possible for such a trap
-| to substitute a result value.  If traps are not implemented, this routine
-| should be simply `float_exception_flags |= flags;'.
-*----------------------------------------------------------------------------*/
-
-void float_raise( int8 flags )
-{
-
-    float_exception_flags |= flags;
-
-}
-
-/*----------------------------------------------------------------------------
-| Internal canonical NaN format.
-*----------------------------------------------------------------------------*/
-typedef struct {
-    flag sign;
-    bits32 high, low;
-} commonNaNT;
-
-/*----------------------------------------------------------------------------
-| The pattern for a default generated single-precision NaN.
-*----------------------------------------------------------------------------*/
-enum {
-    float32_default_nan = 0x7FFFFFFF
-};
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the single-precision floating-point value `a' is a NaN;
-| otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float32_is_nan( float32 a )
-{
-
-    return ( 0xFF000000 < (bits32) ( a<<1 ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the single-precision floating-point value `a' is a signaling
-| NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float32_is_signaling_nan( float32 a )
-{
-
-    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the single-precision floating-point NaN
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid
-| exception is raised.
-*----------------------------------------------------------------------------*/
-
-static commonNaNT float32ToCommonNaN( float32 a )
-{
-    commonNaNT z;
-
-    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
-    z.sign = a>>31;
-    z.low = 0;
-    z.high = a<<9;
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the canonical NaN `a' to the single-
-| precision floating-point format.
-*----------------------------------------------------------------------------*/
-
-static float32 commonNaNToFloat32( commonNaNT a )
-{
-
-    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>9 );
-
-}
-
-/*----------------------------------------------------------------------------
-| Takes two single-precision floating-point values `a' and `b', one of which
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a
-| signaling NaN, the invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static float32 propagateFloat32NaN( float32 a, float32 b )
-{
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
-    aIsNaN = float32_is_nan( a );
-    aIsSignalingNaN = float32_is_signaling_nan( a );
-    bIsNaN = float32_is_nan( b );
-    bIsSignalingNaN = float32_is_signaling_nan( b );
-    a |= 0x00400000;
-    b |= 0x00400000;
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
-    return bIsSignalingNaN ? b : aIsSignalingNaN ? a : bIsNaN ? b : a;
-
-}
-
-/*----------------------------------------------------------------------------
-| The pattern for a default generated double-precision NaN.  The `high' and
-| `low' values hold the most- and least-significant bits, respectively.
-*----------------------------------------------------------------------------*/
-enum {
-    float64_default_nan_high = 0x7FFFFFFF,
-    float64_default_nan_low  = 0xFFFFFFFF
-};
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the double-precision floating-point value `a' is a NaN;
-| otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float64_is_nan( float64 a )
-{
-
-    return
-           ( 0xFFE00000 <= (bits32) ( a.high<<1 ) )
-        && ( a.low || ( a.high & 0x000FFFFF ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the double-precision floating-point value `a' is a signaling
-| NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float64_is_signaling_nan( float64 a )
-{
-
-    return
-           ( ( ( a.high>>19 ) & 0xFFF ) == 0xFFE )
-        && ( a.low || ( a.high & 0x0007FFFF ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the double-precision floating-point NaN
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid
-| exception is raised.
-*----------------------------------------------------------------------------*/
-
-static commonNaNT float64ToCommonNaN( float64 a )
-{
-    commonNaNT z;
-
-    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
-    z.sign = a.high>>31;
-    shortShift64Left( a.high, a.low, 12, &z.high, &z.low );
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the canonical NaN `a' to the double-
-| precision floating-point format.
-*----------------------------------------------------------------------------*/
-
-static float64 commonNaNToFloat64( commonNaNT a )
-{
-    float64 z;
-
-    shift64Right( a.high, a.low, 12, &z.high, &z.low );
-    z.high |= ( ( (bits32) a.sign )<<31 ) | 0x7FF80000;
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Takes two double-precision floating-point values `a' and `b', one of which
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a
-| signaling NaN, the invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static float64 propagateFloat64NaN( float64 a, float64 b )
-{
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
-    aIsNaN = float64_is_nan( a );
-    aIsSignalingNaN = float64_is_signaling_nan( a );
-    bIsNaN = float64_is_nan( b );
-    bIsSignalingNaN = float64_is_signaling_nan( b );
-    a.high |= 0x00080000;
-    b.high |= 0x00080000;
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
-    return bIsSignalingNaN ? b : aIsSignalingNaN ? a : bIsNaN ? b : a;
-
-}
-
diff --git a/float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat.h b/float/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat.h
deleted file mode 100644 (file)
index d86d2ec..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-
-/*============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic
-Package, Release 2b.
-
-Written by John R. Hauser.  This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704.  Funding was partially provided by the
-National Science Foundation under grant MIP-9311980.  The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
-
-=============================================================================*/
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point types.
-*----------------------------------------------------------------------------*/
-typedef unsigned int float32;
-typedef struct {
-    unsigned int high, low;
-} float64;
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point underflow tininess-detection mode.
-*----------------------------------------------------------------------------*/
-extern int float_detect_tininess;
-enum {
-    float_tininess_after_rounding  = 0,
-    float_tininess_before_rounding = 1
-};
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point rounding mode.
-*----------------------------------------------------------------------------*/
-extern int float_rounding_mode;
-enum {
-    float_round_nearest_even = 0,
-    float_round_to_zero      = 1,
-    float_round_up           = 2,
-    float_round_down         = 3
-};
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point exception flags.
-*----------------------------------------------------------------------------*/
-extern int float_exception_flags;
-enum {
-    float_flag_inexact   =  1,
-    float_flag_divbyzero =  2,
-    float_flag_underflow =  4,
-    float_flag_overflow  =  8,
-    float_flag_invalid   = 16
-};
-
-/*----------------------------------------------------------------------------
-| Routine to raise any or all of the software IEC/IEEE floating-point
-| exception flags.
-*----------------------------------------------------------------------------*/
-void float_raise( int );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE integer-to-floating-point conversion routines.
-*----------------------------------------------------------------------------*/
-float32 int32_to_float32( int );
-float64 int32_to_float64( int );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE single-precision conversion routines.
-*----------------------------------------------------------------------------*/
-int float32_to_int32( float32 );
-int float32_to_int32_round_to_zero( float32 );
-float64 float32_to_float64( float32 );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE single-precision operations.
-*----------------------------------------------------------------------------*/
-float32 float32_round_to_int( float32 );
-float32 float32_add( float32, float32 );
-float32 float32_sub( float32, float32 );
-float32 float32_mul( float32, float32 );
-float32 float32_div( float32, float32 );
-float32 float32_rem( float32, float32 );
-float32 float32_sqrt( float32 );
-int float32_eq( float32, float32 );
-int float32_le( float32, float32 );
-int float32_lt( float32, float32 );
-int float32_eq_signaling( float32, float32 );
-int float32_le_quiet( float32, float32 );
-int float32_lt_quiet( float32, float32 );
-int float32_is_signaling_nan( float32 );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE double-precision conversion routines.
-*----------------------------------------------------------------------------*/
-int float64_to_int32( float64 );
-int float64_to_int32_round_to_zero( float64 );
-float32 float64_to_float32( float64 );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE double-precision operations.
-*----------------------------------------------------------------------------*/
-float64 float64_round_to_int( float64 );
-float64 float64_add( float64, float64 );
-float64 float64_sub( float64, float64 );
-float64 float64_mul( float64, float64 );
-float64 float64_div( float64, float64 );
-float64 float64_rem( float64, float64 );
-float64 float64_sqrt( float64 );
-int float64_eq( float64, float64 );
-int float64_le( float64, float64 );
-int float64_lt( float64, float64 );
-int float64_eq_signaling( float64, float64 );
-int float64_le_quiet( float64, float64 );
-int float64_lt_quiet( float64, float64 );
-int float64_is_signaling_nan( float64 );
-
diff --git a/float/softfloat/softfloat/bits32/softfloat-macros b/float/softfloat/softfloat/bits32/softfloat-macros
deleted file mode 100644 (file)
index b4f7448..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point\r
-Arithmetic Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts `a' right by the number of bits given in `count'.  If any nonzero\r
-| bits are shifted off, they are ``jammed'' into the least significant bit of\r
-| the result by setting the least significant bit to 1.  The value of `count'\r
-| can be arbitrarily large; in particular, if `count' is greater than 32, the\r
-| result will be either 0 or 1, depending on whether `a' is zero or nonzero.\r
-| The result is stored in the location pointed to by `zPtr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )\r
-{\r
-    bits32 z;\r
-\r
-    if ( count == 0 ) {\r
-        z = a;\r
-    }\r
-    else if ( count < 32 ) {\r
-        z = ( a>>count ) | ( ( a<<( ( - count ) & 31 ) ) != 0 );\r
-    }\r
-    else {\r
-        z = ( a != 0 );\r
-    }\r
-    *zPtr = z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 64-bit value formed by concatenating `a0' and `a1' right by the\r
-| number of bits given in `count'.  Any bits shifted off are lost.  The value\r
-| of `count' can be arbitrarily large; in particular, if `count' is greater\r
-| than 64, the result will be 0.  The result is broken into two 32-bit pieces\r
-| which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift64Right(\r
-     bits32 a0, bits32 a1, int16 count, bits32 *z0Ptr, bits32 *z1Ptr )\r
-{\r
-    bits32 z0, z1;\r
-    int8 negCount = ( - count ) & 31;\r
-\r
-    if ( count == 0 ) {\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else if ( count < 32 ) {\r
-        z1 = ( a0<<negCount ) | ( a1>>count );\r
-        z0 = a0>>count;\r
-    }\r
-    else {\r
-        z1 = ( count < 64 ) ? ( a0>>( count & 31 ) ) : 0;\r
-        z0 = 0;\r
-    }\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 64-bit value formed by concatenating `a0' and `a1' right by the\r
-| number of bits given in `count'.  If any nonzero bits are shifted off, they\r
-| are ``jammed'' into the least significant bit of the result by setting the\r
-| least significant bit to 1.  The value of `count' can be arbitrarily large;\r
-| in particular, if `count' is greater than 64, the result will be either 0\r
-| or 1, depending on whether the concatenation of `a0' and `a1' is zero or\r
-| nonzero.  The result is broken into two 32-bit pieces which are stored at\r
-| the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift64RightJamming(\r
-     bits32 a0, bits32 a1, int16 count, bits32 *z0Ptr, bits32 *z1Ptr )\r
-{\r
-    bits32 z0, z1;\r
-    int8 negCount = ( - count ) & 31;\r
-\r
-    if ( count == 0 ) {\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else if ( count < 32 ) {\r
-        z1 = ( a0<<negCount ) | ( a1>>count ) | ( ( a1<<negCount ) != 0 );\r
-        z0 = a0>>count;\r
-    }\r
-    else {\r
-        if ( count == 32 ) {\r
-            z1 = a0 | ( a1 != 0 );\r
-        }\r
-        else if ( count < 64 ) {\r
-            z1 = ( a0>>( count & 31 ) ) | ( ( ( a0<<negCount ) | a1 ) != 0 );\r
-        }\r
-        else {\r
-            z1 = ( ( a0 | a1 ) != 0 );\r
-        }\r
-        z0 = 0;\r
-    }\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 96-bit value formed by concatenating `a0', `a1', and `a2' right\r
-| by 32 _plus_ the number of bits given in `count'.  The shifted result is\r
-| at most 64 nonzero bits; these are broken into two 32-bit pieces which are\r
-| stored at the locations pointed to by `z0Ptr' and `z1Ptr'.  The bits shifted\r
-| off form a third 32-bit result as follows:  The _last_ bit shifted off is\r
-| the most-significant bit of the extra result, and the other 31 bits of the\r
-| extra result are all zero if and only if _all_but_the_last_ bits shifted off\r
-| were all zero.  This extra result is stored in the location pointed to by\r
-| `z2Ptr'.  The value of `count' can be arbitrarily large.\r
-|     (This routine makes more sense if `a0', `a1', and `a2' are considered\r
-| to form a fixed-point value with binary point between `a1' and `a2'.  This\r
-| fixed-point value is shifted right by the number of bits given in `count',\r
-| and the integer part of the result is returned at the locations pointed to\r
-| by `z0Ptr' and `z1Ptr'.  The fractional part of the result may be slightly\r
-| corrupted as described above, and is returned at the location pointed to by\r
-| `z2Ptr'.)\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift64ExtraRightJamming(\r
-     bits32 a0,\r
-     bits32 a1,\r
-     bits32 a2,\r
-     int16 count,\r
-     bits32 *z0Ptr,\r
-     bits32 *z1Ptr,\r
-     bits32 *z2Ptr\r
- )\r
-{\r
-    bits32 z0, z1, z2;\r
-    int8 negCount = ( - count ) & 31;\r
-\r
-    if ( count == 0 ) {\r
-        z2 = a2;\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else {\r
-        if ( count < 32 ) {\r
-            z2 = a1<<negCount;\r
-            z1 = ( a0<<negCount ) | ( a1>>count );\r
-            z0 = a0>>count;\r
-        }\r
-        else {\r
-            if ( count == 32 ) {\r
-                z2 = a1;\r
-                z1 = a0;\r
-            }\r
-            else {\r
-                a2 |= a1;\r
-                if ( count < 64 ) {\r
-                    z2 = a0<<negCount;\r
-                    z1 = a0>>( count & 31 );\r
-                }\r
-                else {\r
-                    z2 = ( count == 64 ) ? a0 : ( a0 != 0 );\r
-                    z1 = 0;\r
-                }\r
-            }\r
-            z0 = 0;\r
-        }\r
-        z2 |= ( a2 != 0 );\r
-    }\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 64-bit value formed by concatenating `a0' and `a1' left by the\r
-| number of bits given in `count'.  Any bits shifted off are lost.  The value\r
-| of `count' must be less than 32.  The result is broken into two 32-bit\r
-| pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shortShift64Left(\r
-     bits32 a0, bits32 a1, int16 count, bits32 *z0Ptr, bits32 *z1Ptr )\r
-{\r
-\r
-    *z1Ptr = a1<<count;\r
-    *z0Ptr =\r
-        ( count == 0 ) ? a0 : ( a0<<count ) | ( a1>>( ( - count ) & 31 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 96-bit value formed by concatenating `a0', `a1', and `a2' left\r
-| by the number of bits given in `count'.  Any bits shifted off are lost.\r
-| The value of `count' must be less than 32.  The result is broken into three\r
-| 32-bit pieces which are stored at the locations pointed to by `z0Ptr',\r
-| `z1Ptr', and `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shortShift96Left(\r
-     bits32 a0,\r
-     bits32 a1,\r
-     bits32 a2,\r
-     int16 count,\r
-     bits32 *z0Ptr,\r
-     bits32 *z1Ptr,\r
-     bits32 *z2Ptr\r
- )\r
-{\r
-    bits32 z0, z1, z2;\r
-    int8 negCount;\r
-\r
-    z2 = a2<<count;\r
-    z1 = a1<<count;\r
-    z0 = a0<<count;\r
-    if ( 0 < count ) {\r
-        negCount = ( ( - count ) & 31 );\r
-        z1 |= a2>>negCount;\r
-        z0 |= a1>>negCount;\r
-    }\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Adds the 64-bit value formed by concatenating `a0' and `a1' to the 64-bit\r
-| value formed by concatenating `b0' and `b1'.  Addition is modulo 2^64, so\r
-| any carry out is lost.  The result is broken into two 32-bit pieces which\r
-| are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- add64(\r
-     bits32 a0, bits32 a1, bits32 b0, bits32 b1, bits32 *z0Ptr, bits32 *z1Ptr )\r
-{\r
-    bits32 z1;\r
-\r
-    z1 = a1 + b1;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = a0 + b0 + ( z1 < a1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Adds the 96-bit value formed by concatenating `a0', `a1', and `a2' to the\r
-| 96-bit value formed by concatenating `b0', `b1', and `b2'.  Addition is\r
-| modulo 2^96, so any carry out is lost.  The result is broken into three\r
-| 32-bit pieces which are stored at the locations pointed to by `z0Ptr',\r
-| `z1Ptr', and `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- add96(\r
-     bits32 a0,\r
-     bits32 a1,\r
-     bits32 a2,\r
-     bits32 b0,\r
-     bits32 b1,\r
-     bits32 b2,\r
-     bits32 *z0Ptr,\r
-     bits32 *z1Ptr,\r
-     bits32 *z2Ptr\r
- )\r
-{\r
-    bits32 z0, z1, z2;\r
-    int8 carry0, carry1;\r
-\r
-    z2 = a2 + b2;\r
-    carry1 = ( z2 < a2 );\r
-    z1 = a1 + b1;\r
-    carry0 = ( z1 < a1 );\r
-    z0 = a0 + b0;\r
-    z1 += carry1;\r
-    z0 += ( z1 < carry1 );\r
-    z0 += carry0;\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Subtracts the 64-bit value formed by concatenating `b0' and `b1' from the\r
-| 64-bit value formed by concatenating `a0' and `a1'.  Subtraction is modulo\r
-| 2^64, so any borrow out (carry out) is lost.  The result is broken into two\r
-| 32-bit pieces which are stored at the locations pointed to by `z0Ptr' and\r
-| `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- sub64(\r
-     bits32 a0, bits32 a1, bits32 b0, bits32 b1, bits32 *z0Ptr, bits32 *z1Ptr )\r
-{\r
-\r
-    *z1Ptr = a1 - b1;\r
-    *z0Ptr = a0 - b0 - ( a1 < b1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Subtracts the 96-bit value formed by concatenating `b0', `b1', and `b2' from\r
-| the 96-bit value formed by concatenating `a0', `a1', and `a2'.  Subtraction\r
-| is modulo 2^96, so any borrow out (carry out) is lost.  The result is broken\r
-| into three 32-bit pieces which are stored at the locations pointed to by\r
-| `z0Ptr', `z1Ptr', and `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- sub96(\r
-     bits32 a0,\r
-     bits32 a1,\r
-     bits32 a2,\r
-     bits32 b0,\r
-     bits32 b1,\r
-     bits32 b2,\r
-     bits32 *z0Ptr,\r
-     bits32 *z1Ptr,\r
-     bits32 *z2Ptr\r
- )\r
-{\r
-    bits32 z0, z1, z2;\r
-    int8 borrow0, borrow1;\r
-\r
-    z2 = a2 - b2;\r
-    borrow1 = ( a2 < b2 );\r
-    z1 = a1 - b1;\r
-    borrow0 = ( a1 < b1 );\r
-    z0 = a0 - b0;\r
-    z0 -= ( z1 < borrow1 );\r
-    z1 -= borrow1;\r
-    z0 -= borrow0;\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Multiplies `a' by `b' to obtain a 64-bit product.  The product is broken\r
-| into two 32-bit pieces which are stored at the locations pointed to by\r
-| `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void mul32To64( bits32 a, bits32 b, bits32 *z0Ptr, bits32 *z1Ptr )\r
-{\r
-    bits16 aHigh, aLow, bHigh, bLow;\r
-    bits32 z0, zMiddleA, zMiddleB, z1;\r
-\r
-    aLow = a;\r
-    aHigh = a>>16;\r
-    bLow = b;\r
-    bHigh = b>>16;\r
-    z1 = ( (bits32) aLow ) * bLow;\r
-    zMiddleA = ( (bits32) aLow ) * bHigh;\r
-    zMiddleB = ( (bits32) aHigh ) * bLow;\r
-    z0 = ( (bits32) aHigh ) * bHigh;\r
-    zMiddleA += zMiddleB;\r
-    z0 += ( ( (bits32) ( zMiddleA < zMiddleB ) )<<16 ) + ( zMiddleA>>16 );\r
-    zMiddleA <<= 16;\r
-    z1 += zMiddleA;\r
-    z0 += ( z1 < zMiddleA );\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Multiplies the 64-bit value formed by concatenating `a0' and `a1' by `b'\r
-| to obtain a 96-bit product.  The product is broken into three 32-bit pieces\r
-| which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and\r
-| `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- mul64By32To96(\r
-     bits32 a0,\r
-     bits32 a1,\r
-     bits32 b,\r
-     bits32 *z0Ptr,\r
-     bits32 *z1Ptr,\r
-     bits32 *z2Ptr\r
- )\r
-{\r
-    bits32 z0, z1, z2, more1;\r
-\r
-    mul32To64( a1, b, &z1, &z2 );\r
-    mul32To64( a0, b, &z0, &more1 );\r
-    add64( z0, more1, 0, z1, &z0, &z1 );\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Multiplies the 64-bit value formed by concatenating `a0' and `a1' to the\r
-| 64-bit value formed by concatenating `b0' and `b1' to obtain a 128-bit\r
-| product.  The product is broken into four 32-bit pieces which are stored at\r
-| the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- mul64To128(\r
-     bits32 a0,\r
-     bits32 a1,\r
-     bits32 b0,\r
-     bits32 b1,\r
-     bits32 *z0Ptr,\r
-     bits32 *z1Ptr,\r
-     bits32 *z2Ptr,\r
-     bits32 *z3Ptr\r
- )\r
-{\r
-    bits32 z0, z1, z2, z3;\r
-    bits32 more1, more2;\r
-\r
-    mul32To64( a1, b1, &z2, &z3 );\r
-    mul32To64( a1, b0, &z1, &more2 );\r
-    add64( z1, more2, 0, z2, &z1, &z2 );\r
-    mul32To64( a0, b0, &z0, &more1 );\r
-    add64( z0, more1, 0, z1, &z0, &z1 );\r
-    mul32To64( a0, b1, &more1, &more2 );\r
-    add64( more1, more2, 0, z2, &more1, &z2 );\r
-    add64( z0, z1, 0, more1, &z0, &z1 );\r
-    *z3Ptr = z3;\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns an approximation to the 32-bit integer quotient obtained by dividing\r
-| `b' into the 64-bit value formed by concatenating `a0' and `a1'.  The\r
-| divisor `b' must be at least 2^31.  If q is the exact quotient truncated\r
-| toward zero, the approximation returned lies between q and q + 2 inclusive.\r
-| If the exact quotient q is larger than 32 bits, the maximum positive 32-bit\r
-| unsigned integer is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static bits32 estimateDiv64To32( bits32 a0, bits32 a1, bits32 b )\r
-{\r
-    bits32 b0, b1;\r
-    bits32 rem0, rem1, term0, term1;\r
-    bits32 z;\r
-\r
-    if ( b <= a0 ) return 0xFFFFFFFF;\r
-    b0 = b>>16;\r
-    z = ( b0<<16 <= a0 ) ? 0xFFFF0000 : ( a0 / b0 )<<16;\r
-    mul32To64( b, z, &term0, &term1 );\r
-    sub64( a0, a1, term0, term1, &rem0, &rem1 );\r
-    while ( ( (sbits32) rem0 ) < 0 ) {\r
-        z -= 0x10000;\r
-        b1 = b<<16;\r
-        add64( rem0, rem1, b0, b1, &rem0, &rem1 );\r
-    }\r
-    rem0 = ( rem0<<16 ) | ( rem1>>16 );\r
-    z |= ( b0<<16 <= rem0 ) ? 0xFFFF : rem0 / b0;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns an approximation to the square root of the 32-bit significand given\r
-| by `a'.  Considered as an integer, `a' must be at least 2^31.  If bit 0 of\r
-| `aExp' (the least significant bit) is 1, the integer returned approximates\r
-| 2^31*sqrt(`a'/2^31), where `a' is considered an integer.  If bit 0 of `aExp'\r
-| is 0, the integer returned approximates 2^31*sqrt(`a'/2^30).  In either\r
-| case, the approximation returned lies strictly within +/-2 of the exact\r
-| value.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static bits32 estimateSqrt32( int16 aExp, bits32 a )\r
-{\r
-    static const bits16 sqrtOddAdjustments[] = {\r
-        0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0,\r
-        0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67\r
-    };\r
-    static const bits16 sqrtEvenAdjustments[] = {\r
-        0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E,\r
-        0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002\r
-    };\r
-    int8 index;\r
-    bits32 z;\r
-\r
-    index = ( a>>27 ) & 15;\r
-    if ( aExp & 1 ) {\r
-        z = 0x4000 + ( a>>17 ) - sqrtOddAdjustments[ index ];\r
-        z = ( ( a / z )<<14 ) + ( z<<15 );\r
-        a >>= 1;\r
-    }\r
-    else {\r
-        z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ index ];\r
-        z = a / z + z;\r
-        z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );\r
-        if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );\r
-    }\r
-    return ( ( estimateDiv64To32( a, 0, z ) )>>1 ) + ( z>>1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the number of leading 0 bits before the most-significant 1 bit of\r
-| `a'.  If `a' is zero, 32 is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static int8 countLeadingZeros32( bits32 a )\r
-{\r
-    static const int8 countLeadingZerosHigh[] = {\r
-        8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,\r
-        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\r
-        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\r
-    };\r
-    int8 shiftCount;\r
-\r
-    shiftCount = 0;\r
-    if ( a < 0x10000 ) {\r
-        shiftCount += 16;\r
-        a <<= 16;\r
-    }\r
-    if ( a < 0x1000000 ) {\r
-        shiftCount += 8;\r
-        a <<= 8;\r
-    }\r
-    shiftCount += countLeadingZerosHigh[ a>>24 ];\r
-    return shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is\r
-| equal to the 64-bit value formed by concatenating `b0' and `b1'.  Otherwise,\r
-| returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag eq64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )\r
-{\r
-\r
-    return ( a0 == b0 ) && ( a1 == b1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is less\r
-| than or equal to the 64-bit value formed by concatenating `b0' and `b1'.\r
-| Otherwise, returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag le64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )\r
-{\r
-\r
-    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is less\r
-| than the 64-bit value formed by concatenating `b0' and `b1'.  Otherwise,\r
-| returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag lt64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )\r
-{\r
-\r
-    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is not\r
-| equal to the 64-bit value formed by concatenating `b0' and `b1'.  Otherwise,\r
-| returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag ne64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )\r
-{\r
-\r
-    return ( a0 != b0 ) || ( a1 != b1 );\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/bits32/softfloat.c b/float/softfloat/softfloat/bits32/softfloat.c
deleted file mode 100644 (file)
index e715ac6..0000000
+++ /dev/null
@@ -1,2270 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-#include "milieu.h"\r
-#include "softfloat.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Floating-point rounding mode and exception flags.\r
-*----------------------------------------------------------------------------*/\r
-int8 float_rounding_mode = float_round_nearest_even;\r
-int8 float_exception_flags = 0;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Primitive arithmetic functions, including multi-word arithmetic, and\r
-| division and square root approximations.  (Can be specialized to target if\r
-| desired.)\r
-*----------------------------------------------------------------------------*/\r
-#include "softfloat-macros"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Functions and definitions to determine:  (1) whether tininess for underflow\r
-| is detected before or after rounding by default, (2) what (if anything)\r
-| happens when exceptions are raised, (3) how signaling NaNs are distinguished\r
-| from quiet NaNs, (4) the default generated quiet NaNs, and (4) how NaNs\r
-| are propagated from function inputs to output.  These details are target-\r
-| specific.\r
-*----------------------------------------------------------------------------*/\r
-#include "softfloat-specialize"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the fraction bits of the single-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits32 extractFloat32Frac( float32 a )\r
-{\r
-\r
-    return a & 0x007FFFFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the exponent bits of the single-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE int16 extractFloat32Exp( float32 a )\r
-{\r
-\r
-    return ( a>>23 ) & 0xFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the sign bit of the single-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag extractFloat32Sign( float32 a )\r
-{\r
-\r
-    return a>>31;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Normalizes the subnormal single-precision floating-point value represented\r
-| by the denormalized significand `aSig'.  The normalized exponent and\r
-| significand are stored at the locations pointed to by `zExpPtr' and\r
-| `zSigPtr', respectively.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static void\r
- normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros32( aSig ) - 8;\r
-    *zSigPtr = aSig<<shiftCount;\r
-    *zExpPtr = 1 - shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a\r
-| single-precision floating-point value, returning the result.  After being\r
-| shifted into the proper positions, the three fields are simply added\r
-| together to form the result.  This means that any integer portion of `zSig'\r
-| will be added into the exponent.  Since a properly normalized significand\r
-| will have an integer portion equal to 1, the `zExp' input should be 1 less\r
-| than the desired result exponent whenever `zSig' is a complete, normalized\r
-| significand.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )\r
-{\r
-\r
-    return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand `zSig', and returns the proper single-precision floating-\r
-| point value corresponding to the abstract input.  Ordinarily, the abstract\r
-| value is simply rounded and packed into the single-precision format, with\r
-| the inexact exception raised if the abstract input cannot be represented\r
-| exactly.  However, if the abstract value is too large, the overflow and\r
-| inexact exceptions are raised and an infinity or maximal finite value is\r
-| returned.  If the abstract value is too small, the input value is rounded to\r
-| a subnormal number, and the underflow and inexact exceptions are raised if\r
-| the abstract input cannot be represented exactly as a subnormal single-\r
-| precision floating-point number.\r
-|     The input significand `zSig' has its binary point between bits 30\r
-| and 29, which is 7 bits to the left of the usual location.  This shifted\r
-| significand must be normalized or smaller.  If `zSig' is not normalized,\r
-| `zExp' must be 0; in that case, the result returned is a subnormal number,\r
-| and it must not require rounding.  In the usual case that `zSig' is\r
-| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.\r
-| The handling of underflow and overflow follows the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven;\r
-    int8 roundIncrement, roundBits;\r
-    flag isTiny;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = roundingMode == float_round_nearest_even;\r
-    roundIncrement = 0x40;\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            roundIncrement = 0;\r
-        }\r
-        else {\r
-            roundIncrement = 0x7F;\r
-            if ( zSign ) {\r
-                if ( roundingMode == float_round_up ) roundIncrement = 0;\r
-            }\r
-            else {\r
-                if ( roundingMode == float_round_down ) roundIncrement = 0;\r
-            }\r
-        }\r
-    }\r
-    roundBits = zSig & 0x7F;\r
-    if ( 0xFD <= (bits16) zExp ) {\r
-        if (    ( 0xFD < zExp )\r
-             || (    ( zExp == 0xFD )\r
-                  && ( (sbits32) ( zSig + roundIncrement ) < 0 ) )\r
-           ) {\r
-            float_raise( float_flag_overflow | float_flag_inexact );\r
-            return packFloat32( zSign, 0xFF, 0 ) - ( roundIncrement == 0 );\r
-        }\r
-        if ( zExp < 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < -1 )\r
-                || ( zSig + roundIncrement < 0x80000000 );\r
-            shift32RightJamming( zSig, - zExp, &zSig );\r
-            zExp = 0;\r
-            roundBits = zSig & 0x7F;\r
-            if ( isTiny && roundBits ) float_raise( float_flag_underflow );\r
-        }\r
-    }\r
-    if ( roundBits ) float_exception_flags |= float_flag_inexact;\r
-    zSig = ( zSig + roundIncrement )>>7;\r
-    zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );\r
-    if ( zSig == 0 ) zExp = 0;\r
-    return packFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand `zSig', and returns the proper single-precision floating-\r
-| point value corresponding to the abstract input.  This routine is just like\r
-| `roundAndPackFloat32' except that `zSig' does not have to be normalized.\r
-| Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''\r
-| floating-point exponent.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32\r
- normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros32( zSig ) - 1;\r
-    return roundAndPackFloat32( zSign, zExp - shiftCount, zSig<<shiftCount );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the least-significant 32 fraction bits of the double-precision\r
-| floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits32 extractFloat64Frac1( float64 a )\r
-{\r
-\r
-    return a.low;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the most-significant 20 fraction bits of the double-precision\r
-| floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits32 extractFloat64Frac0( float64 a )\r
-{\r
-\r
-    return a.high & 0x000FFFFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the exponent bits of the double-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE int16 extractFloat64Exp( float64 a )\r
-{\r
-\r
-    return ( a.high>>20 ) & 0x7FF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the sign bit of the double-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag extractFloat64Sign( float64 a )\r
-{\r
-\r
-    return a.high>>31;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Normalizes the subnormal double-precision floating-point value represented\r
-| by the denormalized significand formed by the concatenation of `aSig0' and\r
-| `aSig1'.  The normalized exponent is stored at the location pointed to by\r
-| `zExpPtr'.  The most significant 21 bits of the normalized significand are\r
-| stored at the location pointed to by `zSig0Ptr', and the least significant\r
-| 32 bits of the normalized significand are stored at the location pointed to\r
-| by `zSig1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static void\r
- normalizeFloat64Subnormal(\r
-     bits32 aSig0,\r
-     bits32 aSig1,\r
-     int16 *zExpPtr,\r
-     bits32 *zSig0Ptr,\r
-     bits32 *zSig1Ptr\r
- )\r
-{\r
-    int8 shiftCount;\r
-\r
-    if ( aSig0 == 0 ) {\r
-        shiftCount = countLeadingZeros32( aSig1 ) - 11;\r
-        if ( shiftCount < 0 ) {\r
-            *zSig0Ptr = aSig1>>( - shiftCount );\r
-            *zSig1Ptr = aSig1<<( shiftCount & 31 );\r
-        }\r
-        else {\r
-            *zSig0Ptr = aSig1<<shiftCount;\r
-            *zSig1Ptr = 0;\r
-        }\r
-        *zExpPtr = - shiftCount - 31;\r
-    }\r
-    else {\r
-        shiftCount = countLeadingZeros32( aSig0 ) - 11;\r
-        shortShift64Left( aSig0, aSig1, shiftCount, zSig0Ptr, zSig1Ptr );\r
-        *zExpPtr = 1 - shiftCount;\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Packs the sign `zSign', the exponent `zExp', and the significand formed by\r
-| the concatenation of `zSig0' and `zSig1' into a double-precision floating-\r
-| point value, returning the result.  After being shifted into the proper\r
-| positions, the three fields `zSign', `zExp', and `zSig0' are simply added\r
-| together to form the most significant 32 bits of the result.  This means\r
-| that any integer portion of `zSig0' will be added into the exponent.  Since\r
-| a properly normalized significand will have an integer portion equal to 1,\r
-| the `zExp' input should be 1 less than the desired result exponent whenever\r
-| `zSig0' and `zSig1' concatenated form a complete, normalized significand.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE float64\r
- packFloat64( flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1 )\r
-{\r
-    float64 z;\r
-\r
-    z.low = zSig1;\r
-    z.high = ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<20 ) + zSig0;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and extended significand formed by the concatenation of `zSig0', `zSig1',\r
-| and `zSig2', and returns the proper double-precision floating-point value\r
-| corresponding to the abstract input.  Ordinarily, the abstract value is\r
-| simply rounded and packed into the double-precision format, with the inexact\r
-| exception raised if the abstract input cannot be represented exactly.\r
-| However, if the abstract value is too large, the overflow and inexact\r
-| exceptions are raised and an infinity or maximal finite value is returned.\r
-| If the abstract value is too small, the input value is rounded to a\r
-| subnormal number, and the underflow and inexact exceptions are raised if the\r
-| abstract input cannot be represented exactly as a subnormal double-precision\r
-| floating-point number.\r
-|     The input significand must be normalized or smaller.  If the input\r
-| significand is not normalized, `zExp' must be 0; in that case, the result\r
-| returned is a subnormal number, and it must not require rounding.  In the\r
-| usual case that the input significand is normalized, `zExp' must be 1 less\r
-| than the ``true'' floating-point exponent.  The handling of underflow and\r
-| overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64\r
- roundAndPackFloat64(\r
-     flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1, bits32 zSig2 )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven, increment, isTiny;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    increment = ( (sbits32) zSig2 < 0 );\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            increment = 0;\r
-        }\r
-        else {\r
-            if ( zSign ) {\r
-                increment = ( roundingMode == float_round_down ) && zSig2;\r
-            }\r
-            else {\r
-                increment = ( roundingMode == float_round_up ) && zSig2;\r
-            }\r
-        }\r
-    }\r
-    if ( 0x7FD <= (bits16) zExp ) {\r
-        if (    ( 0x7FD < zExp )\r
-             || (    ( zExp == 0x7FD )\r
-                  && eq64( 0x001FFFFF, 0xFFFFFFFF, zSig0, zSig1 )\r
-                  && increment\r
-                )\r
-           ) {\r
-            float_raise( float_flag_overflow | float_flag_inexact );\r
-            if (    ( roundingMode == float_round_to_zero )\r
-                 || ( zSign && ( roundingMode == float_round_up ) )\r
-                 || ( ! zSign && ( roundingMode == float_round_down ) )\r
-               ) {\r
-                return packFloat64( zSign, 0x7FE, 0x000FFFFF, 0xFFFFFFFF );\r
-            }\r
-            return packFloat64( zSign, 0x7FF, 0, 0 );\r
-        }\r
-        if ( zExp < 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < -1 )\r
-                || ! increment\r
-                || lt64( zSig0, zSig1, 0x001FFFFF, 0xFFFFFFFF );\r
-            shift64ExtraRightJamming(\r
-                zSig0, zSig1, zSig2, - zExp, &zSig0, &zSig1, &zSig2 );\r
-            zExp = 0;\r
-            if ( isTiny && zSig2 ) float_raise( float_flag_underflow );\r
-            if ( roundNearestEven ) {\r
-                increment = ( (sbits32) zSig2 < 0 );\r
-            }\r
-            else {\r
-                if ( zSign ) {\r
-                    increment = ( roundingMode == float_round_down ) && zSig2;\r
-                }\r
-                else {\r
-                    increment = ( roundingMode == float_round_up ) && zSig2;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    if ( zSig2 ) float_exception_flags |= float_flag_inexact;\r
-    if ( increment ) {\r
-        add64( zSig0, zSig1, 0, 1, &zSig0, &zSig1 );\r
-        zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );\r
-    }\r
-    else {\r
-        if ( ( zSig0 | zSig1 ) == 0 ) zExp = 0;\r
-    }\r
-    return packFloat64( zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand formed by the concatenation of `zSig0' and `zSig1', and\r
-| returns the proper double-precision floating-point value corresponding\r
-| to the abstract input.  This routine is just like `roundAndPackFloat64'\r
-| except that the input significand has fewer bits and does not have to be\r
-| normalized.  In all cases, `zExp' must be 1 less than the ``true'' floating-\r
-| point exponent.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64\r
- normalizeRoundAndPackFloat64(\r
-     flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1 )\r
-{\r
-    int8 shiftCount;\r
-    bits32 zSig2;\r
-\r
-    if ( zSig0 == 0 ) {\r
-        zSig0 = zSig1;\r
-        zSig1 = 0;\r
-        zExp -= 32;\r
-    }\r
-    shiftCount = countLeadingZeros32( zSig0 ) - 11;\r
-    if ( 0 <= shiftCount ) {\r
-        zSig2 = 0;\r
-        shortShift64Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\r
-    }\r
-    else {\r
-        shift64ExtraRightJamming(\r
-            zSig0, zSig1, 0, - shiftCount, &zSig0, &zSig1, &zSig2 );\r
-    }\r
-    zExp -= shiftCount;\r
-    return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 32-bit two's complement integer `a' to\r
-| the single-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 int32_to_float32( int32 a )\r
-{\r
-    flag zSign;\r
-\r
-    if ( a == 0 ) return 0;\r
-    if ( a == (sbits32) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );\r
-    zSign = ( a < 0 );\r
-    return normalizeRoundAndPackFloat32( zSign, 0x9C, zSign ? - a : a );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 32-bit two's complement integer `a' to\r
-| the double-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 int32_to_float64( int32 a )\r
-{\r
-    flag zSign;\r
-    bits32 absA;\r
-    int8 shiftCount;\r
-    bits32 zSig0, zSig1;\r
-\r
-    if ( a == 0 ) return packFloat64( 0, 0, 0, 0 );\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros32( absA ) - 11;\r
-    if ( 0 <= shiftCount ) {\r
-        zSig0 = absA<<shiftCount;\r
-        zSig1 = 0;\r
-    }\r
-    else {\r
-        shift64Right( absA, 0, - shiftCount, &zSig0, &zSig1 );\r
-    }\r
-    return packFloat64( zSign, 0x412 - shiftCount, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float32_to_int32( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig, aSigExtra;\r
-    int32 z;\r
-    int8 roundingMode;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    shiftCount = aExp - 0x96;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( 0x9E <= aExp ) {\r
-            if ( a != 0xCF000000 ) {\r
-                float_raise( float_flag_invalid );\r
-                if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {\r
-                    return 0x7FFFFFFF;\r
-                }\r
-            }\r
-            return (sbits32) 0x80000000;\r
-        }\r
-        z = ( aSig | 0x00800000 )<<shiftCount;\r
-        if ( aSign ) z = - z;\r
-    }\r
-    else {\r
-        if ( aExp < 0x7E ) {\r
-            aSigExtra = aExp | aSig;\r
-            z = 0;\r
-        }\r
-        else {\r
-            aSig |= 0x00800000;\r
-            aSigExtra = aSig<<( shiftCount & 31 );\r
-            z = aSig>>( - shiftCount );\r
-        }\r
-        if ( aSigExtra ) float_exception_flags |= float_flag_inexact;\r
-        roundingMode = float_rounding_mode;\r
-        if ( roundingMode == float_round_nearest_even ) {\r
-            if ( (sbits32) aSigExtra < 0 ) {\r
-                ++z;\r
-                if ( (bits32) ( aSigExtra<<1 ) == 0 ) z &= ~1;\r
-            }\r
-            if ( aSign ) z = - z;\r
-        }\r
-        else {\r
-            aSigExtra = ( aSigExtra != 0 );\r
-            if ( aSign ) {\r
-                z += ( roundingMode == float_round_down ) & aSigExtra;\r
-                z = - z;\r
-            }\r
-            else {\r
-                z += ( roundingMode == float_round_up ) & aSigExtra;\r
-            }\r
-        }\r
-    }\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.\r
-| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\r
-| the conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float32_to_int32_round_to_zero( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig;\r
-    int32 z;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    shiftCount = aExp - 0x9E;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( a != 0xCF000000 ) {\r
-            float_raise( float_flag_invalid );\r
-            if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) return 0x7FFFFFFF;\r
-        }\r
-        return (sbits32) 0x80000000;\r
-    }\r
-    else if ( aExp <= 0x7E ) {\r
-        if ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    aSig = ( aSig | 0x00800000 )<<8;\r
-    z = aSig>>( - shiftCount );\r
-    if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    if ( aSign ) z = - z;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the double-precision floating-point format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float32_to_float64( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 aSig, zSig0, zSig1;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return commonNaNToFloat64( float32ToCommonNaN( a ) );\r
-        return packFloat64( aSign, 0x7FF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat64( aSign, 0, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-        --aExp;\r
-    }\r
-    shift64Right( aSig, 0, 3, &zSig0, &zSig1 );\r
-    return packFloat64( aSign, aExp + 0x380, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Rounds the single-precision floating-point value `a' to an integer,\r
-| and returns the result as a single-precision floating-point value.  The\r
-| operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_round_to_int( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 lastBitMask, roundBitsMask;\r
-    int8 roundingMode;\r
-    float32 z;\r
-\r
-    aExp = extractFloat32Exp( a );\r
-    if ( 0x96 <= aExp ) {\r
-        if ( ( aExp == 0xFF ) && extractFloat32Frac( a ) ) {\r
-            return propagateFloat32NaN( a, a );\r
-        }\r
-        return a;\r
-    }\r
-    if ( aExp <= 0x7E ) {\r
-        if ( (bits32) ( a<<1 ) == 0 ) return a;\r
-        float_exception_flags |= float_flag_inexact;\r
-        aSign = extractFloat32Sign( a );\r
-        switch ( float_rounding_mode ) {\r
-         case float_round_nearest_even:\r
-            if ( ( aExp == 0x7E ) && extractFloat32Frac( a ) ) {\r
-                return packFloat32( aSign, 0x7F, 0 );\r
-            }\r
-            break;\r
-         case float_round_down:\r
-            return aSign ? 0xBF800000 : 0;\r
-         case float_round_up:\r
-            return aSign ? 0x80000000 : 0x3F800000;\r
-        }\r
-        return packFloat32( aSign, 0, 0 );\r
-    }\r
-    lastBitMask = 1;\r
-    lastBitMask <<= 0x96 - aExp;\r
-    roundBitsMask = lastBitMask - 1;\r
-    z = a;\r
-    roundingMode = float_rounding_mode;\r
-    if ( roundingMode == float_round_nearest_even ) {\r
-        z += lastBitMask>>1;\r
-        if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;\r
-    }\r
-    else if ( roundingMode != float_round_to_zero ) {\r
-        if ( extractFloat32Sign( z ) ^ ( roundingMode == float_round_up ) ) {\r
-            z += roundBitsMask;\r
-        }\r
-    }\r
-    z &= ~ roundBitsMask;\r
-    if ( z != a ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the absolute values of the single-precision\r
-| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\r
-| before being returned.  `zSign' is ignored if the result is a NaN.\r
-| The addition is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 addFloat32Sigs( float32 a, float32 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig;\r
-    int16 expDiff;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    expDiff = aExp - bExp;\r
-    aSig <<= 6;\r
-    bSig <<= 6;\r
-    if ( 0 < expDiff ) {\r
-        if ( aExp == 0xFF ) {\r
-            if ( aSig ) return propagateFloat32NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( bExp == 0 ) {\r
-            --expDiff;\r
-        }\r
-        else {\r
-            bSig |= 0x20000000;\r
-        }\r
-        shift32RightJamming( bSig, expDiff, &bSig );\r
-        zExp = aExp;\r
-    }\r
-    else if ( expDiff < 0 ) {\r
-        if ( bExp == 0xFF ) {\r
-            if ( bSig ) return propagateFloat32NaN( a, b );\r
-            return packFloat32( zSign, 0xFF, 0 );\r
-        }\r
-        if ( aExp == 0 ) {\r
-            ++expDiff;\r
-        }\r
-        else {\r
-            aSig |= 0x20000000;\r
-        }\r
-        shift32RightJamming( aSig, - expDiff, &aSig );\r
-        zExp = bExp;\r
-    }\r
-    else {\r
-        if ( aExp == 0xFF ) {\r
-            if ( aSig | bSig ) return propagateFloat32NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( aExp == 0 ) return packFloat32( zSign, 0, ( aSig + bSig )>>6 );\r
-        zSig = 0x40000000 + aSig + bSig;\r
-        zExp = aExp;\r
-        goto roundAndPack;\r
-    }\r
-    aSig |= 0x20000000;\r
-    zSig = ( aSig + bSig )<<1;\r
-    --zExp;\r
-    if ( (sbits32) zSig < 0 ) {\r
-        zSig = aSig + bSig;\r
-        ++zExp;\r
-    }\r
- roundAndPack:\r
-    return roundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the absolute values of the single-\r
-| precision floating-point values `a' and `b'.  If `zSign' is 1, the\r
-| difference is negated before being returned.  `zSign' is ignored if the\r
-| result is a NaN.  The subtraction is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 subFloat32Sigs( float32 a, float32 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig;\r
-    int16 expDiff;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    expDiff = aExp - bExp;\r
-    aSig <<= 7;\r
-    bSig <<= 7;\r
-    if ( 0 < expDiff ) goto aExpBigger;\r
-    if ( expDiff < 0 ) goto bExpBigger;\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig | bSig ) return propagateFloat32NaN( a, b );\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        aExp = 1;\r
-        bExp = 1;\r
-    }\r
-    if ( bSig < aSig ) goto aBigger;\r
-    if ( aSig < bSig ) goto bBigger;\r
-    return packFloat32( float_rounding_mode == float_round_down, 0, 0 );\r
- bExpBigger:\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        return packFloat32( zSign ^ 1, 0xFF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        ++expDiff;\r
-    }\r
-    else {\r
-        aSig |= 0x40000000;\r
-    }\r
-    shift32RightJamming( aSig, - expDiff, &aSig );\r
-    bSig |= 0x40000000;\r
- bBigger:\r
-    zSig = bSig - aSig;\r
-    zExp = bExp;\r
-    zSign ^= 1;\r
-    goto normalizeRoundAndPack;\r
- aExpBigger:\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return propagateFloat32NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        --expDiff;\r
-    }\r
-    else {\r
-        bSig |= 0x40000000;\r
-    }\r
-    shift32RightJamming( bSig, expDiff, &bSig );\r
-    aSig |= 0x40000000;\r
- aBigger:\r
-    zSig = aSig - bSig;\r
-    zExp = aExp;\r
- normalizeRoundAndPack:\r
-    --zExp;\r
-    return normalizeRoundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the single-precision floating-point values `a'\r
-| and `b'.  The operation is performed according to the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_add( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return addFloat32Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return subFloat32Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the single-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_sub( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return subFloat32Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return addFloat32Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of multiplying the single-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_mul( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig0, zSig1;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    bSign = extractFloat32Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {\r
-            return propagateFloat32NaN( a, b );\r
-        }\r
-        if ( ( bExp | bSig ) == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        return packFloat32( zSign, 0xFF, 0 );\r
-    }\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        if ( ( aExp | aSig ) == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        return packFloat32( zSign, 0xFF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) return packFloat32( zSign, 0, 0 );\r
-        normalizeFloat32Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    zExp = aExp + bExp - 0x7F;\r
-    aSig = ( aSig | 0x00800000 )<<7;\r
-    bSig = ( bSig | 0x00800000 )<<8;\r
-    mul32To64( aSig, bSig, &zSig0, &zSig1 );\r
-    zSig0 |= ( zSig1 != 0 );\r
-    if ( 0 <= (sbits32) ( zSig0<<1 ) ) {\r
-        zSig0 <<= 1;\r
-        --zExp;\r
-    }\r
-    return roundAndPackFloat32( zSign, zExp, zSig0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of dividing the single-precision floating-point value `a'\r
-| by the corresponding value `b'.  The operation is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_div( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig, rem0, rem1, term0, term1;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    bSign = extractFloat32Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return propagateFloat32NaN( a, b );\r
-        if ( bExp == 0xFF ) {\r
-            if ( bSig ) return propagateFloat32NaN( a, b );\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        return packFloat32( zSign, 0xFF, 0 );\r
-    }\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        return packFloat32( zSign, 0, 0 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            if ( ( aExp | aSig ) == 0 ) {\r
-                float_raise( float_flag_invalid );\r
-                return float32_default_nan;\r
-            }\r
-            float_raise( float_flag_divbyzero );\r
-            return packFloat32( zSign, 0xFF, 0 );\r
-        }\r
-        normalizeFloat32Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = aExp - bExp + 0x7D;\r
-    aSig = ( aSig | 0x00800000 )<<7;\r
-    bSig = ( bSig | 0x00800000 )<<8;\r
-    if ( bSig <= ( aSig + aSig ) ) {\r
-        aSig >>= 1;\r
-        ++zExp;\r
-    }\r
-    zSig = estimateDiv64To32( aSig, 0, bSig );\r
-    if ( ( zSig & 0x3F ) <= 2 ) {\r
-        mul32To64( bSig, zSig, &term0, &term1 );\r
-        sub64( aSig, 0, term0, term1, &rem0, &rem1 );\r
-        while ( (sbits32) rem0 < 0 ) {\r
-            --zSig;\r
-            add64( rem0, rem1, 0, bSig, &rem0, &rem1 );\r
-        }\r
-        zSig |= ( rem1 != 0 );\r
-    }\r
-    return roundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the remainder of the single-precision floating-point value `a'\r
-| with respect to the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_rem( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, expDiff;\r
-    bits32 aSig, bSig, q, allZero, alternateASig;\r
-    sbits32 sigMean;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {\r
-            return propagateFloat32NaN( a, b );\r
-        }\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        normalizeFloat32Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return a;\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    expDiff = aExp - bExp;\r
-    aSig = ( aSig | 0x00800000 )<<8;\r
-    bSig = ( bSig | 0x00800000 )<<8;\r
-    if ( expDiff < 0 ) {\r
-        if ( expDiff < -1 ) return a;\r
-        aSig >>= 1;\r
-    }\r
-    q = ( bSig <= aSig );\r
-    if ( q ) aSig -= bSig;\r
-    expDiff -= 32;\r
-    while ( 0 < expDiff ) {\r
-        q = estimateDiv64To32( aSig, 0, bSig );\r
-        q = ( 2 < q ) ? q - 2 : 0;\r
-        aSig = - ( ( bSig>>2 ) * q );\r
-        expDiff -= 30;\r
-    }\r
-    expDiff += 32;\r
-    if ( 0 < expDiff ) {\r
-        q = estimateDiv64To32( aSig, 0, bSig );\r
-        q = ( 2 < q ) ? q - 2 : 0;\r
-        q >>= 32 - expDiff;\r
-        bSig >>= 2;\r
-        aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;\r
-    }\r
-    else {\r
-        aSig >>= 2;\r
-        bSig >>= 2;\r
-    }\r
-    do {\r
-        alternateASig = aSig;\r
-        ++q;\r
-        aSig -= bSig;\r
-    } while ( 0 <= (sbits32) aSig );\r
-    sigMean = aSig + alternateASig;\r
-    if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {\r
-        aSig = alternateASig;\r
-    }\r
-    zSign = ( (sbits32) aSig < 0 );\r
-    if ( zSign ) aSig = - aSig;\r
-    return normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the square root of the single-precision floating-point value `a'.\r
-| The operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_sqrt( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, zExp;\r
-    bits32 aSig, zSig, rem0, rem1, term0, term1;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return propagateFloat32NaN( a, 0 );\r
-        if ( ! aSign ) return a;\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( aSign ) {\r
-        if ( ( aExp | aSig ) == 0 ) return a;\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return 0;\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = ( ( aExp - 0x7F )>>1 ) + 0x7E;\r
-    aSig = ( aSig | 0x00800000 )<<8;\r
-    zSig = estimateSqrt32( aExp, aSig ) + 2;\r
-    if ( ( zSig & 0x7F ) <= 5 ) {\r
-        if ( zSig < 2 ) {\r
-            zSig = 0x7FFFFFFF;\r
-            goto roundAndPack;\r
-        }\r
-        else {\r
-            aSig >>= aExp & 1;\r
-            mul32To64( zSig, zSig, &term0, &term1 );\r
-            sub64( aSig, 0, term0, term1, &rem0, &rem1 );\r
-            while ( (sbits32) rem0 < 0 ) {\r
-                --zSig;\r
-                shortShift64Left( 0, zSig, 1, &term0, &term1 );\r
-                term1 |= 1;\r
-                add64( rem0, rem1, term0, term1, &rem0, &rem1 );\r
-            }\r
-            zSig |= ( ( rem0 | rem1 ) != 0 );\r
-        }\r
-    }\r
-    shift32RightJamming( zSig, 1, &zSig );\r
- roundAndPack:\r
-    return roundAndPackFloat32( 0, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_eq( float32 a, float32 b )\r
-{\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than\r
-| or equal to the corresponding value `b', and 0 otherwise.  The comparison\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_le( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-    return ( a == b ) || ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_lt( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );\r
-    return ( a != b ) && ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The invalid exception is\r
-| raised if either operand is a NaN.  Otherwise, the comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_eq_signaling( float32 a, float32 b )\r
-{\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than or\r
-| equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\r
-| cause an exception.  Otherwise, the comparison is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_le_quiet( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-    int16 aExp, bExp;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-    return ( a == b ) || ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\r
-| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_lt_quiet( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );\r
-    return ( a != b ) && ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float64_to_int32( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig0, aSig1, absZ, aSigExtra;\r
-    int32 z;\r
-    int8 roundingMode;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    shiftCount = aExp - 0x413;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( 0x41E < aExp ) {\r
-            if ( ( aExp == 0x7FF ) && ( aSig0 | aSig1 ) ) aSign = 0;\r
-            goto invalid;\r
-        }\r
-        shortShift64Left(\r
-            aSig0 | 0x00100000, aSig1, shiftCount, &absZ, &aSigExtra );\r
-        if ( 0x80000000 < absZ ) goto invalid;\r
-    }\r
-    else {\r
-        aSig1 = ( aSig1 != 0 );\r
-        if ( aExp < 0x3FE ) {\r
-            aSigExtra = aExp | aSig0 | aSig1;\r
-            absZ = 0;\r
-        }\r
-        else {\r
-            aSig0 |= 0x00100000;\r
-            aSigExtra = ( aSig0<<( shiftCount & 31 ) ) | aSig1;\r
-            absZ = aSig0>>( - shiftCount );\r
-        }\r
-    }\r
-    roundingMode = float_rounding_mode;\r
-    if ( roundingMode == float_round_nearest_even ) {\r
-        if ( (sbits32) aSigExtra < 0 ) {\r
-            ++absZ;\r
-            if ( (bits32) ( aSigExtra<<1 ) == 0 ) absZ &= ~1;\r
-        }\r
-        z = aSign ? - absZ : absZ;\r
-    }\r
-    else {\r
-        aSigExtra = ( aSigExtra != 0 );\r
-        if ( aSign ) {\r
-            z = - (   absZ\r
-                    + ( ( roundingMode == float_round_down ) & aSigExtra ) );\r
-        }\r
-        else {\r
-            z = absZ + ( ( roundingMode == float_round_up ) & aSigExtra );\r
-        }\r
-    }\r
-    if ( ( aSign ^ ( z < 0 ) ) && z ) {\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\r
-    }\r
-    if ( aSigExtra ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.\r
-| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\r
-| the conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float64_to_int32_round_to_zero( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig0, aSig1, absZ, aSigExtra;\r
-    int32 z;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    shiftCount = aExp - 0x413;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( 0x41E < aExp ) {\r
-            if ( ( aExp == 0x7FF ) && ( aSig0 | aSig1 ) ) aSign = 0;\r
-            goto invalid;\r
-        }\r
-        shortShift64Left(\r
-            aSig0 | 0x00100000, aSig1, shiftCount, &absZ, &aSigExtra );\r
-    }\r
-    else {\r
-        if ( aExp < 0x3FF ) {\r
-            if ( aExp | aSig0 | aSig1 ) {\r
-                float_exception_flags |= float_flag_inexact;\r
-            }\r
-            return 0;\r
-        }\r
-        aSig0 |= 0x00100000;\r
-        aSigExtra = ( aSig0<<( shiftCount & 31 ) ) | aSig1;\r
-        absZ = aSig0>>( - shiftCount );\r
-    }\r
-    z = aSign ? - absZ : absZ;\r
-    if ( ( aSign ^ ( z < 0 ) ) && z ) {\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\r
-    }\r
-    if ( aSigExtra ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the single-precision floating-point format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float64_to_float32( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 aSig0, aSig1, zSig;\r
-    bits32 allZero;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig0 | aSig1 ) {\r
-            return commonNaNToFloat32( float64ToCommonNaN( a ) );\r
-        }\r
-        return packFloat32( aSign, 0xFF, 0 );\r
-    }\r
-    shift64RightJamming( aSig0, aSig1, 22, &allZero, &zSig );\r
-    if ( aExp ) zSig |= 0x40000000;\r
-    return roundAndPackFloat32( aSign, aExp - 0x381, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Rounds the double-precision floating-point value `a' to an integer,\r
-| and returns the result as a double-precision floating-point value.  The\r
-| operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_round_to_int( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 lastBitMask, roundBitsMask;\r
-    int8 roundingMode;\r
-    float64 z;\r
-\r
-    aExp = extractFloat64Exp( a );\r
-    if ( 0x413 <= aExp ) {\r
-        if ( 0x433 <= aExp ) {\r
-            if (    ( aExp == 0x7FF )\r
-                 && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) ) {\r
-                return propagateFloat64NaN( a, a );\r
-            }\r
-            return a;\r
-        }\r
-        lastBitMask = 1;\r
-        lastBitMask = ( lastBitMask<<( 0x432 - aExp ) )<<1;\r
-        roundBitsMask = lastBitMask - 1;\r
-        z = a;\r
-        roundingMode = float_rounding_mode;\r
-        if ( roundingMode == float_round_nearest_even ) {\r
-            if ( lastBitMask ) {\r
-                add64( z.high, z.low, 0, lastBitMask>>1, &z.high, &z.low );\r
-                if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;\r
-            }\r
-            else {\r
-                if ( (sbits32) z.low < 0 ) {\r
-                    ++z.high;\r
-                    if ( (bits32) ( z.low<<1 ) == 0 ) z.high &= ~1;\r
-                }\r
-            }\r
-        }\r
-        else if ( roundingMode != float_round_to_zero ) {\r
-            if (   extractFloat64Sign( z )\r
-                 ^ ( roundingMode == float_round_up ) ) {\r
-                add64( z.high, z.low, 0, roundBitsMask, &z.high, &z.low );\r
-            }\r
-        }\r
-        z.low &= ~ roundBitsMask;\r
-    }\r
-    else {\r
-        if ( aExp <= 0x3FE ) {\r
-            if ( ( ( (bits32) ( a.high<<1 ) ) | a.low ) == 0 ) return a;\r
-            float_exception_flags |= float_flag_inexact;\r
-            aSign = extractFloat64Sign( a );\r
-            switch ( float_rounding_mode ) {\r
-             case float_round_nearest_even:\r
-                if (    ( aExp == 0x3FE )\r
-                     && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) )\r
-                   ) {\r
-                    return packFloat64( aSign, 0x3FF, 0, 0 );\r
-                }\r
-                break;\r
-             case float_round_down:\r
-                return\r
-                      aSign ? packFloat64( 1, 0x3FF, 0, 0 )\r
-                    : packFloat64( 0, 0, 0, 0 );\r
-             case float_round_up:\r
-                return\r
-                      aSign ? packFloat64( 1, 0, 0, 0 )\r
-                    : packFloat64( 0, 0x3FF, 0, 0 );\r
-            }\r
-            return packFloat64( aSign, 0, 0, 0 );\r
-        }\r
-        lastBitMask = 1;\r
-        lastBitMask <<= 0x413 - aExp;\r
-        roundBitsMask = lastBitMask - 1;\r
-        z.low = 0;\r
-        z.high = a.high;\r
-        roundingMode = float_rounding_mode;\r
-        if ( roundingMode == float_round_nearest_even ) {\r
-            z.high += lastBitMask>>1;\r
-            if ( ( ( z.high & roundBitsMask ) | a.low ) == 0 ) {\r
-                z.high &= ~ lastBitMask;\r
-            }\r
-        }\r
-        else if ( roundingMode != float_round_to_zero ) {\r
-            if (   extractFloat64Sign( z )\r
-                 ^ ( roundingMode == float_round_up ) ) {\r
-                z.high |= ( a.low != 0 );\r
-                z.high += roundBitsMask;\r
-            }\r
-        }\r
-        z.high &= ~ roundBitsMask;\r
-    }\r
-    if ( ( z.low != a.low ) || ( z.high != a.high ) ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the absolute values of the double-precision\r
-| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\r
-| before being returned.  `zSign' is ignored if the result is a NaN.\r
-| The addition is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 addFloat64Sigs( float64 a, float64 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;\r
-    int16 expDiff;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    bSig1 = extractFloat64Frac1( b );\r
-    bSig0 = extractFloat64Frac0( b );\r
-    bExp = extractFloat64Exp( b );\r
-    expDiff = aExp - bExp;\r
-    if ( 0 < expDiff ) {\r
-        if ( aExp == 0x7FF ) {\r
-            if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( bExp == 0 ) {\r
-            --expDiff;\r
-        }\r
-        else {\r
-            bSig0 |= 0x00100000;\r
-        }\r
-        shift64ExtraRightJamming(\r
-            bSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2 );\r
-        zExp = aExp;\r
-    }\r
-    else if ( expDiff < 0 ) {\r
-        if ( bExp == 0x7FF ) {\r
-            if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );\r
-            return packFloat64( zSign, 0x7FF, 0, 0 );\r
-        }\r
-        if ( aExp == 0 ) {\r
-            ++expDiff;\r
-        }\r
-        else {\r
-            aSig0 |= 0x00100000;\r
-        }\r
-        shift64ExtraRightJamming(\r
-            aSig0, aSig1, 0, - expDiff, &aSig0, &aSig1, &zSig2 );\r
-        zExp = bExp;\r
-    }\r
-    else {\r
-        if ( aExp == 0x7FF ) {\r
-            if ( aSig0 | aSig1 | bSig0 | bSig1 ) {\r
-                return propagateFloat64NaN( a, b );\r
-            }\r
-            return a;\r
-        }\r
-        add64( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\r
-        if ( aExp == 0 ) return packFloat64( zSign, 0, zSig0, zSig1 );\r
-        zSig2 = 0;\r
-        zSig0 |= 0x00200000;\r
-        zExp = aExp;\r
-        goto shiftRight1;\r
-    }\r
-    aSig0 |= 0x00100000;\r
-    add64( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\r
-    --zExp;\r
-    if ( zSig0 < 0x00200000 ) goto roundAndPack;\r
-    ++zExp;\r
- shiftRight1:\r
-    shift64ExtraRightJamming( zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );\r
- roundAndPack:\r
-    return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the absolute values of the double-\r
-| precision floating-point values `a' and `b'.  If `zSign' is 1, the\r
-| difference is negated before being returned.  `zSign' is ignored if the\r
-| result is a NaN.  The subtraction is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 subFloat64Sigs( float64 a, float64 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1;\r
-    int16 expDiff;\r
-    float64 z;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    bSig1 = extractFloat64Frac1( b );\r
-    bSig0 = extractFloat64Frac0( b );\r
-    bExp = extractFloat64Exp( b );\r
-    expDiff = aExp - bExp;\r
-    shortShift64Left( aSig0, aSig1, 10, &aSig0, &aSig1 );\r
-    shortShift64Left( bSig0, bSig1, 10, &bSig0, &bSig1 );\r
-    if ( 0 < expDiff ) goto aExpBigger;\r
-    if ( expDiff < 0 ) goto bExpBigger;\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig0 | aSig1 | bSig0 | bSig1 ) {\r
-            return propagateFloat64NaN( a, b );\r
-        }\r
-        float_raise( float_flag_invalid );\r
-        z.low = float64_default_nan_low;\r
-        z.high = float64_default_nan_high;\r
-        return z;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        aExp = 1;\r
-        bExp = 1;\r
-    }\r
-    if ( bSig0 < aSig0 ) goto aBigger;\r
-    if ( aSig0 < bSig0 ) goto bBigger;\r
-    if ( bSig1 < aSig1 ) goto aBigger;\r
-    if ( aSig1 < bSig1 ) goto bBigger;\r
-    return packFloat64( float_rounding_mode == float_round_down, 0, 0, 0 );\r
- bExpBigger:\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );\r
-        return packFloat64( zSign ^ 1, 0x7FF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        ++expDiff;\r
-    }\r
-    else {\r
-        aSig0 |= 0x40000000;\r
-    }\r
-    shift64RightJamming( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );\r
-    bSig0 |= 0x40000000;\r
- bBigger:\r
-    sub64( bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1 );\r
-    zExp = bExp;\r
-    zSign ^= 1;\r
-    goto normalizeRoundAndPack;\r
- aExpBigger:\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        --expDiff;\r
-    }\r
-    else {\r
-        bSig0 |= 0x40000000;\r
-    }\r
-    shift64RightJamming( bSig0, bSig1, expDiff, &bSig0, &bSig1 );\r
-    aSig0 |= 0x40000000;\r
- aBigger:\r
-    sub64( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\r
-    zExp = aExp;\r
- normalizeRoundAndPack:\r
-    --zExp;\r
-    return normalizeRoundAndPackFloat64( zSign, zExp - 10, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the double-precision floating-point values `a'\r
-| and `b'.  The operation is performed according to the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_add( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return addFloat64Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return subFloat64Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the double-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_sub( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return subFloat64Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return addFloat64Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of multiplying the double-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_mul( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3;\r
-    float64 z;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    bSig1 = extractFloat64Frac1( b );\r
-    bSig0 = extractFloat64Frac0( b );\r
-    bExp = extractFloat64Exp( b );\r
-    bSign = extractFloat64Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FF ) {\r
-        if (    ( aSig0 | aSig1 )\r
-             || ( ( bExp == 0x7FF ) && ( bSig0 | bSig1 ) ) ) {\r
-            return propagateFloat64NaN( a, b );\r
-        }\r
-        if ( ( bExp | bSig0 | bSig1 ) == 0 ) goto invalid;\r
-        return packFloat64( zSign, 0x7FF, 0, 0 );\r
-    }\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );\r
-        if ( ( aExp | aSig0 | aSig1 ) == 0 ) {\r
- invalid:\r
-            float_raise( float_flag_invalid );\r
-            z.low = float64_default_nan_low;\r
-            z.high = float64_default_nan_high;\r
-            return z;\r
-        }\r
-        return packFloat64( zSign, 0x7FF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloat64( zSign, 0, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( ( bSig0 | bSig1 ) == 0 ) return packFloat64( zSign, 0, 0, 0 );\r
-        normalizeFloat64Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\r
-    }\r
-    zExp = aExp + bExp - 0x400;\r
-    aSig0 |= 0x00100000;\r
-    shortShift64Left( bSig0, bSig1, 12, &bSig0, &bSig1 );\r
-    mul64To128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3 );\r
-    add64( zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1 );\r
-    zSig2 |= ( zSig3 != 0 );\r
-    if ( 0x00200000 <= zSig0 ) {\r
-        shift64ExtraRightJamming(\r
-            zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );\r
-        ++zExp;\r
-    }\r
-    return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of dividing the double-precision floating-point value `a'\r
-| by the corresponding value `b'.  The operation is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_div( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;\r
-    bits32 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\r
-    float64 z;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    bSig1 = extractFloat64Frac1( b );\r
-    bSig0 = extractFloat64Frac0( b );\r
-    bExp = extractFloat64Exp( b );\r
-    bSign = extractFloat64Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, b );\r
-        if ( bExp == 0x7FF ) {\r
-            if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );\r
-            goto invalid;\r
-        }\r
-        return packFloat64( zSign, 0x7FF, 0, 0 );\r
-    }\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );\r
-        return packFloat64( zSign, 0, 0, 0 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( ( bSig0 | bSig1 ) == 0 ) {\r
-            if ( ( aExp | aSig0 | aSig1 ) == 0 ) {\r
- invalid:\r
-                float_raise( float_flag_invalid );\r
-                z.low = float64_default_nan_low;\r
-                z.high = float64_default_nan_high;\r
-                return z;\r
-            }\r
-            float_raise( float_flag_divbyzero );\r
-            return packFloat64( zSign, 0x7FF, 0, 0 );\r
-        }\r
-        normalizeFloat64Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloat64( zSign, 0, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    zExp = aExp - bExp + 0x3FD;\r
-    shortShift64Left( aSig0 | 0x00100000, aSig1, 11, &aSig0, &aSig1 );\r
-    shortShift64Left( bSig0 | 0x00100000, bSig1, 11, &bSig0, &bSig1 );\r
-    if ( le64( bSig0, bSig1, aSig0, aSig1 ) ) {\r
-        shift64Right( aSig0, aSig1, 1, &aSig0, &aSig1 );\r
-        ++zExp;\r
-    }\r
-    zSig0 = estimateDiv64To32( aSig0, aSig1, bSig0 );\r
-    mul64By32To96( bSig0, bSig1, zSig0, &term0, &term1, &term2 );\r
-    sub96( aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2 );\r
-    while ( (sbits32) rem0 < 0 ) {\r
-        --zSig0;\r
-        add96( rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2 );\r
-    }\r
-    zSig1 = estimateDiv64To32( rem1, rem2, bSig0 );\r
-    if ( ( zSig1 & 0x3FF ) <= 4 ) {\r
-        mul64By32To96( bSig0, bSig1, zSig1, &term1, &term2, &term3 );\r
-        sub96( rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3 );\r
-        while ( (sbits32) rem1 < 0 ) {\r
-            --zSig1;\r
-            add96( rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3 );\r
-        }\r
-        zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\r
-    }\r
-    shift64ExtraRightJamming( zSig0, zSig1, 0, 11, &zSig0, &zSig1, &zSig2 );\r
-    return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the remainder of the double-precision floating-point value `a'\r
-| with respect to the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_rem( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, expDiff;\r
-    bits32 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2;\r
-    bits32 allZero, alternateASig0, alternateASig1, sigMean1;\r
-    sbits32 sigMean0;\r
-    float64 z;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    bSig1 = extractFloat64Frac1( b );\r
-    bSig0 = extractFloat64Frac0( b );\r
-    bExp = extractFloat64Exp( b );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aExp == 0x7FF ) {\r
-        if (    ( aSig0 | aSig1 )\r
-             || ( ( bExp == 0x7FF ) && ( bSig0 | bSig1 ) ) ) {\r
-            return propagateFloat64NaN( a, b );\r
-        }\r
-        goto invalid;\r
-    }\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( ( bSig0 | bSig1 ) == 0 ) {\r
- invalid:\r
-            float_raise( float_flag_invalid );\r
-            z.low = float64_default_nan_low;\r
-            z.high = float64_default_nan_high;\r
-            return z;\r
-        }\r
-        normalizeFloat64Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return a;\r
-        normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    expDiff = aExp - bExp;\r
-    if ( expDiff < -1 ) return a;\r
-    shortShift64Left(\r
-        aSig0 | 0x00100000, aSig1, 11 - ( expDiff < 0 ), &aSig0, &aSig1 );\r
-    shortShift64Left( bSig0 | 0x00100000, bSig1, 11, &bSig0, &bSig1 );\r
-    q = le64( bSig0, bSig1, aSig0, aSig1 );\r
-    if ( q ) sub64( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );\r
-    expDiff -= 32;\r
-    while ( 0 < expDiff ) {\r
-        q = estimateDiv64To32( aSig0, aSig1, bSig0 );\r
-        q = ( 4 < q ) ? q - 4 : 0;\r
-        mul64By32To96( bSig0, bSig1, q, &term0, &term1, &term2 );\r
-        shortShift96Left( term0, term1, term2, 29, &term1, &term2, &allZero );\r
-        shortShift64Left( aSig0, aSig1, 29, &aSig0, &allZero );\r
-        sub64( aSig0, 0, term1, term2, &aSig0, &aSig1 );\r
-        expDiff -= 29;\r
-    }\r
-    if ( -32 < expDiff ) {\r
-        q = estimateDiv64To32( aSig0, aSig1, bSig0 );\r
-        q = ( 4 < q ) ? q - 4 : 0;\r
-        q >>= - expDiff;\r
-        shift64Right( bSig0, bSig1, 8, &bSig0, &bSig1 );\r
-        expDiff += 24;\r
-        if ( expDiff < 0 ) {\r
-            shift64Right( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );\r
-        }\r
-        else {\r
-            shortShift64Left( aSig0, aSig1, expDiff, &aSig0, &aSig1 );\r
-        }\r
-        mul64By32To96( bSig0, bSig1, q, &term0, &term1, &term2 );\r
-        sub64( aSig0, aSig1, term1, term2, &aSig0, &aSig1 );\r
-    }\r
-    else {\r
-        shift64Right( aSig0, aSig1, 8, &aSig0, &aSig1 );\r
-        shift64Right( bSig0, bSig1, 8, &bSig0, &bSig1 );\r
-    }\r
-    do {\r
-        alternateASig0 = aSig0;\r
-        alternateASig1 = aSig1;\r
-        ++q;\r
-        sub64( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );\r
-    } while ( 0 <= (sbits32) aSig0 );\r
-    add64(\r
-        aSig0, aSig1, alternateASig0, alternateASig1, &sigMean0, &sigMean1 );\r
-    if (    ( sigMean0 < 0 )\r
-         || ( ( ( sigMean0 | sigMean1 ) == 0 ) && ( q & 1 ) ) ) {\r
-        aSig0 = alternateASig0;\r
-        aSig1 = alternateASig1;\r
-    }\r
-    zSign = ( (sbits32) aSig0 < 0 );\r
-    if ( zSign ) sub64( 0, 0, aSig0, aSig1, &aSig0, &aSig1 );\r
-    return\r
-        normalizeRoundAndPackFloat64( aSign ^ zSign, bExp - 4, aSig0, aSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the square root of the double-precision floating-point value `a'.\r
-| The operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_sqrt( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, zExp;\r
-    bits32 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0;\r
-    bits32 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\r
-    float64 z;\r
-\r
-    aSig1 = extractFloat64Frac1( a );\r
-    aSig0 = extractFloat64Frac0( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, a );\r
-        if ( ! aSign ) return a;\r
-        goto invalid;\r
-    }\r
-    if ( aSign ) {\r
-        if ( ( aExp | aSig0 | aSig1 ) == 0 ) return a;\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        z.low = float64_default_nan_low;\r
-        z.high = float64_default_nan_high;\r
-        return z;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloat64( 0, 0, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    zExp = ( ( aExp - 0x3FF )>>1 ) + 0x3FE;\r
-    aSig0 |= 0x00100000;\r
-    shortShift64Left( aSig0, aSig1, 11, &term0, &term1 );\r
-    zSig0 = ( estimateSqrt32( aExp, term0 )>>1 ) + 1;\r
-    if ( zSig0 == 0 ) zSig0 = 0x7FFFFFFF;\r
-    doubleZSig0 = zSig0 + zSig0;\r
-    shortShift64Left( aSig0, aSig1, 9 - ( aExp & 1 ), &aSig0, &aSig1 );\r
-    mul32To64( zSig0, zSig0, &term0, &term1 );\r
-    sub64( aSig0, aSig1, term0, term1, &rem0, &rem1 );\r
-    while ( (sbits32) rem0 < 0 ) {\r
-        --zSig0;\r
-        doubleZSig0 -= 2;\r
-        add64( rem0, rem1, 0, doubleZSig0 | 1, &rem0, &rem1 );\r
-    }\r
-    zSig1 = estimateDiv64To32( rem1, 0, doubleZSig0 );\r
-    if ( ( zSig1 & 0x1FF ) <= 5 ) {\r
-        if ( zSig1 == 0 ) zSig1 = 1;\r
-        mul32To64( doubleZSig0, zSig1, &term1, &term2 );\r
-        sub64( rem1, 0, term1, term2, &rem1, &rem2 );\r
-        mul32To64( zSig1, zSig1, &term2, &term3 );\r
-        sub96( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );\r
-        while ( (sbits32) rem1 < 0 ) {\r
-            --zSig1;\r
-            shortShift64Left( 0, zSig1, 1, &term2, &term3 );\r
-            term3 |= 1;\r
-            term2 |= doubleZSig0;\r
-            add96( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );\r
-        }\r
-        zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\r
-    }\r
-    shift64ExtraRightJamming( zSig0, zSig1, 0, 10, &zSig0, &zSig1, &zSig2 );\r
-    return roundAndPackFloat64( 0, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_eq( float64 a, float64 b )\r
-{\r
-\r
-    if (    (    ( extractFloat64Exp( a ) == 0x7FF )\r
-              && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )\r
-         || (    ( extractFloat64Exp( b ) == 0x7FF )\r
-              && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )\r
-       ) {\r
-        if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    return\r
-           ( a.low == b.low )\r
-        && (    ( a.high == b.high )\r
-             || (    ( a.low == 0 )\r
-                  && ( (bits32) ( ( a.high | b.high )<<1 ) == 0 ) )\r
-           );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than\r
-| or equal to the corresponding value `b', and 0 otherwise.  The comparison\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_le( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat64Exp( a ) == 0x7FF )\r
-              && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )\r
-         || (    ( extractFloat64Exp( b ) == 0x7FF )\r
-              && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            || (    ( ( (bits32) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 == 0 );\r
-    }\r
-    return\r
-          aSign ? le64( b.high, b.low, a.high, a.low )\r
-        : le64( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_lt( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat64Exp( a ) == 0x7FF )\r
-              && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )\r
-         || (    ( extractFloat64Exp( b ) == 0x7FF )\r
-              && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            && (    ( ( (bits32) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 != 0 );\r
-    }\r
-    return\r
-          aSign ? lt64( b.high, b.low, a.high, a.low )\r
-        : lt64( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The invalid exception is\r
-| raised if either operand is a NaN.  Otherwise, the comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_eq_signaling( float64 a, float64 b )\r
-{\r
-\r
-    if (    (    ( extractFloat64Exp( a ) == 0x7FF )\r
-              && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )\r
-         || (    ( extractFloat64Exp( b ) == 0x7FF )\r
-              && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    return\r
-           ( a.low == b.low )\r
-        && (    ( a.high == b.high )\r
-             || (    ( a.low == 0 )\r
-                  && ( (bits32) ( ( a.high | b.high )<<1 ) == 0 ) )\r
-           );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than or\r
-| equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\r
-| cause an exception.  Otherwise, the comparison is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_le_quiet( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat64Exp( a ) == 0x7FF )\r
-              && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )\r
-         || (    ( extractFloat64Exp( b ) == 0x7FF )\r
-              && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )\r
-       ) {\r
-        if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            || (    ( ( (bits32) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 == 0 );\r
-    }\r
-    return\r
-          aSign ? le64( b.high, b.low, a.high, a.low )\r
-        : le64( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\r
-| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_lt_quiet( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat64Exp( a ) == 0x7FF )\r
-              && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )\r
-         || (    ( extractFloat64Exp( b ) == 0x7FF )\r
-              && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )\r
-       ) {\r
-        if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            && (    ( ( (bits32) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 != 0 );\r
-    }\r
-    return\r
-          aSign ? lt64( b.high, b.low, a.high, a.low )\r
-        : lt64( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/bits32/templates/milieu.h b/float/softfloat/softfloat/bits32/templates/milieu.h
deleted file mode 100644 (file)
index 02da6e8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Include common integer types and flags.\r
-*----------------------------------------------------------------------------*/\r
-#include "../../../processors/!!!processor.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Symbolic Boolean literals.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    FALSE = 0,\r
-    TRUE  = 1\r
-};\r
-\r
diff --git a/float/softfloat/softfloat/bits32/templates/softfloat-specialize b/float/softfloat/softfloat/bits32/templates/softfloat-specialize
deleted file mode 100644 (file)
index 03ea8d2..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point\r
-Arithmetic Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Underflow tininess-detection mode, statically initialized to default value.\r
-| (The declaration in `softfloat.h' must match the `int8' type here.)\r
-*----------------------------------------------------------------------------*/\r
-int8 float_detect_tininess = float_tininess_after_rounding;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Raises the exceptions specified by `flags'.  Floating-point traps can be\r
-| defined here if desired.  It is currently not possible for such a trap\r
-| to substitute a result value.  If traps are not implemented, this routine\r
-| should be simply `float_exception_flags |= flags;'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-void float_raise( int8 flags )\r
-{\r
-\r
-    float_exception_flags |= flags;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Internal canonical NaN format.\r
-*----------------------------------------------------------------------------*/\r
-typedef struct {\r
-    flag sign;\r
-    bits32 high, low;\r
-} commonNaNT;\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated single-precision NaN.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    float32_default_nan = 0xFFFFFFFF\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_nan( float32 a )\r
-{\r
-\r
-    return ( 0xFF000000 < (bits32) ( a<<1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_signaling_nan( float32 a )\r
-{\r
-\r
-    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float32ToCommonNaN( float32 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a>>31;\r
-    z.low = 0;\r
-    z.high = a<<9;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the single-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 commonNaNToFloat32( commonNaNT a )\r
-{\r
-\r
-    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>9 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two single-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 propagateFloat32NaN( float32 a, float32 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float32_is_nan( a );\r
-    aIsSignalingNaN = float32_is_signaling_nan( a );\r
-    bIsNaN = float32_is_nan( b );\r
-    bIsSignalingNaN = float32_is_signaling_nan( b );\r
-    a |= 0x00400000;\r
-    b |= 0x00400000;\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsNaN ) {\r
-        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated double-precision NaN.  The `high' and\r
-| `low' values hold the most- and least-significant bits, respectively.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    float64_default_nan_high = 0xFFFFFFFF,\r
-    float64_default_nan_low  = 0xFFFFFFFF\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_nan( float64 a )\r
-{\r
-\r
-    return\r
-           ( 0xFFE00000 <= (bits32) ( a.high<<1 ) )\r
-        && ( a.low || ( a.high & 0x000FFFFF ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_signaling_nan( float64 a )\r
-{\r
-\r
-    return\r
-           ( ( ( a.high>>19 ) & 0xFFF ) == 0xFFE )\r
-        && ( a.low || ( a.high & 0x0007FFFF ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float64ToCommonNaN( float64 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a.high>>31;\r
-    shortShift64Left( a.high, a.low, 12, &z.high, &z.low );\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the double-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 commonNaNToFloat64( commonNaNT a )\r
-{\r
-    float64 z;\r
-\r
-    shift64Right( a.high, a.low, 12, &z.high, &z.low );\r
-    z.high |= ( ( (bits32) a.sign )<<31 ) | 0x7FF80000;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two double-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 propagateFloat64NaN( float64 a, float64 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float64_is_nan( a );\r
-    aIsSignalingNaN = float64_is_signaling_nan( a );\r
-    bIsNaN = float64_is_nan( b );\r
-    bIsSignalingNaN = float64_is_signaling_nan( b );\r
-    a.high |= 0x00080000;\r
-    b.high |= 0x00080000;\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsNaN ) {\r
-        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/bits32/templates/softfloat.h b/float/softfloat/softfloat/bits32/templates/softfloat.h
deleted file mode 100644 (file)
index 5341300..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point types.\r
-*----------------------------------------------------------------------------*/\r
-typedef !!!bits32 float32;\r
-typedef struct {\r
-    !!!bits32 high, low;\r
-} float64;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point underflow tininess-detection mode.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 float_detect_tininess;\r
-enum {\r
-    float_tininess_after_rounding  = 0,\r
-    float_tininess_before_rounding = 1\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point rounding mode.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 float_rounding_mode;\r
-enum {\r
-    float_round_nearest_even = 0,\r
-    float_round_to_zero      = 1,\r
-    float_round_down         = 2,\r
-    float_round_up           = 3\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point exception flags.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 float_exception_flags;\r
-enum {\r
-    float_flag_inexact   =  1,\r
-    float_flag_underflow =  2,\r
-    float_flag_overflow  =  4,\r
-    float_flag_divbyzero =  8,\r
-    float_flag_invalid   = 16\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Routine to raise any or all of the software IEC/IEEE floating-point\r
-| exception flags.\r
-*----------------------------------------------------------------------------*/\r
-void float_raise( !!!int8 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE integer-to-floating-point conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-float32 int32_to_float32( !!!int32 );\r
-float64 int32_to_float64( !!!int32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-!!!int32 float32_to_int32( float32 );\r
-!!!int32 float32_to_int32_round_to_zero( float32 );\r
-float64 float32_to_float64( float32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float32 float32_round_to_int( float32 );\r
-float32 float32_add( float32, float32 );\r
-float32 float32_sub( float32, float32 );\r
-float32 float32_mul( float32, float32 );\r
-float32 float32_div( float32, float32 );\r
-float32 float32_rem( float32, float32 );\r
-float32 float32_sqrt( float32 );\r
-!!!flag float32_eq( float32, float32 );\r
-!!!flag float32_le( float32, float32 );\r
-!!!flag float32_lt( float32, float32 );\r
-!!!flag float32_eq_signaling( float32, float32 );\r
-!!!flag float32_le_quiet( float32, float32 );\r
-!!!flag float32_lt_quiet( float32, float32 );\r
-!!!flag float32_is_signaling_nan( float32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-!!!int32 float64_to_int32( float64 );\r
-!!!int32 float64_to_int32_round_to_zero( float64 );\r
-float32 float64_to_float32( float64 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float64 float64_round_to_int( float64 );\r
-float64 float64_add( float64, float64 );\r
-float64 float64_sub( float64, float64 );\r
-float64 float64_mul( float64, float64 );\r
-float64 float64_div( float64, float64 );\r
-float64 float64_rem( float64, float64 );\r
-float64 float64_sqrt( float64 );\r
-!!!flag float64_eq( float64, float64 );\r
-!!!flag float64_le( float64, float64 );\r
-!!!flag float64_lt( float64, float64 );\r
-!!!flag float64_eq_signaling( float64, float64 );\r
-!!!flag float64_le_quiet( float64, float64 );\r
-!!!flag float64_lt_quiet( float64, float64 );\r
-!!!flag float64_is_signaling_nan( float64 );\r
-\r
diff --git a/float/softfloat/softfloat/bits32/timesoftfloat.c b/float/softfloat/softfloat/bits32/timesoftfloat.c
deleted file mode 100644 (file)
index 016cc2f..0000000
+++ /dev/null
@@ -1,1050 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-#include <stdlib.h>\r
-#include <stdarg.h>\r
-#include <string.h>\r
-#include <stdio.h>\r
-#include <time.h>\r
-#include "milieu.h"\r
-#include "softfloat.h"\r
-\r
-enum {\r
-    minIterations = 1000\r
-};\r
-\r
-void fail( const char *message, ... )\r
-{\r
-    va_list varArgs;\r
-\r
-    fputs( "timesoftfloat: ", stderr );\r
-    va_start( varArgs, message );\r
-    vfprintf( stderr, message, varArgs );\r
-    va_end( varArgs );\r
-    fputs( ".\n", stderr );\r
-    exit( EXIT_FAILURE );\r
-\r
-}\r
-\r
-static char *functionName, *roundingModeName, *tininessModeName;\r
-\r
-static void reportTime( int32 count, long clocks )\r
-{\r
-\r
-    printf(\r
-        "%8.1f kops/s: %s",\r
-        ( count / ( ( (float) clocks ) / CLOCKS_PER_SEC ) ) / 1000,\r
-        functionName\r
-    );\r
-    if ( roundingModeName ) {\r
-        fputs( ", rounding ", stdout );\r
-        fputs( roundingModeName, stdout );\r
-        if ( tininessModeName ) {\r
-            fputs( ", tininess ", stdout );\r
-            fputs( tininessModeName, stdout );\r
-            fputs( " rounding", stdout );\r
-        }\r
-    }\r
-    fputc( '\n', stdout );\r
-\r
-}\r
-\r
-enum {\r
-    numInputs_int32 = 32\r
-};\r
-\r
-static const int32 inputs_int32[ numInputs_int32 ] = {\r
-    0xFFFFBB79, 0x405CF80F, 0x00000000, 0xFFFFFD04,\r
-    0xFFF20002, 0x0C8EF795, 0xF00011FF, 0x000006CA,\r
-    0x00009BFE, 0xFF4862E3, 0x9FFFEFFE, 0xFFFFFFB7,\r
-    0x0BFF7FFF, 0x0000F37A, 0x0011DFFE, 0x00000006,\r
-    0xFFF02006, 0xFFFFF7D1, 0x10200003, 0xDE8DF765,\r
-    0x00003E02, 0x000019E8, 0x0008FFFE, 0xFFFFFB5C,\r
-    0xFFDF7FFE, 0x07C42FBF, 0x0FFFE3FF, 0x040B9F13,\r
-    0xBFFFFFF8, 0x0001BF56, 0x000017F6, 0x000A908A\r
-};\r
-\r
-static void time_a_int32_z_float32( float32 function( int32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_int32_z_float64( float64 function( int32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-enum {\r
-    numInputs_float32 = 32\r
-};\r
-\r
-static const float32 inputs_float32[ numInputs_float32 ] = {\r
-    0x4EFA0000, 0xC1D0B328, 0x80000000, 0x3E69A31E,\r
-    0xAF803EFF, 0x3F800000, 0x17BF8000, 0xE74A301A,\r
-    0x4E010003, 0x7EE3C75D, 0xBD803FE0, 0xBFFEFF00,\r
-    0x7981F800, 0x431FFFFC, 0xC100C000, 0x3D87EFFF,\r
-    0x4103FEFE, 0xBC000007, 0xBF01F7FF, 0x4E6C6B5C,\r
-    0xC187FFFE, 0xC58B9F13, 0x4F88007F, 0xDF004007,\r
-    0xB7FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,\r
-    0xDB428661, 0x33F89B1F, 0xA3BFEFFF, 0x537BFFBE\r
-};\r
-\r
-static void time_a_float32_z_int32( int32 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float32_z_float64( float64 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_az_float32( float32 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_ab_float32_z_flag( flag function( float32, float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_abz_float32( float32 function( float32, float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static const float32 inputs_float32_pos[ numInputs_float32 ] = {\r
-    0x4EFA0000, 0x41D0B328, 0x00000000, 0x3E69A31E,\r
-    0x2F803EFF, 0x3F800000, 0x17BF8000, 0x674A301A,\r
-    0x4E010003, 0x7EE3C75D, 0x3D803FE0, 0x3FFEFF00,\r
-    0x7981F800, 0x431FFFFC, 0x4100C000, 0x3D87EFFF,\r
-    0x4103FEFE, 0x3C000007, 0x3F01F7FF, 0x4E6C6B5C,\r
-    0x4187FFFE, 0x458B9F13, 0x4F88007F, 0x5F004007,\r
-    0x37FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,\r
-    0x5B428661, 0x33F89B1F, 0x23BFEFFF, 0x537BFFBE\r
-};\r
-\r
-static void time_az_float32_pos( float32 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32_pos[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32_pos[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-enum {\r
-    numInputs_float64 = 32\r
-};\r
-\r
-static const struct {\r
-    bits32 high, low;\r
-} inputs_float64[ numInputs_float64 ] = {\r
-    { 0x422FFFC0, 0x08000000 },\r
-    { 0xB7E00004, 0x80000000 },\r
-    { 0xF3FD2546, 0x120B7935 },\r
-    { 0x3FF00000, 0x00000000 },\r
-    { 0xCE07F766, 0xF09588D6 },\r
-    { 0x80000000, 0x00000000 },\r
-    { 0x3FCE0004, 0x00000000 },\r
-    { 0x8313B60F, 0x0032BED8 },\r
-    { 0xC1EFFFFF, 0xC0002000 },\r
-    { 0x3FB3C75D, 0x224F2B0F },\r
-    { 0x7FD00000, 0x004000FF },\r
-    { 0xA12FFF80, 0x00001FFF },\r
-    { 0x3EE00000, 0x00FE0000 },\r
-    { 0x00100000, 0x80000004 },\r
-    { 0x41CFFFFE, 0x00000020 },\r
-    { 0x40303FFF, 0xFFFFFFFD },\r
-    { 0x3FD00000, 0x3FEFFFFF },\r
-    { 0xBFD00000, 0x10000000 },\r
-    { 0xB7FC6B5C, 0x16CA55CF },\r
-    { 0x413EEB94, 0x0B9D1301 },\r
-    { 0xC7E00200, 0x001FFFFF },\r
-    { 0x47F00021, 0xFFFFFFFE },\r
-    { 0xBFFFFFFF, 0xF80000FF },\r
-    { 0xC07FFFFF, 0xE00FFFFF },\r
-    { 0x001497A6, 0x3740C5E8 },\r
-    { 0xC4BFFFE0, 0x001FFFFF },\r
-    { 0x96FFDFFE, 0xFFFFFFFF },\r
-    { 0x403FC000, 0x000001FE },\r
-    { 0xFFD00000, 0x000001F6 },\r
-    { 0x06404000, 0x02000000 },\r
-    { 0x479CEE1E, 0x4F789FE0 },\r
-    { 0xC237FFFF, 0xFFFFFDFE }\r
-};\r
-\r
-static void time_a_float64_z_int32( int32 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float64 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float64[ inputNum ].low;\r
-            a.high = inputs_float64[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float64[ inputNum ].low;\r
-        a.high = inputs_float64[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float64_z_float32( float32 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float64 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float64[ inputNum ].low;\r
-            a.high = inputs_float64[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float64[ inputNum ].low;\r
-        a.high = inputs_float64[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_az_float64( float64 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float64 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float64[ inputNum ].low;\r
-            a.high = inputs_float64[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float64[ inputNum ].low;\r
-        a.high = inputs_float64[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_ab_float64_z_flag( flag function( float64, float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-    float64 a, b;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float64[ inputNumA ].low;\r
-            a.high = inputs_float64[ inputNumA ].high;\r
-            b.low = inputs_float64[ inputNumB ].low;\r
-            b.high = inputs_float64[ inputNumB ].high;\r
-            function( a, b );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float64[ inputNumA ].low;\r
-        a.high = inputs_float64[ inputNumA ].high;\r
-        b.low = inputs_float64[ inputNumB ].low;\r
-        b.high = inputs_float64[ inputNumB ].high;\r
-        function( a, b );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_abz_float64( float64 function( float64, float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-    float64 a, b;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float64[ inputNumA ].low;\r
-            a.high = inputs_float64[ inputNumA ].high;\r
-            b.low = inputs_float64[ inputNumB ].low;\r
-            b.high = inputs_float64[ inputNumB ].high;\r
-            function( a, b );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float64[ inputNumA ].low;\r
-        a.high = inputs_float64[ inputNumA ].high;\r
-        b.low = inputs_float64[ inputNumB ].low;\r
-        b.high = inputs_float64[ inputNumB ].high;\r
-        function( a, b );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static const struct {\r
-    bits32 high, low;\r
-} inputs_float64_pos[ numInputs_float64 ] = {\r
-    { 0x422FFFC0, 0x08000000 },\r
-    { 0x37E00004, 0x80000000 },\r
-    { 0x73FD2546, 0x120B7935 },\r
-    { 0x3FF00000, 0x00000000 },\r
-    { 0x4E07F766, 0xF09588D6 },\r
-    { 0x00000000, 0x00000000 },\r
-    { 0x3FCE0004, 0x00000000 },\r
-    { 0x0313B60F, 0x0032BED8 },\r
-    { 0x41EFFFFF, 0xC0002000 },\r
-    { 0x3FB3C75D, 0x224F2B0F },\r
-    { 0x7FD00000, 0x004000FF },\r
-    { 0x212FFF80, 0x00001FFF },\r
-    { 0x3EE00000, 0x00FE0000 },\r
-    { 0x00100000, 0x80000004 },\r
-    { 0x41CFFFFE, 0x00000020 },\r
-    { 0x40303FFF, 0xFFFFFFFD },\r
-    { 0x3FD00000, 0x3FEFFFFF },\r
-    { 0x3FD00000, 0x10000000 },\r
-    { 0x37FC6B5C, 0x16CA55CF },\r
-    { 0x413EEB94, 0x0B9D1301 },\r
-    { 0x47E00200, 0x001FFFFF },\r
-    { 0x47F00021, 0xFFFFFFFE },\r
-    { 0x3FFFFFFF, 0xF80000FF },\r
-    { 0x407FFFFF, 0xE00FFFFF },\r
-    { 0x001497A6, 0x3740C5E8 },\r
-    { 0x44BFFFE0, 0x001FFFFF },\r
-    { 0x16FFDFFE, 0xFFFFFFFF },\r
-    { 0x403FC000, 0x000001FE },\r
-    { 0x7FD00000, 0x000001F6 },\r
-    { 0x06404000, 0x02000000 },\r
-    { 0x479CEE1E, 0x4F789FE0 },\r
-    { 0x4237FFFF, 0xFFFFFDFE }\r
-};\r
-\r
-static void time_az_float64_pos( float64 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float64 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float64_pos[ inputNum ].low;\r
-            a.high = inputs_float64_pos[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float64_pos[ inputNum ].low;\r
-        a.high = inputs_float64_pos[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-enum {\r
-    INT32_TO_FLOAT32 = 1,\r
-    INT32_TO_FLOAT64,\r
-    FLOAT32_TO_INT32,\r
-    FLOAT32_TO_INT32_ROUND_TO_ZERO,\r
-    FLOAT32_TO_FLOAT64,\r
-    FLOAT32_ROUND_TO_INT,\r
-    FLOAT32_ADD,\r
-    FLOAT32_SUB,\r
-    FLOAT32_MUL,\r
-    FLOAT32_DIV,\r
-    FLOAT32_REM,\r
-    FLOAT32_SQRT,\r
-    FLOAT32_EQ,\r
-    FLOAT32_LE,\r
-    FLOAT32_LT,\r
-    FLOAT32_EQ_SIGNALING,\r
-    FLOAT32_LE_QUIET,\r
-    FLOAT32_LT_QUIET,\r
-    FLOAT64_TO_INT32,\r
-    FLOAT64_TO_INT32_ROUND_TO_ZERO,\r
-    FLOAT64_TO_FLOAT32,\r
-    FLOAT64_ROUND_TO_INT,\r
-    FLOAT64_ADD,\r
-    FLOAT64_SUB,\r
-    FLOAT64_MUL,\r
-    FLOAT64_DIV,\r
-    FLOAT64_REM,\r
-    FLOAT64_SQRT,\r
-    FLOAT64_EQ,\r
-    FLOAT64_LE,\r
-    FLOAT64_LT,\r
-    FLOAT64_EQ_SIGNALING,\r
-    FLOAT64_LE_QUIET,\r
-    FLOAT64_LT_QUIET,\r
-    NUM_FUNCTIONS\r
-};\r
-\r
-static struct {\r
-    char *name;\r
-    int8 numInputs;\r
-    flag roundingMode, tininessMode;\r
-} functions[ NUM_FUNCTIONS ] = {\r
-    { 0, 0, 0, 0 },\r
-    { "int32_to_float32",                1, TRUE,  FALSE },\r
-    { "int32_to_float64",                1, FALSE, FALSE },\r
-    { "float32_to_int32",                1, TRUE,  FALSE },\r
-    { "float32_to_int32_round_to_zero",  1, FALSE, FALSE },\r
-    { "float32_to_float64",              1, FALSE, FALSE },\r
-    { "float32_round_to_int",            1, TRUE,  FALSE },\r
-    { "float32_add",                     2, TRUE,  FALSE },\r
-    { "float32_sub",                     2, TRUE,  FALSE },\r
-    { "float32_mul",                     2, TRUE,  TRUE, },\r
-    { "float32_div",                     2, TRUE,  FALSE },\r
-    { "float32_rem",                     2, FALSE, FALSE },\r
-    { "float32_sqrt",                    1, TRUE,  FALSE },\r
-    { "float32_eq",                      2, FALSE, FALSE },\r
-    { "float32_le",                      2, FALSE, FALSE },\r
-    { "float32_lt",                      2, FALSE, FALSE },\r
-    { "float32_eq_signaling",            2, FALSE, FALSE },\r
-    { "float32_le_quiet",                2, FALSE, FALSE },\r
-    { "float32_lt_quiet",                2, FALSE, FALSE },\r
-    { "float64_to_int32",                1, TRUE,  FALSE },\r
-    { "float64_to_int32_round_to_zero",  1, FALSE, FALSE },\r
-    { "float64_to_float32",              1, TRUE,  TRUE, },\r
-    { "float64_round_to_int",            1, TRUE,  FALSE },\r
-    { "float64_add",                     2, TRUE,  FALSE },\r
-    { "float64_sub",                     2, TRUE,  FALSE },\r
-    { "float64_mul",                     2, TRUE,  TRUE, },\r
-    { "float64_div",                     2, TRUE,  FALSE },\r
-    { "float64_rem",                     2, FALSE, FALSE },\r
-    { "float64_sqrt",                    1, TRUE,  FALSE },\r
-    { "float64_eq",                      2, FALSE, FALSE },\r
-    { "float64_le",                      2, FALSE, FALSE },\r
-    { "float64_lt",                      2, FALSE, FALSE },\r
-    { "float64_eq_signaling",            2, FALSE, FALSE },\r
-    { "float64_le_quiet",                2, FALSE, FALSE },\r
-    { "float64_lt_quiet",                2, FALSE, FALSE }\r
-};\r
-\r
-enum {\r
-    ROUND_NEAREST_EVEN = 1,\r
-    ROUND_TO_ZERO,\r
-    ROUND_DOWN,\r
-    ROUND_UP,\r
-    NUM_ROUNDINGMODES\r
-};\r
-enum {\r
-    TININESS_BEFORE_ROUNDING = 1,\r
-    TININESS_AFTER_ROUNDING,\r
-    NUM_TININESSMODES\r
-};\r
-\r
-static void\r
- timeFunctionVariety(\r
-     uint8 functionCode, int8 roundingMode, int8 tininessMode )\r
-{\r
-    uint8 roundingCode;\r
-    int8 tininessCode;\r
-\r
-    functionName = functions[ functionCode ].name;\r
-    switch ( roundingMode ) {\r
-     case 0:\r
-        roundingModeName = 0;\r
-        roundingCode = float_round_nearest_even;\r
-        break;\r
-     case ROUND_NEAREST_EVEN:\r
-        roundingModeName = "nearest_even";\r
-        roundingCode = float_round_nearest_even;\r
-        break;\r
-     case ROUND_TO_ZERO:\r
-        roundingModeName = "to_zero";\r
-        roundingCode = float_round_to_zero;\r
-        break;\r
-     case ROUND_DOWN:\r
-        roundingModeName = "down";\r
-        roundingCode = float_round_down;\r
-        break;\r
-     case ROUND_UP:\r
-        roundingModeName = "up";\r
-        roundingCode = float_round_up;\r
-        break;\r
-    }\r
-    float_rounding_mode = roundingCode;\r
-    switch ( tininessMode ) {\r
-     case 0:\r
-        tininessModeName = 0;\r
-        tininessCode = float_tininess_after_rounding;\r
-        break;\r
-     case TININESS_BEFORE_ROUNDING:\r
-        tininessModeName = "before";\r
-        tininessCode = float_tininess_before_rounding;\r
-        break;\r
-     case TININESS_AFTER_ROUNDING:\r
-        tininessModeName = "after";\r
-        tininessCode = float_tininess_after_rounding;\r
-        break;\r
-    }\r
-    float_detect_tininess = tininessCode;\r
-    switch ( functionCode ) {\r
-     case INT32_TO_FLOAT32:\r
-        time_a_int32_z_float32( int32_to_float32 );\r
-        break;\r
-     case INT32_TO_FLOAT64:\r
-        time_a_int32_z_float64( int32_to_float64 );\r
-        break;\r
-     case FLOAT32_TO_INT32:\r
-        time_a_float32_z_int32( float32_to_int32 );\r
-        break;\r
-     case FLOAT32_TO_INT32_ROUND_TO_ZERO:\r
-        time_a_float32_z_int32( float32_to_int32_round_to_zero );\r
-        break;\r
-     case FLOAT32_TO_FLOAT64:\r
-        time_a_float32_z_float64( float32_to_float64 );\r
-        break;\r
-     case FLOAT32_ROUND_TO_INT:\r
-        time_az_float32( float32_round_to_int );\r
-        break;\r
-     case FLOAT32_ADD:\r
-        time_abz_float32( float32_add );\r
-        break;\r
-     case FLOAT32_SUB:\r
-        time_abz_float32( float32_sub );\r
-        break;\r
-     case FLOAT32_MUL:\r
-        time_abz_float32( float32_mul );\r
-        break;\r
-     case FLOAT32_DIV:\r
-        time_abz_float32( float32_div );\r
-        break;\r
-     case FLOAT32_REM:\r
-        time_abz_float32( float32_rem );\r
-        break;\r
-     case FLOAT32_SQRT:\r
-        time_az_float32_pos( float32_sqrt );\r
-        break;\r
-     case FLOAT32_EQ:\r
-        time_ab_float32_z_flag( float32_eq );\r
-        break;\r
-     case FLOAT32_LE:\r
-        time_ab_float32_z_flag( float32_le );\r
-        break;\r
-     case FLOAT32_LT:\r
-        time_ab_float32_z_flag( float32_lt );\r
-        break;\r
-     case FLOAT32_EQ_SIGNALING:\r
-        time_ab_float32_z_flag( float32_eq_signaling );\r
-        break;\r
-     case FLOAT32_LE_QUIET:\r
-        time_ab_float32_z_flag( float32_le_quiet );\r
-        break;\r
-     case FLOAT32_LT_QUIET:\r
-        time_ab_float32_z_flag( float32_lt_quiet );\r
-        break;\r
-     case FLOAT64_TO_INT32:\r
-        time_a_float64_z_int32( float64_to_int32 );\r
-        break;\r
-     case FLOAT64_TO_INT32_ROUND_TO_ZERO:\r
-        time_a_float64_z_int32( float64_to_int32_round_to_zero );\r
-        break;\r
-     case FLOAT64_TO_FLOAT32:\r
-        time_a_float64_z_float32( float64_to_float32 );\r
-        break;\r
-     case FLOAT64_ROUND_TO_INT:\r
-        time_az_float64( float64_round_to_int );\r
-        break;\r
-     case FLOAT64_ADD:\r
-        time_abz_float64( float64_add );\r
-        break;\r
-     case FLOAT64_SUB:\r
-        time_abz_float64( float64_sub );\r
-        break;\r
-     case FLOAT64_MUL:\r
-        time_abz_float64( float64_mul );\r
-        break;\r
-     case FLOAT64_DIV:\r
-        time_abz_float64( float64_div );\r
-        break;\r
-     case FLOAT64_REM:\r
-        time_abz_float64( float64_rem );\r
-        break;\r
-     case FLOAT64_SQRT:\r
-        time_az_float64_pos( float64_sqrt );\r
-        break;\r
-     case FLOAT64_EQ:\r
-        time_ab_float64_z_flag( float64_eq );\r
-        break;\r
-     case FLOAT64_LE:\r
-        time_ab_float64_z_flag( float64_le );\r
-        break;\r
-     case FLOAT64_LT:\r
-        time_ab_float64_z_flag( float64_lt );\r
-        break;\r
-     case FLOAT64_EQ_SIGNALING:\r
-        time_ab_float64_z_flag( float64_eq_signaling );\r
-        break;\r
-     case FLOAT64_LE_QUIET:\r
-        time_ab_float64_z_flag( float64_le_quiet );\r
-        break;\r
-     case FLOAT64_LT_QUIET:\r
-        time_ab_float64_z_flag( float64_lt_quiet );\r
-        break;\r
-    }\r
-\r
-}\r
-\r
-static void\r
- timeFunction( uint8 functionCode, int8 roundingModeIn, int8 tininessModeIn )\r
-{\r
-    int8 roundingMode, tininessMode;\r
-\r
-    for ( roundingMode = 1;\r
-          roundingMode < NUM_ROUNDINGMODES;\r
-          ++roundingMode\r
-        ) {\r
-        if ( ! functions[ functionCode ].roundingMode ) {\r
-            roundingMode = 0;\r
-        }\r
-        else if ( roundingModeIn ) {\r
-            roundingMode = roundingModeIn;\r
-        }\r
-        for ( tininessMode = 1;\r
-              tininessMode < NUM_TININESSMODES;\r
-              ++tininessMode\r
-            ) {\r
-            if ( ! functions[ functionCode ].tininessMode ) {\r
-                tininessMode = 0;\r
-            }\r
-            else if ( tininessModeIn ) {\r
-                tininessMode = tininessModeIn;\r
-            }\r
-            timeFunctionVariety( functionCode, roundingMode, tininessMode );\r
-            if ( tininessModeIn || ! tininessMode ) break;\r
-        }\r
-        if ( roundingModeIn || ! roundingMode ) break;\r
-    }\r
-\r
-}\r
-\r
-main( int argc, char **argv )\r
-{\r
-    char *argPtr;\r
-    flag functionArgument;\r
-    uint8 functionCode;\r
-    int8 operands, roundingMode, tininessMode;\r
-\r
-    if ( argc <= 1 ) goto writeHelpMessage;\r
-    functionArgument = FALSE;\r
-    functionCode = 0;\r
-    operands = 0;\r
-    roundingMode = 0;\r
-    tininessMode = 0;\r
-    --argc;\r
-    ++argv;\r
-    while ( argc && ( argPtr = argv[ 0 ] ) ) {\r
-        if ( argPtr[ 0 ] == '-' ) ++argPtr;\r
-        if ( strcmp( argPtr, "help" ) == 0 ) {\r
- writeHelpMessage:\r
-            fputs(\r
-"timesoftfloat [<option>...] <function>\n"\r
-"  <option>:  (* is default)\n"\r
-"    -help            --Write this message and exit.\n"\r
-"    -nearesteven     --Only time rounding to nearest/even.\n"\r
-"    -tozero          --Only time rounding to zero.\n"\r
-"    -down            --Only time rounding down.\n"\r
-"    -up              --Only time rounding up.\n"\r
-"    -tininessbefore  --Only time underflow tininess before rounding.\n"\r
-"    -tininessafter   --Only time underflow tininess after rounding.\n"\r
-"  <function>:\n"\r
-"    int32_to_<float>                 <float>_add   <float>_eq\n"\r
-"    <float>_to_int32                 <float>_sub   <float>_le\n"\r
-"    <float>_to_int32_round_to_zero   <float>_mul   <float>_lt\n"\r
-"    <float>_to_<float>               <float>_div   <float>_eq_signaling\n"\r
-"    <float>_round_to_int             <float>_rem   <float>_le_quiet\n"\r
-"    <float>_sqrt                                   <float>_lt_quiet\n"\r
-"    -all1            --All 1-operand functions.\n"\r
-"    -all2            --All 2-operand functions.\n"\r
-"    -all             --All functions.\n"\r
-"  <float>:\n"\r
-"    float32          --Single precision.\n"\r
-"    float64          --Double precision.\n",\r
-                stdout\r
-            );\r
-            return EXIT_SUCCESS;\r
-        }\r
-        else if (    ( strcmp( argPtr, "nearesteven" ) == 0 )\r
-                  || ( strcmp( argPtr, "nearest_even" ) == 0 ) ) {\r
-            roundingMode = ROUND_NEAREST_EVEN;\r
-        }\r
-        else if (    ( strcmp( argPtr, "tozero" ) == 0 )\r
-                  || ( strcmp( argPtr, "to_zero" ) == 0 ) ) {\r
-            roundingMode = ROUND_TO_ZERO;\r
-        }\r
-        else if ( strcmp( argPtr, "down" ) == 0 ) {\r
-            roundingMode = ROUND_DOWN;\r
-        }\r
-        else if ( strcmp( argPtr, "up" ) == 0 ) {\r
-            roundingMode = ROUND_UP;\r
-        }\r
-        else if ( strcmp( argPtr, "tininessbefore" ) == 0 ) {\r
-            tininessMode = TININESS_BEFORE_ROUNDING;\r
-        }\r
-        else if ( strcmp( argPtr, "tininessafter" ) == 0 ) {\r
-            tininessMode = TININESS_AFTER_ROUNDING;\r
-        }\r
-        else if ( strcmp( argPtr, "all1" ) == 0 ) {\r
-            functionArgument = TRUE;\r
-            functionCode = 0;\r
-            operands = 1;\r
-        }\r
-        else if ( strcmp( argPtr, "all2" ) == 0 ) {\r
-            functionArgument = TRUE;\r
-            functionCode = 0;\r
-            operands = 2;\r
-        }\r
-        else if ( strcmp( argPtr, "all" ) == 0 ) {\r
-            functionArgument = TRUE;\r
-            functionCode = 0;\r
-            operands = 0;\r
-        }\r
-        else {\r
-            for ( functionCode = 1;\r
-                  functionCode < NUM_FUNCTIONS;\r
-                  ++functionCode \r
-                ) {\r
-                if ( strcmp( argPtr, functions[ functionCode ].name ) == 0 ) {\r
-                    break;\r
-                }\r
-            }\r
-            if ( functionCode == NUM_FUNCTIONS ) {\r
-                fail( "Invalid option or function `%s'", argv[ 0 ] );\r
-            }\r
-            functionArgument = TRUE;\r
-        }\r
-        --argc;\r
-        ++argv;\r
-    }\r
-    if ( ! functionArgument ) fail( "Function argument required" );\r
-    if ( functionCode ) {\r
-        timeFunction( functionCode, roundingMode, tininessMode );\r
-    }\r
-    else if ( operands == 1 ) {\r
-        for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode\r
-            ) {\r
-            if ( functions[ functionCode ].numInputs == 1 ) {\r
-                timeFunction( functionCode, roundingMode, tininessMode );\r
-            }\r
-        }\r
-    }\r
-    else if ( operands == 2 ) {\r
-        for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode\r
-            ) {\r
-            if ( functions[ functionCode ].numInputs == 2 ) {\r
-                timeFunction( functionCode, roundingMode, tininessMode );\r
-            }\r
-        }\r
-    }\r
-    else {\r
-        for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode\r
-            ) {\r
-            timeFunction( functionCode, roundingMode, tininessMode );\r
-        }\r
-    }\r
-    return EXIT_SUCCESS;\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/bits64/386-Win32-GCC/milieu.h b/float/softfloat/softfloat/bits64/386-Win32-GCC/milieu.h
deleted file mode 100644 (file)
index 2da74cd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Include common integer types and flags.\r
-*----------------------------------------------------------------------------*/\r
-#include "../../../processors/386-GCC.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Symbolic Boolean literals.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    FALSE = 0,\r
-    TRUE  = 1\r
-};\r
-\r
diff --git a/float/softfloat/softfloat/bits64/386-Win32-GCC/softfloat-specialize b/float/softfloat/softfloat/bits64/386-Win32-GCC/softfloat-specialize
deleted file mode 100644 (file)
index 7266bee..0000000
+++ /dev/null
@@ -1,464 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point\r
-Arithmetic Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Underflow tininess-detection mode, statically initialized to default value.\r
-| (The declaration in `softfloat.h' must match the `int8' type here.)\r
-*----------------------------------------------------------------------------*/\r
-int8 float_detect_tininess = float_tininess_after_rounding;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Raises the exceptions specified by `flags'.  Floating-point traps can be\r
-| defined here if desired.  It is currently not possible for such a trap\r
-| to substitute a result value.  If traps are not implemented, this routine\r
-| should be simply `float_exception_flags |= flags;'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-void float_raise( int8 flags )\r
-{\r
-\r
-    float_exception_flags |= flags;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Internal canonical NaN format.\r
-*----------------------------------------------------------------------------*/\r
-typedef struct {\r
-    flag sign;\r
-    bits64 high, low;\r
-} commonNaNT;\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated single-precision NaN.\r
-*----------------------------------------------------------------------------*/\r
-#define float32_default_nan 0xFFC00000\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_nan( float32 a )\r
-{\r
-\r
-    return ( 0xFF000000 < (bits32) ( a<<1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_signaling_nan( float32 a )\r
-{\r
-\r
-    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float32ToCommonNaN( float32 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a>>31;\r
-    z.low = 0;\r
-    z.high = ( (bits64) a )<<41;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the single-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 commonNaNToFloat32( commonNaNT a )\r
-{\r
-\r
-    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two single-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 propagateFloat32NaN( float32 a, float32 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float32_is_nan( a );\r
-    aIsSignalingNaN = float32_is_signaling_nan( a );\r
-    bIsNaN = float32_is_nan( b );\r
-    bIsSignalingNaN = float32_is_signaling_nan( b );\r
-    a |= 0x00400000;\r
-    b |= 0x00400000;\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsSignalingNaN ) {\r
-        if ( bIsSignalingNaN ) goto returnLargerSignificand;\r
-        return bIsNaN ? b : a;\r
-    }\r
-    else if ( aIsNaN ) {\r
-        if ( bIsSignalingNaN | ! bIsNaN ) return a;\r
- returnLargerSignificand:\r
-        if ( (bits32) ( a<<1 ) < (bits32) ( b<<1 ) ) return b;\r
-        if ( (bits32) ( b<<1 ) < (bits32) ( a<<1 ) ) return a;\r
-        return ( a < b ) ? a : b;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated double-precision NaN.\r
-*----------------------------------------------------------------------------*/\r
-#define float64_default_nan LIT64( 0xFFF8000000000000 )\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_nan( float64 a )\r
-{\r
-\r
-    return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_signaling_nan( float64 a )\r
-{\r
-\r
-    return\r
-           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )\r
-        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float64ToCommonNaN( float64 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a>>63;\r
-    z.low = 0;\r
-    z.high = a<<12;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the double-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 commonNaNToFloat64( commonNaNT a )\r
-{\r
-\r
-    return\r
-          ( ( (bits64) a.sign )<<63 )\r
-        | LIT64( 0x7FF8000000000000 )\r
-        | ( a.high>>12 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two double-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 propagateFloat64NaN( float64 a, float64 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float64_is_nan( a );\r
-    aIsSignalingNaN = float64_is_signaling_nan( a );\r
-    bIsNaN = float64_is_nan( b );\r
-    bIsSignalingNaN = float64_is_signaling_nan( b );\r
-    a |= LIT64( 0x0008000000000000 );\r
-    b |= LIT64( 0x0008000000000000 );\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsSignalingNaN ) {\r
-        if ( bIsSignalingNaN ) goto returnLargerSignificand;\r
-        return bIsNaN ? b : a;\r
-    }\r
-    else if ( aIsNaN ) {\r
-        if ( bIsSignalingNaN | ! bIsNaN ) return a;\r
- returnLargerSignificand:\r
-        if ( (bits64) ( a<<1 ) < (bits64) ( b<<1 ) ) return b;\r
-        if ( (bits64) ( b<<1 ) < (bits64) ( a<<1 ) ) return a;\r
-        return ( a < b ) ? a : b;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated extended double-precision NaN.  The\r
-| `high' and `low' values hold the most- and least-significant bits,\r
-| respectively.\r
-*----------------------------------------------------------------------------*/\r
-#define floatx80_default_nan_high 0xFFFF\r
-#define floatx80_default_nan_low  LIT64( 0xC000000000000000 )\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is a\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_is_nan( floatx80 a )\r
-{\r
-\r
-    return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is a\r
-| signaling NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_is_signaling_nan( floatx80 a )\r
-{\r
-    bits64 aLow;\r
-\r
-    aLow = a.low & ~ LIT64( 0x4000000000000000 );\r
-    return\r
-           ( ( a.high & 0x7FFF ) == 0x7FFF )\r
-        && (bits64) ( aLow<<1 )\r
-        && ( a.low == aLow );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point NaN `a' to the canonical NaN format.  If `a' is a signaling NaN, the\r
-| invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT floatx80ToCommonNaN( floatx80 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a.high>>15;\r
-    z.low = 0;\r
-    z.high = a.low<<1;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the extended\r
-| double-precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80 commonNaNToFloatx80( commonNaNT a )\r
-{\r
-    floatx80 z;\r
-\r
-    z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );\r
-    z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two extended double-precision floating-point values `a' and `b', one\r
-| of which is a NaN, and returns the appropriate NaN result.  If either `a' or\r
-| `b' is a signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = floatx80_is_nan( a );\r
-    aIsSignalingNaN = floatx80_is_signaling_nan( a );\r
-    bIsNaN = floatx80_is_nan( b );\r
-    bIsSignalingNaN = floatx80_is_signaling_nan( b );\r
-    a.low |= LIT64( 0xC000000000000000 );\r
-    b.low |= LIT64( 0xC000000000000000 );\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsSignalingNaN ) {\r
-        if ( bIsSignalingNaN ) goto returnLargerSignificand;\r
-        return bIsNaN ? b : a;\r
-    }\r
-    else if ( aIsNaN ) {\r
-        if ( bIsSignalingNaN | ! bIsNaN ) return a;\r
- returnLargerSignificand:\r
-        if ( a.low < b.low ) return b;\r
-        if ( b.low < a.low ) return a;\r
-        return ( a.high < b.high ) ? a : b;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated quadruple-precision NaN.  The `high' and\r
-| `low' values hold the most- and least-significant bits, respectively.\r
-*----------------------------------------------------------------------------*/\r
-#define float128_default_nan_high LIT64( 0xFFFF800000000000 )\r
-#define float128_default_nan_low  LIT64( 0x0000000000000000 )\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_is_nan( float128 a )\r
-{\r
-\r
-    return\r
-           ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )\r
-        && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is a\r
-| signaling NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_is_signaling_nan( float128 a )\r
-{\r
-\r
-    return\r
-           ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )\r
-        && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float128ToCommonNaN( float128 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a.high>>63;\r
-    shortShift128Left( a.high, a.low, 16, &z.high, &z.low );\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the quadruple-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128 commonNaNToFloat128( commonNaNT a )\r
-{\r
-    float128 z;\r
-\r
-    shift128Right( a.high, a.low, 16, &z.high, &z.low );\r
-    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two quadruple-precision floating-point values `a' and `b', one of\r
-| which is a NaN, and returns the appropriate NaN result.  If either `a' or\r
-| `b' is a signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128 propagateFloat128NaN( float128 a, float128 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float128_is_nan( a );\r
-    aIsSignalingNaN = float128_is_signaling_nan( a );\r
-    bIsNaN = float128_is_nan( b );\r
-    bIsSignalingNaN = float128_is_signaling_nan( b );\r
-    a.high |= LIT64( 0x0000800000000000 );\r
-    b.high |= LIT64( 0x0000800000000000 );\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsSignalingNaN ) {\r
-        if ( bIsSignalingNaN ) goto returnLargerSignificand;\r
-        return bIsNaN ? b : a;\r
-    }\r
-    else if ( aIsNaN ) {\r
-        if ( bIsSignalingNaN | ! bIsNaN ) return a;\r
- returnLargerSignificand:\r
-        if ( lt128( a.high<<1, a.low, b.high<<1, b.low ) ) return b;\r
-        if ( lt128( b.high<<1, b.low, a.high<<1, a.low ) ) return a;\r
-        return ( a.high < b.high ) ? a : b;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/float/softfloat/softfloat/bits64/386-Win32-GCC/softfloat.h b/float/softfloat/softfloat/bits64/386-Win32-GCC/softfloat.h
deleted file mode 100644 (file)
index 1658ad9..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| The macro `FLOATX80' must be defined to enable the extended double-precision\r
-| floating-point format `floatx80'.  If this macro is not defined, the\r
-| `floatx80' type will not be defined, and none of the functions that either\r
-| input or output the `floatx80' type will be defined.  The same applies to\r
-| the `FLOAT128' macro and the quadruple-precision format `float128'.\r
-*----------------------------------------------------------------------------*/\r
-#define FLOATX80\r
-#define FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point types.\r
-*----------------------------------------------------------------------------*/\r
-typedef unsigned int float32;\r
-typedef unsigned long long float64;\r
-#ifdef FLOATX80\r
-typedef struct {\r
-    unsigned long long low;\r
-    unsigned short high;\r
-} floatx80;\r
-#endif\r
-#ifdef FLOAT128\r
-typedef struct {\r
-    unsigned long long low, high;\r
-} float128;\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point underflow tininess-detection mode.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char float_detect_tininess;\r
-enum {\r
-    float_tininess_after_rounding  = 0,\r
-    float_tininess_before_rounding = 1\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point rounding mode.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char float_rounding_mode;\r
-enum {\r
-    float_round_nearest_even = 0,\r
-    float_round_down         = 1,\r
-    float_round_up           = 2,\r
-    float_round_to_zero      = 3\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point exception flags.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char float_exception_flags;\r
-enum {\r
-    float_flag_invalid   =  1,\r
-    float_flag_divbyzero =  4,\r
-    float_flag_overflow  =  8,\r
-    float_flag_underflow = 16,\r
-    float_flag_inexact   = 32\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Routine to raise any or all of the software IEC/IEEE floating-point\r
-| exception flags.\r
-*----------------------------------------------------------------------------*/\r
-void float_raise( signed char );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE integer-to-floating-point conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-float32 int32_to_float32( int );\r
-float64 int32_to_float64( int );\r
-#ifdef FLOATX80\r
-floatx80 int32_to_floatx80( int );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 int32_to_float128( int );\r
-#endif\r
-float32 int64_to_float32( long long );\r
-float64 int64_to_float64( long long );\r
-#ifdef FLOATX80\r
-floatx80 int64_to_floatx80( long long );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 int64_to_float128( long long );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-int float32_to_int32( float32 );\r
-int float32_to_int32_round_to_zero( float32 );\r
-long long float32_to_int64( float32 );\r
-long long float32_to_int64_round_to_zero( float32 );\r
-float64 float32_to_float64( float32 );\r
-#ifdef FLOATX80\r
-floatx80 float32_to_floatx80( float32 );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 float32_to_float128( float32 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float32 float32_round_to_int( float32 );\r
-float32 float32_add( float32, float32 );\r
-float32 float32_sub( float32, float32 );\r
-float32 float32_mul( float32, float32 );\r
-float32 float32_div( float32, float32 );\r
-float32 float32_rem( float32, float32 );\r
-float32 float32_sqrt( float32 );\r
-char float32_eq( float32, float32 );\r
-char float32_le( float32, float32 );\r
-char float32_lt( float32, float32 );\r
-char float32_eq_signaling( float32, float32 );\r
-char float32_le_quiet( float32, float32 );\r
-char float32_lt_quiet( float32, float32 );\r
-char float32_is_signaling_nan( float32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-int float64_to_int32( float64 );\r
-int float64_to_int32_round_to_zero( float64 );\r
-long long float64_to_int64( float64 );\r
-long long float64_to_int64_round_to_zero( float64 );\r
-float32 float64_to_float32( float64 );\r
-#ifdef FLOATX80\r
-floatx80 float64_to_floatx80( float64 );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 float64_to_float128( float64 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float64 float64_round_to_int( float64 );\r
-float64 float64_add( float64, float64 );\r
-float64 float64_sub( float64, float64 );\r
-float64 float64_mul( float64, float64 );\r
-float64 float64_div( float64, float64 );\r
-float64 float64_rem( float64, float64 );\r
-float64 float64_sqrt( float64 );\r
-char float64_eq( float64, float64 );\r
-char float64_le( float64, float64 );\r
-char float64_lt( float64, float64 );\r
-char float64_eq_signaling( float64, float64 );\r
-char float64_le_quiet( float64, float64 );\r
-char float64_lt_quiet( float64, float64 );\r
-char float64_is_signaling_nan( float64 );\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE extended double-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-int floatx80_to_int32( floatx80 );\r
-int floatx80_to_int32_round_to_zero( floatx80 );\r
-long long floatx80_to_int64( floatx80 );\r
-long long floatx80_to_int64_round_to_zero( floatx80 );\r
-float32 floatx80_to_float32( floatx80 );\r
-float64 floatx80_to_float64( floatx80 );\r
-#ifdef FLOAT128\r
-float128 floatx80_to_float128( floatx80 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE extended double-precision rounding precision.  Valid\r
-| values are 32, 64, and 80.\r
-*----------------------------------------------------------------------------*/\r
-extern signed char floatx80_rounding_precision;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE extended double-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-floatx80 floatx80_round_to_int( floatx80 );\r
-floatx80 floatx80_add( floatx80, floatx80 );\r
-floatx80 floatx80_sub( floatx80, floatx80 );\r
-floatx80 floatx80_mul( floatx80, floatx80 );\r
-floatx80 floatx80_div( floatx80, floatx80 );\r
-floatx80 floatx80_rem( floatx80, floatx80 );\r
-floatx80 floatx80_sqrt( floatx80 );\r
-char floatx80_eq( floatx80, floatx80 );\r
-char floatx80_le( floatx80, floatx80 );\r
-char floatx80_lt( floatx80, floatx80 );\r
-char floatx80_eq_signaling( floatx80, floatx80 );\r
-char floatx80_le_quiet( floatx80, floatx80 );\r
-char floatx80_lt_quiet( floatx80, floatx80 );\r
-char floatx80_is_signaling_nan( floatx80 );\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE quadruple-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-int float128_to_int32( float128 );\r
-int float128_to_int32_round_to_zero( float128 );\r
-long long float128_to_int64( float128 );\r
-long long float128_to_int64_round_to_zero( float128 );\r
-float32 float128_to_float32( float128 );\r
-float64 float128_to_float64( float128 );\r
-#ifdef FLOATX80\r
-floatx80 float128_to_floatx80( float128 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE quadruple-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float128 float128_round_to_int( float128 );\r
-float128 float128_add( float128, float128 );\r
-float128 float128_sub( float128, float128 );\r
-float128 float128_mul( float128, float128 );\r
-float128 float128_div( float128, float128 );\r
-float128 float128_rem( float128, float128 );\r
-float128 float128_sqrt( float128 );\r
-char float128_eq( float128, float128 );\r
-char float128_le( float128, float128 );\r
-char float128_lt( float128, float128 );\r
-char float128_eq_signaling( float128, float128 );\r
-char float128_le_quiet( float128, float128 );\r
-char float128_lt_quiet( float128, float128 );\r
-char float128_is_signaling_nan( float128 );\r
-\r
-#endif\r
-\r
diff --git a/float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/milieu.h b/float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/milieu.h
deleted file mode 100644 (file)
index 9c75338..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic
-Package, Release 2b.
-
-Written by John R. Hauser.  This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704.  Funding was partially provided by the
-National Science Foundation under grant MIP-9311980.  The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
-
-=============================================================================*/
-
-/*----------------------------------------------------------------------------
-| Include common integer types and flags.
-*----------------------------------------------------------------------------*/
-#include "../../../processors/SPARC-GCC.h"
-
-/*----------------------------------------------------------------------------
-| Symbolic Boolean literals.
-*----------------------------------------------------------------------------*/
-enum {
-    FALSE = 0,
-    TRUE  = 1
-};
-
diff --git a/float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat-specialize b/float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat-specialize
deleted file mode 100644 (file)
index 28bd4fe..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-
-/*============================================================================
-
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2b.
-
-Written by John R. Hauser.  This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704.  Funding was partially provided by the
-National Science Foundation under grant MIP-9311980.  The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
-
-=============================================================================*/
-
-/*----------------------------------------------------------------------------
-| Underflow tininess-detection mode, statically initialized to default value.
-| (The declaration in `softfloat.h' must match the `int8' type here.)
-*----------------------------------------------------------------------------*/
-int8 float_detect_tininess = float_tininess_before_rounding;
-
-/*----------------------------------------------------------------------------
-| Raises the exceptions specified by `flags'.  Floating-point traps can be
-| defined here if desired.  It is currently not possible for such a trap
-| to substitute a result value.  If traps are not implemented, this routine
-| should be simply `float_exception_flags |= flags;'.
-*----------------------------------------------------------------------------*/
-
-void float_raise( int8 flags )
-{
-
-    float_exception_flags |= flags;
-
-}
-
-/*----------------------------------------------------------------------------
-| Internal canonical NaN format.
-*----------------------------------------------------------------------------*/
-typedef struct {
-    flag sign;
-    bits64 high, low;
-} commonNaNT;
-
-/*----------------------------------------------------------------------------
-| The pattern for a default generated single-precision NaN.
-*----------------------------------------------------------------------------*/
-#define float32_default_nan 0x7FFFFFFF
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the single-precision floating-point value `a' is a NaN;
-| otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float32_is_nan( float32 a )
-{
-
-    return ( 0xFF000000 < (bits32) ( a<<1 ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the single-precision floating-point value `a' is a signaling
-| NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float32_is_signaling_nan( float32 a )
-{
-
-    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the single-precision floating-point NaN
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid
-| exception is raised.
-*----------------------------------------------------------------------------*/
-
-static commonNaNT float32ToCommonNaN( float32 a )
-{
-    commonNaNT z;
-
-    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
-    z.sign = a>>31;
-    z.low = 0;
-    z.high = ( (bits64) a )<<41;
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the canonical NaN `a' to the single-
-| precision floating-point format.
-*----------------------------------------------------------------------------*/
-
-static float32 commonNaNToFloat32( commonNaNT a )
-{
-
-    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );
-
-}
-
-/*----------------------------------------------------------------------------
-| Takes two single-precision floating-point values `a' and `b', one of which
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a
-| signaling NaN, the invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static float32 propagateFloat32NaN( float32 a, float32 b )
-{
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
-    aIsNaN = float32_is_nan( a );
-    aIsSignalingNaN = float32_is_signaling_nan( a );
-    bIsNaN = float32_is_nan( b );
-    bIsSignalingNaN = float32_is_signaling_nan( b );
-    a |= 0x00400000;
-    b |= 0x00400000;
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
-    return bIsSignalingNaN ? b : aIsSignalingNaN ? a : bIsNaN ? b : a;
-
-}
-
-/*----------------------------------------------------------------------------
-| The pattern for a default generated double-precision NaN.
-*----------------------------------------------------------------------------*/
-#define float64_default_nan LIT64( 0x7FFFFFFFFFFFFFFF )
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the double-precision floating-point value `a' is a NaN;
-| otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float64_is_nan( float64 a )
-{
-
-    return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the double-precision floating-point value `a' is a signaling
-| NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float64_is_signaling_nan( float64 a )
-{
-
-    return
-           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
-        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the double-precision floating-point NaN
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid
-| exception is raised.
-*----------------------------------------------------------------------------*/
-
-static commonNaNT float64ToCommonNaN( float64 a )
-{
-    commonNaNT z;
-
-    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
-    z.sign = a>>63;
-    z.low = 0;
-    z.high = a<<12;
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the canonical NaN `a' to the double-
-| precision floating-point format.
-*----------------------------------------------------------------------------*/
-
-static float64 commonNaNToFloat64( commonNaNT a )
-{
-
-    return
-          ( ( (bits64) a.sign )<<63 )
-        | LIT64( 0x7FF8000000000000 )
-        | ( a.high>>12 );
-
-}
-
-/*----------------------------------------------------------------------------
-| Takes two double-precision floating-point values `a' and `b', one of which
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a
-| signaling NaN, the invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static float64 propagateFloat64NaN( float64 a, float64 b )
-{
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
-    aIsNaN = float64_is_nan( a );
-    aIsSignalingNaN = float64_is_signaling_nan( a );
-    bIsNaN = float64_is_nan( b );
-    bIsSignalingNaN = float64_is_signaling_nan( b );
-    a |= LIT64( 0x0008000000000000 );
-    b |= LIT64( 0x0008000000000000 );
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
-    return bIsSignalingNaN ? b : aIsSignalingNaN ? a : bIsNaN ? b : a;
-
-}
-
-#ifdef FLOATX80
-
-/*----------------------------------------------------------------------------
-| The pattern for a default generated extended double-precision NaN.  The
-| `high' and `low' values hold the most- and least-significant bits,
-| respectively.
-*----------------------------------------------------------------------------*/
-#define floatx80_default_nan_high 0x7FFF
-#define floatx80_default_nan_low  LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the extended double-precision floating-point value `a' is a
-| NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag floatx80_is_nan( floatx80 a )
-{
-
-    return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the extended double-precision floating-point value `a' is a
-| signaling NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag floatx80_is_signaling_nan( floatx80 a )
-{
-    bits64 aLow;
-
-    aLow = a.low & ~ LIT64( 0x4000000000000000 );
-    return
-           ( ( a.high & 0x7FFF ) == 0x7FFF )
-        && (bits64) ( aLow<<1 )
-        && ( a.low == aLow );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the extended double-precision floating-
-| point NaN `a' to the canonical NaN format.  If `a' is a signaling NaN, the
-| invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static commonNaNT floatx80ToCommonNaN( floatx80 a )
-{
-    commonNaNT z;
-
-    if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
-    z.sign = a.high>>15;
-    z.low = 0;
-    z.high = a.low<<1;
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the canonical NaN `a' to the extended
-| double-precision floating-point format.
-*----------------------------------------------------------------------------*/
-
-static floatx80 commonNaNToFloatx80( commonNaNT a )
-{
-    floatx80 z;
-
-    z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );
-    z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Takes two extended double-precision floating-point values `a' and `b', one
-| of which is a NaN, and returns the appropriate NaN result.  If either `a' or
-| `b' is a signaling NaN, the invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )
-{
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
-    aIsNaN = floatx80_is_nan( a );
-    aIsSignalingNaN = floatx80_is_signaling_nan( a );
-    bIsNaN = floatx80_is_nan( b );
-    bIsSignalingNaN = floatx80_is_signaling_nan( b );
-    a.low |= LIT64( 0xC000000000000000 );
-    b.low |= LIT64( 0xC000000000000000 );
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
-    return bIsSignalingNaN ? b : aIsSignalingNaN ? a : bIsNaN ? b : a;
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*----------------------------------------------------------------------------
-| The pattern for a default generated quadruple-precision NaN.  The `high' and
-| `low' values hold the most- and least-significant bits, respectively.
-*----------------------------------------------------------------------------*/
-#define float128_default_nan_high LIT64( 0x7FFFFFFFFFFFFFFF )
-#define float128_default_nan_low  LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the quadruple-precision floating-point value `a' is a NaN;
-| otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float128_is_nan( float128 a )
-{
-
-    return
-           ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )
-        && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns 1 if the quadruple-precision floating-point value `a' is a
-| signaling NaN; otherwise returns 0.
-*----------------------------------------------------------------------------*/
-
-flag float128_is_signaling_nan( float128 a )
-{
-
-    return
-           ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
-        && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the quadruple-precision floating-point NaN
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid
-| exception is raised.
-*----------------------------------------------------------------------------*/
-
-static commonNaNT float128ToCommonNaN( float128 a )
-{
-    commonNaNT z;
-
-    if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
-    z.sign = a.high>>63;
-    shortShift128Left( a.high, a.low, 16, &z.high, &z.low );
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Returns the result of converting the canonical NaN `a' to the quadruple-
-| precision floating-point format.
-*----------------------------------------------------------------------------*/
-
-static float128 commonNaNToFloat128( commonNaNT a )
-{
-    float128 z;
-
-    shift128Right( a.high, a.low, 16, &z.high, &z.low );
-    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );
-    return z;
-
-}
-
-/*----------------------------------------------------------------------------
-| Takes two quadruple-precision floating-point values `a' and `b', one of
-| which is a NaN, and returns the appropriate NaN result.  If either `a' or
-| `b' is a signaling NaN, the invalid exception is raised.
-*----------------------------------------------------------------------------*/
-
-static float128 propagateFloat128NaN( float128 a, float128 b )
-{
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
-    aIsNaN = float128_is_nan( a );
-    aIsSignalingNaN = float128_is_signaling_nan( a );
-    bIsNaN = float128_is_nan( b );
-    bIsSignalingNaN = float128_is_signaling_nan( b );
-    a.high |= LIT64( 0x0000800000000000 );
-    b.high |= LIT64( 0x0000800000000000 );
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
-    return bIsSignalingNaN ? b : aIsSignalingNaN ? a : bIsNaN ? b : a;
-
-}
-
-#endif
-
diff --git a/float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat.h b/float/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat.h
deleted file mode 100644 (file)
index eb5303a..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-
-/*============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic
-Package, Release 2b.
-
-Written by John R. Hauser.  This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704.  Funding was partially provided by the
-National Science Foundation under grant MIP-9311980.  The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
-
-=============================================================================*/
-
-/*----------------------------------------------------------------------------
-| The macro `FLOATX80' must be defined to enable the extended double-precision
-| floating-point format `floatx80'.  If this macro is not defined, the
-| `floatx80' type will not be defined, and none of the functions that either
-| input or output the `floatx80' type will be defined.  The same applies to
-| the `FLOAT128' macro and the quadruple-precision format `float128'.
-*----------------------------------------------------------------------------*/
-#define FLOATX80
-#define FLOAT128
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point types.
-*----------------------------------------------------------------------------*/
-typedef unsigned int float32;
-typedef unsigned long long float64;
-#ifdef FLOATX80
-typedef struct {
-    unsigned short high;
-    unsigned long long low;
-} floatx80;
-#endif
-#ifdef FLOAT128
-typedef struct {
-    unsigned long long high, low;
-} float128;
-#endif
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point underflow tininess-detection mode.
-*----------------------------------------------------------------------------*/
-extern int float_detect_tininess;
-enum {
-    float_tininess_after_rounding  = 0,
-    float_tininess_before_rounding = 1
-};
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point rounding mode.
-*----------------------------------------------------------------------------*/
-extern int float_rounding_mode;
-enum {
-    float_round_nearest_even = 0,
-    float_round_to_zero      = 1,
-    float_round_up           = 2,
-    float_round_down         = 3
-};
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE floating-point exception flags.
-*----------------------------------------------------------------------------*/
-extern int float_exception_flags;
-enum {
-    float_flag_inexact   =  1,
-    float_flag_divbyzero =  2,
-    float_flag_underflow =  4,
-    float_flag_overflow  =  8,
-    float_flag_invalid   = 16
-};
-
-/*----------------------------------------------------------------------------
-| Routine to raise any or all of the software IEC/IEEE floating-point
-| exception flags.
-*----------------------------------------------------------------------------*/
-void float_raise( int );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE integer-to-floating-point conversion routines.
-*----------------------------------------------------------------------------*/
-float32 int32_to_float32( int );
-float64 int32_to_float64( int );
-#ifdef FLOATX80
-floatx80 int32_to_floatx80( int );
-#endif
-#ifdef FLOAT128
-float128 int32_to_float128( int );
-#endif
-float32 int64_to_float32( long long );
-float64 int64_to_float64( long long );
-#ifdef FLOATX80
-floatx80 int64_to_floatx80( long long );
-#endif
-#ifdef FLOAT128
-float128 int64_to_float128( long long );
-#endif
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE single-precision conversion routines.
-*----------------------------------------------------------------------------*/
-int float32_to_int32( float32 );
-int float32_to_int32_round_to_zero( float32 );
-long long float32_to_int64( float32 );
-long long float32_to_int64_round_to_zero( float32 );
-float64 float32_to_float64( float32 );
-#ifdef FLOATX80
-floatx80 float32_to_floatx80( float32 );
-#endif
-#ifdef FLOAT128
-float128 float32_to_float128( float32 );
-#endif
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE single-precision operations.
-*----------------------------------------------------------------------------*/
-float32 float32_round_to_int( float32 );
-float32 float32_add( float32, float32 );
-float32 float32_sub( float32, float32 );
-float32 float32_mul( float32, float32 );
-float32 float32_div( float32, float32 );
-float32 float32_rem( float32, float32 );
-float32 float32_sqrt( float32 );
-int float32_eq( float32, float32 );
-int float32_le( float32, float32 );
-int float32_lt( float32, float32 );
-int float32_eq_signaling( float32, float32 );
-int float32_le_quiet( float32, float32 );
-int float32_lt_quiet( float32, float32 );
-int float32_is_signaling_nan( float32 );
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE double-precision conversion routines.
-*----------------------------------------------------------------------------*/
-int float64_to_int32( float64 );
-int float64_to_int32_round_to_zero( float64 );
-long long float64_to_int64( float64 );
-long long float64_to_int64_round_to_zero( float64 );
-float32 float64_to_float32( float64 );
-#ifdef FLOATX80
-floatx80 float64_to_floatx80( float64 );
-#endif
-#ifdef FLOAT128
-float128 float64_to_float128( float64 );
-#endif
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE double-precision operations.
-*----------------------------------------------------------------------------*/
-float64 float64_round_to_int( float64 );
-float64 float64_add( float64, float64 );
-float64 float64_sub( float64, float64 );
-float64 float64_mul( float64, float64 );
-float64 float64_div( float64, float64 );
-float64 float64_rem( float64, float64 );
-float64 float64_sqrt( float64 );
-int float64_eq( float64, float64 );
-int float64_le( float64, float64 );
-int float64_lt( float64, float64 );
-int float64_eq_signaling( float64, float64 );
-int float64_le_quiet( float64, float64 );
-int float64_lt_quiet( float64, float64 );
-int float64_is_signaling_nan( float64 );
-
-#ifdef FLOATX80
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE extended double-precision conversion routines.
-*----------------------------------------------------------------------------*/
-int floatx80_to_int32( floatx80 );
-int floatx80_to_int32_round_to_zero( floatx80 );
-long long floatx80_to_int64( floatx80 );
-long long floatx80_to_int64_round_to_zero( floatx80 );
-float32 floatx80_to_float32( floatx80 );
-float64 floatx80_to_float64( floatx80 );
-#ifdef FLOAT128
-float128 floatx80_to_float128( floatx80 );
-#endif
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE extended double-precision rounding precision.  Valid
-| values are 32, 64, and 80.
-*----------------------------------------------------------------------------*/
-extern int floatx80_rounding_precision;
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE extended double-precision operations.
-*----------------------------------------------------------------------------*/
-floatx80 floatx80_round_to_int( floatx80 );
-floatx80 floatx80_add( floatx80, floatx80 );
-floatx80 floatx80_sub( floatx80, floatx80 );
-floatx80 floatx80_mul( floatx80, floatx80 );
-floatx80 floatx80_div( floatx80, floatx80 );
-floatx80 floatx80_rem( floatx80, floatx80 );
-floatx80 floatx80_sqrt( floatx80 );
-int floatx80_eq( floatx80, floatx80 );
-int floatx80_le( floatx80, floatx80 );
-int floatx80_lt( floatx80, floatx80 );
-int floatx80_eq_signaling( floatx80, floatx80 );
-int floatx80_le_quiet( floatx80, floatx80 );
-int floatx80_lt_quiet( floatx80, floatx80 );
-int floatx80_is_signaling_nan( floatx80 );
-
-#endif
-
-#ifdef FLOAT128
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE quadruple-precision conversion routines.
-*----------------------------------------------------------------------------*/
-int float128_to_int32( float128 );
-int float128_to_int32_round_to_zero( float128 );
-long long float128_to_int64( float128 );
-long long float128_to_int64_round_to_zero( float128 );
-float32 float128_to_float32( float128 );
-float64 float128_to_float64( float128 );
-#ifdef FLOATX80
-floatx80 float128_to_floatx80( float128 );
-#endif
-
-/*----------------------------------------------------------------------------
-| Software IEC/IEEE quadruple-precision operations.
-*----------------------------------------------------------------------------*/
-float128 float128_round_to_int( float128 );
-float128 float128_add( float128, float128 );
-float128 float128_sub( float128, float128 );
-float128 float128_mul( float128, float128 );
-float128 float128_div( float128, float128 );
-float128 float128_rem( float128, float128 );
-float128 float128_sqrt( float128 );
-int float128_eq( float128, float128 );
-int float128_le( float128, float128 );
-int float128_lt( float128, float128 );
-int float128_eq_signaling( float128, float128 );
-int float128_le_quiet( float128, float128 );
-int float128_lt_quiet( float128, float128 );
-int float128_is_signaling_nan( float128 );
-
-#endif
-
diff --git a/float/softfloat/softfloat/bits64/softfloat-macros b/float/softfloat/softfloat/bits64/softfloat-macros
deleted file mode 100644 (file)
index d289328..0000000
+++ /dev/null
@@ -1,720 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point\r
-Arithmetic Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal notice) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts `a' right by the number of bits given in `count'.  If any nonzero\r
-| bits are shifted off, they are ``jammed'' into the least significant bit of\r
-| the result by setting the least significant bit to 1.  The value of `count'\r
-| can be arbitrarily large; in particular, if `count' is greater than 32, the\r
-| result will be either 0 or 1, depending on whether `a' is zero or nonzero.\r
-| The result is stored in the location pointed to by `zPtr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )\r
-{\r
-    bits32 z;\r
-\r
-    if ( count == 0 ) {\r
-        z = a;\r
-    }\r
-    else if ( count < 32 ) {\r
-        z = ( a>>count ) | ( ( a<<( ( - count ) & 31 ) ) != 0 );\r
-    }\r
-    else {\r
-        z = ( a != 0 );\r
-    }\r
-    *zPtr = z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts `a' right by the number of bits given in `count'.  If any nonzero\r
-| bits are shifted off, they are ``jammed'' into the least significant bit of\r
-| the result by setting the least significant bit to 1.  The value of `count'\r
-| can be arbitrarily large; in particular, if `count' is greater than 64, the\r
-| result will be either 0 or 1, depending on whether `a' is zero or nonzero.\r
-| The result is stored in the location pointed to by `zPtr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void shift64RightJamming( bits64 a, int16 count, bits64 *zPtr )\r
-{\r
-    bits64 z;\r
-\r
-    if ( count == 0 ) {\r
-        z = a;\r
-    }\r
-    else if ( count < 64 ) {\r
-        z = ( a>>count ) | ( ( a<<( ( - count ) & 63 ) ) != 0 );\r
-    }\r
-    else {\r
-        z = ( a != 0 );\r
-    }\r
-    *zPtr = z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by 64\r
-| _plus_ the number of bits given in `count'.  The shifted result is at most\r
-| 64 nonzero bits; this is stored at the location pointed to by `z0Ptr'.  The\r
-| bits shifted off form a second 64-bit result as follows:  The _last_ bit\r
-| shifted off is the most-significant bit of the extra result, and the other\r
-| 63 bits of the extra result are all zero if and only if _all_but_the_last_\r
-| bits shifted off were all zero.  This extra result is stored in the location\r
-| pointed to by `z1Ptr'.  The value of `count' can be arbitrarily large.\r
-|     (This routine makes more sense if `a0' and `a1' are considered to form\r
-| a fixed-point value with binary point between `a0' and `a1'.  This fixed-\r
-| point value is shifted right by the number of bits given in `count', and\r
-| the integer part of the result is returned at the location pointed to by\r
-| `z0Ptr'.  The fractional part of the result may be slightly corrupted as\r
-| described above, and is returned at the location pointed to by `z1Ptr'.)\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift64ExtraRightJamming(\r
-     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-    bits64 z0, z1;\r
-    int8 negCount = ( - count ) & 63;\r
-\r
-    if ( count == 0 ) {\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else if ( count < 64 ) {\r
-        z1 = ( a0<<negCount ) | ( a1 != 0 );\r
-        z0 = a0>>count;\r
-    }\r
-    else {\r
-        if ( count == 64 ) {\r
-            z1 = a0 | ( a1 != 0 );\r
-        }\r
-        else {\r
-            z1 = ( ( a0 | a1 ) != 0 );\r
-        }\r
-        z0 = 0;\r
-    }\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the\r
-| number of bits given in `count'.  Any bits shifted off are lost.  The value\r
-| of `count' can be arbitrarily large; in particular, if `count' is greater\r
-| than 128, the result will be 0.  The result is broken into two 64-bit pieces\r
-| which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift128Right(\r
-     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-    bits64 z0, z1;\r
-    int8 negCount = ( - count ) & 63;\r
-\r
-    if ( count == 0 ) {\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else if ( count < 64 ) {\r
-        z1 = ( a0<<negCount ) | ( a1>>count );\r
-        z0 = a0>>count;\r
-    }\r
-    else {\r
-        z1 = ( count < 64 ) ? ( a0>>( count & 63 ) ) : 0;\r
-        z0 = 0;\r
-    }\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the\r
-| number of bits given in `count'.  If any nonzero bits are shifted off, they\r
-| are ``jammed'' into the least significant bit of the result by setting the\r
-| least significant bit to 1.  The value of `count' can be arbitrarily large;\r
-| in particular, if `count' is greater than 128, the result will be either\r
-| 0 or 1, depending on whether the concatenation of `a0' and `a1' is zero or\r
-| nonzero.  The result is broken into two 64-bit pieces which are stored at\r
-| the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift128RightJamming(\r
-     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-    bits64 z0, z1;\r
-    int8 negCount = ( - count ) & 63;\r
-\r
-    if ( count == 0 ) {\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else if ( count < 64 ) {\r
-        z1 = ( a0<<negCount ) | ( a1>>count ) | ( ( a1<<negCount ) != 0 );\r
-        z0 = a0>>count;\r
-    }\r
-    else {\r
-        if ( count == 64 ) {\r
-            z1 = a0 | ( a1 != 0 );\r
-        }\r
-        else if ( count < 128 ) {\r
-            z1 = ( a0>>( count & 63 ) ) | ( ( ( a0<<negCount ) | a1 ) != 0 );\r
-        }\r
-        else {\r
-            z1 = ( ( a0 | a1 ) != 0 );\r
-        }\r
-        z0 = 0;\r
-    }\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' right\r
-| by 64 _plus_ the number of bits given in `count'.  The shifted result is\r
-| at most 128 nonzero bits; these are broken into two 64-bit pieces which are\r
-| stored at the locations pointed to by `z0Ptr' and `z1Ptr'.  The bits shifted\r
-| off form a third 64-bit result as follows:  The _last_ bit shifted off is\r
-| the most-significant bit of the extra result, and the other 63 bits of the\r
-| extra result are all zero if and only if _all_but_the_last_ bits shifted off\r
-| were all zero.  This extra result is stored in the location pointed to by\r
-| `z2Ptr'.  The value of `count' can be arbitrarily large.\r
-|     (This routine makes more sense if `a0', `a1', and `a2' are considered\r
-| to form a fixed-point value with binary point between `a1' and `a2'.  This\r
-| fixed-point value is shifted right by the number of bits given in `count',\r
-| and the integer part of the result is returned at the locations pointed to\r
-| by `z0Ptr' and `z1Ptr'.  The fractional part of the result may be slightly\r
-| corrupted as described above, and is returned at the location pointed to by\r
-| `z2Ptr'.)\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shift128ExtraRightJamming(\r
-     bits64 a0,\r
-     bits64 a1,\r
-     bits64 a2,\r
-     int16 count,\r
-     bits64 *z0Ptr,\r
-     bits64 *z1Ptr,\r
-     bits64 *z2Ptr\r
- )\r
-{\r
-    bits64 z0, z1, z2;\r
-    int8 negCount = ( - count ) & 63;\r
-\r
-    if ( count == 0 ) {\r
-        z2 = a2;\r
-        z1 = a1;\r
-        z0 = a0;\r
-    }\r
-    else {\r
-        if ( count < 64 ) {\r
-            z2 = a1<<negCount;\r
-            z1 = ( a0<<negCount ) | ( a1>>count );\r
-            z0 = a0>>count;\r
-        }\r
-        else {\r
-            if ( count == 64 ) {\r
-                z2 = a1;\r
-                z1 = a0;\r
-            }\r
-            else {\r
-                a2 |= a1;\r
-                if ( count < 128 ) {\r
-                    z2 = a0<<negCount;\r
-                    z1 = a0>>( count & 63 );\r
-                }\r
-                else {\r
-                    z2 = ( count == 128 ) ? a0 : ( a0 != 0 );\r
-                    z1 = 0;\r
-                }\r
-            }\r
-            z0 = 0;\r
-        }\r
-        z2 |= ( a2 != 0 );\r
-    }\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 128-bit value formed by concatenating `a0' and `a1' left by the\r
-| number of bits given in `count'.  Any bits shifted off are lost.  The value\r
-| of `count' must be less than 64.  The result is broken into two 64-bit\r
-| pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shortShift128Left(\r
-     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-\r
-    *z1Ptr = a1<<count;\r
-    *z0Ptr =\r
-        ( count == 0 ) ? a0 : ( a0<<count ) | ( a1>>( ( - count ) & 63 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' left\r
-| by the number of bits given in `count'.  Any bits shifted off are lost.\r
-| The value of `count' must be less than 64.  The result is broken into three\r
-| 64-bit pieces which are stored at the locations pointed to by `z0Ptr',\r
-| `z1Ptr', and `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- shortShift192Left(\r
-     bits64 a0,\r
-     bits64 a1,\r
-     bits64 a2,\r
-     int16 count,\r
-     bits64 *z0Ptr,\r
-     bits64 *z1Ptr,\r
-     bits64 *z2Ptr\r
- )\r
-{\r
-    bits64 z0, z1, z2;\r
-    int8 negCount;\r
-\r
-    z2 = a2<<count;\r
-    z1 = a1<<count;\r
-    z0 = a0<<count;\r
-    if ( 0 < count ) {\r
-        negCount = ( ( - count ) & 63 );\r
-        z1 |= a2>>negCount;\r
-        z0 |= a1>>negCount;\r
-    }\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Adds the 128-bit value formed by concatenating `a0' and `a1' to the 128-bit\r
-| value formed by concatenating `b0' and `b1'.  Addition is modulo 2^128, so\r
-| any carry out is lost.  The result is broken into two 64-bit pieces which\r
-| are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- add128(\r
-     bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-    bits64 z1;\r
-\r
-    z1 = a1 + b1;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = a0 + b0 + ( z1 < a1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Adds the 192-bit value formed by concatenating `a0', `a1', and `a2' to the\r
-| 192-bit value formed by concatenating `b0', `b1', and `b2'.  Addition is\r
-| modulo 2^192, so any carry out is lost.  The result is broken into three\r
-| 64-bit pieces which are stored at the locations pointed to by `z0Ptr',\r
-| `z1Ptr', and `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- add192(\r
-     bits64 a0,\r
-     bits64 a1,\r
-     bits64 a2,\r
-     bits64 b0,\r
-     bits64 b1,\r
-     bits64 b2,\r
-     bits64 *z0Ptr,\r
-     bits64 *z1Ptr,\r
-     bits64 *z2Ptr\r
- )\r
-{\r
-    bits64 z0, z1, z2;\r
-    int8 carry0, carry1;\r
-\r
-    z2 = a2 + b2;\r
-    carry1 = ( z2 < a2 );\r
-    z1 = a1 + b1;\r
-    carry0 = ( z1 < a1 );\r
-    z0 = a0 + b0;\r
-    z1 += carry1;\r
-    z0 += ( z1 < carry1 );\r
-    z0 += carry0;\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Subtracts the 128-bit value formed by concatenating `b0' and `b1' from the\r
-| 128-bit value formed by concatenating `a0' and `a1'.  Subtraction is modulo\r
-| 2^128, so any borrow out (carry out) is lost.  The result is broken into two\r
-| 64-bit pieces which are stored at the locations pointed to by `z0Ptr' and\r
-| `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- sub128(\r
-     bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-\r
-    *z1Ptr = a1 - b1;\r
-    *z0Ptr = a0 - b0 - ( a1 < b1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Subtracts the 192-bit value formed by concatenating `b0', `b1', and `b2'\r
-| from the 192-bit value formed by concatenating `a0', `a1', and `a2'.\r
-| Subtraction is modulo 2^192, so any borrow out (carry out) is lost.  The\r
-| result is broken into three 64-bit pieces which are stored at the locations\r
-| pointed to by `z0Ptr', `z1Ptr', and `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- sub192(\r
-     bits64 a0,\r
-     bits64 a1,\r
-     bits64 a2,\r
-     bits64 b0,\r
-     bits64 b1,\r
-     bits64 b2,\r
-     bits64 *z0Ptr,\r
-     bits64 *z1Ptr,\r
-     bits64 *z2Ptr\r
- )\r
-{\r
-    bits64 z0, z1, z2;\r
-    int8 borrow0, borrow1;\r
-\r
-    z2 = a2 - b2;\r
-    borrow1 = ( a2 < b2 );\r
-    z1 = a1 - b1;\r
-    borrow0 = ( a1 < b1 );\r
-    z0 = a0 - b0;\r
-    z0 -= ( z1 < borrow1 );\r
-    z1 -= borrow1;\r
-    z0 -= borrow0;\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Multiplies `a' by `b' to obtain a 128-bit product.  The product is broken\r
-| into two 64-bit pieces which are stored at the locations pointed to by\r
-| `z0Ptr' and `z1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void mul64To128( bits64 a, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr )\r
-{\r
-    bits32 aHigh, aLow, bHigh, bLow;\r
-    bits64 z0, zMiddleA, zMiddleB, z1;\r
-\r
-    aLow = a;\r
-    aHigh = a>>32;\r
-    bLow = b;\r
-    bHigh = b>>32;\r
-    z1 = ( (bits64) aLow ) * bLow;\r
-    zMiddleA = ( (bits64) aLow ) * bHigh;\r
-    zMiddleB = ( (bits64) aHigh ) * bLow;\r
-    z0 = ( (bits64) aHigh ) * bHigh;\r
-    zMiddleA += zMiddleB;\r
-    z0 += ( ( (bits64) ( zMiddleA < zMiddleB ) )<<32 ) + ( zMiddleA>>32 );\r
-    zMiddleA <<= 32;\r
-    z1 += zMiddleA;\r
-    z0 += ( z1 < zMiddleA );\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Multiplies the 128-bit value formed by concatenating `a0' and `a1' by\r
-| `b' to obtain a 192-bit product.  The product is broken into three 64-bit\r
-| pieces which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and\r
-| `z2Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- mul128By64To192(\r
-     bits64 a0,\r
-     bits64 a1,\r
-     bits64 b,\r
-     bits64 *z0Ptr,\r
-     bits64 *z1Ptr,\r
-     bits64 *z2Ptr\r
- )\r
-{\r
-    bits64 z0, z1, z2, more1;\r
-\r
-    mul64To128( a1, b, &z1, &z2 );\r
-    mul64To128( a0, b, &z0, &more1 );\r
-    add128( z0, more1, 0, z1, &z0, &z1 );\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Multiplies the 128-bit value formed by concatenating `a0' and `a1' to the\r
-| 128-bit value formed by concatenating `b0' and `b1' to obtain a 256-bit\r
-| product.  The product is broken into four 64-bit pieces which are stored at\r
-| the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE void\r
- mul128To256(\r
-     bits64 a0,\r
-     bits64 a1,\r
-     bits64 b0,\r
-     bits64 b1,\r
-     bits64 *z0Ptr,\r
-     bits64 *z1Ptr,\r
-     bits64 *z2Ptr,\r
-     bits64 *z3Ptr\r
- )\r
-{\r
-    bits64 z0, z1, z2, z3;\r
-    bits64 more1, more2;\r
-\r
-    mul64To128( a1, b1, &z2, &z3 );\r
-    mul64To128( a1, b0, &z1, &more2 );\r
-    add128( z1, more2, 0, z2, &z1, &z2 );\r
-    mul64To128( a0, b0, &z0, &more1 );\r
-    add128( z0, more1, 0, z1, &z0, &z1 );\r
-    mul64To128( a0, b1, &more1, &more2 );\r
-    add128( more1, more2, 0, z2, &more1, &z2 );\r
-    add128( z0, z1, 0, more1, &z0, &z1 );\r
-    *z3Ptr = z3;\r
-    *z2Ptr = z2;\r
-    *z1Ptr = z1;\r
-    *z0Ptr = z0;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns an approximation to the 64-bit integer quotient obtained by dividing\r
-| `b' into the 128-bit value formed by concatenating `a0' and `a1'.  The\r
-| divisor `b' must be at least 2^63.  If q is the exact quotient truncated\r
-| toward zero, the approximation returned lies between q and q + 2 inclusive.\r
-| If the exact quotient q is larger than 64 bits, the maximum positive 64-bit\r
-| unsigned integer is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b )\r
-{\r
-    bits64 b0, b1;\r
-    bits64 rem0, rem1, term0, term1;\r
-    bits64 z;\r
-\r
-    if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF );\r
-    b0 = b>>32;\r
-    z = ( b0<<32 <= a0 ) ? LIT64( 0xFFFFFFFF00000000 ) : ( a0 / b0 )<<32;\r
-    mul64To128( b, z, &term0, &term1 );\r
-    sub128( a0, a1, term0, term1, &rem0, &rem1 );\r
-    while ( ( (sbits64) rem0 ) < 0 ) {\r
-        z -= LIT64( 0x100000000 );\r
-        b1 = b<<32;\r
-        add128( rem0, rem1, b0, b1, &rem0, &rem1 );\r
-    }\r
-    rem0 = ( rem0<<32 ) | ( rem1>>32 );\r
-    z |= ( b0<<32 <= rem0 ) ? 0xFFFFFFFF : rem0 / b0;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns an approximation to the square root of the 32-bit significand given\r
-| by `a'.  Considered as an integer, `a' must be at least 2^31.  If bit 0 of\r
-| `aExp' (the least significant bit) is 1, the integer returned approximates\r
-| 2^31*sqrt(`a'/2^31), where `a' is considered an integer.  If bit 0 of `aExp'\r
-| is 0, the integer returned approximates 2^31*sqrt(`a'/2^30).  In either\r
-| case, the approximation returned lies strictly within +/-2 of the exact\r
-| value.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static bits32 estimateSqrt32( int16 aExp, bits32 a )\r
-{\r
-    static const bits16 sqrtOddAdjustments[] = {\r
-        0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0,\r
-        0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67\r
-    };\r
-    static const bits16 sqrtEvenAdjustments[] = {\r
-        0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E,\r
-        0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002\r
-    };\r
-    int8 index;\r
-    bits32 z;\r
-\r
-    index = ( a>>27 ) & 15;\r
-    if ( aExp & 1 ) {\r
-        z = 0x4000 + ( a>>17 ) - sqrtOddAdjustments[ index ];\r
-        z = ( ( a / z )<<14 ) + ( z<<15 );\r
-        a >>= 1;\r
-    }\r
-    else {\r
-        z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ index ];\r
-        z = a / z + z;\r
-        z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );\r
-        if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );\r
-    }\r
-    return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the number of leading 0 bits before the most-significant 1 bit of\r
-| `a'.  If `a' is zero, 32 is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static int8 countLeadingZeros32( bits32 a )\r
-{\r
-    static const int8 countLeadingZerosHigh[] = {\r
-        8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,\r
-        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\r
-        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\r
-    };\r
-    int8 shiftCount;\r
-\r
-    shiftCount = 0;\r
-    if ( a < 0x10000 ) {\r
-        shiftCount += 16;\r
-        a <<= 16;\r
-    }\r
-    if ( a < 0x1000000 ) {\r
-        shiftCount += 8;\r
-        a <<= 8;\r
-    }\r
-    shiftCount += countLeadingZerosHigh[ a>>24 ];\r
-    return shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the number of leading 0 bits before the most-significant 1 bit of\r
-| `a'.  If `a' is zero, 64 is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static int8 countLeadingZeros64( bits64 a )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = 0;\r
-    if ( a < ( (bits64) 1 )<<32 ) {\r
-        shiftCount += 32;\r
-    }\r
-    else {\r
-        a >>= 32;\r
-    }\r
-    shiftCount += countLeadingZeros32( a );\r
-    return shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1'\r
-| is equal to the 128-bit value formed by concatenating `b0' and `b1'.\r
-| Otherwise, returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag eq128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\r
-{\r
-\r
-    return ( a0 == b0 ) && ( a1 == b1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less\r
-| than or equal to the 128-bit value formed by concatenating `b0' and `b1'.\r
-| Otherwise, returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag le128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\r
-{\r
-\r
-    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less\r
-| than the 128-bit value formed by concatenating `b0' and `b1'.  Otherwise,\r
-| returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag lt128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\r
-{\r
-\r
-    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is\r
-| not equal to the 128-bit value formed by concatenating `b0' and `b1'.\r
-| Otherwise, returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag ne128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\r
-{\r
-\r
-    return ( a0 != b0 ) || ( a1 != b1 );\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/bits64/softfloat.c b/float/softfloat/softfloat/bits64/softfloat.c
deleted file mode 100644 (file)
index 3c31f0e..0000000
+++ /dev/null
@@ -1,5188 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-#include "milieu.h"\r
-#include "softfloat.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Floating-point rounding mode, extended double-precision rounding precision,\r
-| and exception flags.\r
-*----------------------------------------------------------------------------*/\r
-int8 float_rounding_mode = float_round_nearest_even;\r
-int8 float_exception_flags = 0;\r
-#ifdef FLOATX80\r
-int8 floatx80_rounding_precision = 80;\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Primitive arithmetic functions, including multi-word arithmetic, and\r
-| division and square root approximations.  (Can be specialized to target if\r
-| desired.)\r
-*----------------------------------------------------------------------------*/\r
-#include "softfloat-macros"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Functions and definitions to determine:  (1) whether tininess for underflow\r
-| is detected before or after rounding by default, (2) what (if anything)\r
-| happens when exceptions are raised, (3) how signaling NaNs are distinguished\r
-| from quiet NaNs, (4) the default generated quiet NaNs, and (5) how NaNs\r
-| are propagated from function inputs to output.  These details are target-\r
-| specific.\r
-*----------------------------------------------------------------------------*/\r
-#include "softfloat-specialize"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes a 64-bit fixed-point value `absZ' with binary point between bits 6\r
-| and 7, and returns the properly rounded 32-bit integer corresponding to the\r
-| input.  If `zSign' is 1, the input is negated before being converted to an\r
-| integer.  Bit 63 of `absZ' must be zero.  Ordinarily, the fixed-point input\r
-| is simply rounded to an integer, with the inexact exception raised if the\r
-| input cannot be represented exactly as an integer.  However, if the fixed-\r
-| point input is too large, the invalid exception is raised and the largest\r
-| positive or negative integer is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static int32 roundAndPackInt32( flag zSign, bits64 absZ )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven;\r
-    int8 roundIncrement, roundBits;\r
-    int32 z;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    roundIncrement = 0x40;\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            roundIncrement = 0;\r
-        }\r
-        else {\r
-            roundIncrement = 0x7F;\r
-            if ( zSign ) {\r
-                if ( roundingMode == float_round_up ) roundIncrement = 0;\r
-            }\r
-            else {\r
-                if ( roundingMode == float_round_down ) roundIncrement = 0;\r
-            }\r
-        }\r
-    }\r
-    roundBits = absZ & 0x7F;\r
-    absZ = ( absZ + roundIncrement )>>7;\r
-    absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );\r
-    z = absZ;\r
-    if ( zSign ) z = - z;\r
-    if ( ( absZ>>32 ) || ( z && ( ( z < 0 ) ^ zSign ) ) ) {\r
-        float_raise( float_flag_invalid );\r
-        return zSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\r
-    }\r
-    if ( roundBits ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes the 128-bit fixed-point value formed by concatenating `absZ0' and\r
-| `absZ1', with binary point between bits 63 and 64 (between the input words),\r
-| and returns the properly rounded 64-bit integer corresponding to the input.\r
-| If `zSign' is 1, the input is negated before being converted to an integer.\r
-| Ordinarily, the fixed-point input is simply rounded to an integer, with\r
-| the inexact exception raised if the input cannot be represented exactly as\r
-| an integer.  However, if the fixed-point input is too large, the invalid\r
-| exception is raised and the largest positive or negative integer is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static int64 roundAndPackInt64( flag zSign, bits64 absZ0, bits64 absZ1 )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven, increment;\r
-    int64 z;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    increment = ( (sbits64) absZ1 < 0 );\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            increment = 0;\r
-        }\r
-        else {\r
-            if ( zSign ) {\r
-                increment = ( roundingMode == float_round_down ) && absZ1;\r
-            }\r
-            else {\r
-                increment = ( roundingMode == float_round_up ) && absZ1;\r
-            }\r
-        }\r
-    }\r
-    if ( increment ) {\r
-        ++absZ0;\r
-        if ( absZ0 == 0 ) goto overflow;\r
-        absZ0 &= ~ ( ( (bits64) ( absZ1<<1 ) == 0 ) & roundNearestEven );\r
-    }\r
-    z = absZ0;\r
-    if ( zSign ) z = - z;\r
-    if ( z && ( ( z < 0 ) ^ zSign ) ) {\r
- overflow:\r
-        float_raise( float_flag_invalid );\r
-        return\r
-              zSign ? (sbits64) LIT64( 0x8000000000000000 )\r
-            : LIT64( 0x7FFFFFFFFFFFFFFF );\r
-    }\r
-    if ( absZ1 ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the fraction bits of the single-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits32 extractFloat32Frac( float32 a )\r
-{\r
-\r
-    return a & 0x007FFFFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the exponent bits of the single-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE int16 extractFloat32Exp( float32 a )\r
-{\r
-\r
-    return ( a>>23 ) & 0xFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the sign bit of the single-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag extractFloat32Sign( float32 a )\r
-{\r
-\r
-    return a>>31;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Normalizes the subnormal single-precision floating-point value represented\r
-| by the denormalized significand `aSig'.  The normalized exponent and\r
-| significand are stored at the locations pointed to by `zExpPtr' and\r
-| `zSigPtr', respectively.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static void\r
- normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros32( aSig ) - 8;\r
-    *zSigPtr = aSig<<shiftCount;\r
-    *zExpPtr = 1 - shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a\r
-| single-precision floating-point value, returning the result.  After being\r
-| shifted into the proper positions, the three fields are simply added\r
-| together to form the result.  This means that any integer portion of `zSig'\r
-| will be added into the exponent.  Since a properly normalized significand\r
-| will have an integer portion equal to 1, the `zExp' input should be 1 less\r
-| than the desired result exponent whenever `zSig' is a complete, normalized\r
-| significand.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )\r
-{\r
-\r
-    return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand `zSig', and returns the proper single-precision floating-\r
-| point value corresponding to the abstract input.  Ordinarily, the abstract\r
-| value is simply rounded and packed into the single-precision format, with\r
-| the inexact exception raised if the abstract input cannot be represented\r
-| exactly.  However, if the abstract value is too large, the overflow and\r
-| inexact exceptions are raised and an infinity or maximal finite value is\r
-| returned.  If the abstract value is too small, the input value is rounded to\r
-| a subnormal number, and the underflow and inexact exceptions are raised if\r
-| the abstract input cannot be represented exactly as a subnormal single-\r
-| precision floating-point number.\r
-|     The input significand `zSig' has its binary point between bits 30\r
-| and 29, which is 7 bits to the left of the usual location.  This shifted\r
-| significand must be normalized or smaller.  If `zSig' is not normalized,\r
-| `zExp' must be 0; in that case, the result returned is a subnormal number,\r
-| and it must not require rounding.  In the usual case that `zSig' is\r
-| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.\r
-| The handling of underflow and overflow follows the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven;\r
-    int8 roundIncrement, roundBits;\r
-    flag isTiny;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    roundIncrement = 0x40;\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            roundIncrement = 0;\r
-        }\r
-        else {\r
-            roundIncrement = 0x7F;\r
-            if ( zSign ) {\r
-                if ( roundingMode == float_round_up ) roundIncrement = 0;\r
-            }\r
-            else {\r
-                if ( roundingMode == float_round_down ) roundIncrement = 0;\r
-            }\r
-        }\r
-    }\r
-    roundBits = zSig & 0x7F;\r
-    if ( 0xFD <= (bits16) zExp ) {\r
-        if (    ( 0xFD < zExp )\r
-             || (    ( zExp == 0xFD )\r
-                  && ( (sbits32) ( zSig + roundIncrement ) < 0 ) )\r
-           ) {\r
-            float_raise( float_flag_overflow | float_flag_inexact );\r
-            return packFloat32( zSign, 0xFF, 0 ) - ( roundIncrement == 0 );\r
-        }\r
-        if ( zExp < 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < -1 )\r
-                || ( zSig + roundIncrement < 0x80000000 );\r
-            shift32RightJamming( zSig, - zExp, &zSig );\r
-            zExp = 0;\r
-            roundBits = zSig & 0x7F;\r
-            if ( isTiny && roundBits ) float_raise( float_flag_underflow );\r
-        }\r
-    }\r
-    if ( roundBits ) float_exception_flags |= float_flag_inexact;\r
-    zSig = ( zSig + roundIncrement )>>7;\r
-    zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );\r
-    if ( zSig == 0 ) zExp = 0;\r
-    return packFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand `zSig', and returns the proper single-precision floating-\r
-| point value corresponding to the abstract input.  This routine is just like\r
-| `roundAndPackFloat32' except that `zSig' does not have to be normalized.\r
-| Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''\r
-| floating-point exponent.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32\r
- normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros32( zSig ) - 1;\r
-    return roundAndPackFloat32( zSign, zExp - shiftCount, zSig<<shiftCount );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the fraction bits of the double-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits64 extractFloat64Frac( float64 a )\r
-{\r
-\r
-    return a & LIT64( 0x000FFFFFFFFFFFFF );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the exponent bits of the double-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE int16 extractFloat64Exp( float64 a )\r
-{\r
-\r
-    return ( a>>52 ) & 0x7FF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the sign bit of the double-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag extractFloat64Sign( float64 a )\r
-{\r
-\r
-    return a>>63;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Normalizes the subnormal double-precision floating-point value represented\r
-| by the denormalized significand `aSig'.  The normalized exponent and\r
-| significand are stored at the locations pointed to by `zExpPtr' and\r
-| `zSigPtr', respectively.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static void\r
- normalizeFloat64Subnormal( bits64 aSig, int16 *zExpPtr, bits64 *zSigPtr )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros64( aSig ) - 11;\r
-    *zSigPtr = aSig<<shiftCount;\r
-    *zExpPtr = 1 - shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a\r
-| double-precision floating-point value, returning the result.  After being\r
-| shifted into the proper positions, the three fields are simply added\r
-| together to form the result.  This means that any integer portion of `zSig'\r
-| will be added into the exponent.  Since a properly normalized significand\r
-| will have an integer portion equal to 1, the `zExp' input should be 1 less\r
-| than the desired result exponent whenever `zSig' is a complete, normalized\r
-| significand.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE float64 packFloat64( flag zSign, int16 zExp, bits64 zSig )\r
-{\r
-\r
-    return ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<52 ) + zSig;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand `zSig', and returns the proper double-precision floating-\r
-| point value corresponding to the abstract input.  Ordinarily, the abstract\r
-| value is simply rounded and packed into the double-precision format, with\r
-| the inexact exception raised if the abstract input cannot be represented\r
-| exactly.  However, if the abstract value is too large, the overflow and\r
-| inexact exceptions are raised and an infinity or maximal finite value is\r
-| returned.  If the abstract value is too small, the input value is rounded\r
-| to a subnormal number, and the underflow and inexact exceptions are raised\r
-| if the abstract input cannot be represented exactly as a subnormal double-\r
-| precision floating-point number.\r
-|     The input significand `zSig' has its binary point between bits 62\r
-| and 61, which is 10 bits to the left of the usual location.  This shifted\r
-| significand must be normalized or smaller.  If `zSig' is not normalized,\r
-| `zExp' must be 0; in that case, the result returned is a subnormal number,\r
-| and it must not require rounding.  In the usual case that `zSig' is\r
-| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.\r
-| The handling of underflow and overflow follows the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 roundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven;\r
-    int16 roundIncrement, roundBits;\r
-    flag isTiny;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    roundIncrement = 0x200;\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            roundIncrement = 0;\r
-        }\r
-        else {\r
-            roundIncrement = 0x3FF;\r
-            if ( zSign ) {\r
-                if ( roundingMode == float_round_up ) roundIncrement = 0;\r
-            }\r
-            else {\r
-                if ( roundingMode == float_round_down ) roundIncrement = 0;\r
-            }\r
-        }\r
-    }\r
-    roundBits = zSig & 0x3FF;\r
-    if ( 0x7FD <= (bits16) zExp ) {\r
-        if (    ( 0x7FD < zExp )\r
-             || (    ( zExp == 0x7FD )\r
-                  && ( (sbits64) ( zSig + roundIncrement ) < 0 ) )\r
-           ) {\r
-            float_raise( float_flag_overflow | float_flag_inexact );\r
-            return packFloat64( zSign, 0x7FF, 0 ) - ( roundIncrement == 0 );\r
-        }\r
-        if ( zExp < 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < -1 )\r
-                || ( zSig + roundIncrement < LIT64( 0x8000000000000000 ) );\r
-            shift64RightJamming( zSig, - zExp, &zSig );\r
-            zExp = 0;\r
-            roundBits = zSig & 0x3FF;\r
-            if ( isTiny && roundBits ) float_raise( float_flag_underflow );\r
-        }\r
-    }\r
-    if ( roundBits ) float_exception_flags |= float_flag_inexact;\r
-    zSig = ( zSig + roundIncrement )>>10;\r
-    zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );\r
-    if ( zSig == 0 ) zExp = 0;\r
-    return packFloat64( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand `zSig', and returns the proper double-precision floating-\r
-| point value corresponding to the abstract input.  This routine is just like\r
-| `roundAndPackFloat64' except that `zSig' does not have to be normalized.\r
-| Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''\r
-| floating-point exponent.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64\r
- normalizeRoundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros64( zSig ) - 1;\r
-    return roundAndPackFloat64( zSign, zExp - shiftCount, zSig<<shiftCount );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the fraction bits of the extended double-precision floating-point\r
-| value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits64 extractFloatx80Frac( floatx80 a )\r
-{\r
-\r
-    return a.low;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the exponent bits of the extended double-precision floating-point\r
-| value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE int32 extractFloatx80Exp( floatx80 a )\r
-{\r
-\r
-    return a.high & 0x7FFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the sign bit of the extended double-precision floating-point value\r
-| `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag extractFloatx80Sign( floatx80 a )\r
-{\r
-\r
-    return a.high>>15;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Normalizes the subnormal extended double-precision floating-point value\r
-| represented by the denormalized significand `aSig'.  The normalized exponent\r
-| and significand are stored at the locations pointed to by `zExpPtr' and\r
-| `zSigPtr', respectively.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static void\r
- normalizeFloatx80Subnormal( bits64 aSig, int32 *zExpPtr, bits64 *zSigPtr )\r
-{\r
-    int8 shiftCount;\r
-\r
-    shiftCount = countLeadingZeros64( aSig );\r
-    *zSigPtr = aSig<<shiftCount;\r
-    *zExpPtr = 1 - shiftCount;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Packs the sign `zSign', exponent `zExp', and significand `zSig' into an\r
-| extended double-precision floating-point value, returning the result.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE floatx80 packFloatx80( flag zSign, int32 zExp, bits64 zSig )\r
-{\r
-    floatx80 z;\r
-\r
-    z.low = zSig;\r
-    z.high = ( ( (bits16) zSign )<<15 ) + zExp;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and extended significand formed by the concatenation of `zSig0' and `zSig1',\r
-| and returns the proper extended double-precision floating-point value\r
-| corresponding to the abstract input.  Ordinarily, the abstract value is\r
-| rounded and packed into the extended double-precision format, with the\r
-| inexact exception raised if the abstract input cannot be represented\r
-| exactly.  However, if the abstract value is too large, the overflow and\r
-| inexact exceptions are raised and an infinity or maximal finite value is\r
-| returned.  If the abstract value is too small, the input value is rounded to\r
-| a subnormal number, and the underflow and inexact exceptions are raised if\r
-| the abstract input cannot be represented exactly as a subnormal extended\r
-| double-precision floating-point number.\r
-|     If `roundingPrecision' is 32 or 64, the result is rounded to the same\r
-| number of bits as single or double precision, respectively.  Otherwise, the\r
-| result is rounded to the full precision of the extended double-precision\r
-| format.\r
-|     The input significand must be normalized or smaller.  If the input\r
-| significand is not normalized, `zExp' must be 0; in that case, the result\r
-| returned is a subnormal number, and it must not require rounding.  The\r
-| handling of underflow and overflow follows the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80\r
- roundAndPackFloatx80(\r
-     int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1\r
- )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven, increment, isTiny;\r
-    int64 roundIncrement, roundMask, roundBits;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    if ( roundingPrecision == 80 ) goto precision80;\r
-    if ( roundingPrecision == 64 ) {\r
-        roundIncrement = LIT64( 0x0000000000000400 );\r
-        roundMask = LIT64( 0x00000000000007FF );\r
-    }\r
-    else if ( roundingPrecision == 32 ) {\r
-        roundIncrement = LIT64( 0x0000008000000000 );\r
-        roundMask = LIT64( 0x000000FFFFFFFFFF );\r
-    }\r
-    else {\r
-        goto precision80;\r
-    }\r
-    zSig0 |= ( zSig1 != 0 );\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            roundIncrement = 0;\r
-        }\r
-        else {\r
-            roundIncrement = roundMask;\r
-            if ( zSign ) {\r
-                if ( roundingMode == float_round_up ) roundIncrement = 0;\r
-            }\r
-            else {\r
-                if ( roundingMode == float_round_down ) roundIncrement = 0;\r
-            }\r
-        }\r
-    }\r
-    roundBits = zSig0 & roundMask;\r
-    if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {\r
-        if (    ( 0x7FFE < zExp )\r
-             || ( ( zExp == 0x7FFE ) && ( zSig0 + roundIncrement < zSig0 ) )\r
-           ) {\r
-            goto overflow;\r
-        }\r
-        if ( zExp <= 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < 0 )\r
-                || ( zSig0 <= zSig0 + roundIncrement );\r
-            shift64RightJamming( zSig0, 1 - zExp, &zSig0 );\r
-            zExp = 0;\r
-            roundBits = zSig0 & roundMask;\r
-            if ( isTiny && roundBits ) float_raise( float_flag_underflow );\r
-            if ( roundBits ) float_exception_flags |= float_flag_inexact;\r
-            zSig0 += roundIncrement;\r
-            if ( (sbits64) zSig0 < 0 ) zExp = 1;\r
-            roundIncrement = roundMask + 1;\r
-            if ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {\r
-                roundMask |= roundIncrement;\r
-            }\r
-            zSig0 &= ~ roundMask;\r
-            return packFloatx80( zSign, zExp, zSig0 );\r
-        }\r
-    }\r
-    if ( roundBits ) float_exception_flags |= float_flag_inexact;\r
-    zSig0 += roundIncrement;\r
-    if ( zSig0 < roundIncrement ) {\r
-        ++zExp;\r
-        zSig0 = LIT64( 0x8000000000000000 );\r
-    }\r
-    roundIncrement = roundMask + 1;\r
-    if ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {\r
-        roundMask |= roundIncrement;\r
-    }\r
-    zSig0 &= ~ roundMask;\r
-    if ( zSig0 == 0 ) zExp = 0;\r
-    return packFloatx80( zSign, zExp, zSig0 );\r
- precision80:\r
-    increment = ( (sbits64) zSig1 < 0 );\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            increment = 0;\r
-        }\r
-        else {\r
-            if ( zSign ) {\r
-                increment = ( roundingMode == float_round_down ) && zSig1;\r
-            }\r
-            else {\r
-                increment = ( roundingMode == float_round_up ) && zSig1;\r
-            }\r
-        }\r
-    }\r
-    if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {\r
-        if (    ( 0x7FFE < zExp )\r
-             || (    ( zExp == 0x7FFE )\r
-                  && ( zSig0 == LIT64( 0xFFFFFFFFFFFFFFFF ) )\r
-                  && increment\r
-                )\r
-           ) {\r
-            roundMask = 0;\r
- overflow:\r
-            float_raise( float_flag_overflow | float_flag_inexact );\r
-            if (    ( roundingMode == float_round_to_zero )\r
-                 || ( zSign && ( roundingMode == float_round_up ) )\r
-                 || ( ! zSign && ( roundingMode == float_round_down ) )\r
-               ) {\r
-                return packFloatx80( zSign, 0x7FFE, ~ roundMask );\r
-            }\r
-            return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-        }\r
-        if ( zExp <= 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < 0 )\r
-                || ! increment\r
-                || ( zSig0 < LIT64( 0xFFFFFFFFFFFFFFFF ) );\r
-            shift64ExtraRightJamming( zSig0, zSig1, 1 - zExp, &zSig0, &zSig1 );\r
-            zExp = 0;\r
-            if ( isTiny && zSig1 ) float_raise( float_flag_underflow );\r
-            if ( zSig1 ) float_exception_flags |= float_flag_inexact;\r
-            if ( roundNearestEven ) {\r
-                increment = ( (sbits64) zSig1 < 0 );\r
-            }\r
-            else {\r
-                if ( zSign ) {\r
-                    increment = ( roundingMode == float_round_down ) && zSig1;\r
-                }\r
-                else {\r
-                    increment = ( roundingMode == float_round_up ) && zSig1;\r
-                }\r
-            }\r
-            if ( increment ) {\r
-                ++zSig0;\r
-                zSig0 &=\r
-                    ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );\r
-                if ( (sbits64) zSig0 < 0 ) zExp = 1;\r
-            }\r
-            return packFloatx80( zSign, zExp, zSig0 );\r
-        }\r
-    }\r
-    if ( zSig1 ) float_exception_flags |= float_flag_inexact;\r
-    if ( increment ) {\r
-        ++zSig0;\r
-        if ( zSig0 == 0 ) {\r
-            ++zExp;\r
-            zSig0 = LIT64( 0x8000000000000000 );\r
-        }\r
-        else {\r
-            zSig0 &= ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );\r
-        }\r
-    }\r
-    else {\r
-        if ( zSig0 == 0 ) zExp = 0;\r
-    }\r
-    return packFloatx80( zSign, zExp, zSig0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent\r
-| `zExp', and significand formed by the concatenation of `zSig0' and `zSig1',\r
-| and returns the proper extended double-precision floating-point value\r
-| corresponding to the abstract input.  This routine is just like\r
-| `roundAndPackFloatx80' except that the input significand does not have to be\r
-| normalized.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80\r
- normalizeRoundAndPackFloatx80(\r
-     int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1\r
- )\r
-{\r
-    int8 shiftCount;\r
-\r
-    if ( zSig0 == 0 ) {\r
-        zSig0 = zSig1;\r
-        zSig1 = 0;\r
-        zExp -= 64;\r
-    }\r
-    shiftCount = countLeadingZeros64( zSig0 );\r
-    shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\r
-    zExp -= shiftCount;\r
-    return\r
-        roundAndPackFloatx80( roundingPrecision, zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the least-significant 64 fraction bits of the quadruple-precision\r
-| floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits64 extractFloat128Frac1( float128 a )\r
-{\r
-\r
-    return a.low;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the most-significant 48 fraction bits of the quadruple-precision\r
-| floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE bits64 extractFloat128Frac0( float128 a )\r
-{\r
-\r
-    return a.high & LIT64( 0x0000FFFFFFFFFFFF );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the exponent bits of the quadruple-precision floating-point value\r
-| `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE int32 extractFloat128Exp( float128 a )\r
-{\r
-\r
-    return ( a.high>>48 ) & 0x7FFF;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the sign bit of the quadruple-precision floating-point value `a'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE flag extractFloat128Sign( float128 a )\r
-{\r
-\r
-    return a.high>>63;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Normalizes the subnormal quadruple-precision floating-point value\r
-| represented by the denormalized significand formed by the concatenation of\r
-| `aSig0' and `aSig1'.  The normalized exponent is stored at the location\r
-| pointed to by `zExpPtr'.  The most significant 49 bits of the normalized\r
-| significand are stored at the location pointed to by `zSig0Ptr', and the\r
-| least significant 64 bits of the normalized significand are stored at the\r
-| location pointed to by `zSig1Ptr'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static void\r
- normalizeFloat128Subnormal(\r
-     bits64 aSig0,\r
-     bits64 aSig1,\r
-     int32 *zExpPtr,\r
-     bits64 *zSig0Ptr,\r
-     bits64 *zSig1Ptr\r
- )\r
-{\r
-    int8 shiftCount;\r
-\r
-    if ( aSig0 == 0 ) {\r
-        shiftCount = countLeadingZeros64( aSig1 ) - 15;\r
-        if ( shiftCount < 0 ) {\r
-            *zSig0Ptr = aSig1>>( - shiftCount );\r
-            *zSig1Ptr = aSig1<<( shiftCount & 63 );\r
-        }\r
-        else {\r
-            *zSig0Ptr = aSig1<<shiftCount;\r
-            *zSig1Ptr = 0;\r
-        }\r
-        *zExpPtr = - shiftCount - 63;\r
-    }\r
-    else {\r
-        shiftCount = countLeadingZeros64( aSig0 ) - 15;\r
-        shortShift128Left( aSig0, aSig1, shiftCount, zSig0Ptr, zSig1Ptr );\r
-        *zExpPtr = 1 - shiftCount;\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Packs the sign `zSign', the exponent `zExp', and the significand formed\r
-| by the concatenation of `zSig0' and `zSig1' into a quadruple-precision\r
-| floating-point value, returning the result.  After being shifted into the\r
-| proper positions, the three fields `zSign', `zExp', and `zSig0' are simply\r
-| added together to form the most significant 32 bits of the result.  This\r
-| means that any integer portion of `zSig0' will be added into the exponent.\r
-| Since a properly normalized significand will have an integer portion equal\r
-| to 1, the `zExp' input should be 1 less than the desired result exponent\r
-| whenever `zSig0' and `zSig1' concatenated form a complete, normalized\r
-| significand.\r
-*----------------------------------------------------------------------------*/\r
-\r
-INLINE float128\r
- packFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )\r
-{\r
-    float128 z;\r
-\r
-    z.low = zSig1;\r
-    z.high = ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<48 ) + zSig0;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and extended significand formed by the concatenation of `zSig0', `zSig1',\r
-| and `zSig2', and returns the proper quadruple-precision floating-point value\r
-| corresponding to the abstract input.  Ordinarily, the abstract value is\r
-| simply rounded and packed into the quadruple-precision format, with the\r
-| inexact exception raised if the abstract input cannot be represented\r
-| exactly.  However, if the abstract value is too large, the overflow and\r
-| inexact exceptions are raised and an infinity or maximal finite value is\r
-| returned.  If the abstract value is too small, the input value is rounded to\r
-| a subnormal number, and the underflow and inexact exceptions are raised if\r
-| the abstract input cannot be represented exactly as a subnormal quadruple-\r
-| precision floating-point number.\r
-|     The input significand must be normalized or smaller.  If the input\r
-| significand is not normalized, `zExp' must be 0; in that case, the result\r
-| returned is a subnormal number, and it must not require rounding.  In the\r
-| usual case that the input significand is normalized, `zExp' must be 1 less\r
-| than the ``true'' floating-point exponent.  The handling of underflow and\r
-| overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128\r
- roundAndPackFloat128(\r
-     flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1, bits64 zSig2 )\r
-{\r
-    int8 roundingMode;\r
-    flag roundNearestEven, increment, isTiny;\r
-\r
-    roundingMode = float_rounding_mode;\r
-    roundNearestEven = ( roundingMode == float_round_nearest_even );\r
-    increment = ( (sbits64) zSig2 < 0 );\r
-    if ( ! roundNearestEven ) {\r
-        if ( roundingMode == float_round_to_zero ) {\r
-            increment = 0;\r
-        }\r
-        else {\r
-            if ( zSign ) {\r
-                increment = ( roundingMode == float_round_down ) && zSig2;\r
-            }\r
-            else {\r
-                increment = ( roundingMode == float_round_up ) && zSig2;\r
-            }\r
-        }\r
-    }\r
-    if ( 0x7FFD <= (bits32) zExp ) {\r
-        if (    ( 0x7FFD < zExp )\r
-             || (    ( zExp == 0x7FFD )\r
-                  && eq128(\r
-                         LIT64( 0x0001FFFFFFFFFFFF ),\r
-                         LIT64( 0xFFFFFFFFFFFFFFFF ),\r
-                         zSig0,\r
-                         zSig1\r
-                     )\r
-                  && increment\r
-                )\r
-           ) {\r
-            float_raise( float_flag_overflow | float_flag_inexact );\r
-            if (    ( roundingMode == float_round_to_zero )\r
-                 || ( zSign && ( roundingMode == float_round_up ) )\r
-                 || ( ! zSign && ( roundingMode == float_round_down ) )\r
-               ) {\r
-                return\r
-                    packFloat128(\r
-                        zSign,\r
-                        0x7FFE,\r
-                        LIT64( 0x0000FFFFFFFFFFFF ),\r
-                        LIT64( 0xFFFFFFFFFFFFFFFF )\r
-                    );\r
-            }\r
-            return packFloat128( zSign, 0x7FFF, 0, 0 );\r
-        }\r
-        if ( zExp < 0 ) {\r
-            isTiny =\r
-                   ( float_detect_tininess == float_tininess_before_rounding )\r
-                || ( zExp < -1 )\r
-                || ! increment\r
-                || lt128(\r
-                       zSig0,\r
-                       zSig1,\r
-                       LIT64( 0x0001FFFFFFFFFFFF ),\r
-                       LIT64( 0xFFFFFFFFFFFFFFFF )\r
-                   );\r
-            shift128ExtraRightJamming(\r
-                zSig0, zSig1, zSig2, - zExp, &zSig0, &zSig1, &zSig2 );\r
-            zExp = 0;\r
-            if ( isTiny && zSig2 ) float_raise( float_flag_underflow );\r
-            if ( roundNearestEven ) {\r
-                increment = ( (sbits64) zSig2 < 0 );\r
-            }\r
-            else {\r
-                if ( zSign ) {\r
-                    increment = ( roundingMode == float_round_down ) && zSig2;\r
-                }\r
-                else {\r
-                    increment = ( roundingMode == float_round_up ) && zSig2;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    if ( zSig2 ) float_exception_flags |= float_flag_inexact;\r
-    if ( increment ) {\r
-        add128( zSig0, zSig1, 0, 1, &zSig0, &zSig1 );\r
-        zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );\r
-    }\r
-    else {\r
-        if ( ( zSig0 | zSig1 ) == 0 ) zExp = 0;\r
-    }\r
-    return packFloat128( zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\r
-| and significand formed by the concatenation of `zSig0' and `zSig1', and\r
-| returns the proper quadruple-precision floating-point value corresponding\r
-| to the abstract input.  This routine is just like `roundAndPackFloat128'\r
-| except that the input significand has fewer bits and does not have to be\r
-| normalized.  In all cases, `zExp' must be 1 less than the ``true'' floating-\r
-| point exponent.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128\r
- normalizeRoundAndPackFloat128(\r
-     flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )\r
-{\r
-    int8 shiftCount;\r
-    bits64 zSig2;\r
-\r
-    if ( zSig0 == 0 ) {\r
-        zSig0 = zSig1;\r
-        zSig1 = 0;\r
-        zExp -= 64;\r
-    }\r
-    shiftCount = countLeadingZeros64( zSig0 ) - 15;\r
-    if ( 0 <= shiftCount ) {\r
-        zSig2 = 0;\r
-        shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\r
-    }\r
-    else {\r
-        shift128ExtraRightJamming(\r
-            zSig0, zSig1, 0, - shiftCount, &zSig0, &zSig1, &zSig2 );\r
-    }\r
-    zExp -= shiftCount;\r
-    return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 32-bit two's complement integer `a'\r
-| to the single-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 int32_to_float32( int32 a )\r
-{\r
-    flag zSign;\r
-\r
-    if ( a == 0 ) return 0;\r
-    if ( a == (sbits32) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );\r
-    zSign = ( a < 0 );\r
-    return normalizeRoundAndPackFloat32( zSign, 0x9C, zSign ? - a : a );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 32-bit two's complement integer `a'\r
-| to the double-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 int32_to_float64( int32 a )\r
-{\r
-    flag zSign;\r
-    uint32 absA;\r
-    int8 shiftCount;\r
-    bits64 zSig;\r
-\r
-    if ( a == 0 ) return 0;\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros32( absA ) + 21;\r
-    zSig = absA;\r
-    return packFloat64( zSign, 0x432 - shiftCount, zSig<<shiftCount );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 32-bit two's complement integer `a'\r
-| to the extended double-precision floating-point format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 int32_to_floatx80( int32 a )\r
-{\r
-    flag zSign;\r
-    uint32 absA;\r
-    int8 shiftCount;\r
-    bits64 zSig;\r
-\r
-    if ( a == 0 ) return packFloatx80( 0, 0, 0 );\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros32( absA ) + 32;\r
-    zSig = absA;\r
-    return packFloatx80( zSign, 0x403E - shiftCount, zSig<<shiftCount );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 32-bit two's complement integer `a' to\r
-| the quadruple-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 int32_to_float128( int32 a )\r
-{\r
-    flag zSign;\r
-    uint32 absA;\r
-    int8 shiftCount;\r
-    bits64 zSig0;\r
-\r
-    if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros32( absA ) + 17;\r
-    zSig0 = absA;\r
-    return packFloat128( zSign, 0x402E - shiftCount, zSig0<<shiftCount, 0 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 64-bit two's complement integer `a'\r
-| to the single-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 int64_to_float32( int64 a )\r
-{\r
-    flag zSign;\r
-    uint64 absA;\r
-    int8 shiftCount;\r
-    bits32 zSig;\r
-\r
-    if ( a == 0 ) return 0;\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros64( absA ) - 40;\r
-    if ( 0 <= shiftCount ) {\r
-        return packFloat32( zSign, 0x95 - shiftCount, absA<<shiftCount );\r
-    }\r
-    else {\r
-        shiftCount += 7;\r
-        if ( shiftCount < 0 ) {\r
-            shift64RightJamming( absA, - shiftCount, &absA );\r
-        }\r
-        else {\r
-            absA <<= shiftCount;\r
-        }\r
-        return roundAndPackFloat32( zSign, 0x9C - shiftCount, absA );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 64-bit two's complement integer `a'\r
-| to the double-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 int64_to_float64( int64 a )\r
-{\r
-    flag zSign;\r
-\r
-    if ( a == 0 ) return 0;\r
-    if ( a == (sbits64) LIT64( 0x8000000000000000 ) ) {\r
-        return packFloat64( 1, 0x43E, 0 );\r
-    }\r
-    zSign = ( a < 0 );\r
-    return normalizeRoundAndPackFloat64( zSign, 0x43C, zSign ? - a : a );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 64-bit two's complement integer `a'\r
-| to the extended double-precision floating-point format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 int64_to_floatx80( int64 a )\r
-{\r
-    flag zSign;\r
-    uint64 absA;\r
-    int8 shiftCount;\r
-\r
-    if ( a == 0 ) return packFloatx80( 0, 0, 0 );\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros64( absA );\r
-    return packFloatx80( zSign, 0x403E - shiftCount, absA<<shiftCount );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the 64-bit two's complement integer `a' to\r
-| the quadruple-precision floating-point format.  The conversion is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 int64_to_float128( int64 a )\r
-{\r
-    flag zSign;\r
-    uint64 absA;\r
-    int8 shiftCount;\r
-    int32 zExp;\r
-    bits64 zSig0, zSig1;\r
-\r
-    if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );\r
-    zSign = ( a < 0 );\r
-    absA = zSign ? - a : a;\r
-    shiftCount = countLeadingZeros64( absA ) + 49;\r
-    zExp = 0x406E - shiftCount;\r
-    if ( 64 <= shiftCount ) {\r
-        zSig1 = 0;\r
-        zSig0 = absA;\r
-        shiftCount -= 64;\r
-    }\r
-    else {\r
-        zSig1 = absA;\r
-        zSig0 = 0;\r
-    }\r
-    shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\r
-    return packFloat128( zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float32_to_int32( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig;\r
-    bits64 aSig64;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( ( aExp == 0xFF ) && aSig ) aSign = 0;\r
-    if ( aExp ) aSig |= 0x00800000;\r
-    shiftCount = 0xAF - aExp;\r
-    aSig64 = aSig;\r
-    aSig64 <<= 32;\r
-    if ( 0 < shiftCount ) shift64RightJamming( aSig64, shiftCount, &aSig64 );\r
-    return roundAndPackInt32( aSign, aSig64 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.\r
-| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\r
-| the conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float32_to_int32_round_to_zero( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig;\r
-    int32 z;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    shiftCount = aExp - 0x9E;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( a != 0xCF000000 ) {\r
-            float_raise( float_flag_invalid );\r
-            if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) return 0x7FFFFFFF;\r
-        }\r
-        return (sbits32) 0x80000000;\r
-    }\r
-    else if ( aExp <= 0x7E ) {\r
-        if ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    aSig = ( aSig | 0x00800000 )<<8;\r
-    z = aSig>>( - shiftCount );\r
-    if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    if ( aSign ) z = - z;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the 64-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 float32_to_int64( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig;\r
-    bits64 aSig64, aSigExtra;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    shiftCount = 0xBE - aExp;\r
-    if ( shiftCount < 0 ) {\r
-        float_raise( float_flag_invalid );\r
-        if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {\r
-            return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-        }\r
-        return (sbits64) LIT64( 0x8000000000000000 );\r
-    }\r
-    if ( aExp ) aSig |= 0x00800000;\r
-    aSig64 = aSig;\r
-    aSig64 <<= 40;\r
-    shift64ExtraRightJamming( aSig64, 0, shiftCount, &aSig64, &aSigExtra );\r
-    return roundAndPackInt64( aSign, aSig64, aSigExtra );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the 64-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.  If\r
-| `a' is a NaN, the largest positive integer is returned.  Otherwise, if the\r
-| conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 float32_to_int64_round_to_zero( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits32 aSig;\r
-    bits64 aSig64;\r
-    int64 z;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    shiftCount = aExp - 0xBE;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( a != 0xDF000000 ) {\r
-            float_raise( float_flag_invalid );\r
-            if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {\r
-                return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-            }\r
-        }\r
-        return (sbits64) LIT64( 0x8000000000000000 );\r
-    }\r
-    else if ( aExp <= 0x7E ) {\r
-        if ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    aSig64 = aSig | 0x00800000;\r
-    aSig64 <<= 40;\r
-    z = aSig64>>( - shiftCount );\r
-    if ( (bits64) ( aSig64<<( shiftCount & 63 ) ) ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    if ( aSign ) z = - z;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the double-precision floating-point format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float32_to_float64( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 aSig;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return commonNaNToFloat64( float32ToCommonNaN( a ) );\r
-        return packFloat64( aSign, 0x7FF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat64( aSign, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-        --aExp;\r
-    }\r
-    return packFloat64( aSign, aExp + 0x380, ( (bits64) aSig )<<29 );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the extended double-precision floating-point format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 float32_to_floatx80( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 aSig;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return commonNaNToFloatx80( float32ToCommonNaN( a ) );\r
-        return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    aSig |= 0x00800000;\r
-    return packFloatx80( aSign, aExp + 0x3F80, ( (bits64) aSig )<<40 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point value\r
-| `a' to the double-precision floating-point format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float32_to_float128( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 aSig;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return commonNaNToFloat128( float32ToCommonNaN( a ) );\r
-        return packFloat128( aSign, 0x7FFF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-        --aExp;\r
-    }\r
-    return packFloat128( aSign, aExp + 0x3F80, ( (bits64) aSig )<<25, 0 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Rounds the single-precision floating-point value `a' to an integer, and\r
-| returns the result as a single-precision floating-point value.  The\r
-| operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_round_to_int( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits32 lastBitMask, roundBitsMask;\r
-    int8 roundingMode;\r
-    float32 z;\r
-\r
-    aExp = extractFloat32Exp( a );\r
-    if ( 0x96 <= aExp ) {\r
-        if ( ( aExp == 0xFF ) && extractFloat32Frac( a ) ) {\r
-            return propagateFloat32NaN( a, a );\r
-        }\r
-        return a;\r
-    }\r
-    if ( aExp <= 0x7E ) {\r
-        if ( (bits32) ( a<<1 ) == 0 ) return a;\r
-        float_exception_flags |= float_flag_inexact;\r
-        aSign = extractFloat32Sign( a );\r
-        switch ( float_rounding_mode ) {\r
-         case float_round_nearest_even:\r
-            if ( ( aExp == 0x7E ) && extractFloat32Frac( a ) ) {\r
-                return packFloat32( aSign, 0x7F, 0 );\r
-            }\r
-            break;\r
-         case float_round_down:\r
-            return aSign ? 0xBF800000 : 0;\r
-         case float_round_up:\r
-            return aSign ? 0x80000000 : 0x3F800000;\r
-        }\r
-        return packFloat32( aSign, 0, 0 );\r
-    }\r
-    lastBitMask = 1;\r
-    lastBitMask <<= 0x96 - aExp;\r
-    roundBitsMask = lastBitMask - 1;\r
-    z = a;\r
-    roundingMode = float_rounding_mode;\r
-    if ( roundingMode == float_round_nearest_even ) {\r
-        z += lastBitMask>>1;\r
-        if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;\r
-    }\r
-    else if ( roundingMode != float_round_to_zero ) {\r
-        if ( extractFloat32Sign( z ) ^ ( roundingMode == float_round_up ) ) {\r
-            z += roundBitsMask;\r
-        }\r
-    }\r
-    z &= ~ roundBitsMask;\r
-    if ( z != a ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the absolute values of the single-precision\r
-| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\r
-| before being returned.  `zSign' is ignored if the result is a NaN.\r
-| The addition is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 addFloat32Sigs( float32 a, float32 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig;\r
-    int16 expDiff;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    expDiff = aExp - bExp;\r
-    aSig <<= 6;\r
-    bSig <<= 6;\r
-    if ( 0 < expDiff ) {\r
-        if ( aExp == 0xFF ) {\r
-            if ( aSig ) return propagateFloat32NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( bExp == 0 ) {\r
-            --expDiff;\r
-        }\r
-        else {\r
-            bSig |= 0x20000000;\r
-        }\r
-        shift32RightJamming( bSig, expDiff, &bSig );\r
-        zExp = aExp;\r
-    }\r
-    else if ( expDiff < 0 ) {\r
-        if ( bExp == 0xFF ) {\r
-            if ( bSig ) return propagateFloat32NaN( a, b );\r
-            return packFloat32( zSign, 0xFF, 0 );\r
-        }\r
-        if ( aExp == 0 ) {\r
-            ++expDiff;\r
-        }\r
-        else {\r
-            aSig |= 0x20000000;\r
-        }\r
-        shift32RightJamming( aSig, - expDiff, &aSig );\r
-        zExp = bExp;\r
-    }\r
-    else {\r
-        if ( aExp == 0xFF ) {\r
-            if ( aSig | bSig ) return propagateFloat32NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( aExp == 0 ) return packFloat32( zSign, 0, ( aSig + bSig )>>6 );\r
-        zSig = 0x40000000 + aSig + bSig;\r
-        zExp = aExp;\r
-        goto roundAndPack;\r
-    }\r
-    aSig |= 0x20000000;\r
-    zSig = ( aSig + bSig )<<1;\r
-    --zExp;\r
-    if ( (sbits32) zSig < 0 ) {\r
-        zSig = aSig + bSig;\r
-        ++zExp;\r
-    }\r
- roundAndPack:\r
-    return roundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the absolute values of the single-\r
-| precision floating-point values `a' and `b'.  If `zSign' is 1, the\r
-| difference is negated before being returned.  `zSign' is ignored if the\r
-| result is a NaN.  The subtraction is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 subFloat32Sigs( float32 a, float32 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig;\r
-    int16 expDiff;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    expDiff = aExp - bExp;\r
-    aSig <<= 7;\r
-    bSig <<= 7;\r
-    if ( 0 < expDiff ) goto aExpBigger;\r
-    if ( expDiff < 0 ) goto bExpBigger;\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig | bSig ) return propagateFloat32NaN( a, b );\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        aExp = 1;\r
-        bExp = 1;\r
-    }\r
-    if ( bSig < aSig ) goto aBigger;\r
-    if ( aSig < bSig ) goto bBigger;\r
-    return packFloat32( float_rounding_mode == float_round_down, 0, 0 );\r
- bExpBigger:\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        return packFloat32( zSign ^ 1, 0xFF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        ++expDiff;\r
-    }\r
-    else {\r
-        aSig |= 0x40000000;\r
-    }\r
-    shift32RightJamming( aSig, - expDiff, &aSig );\r
-    bSig |= 0x40000000;\r
- bBigger:\r
-    zSig = bSig - aSig;\r
-    zExp = bExp;\r
-    zSign ^= 1;\r
-    goto normalizeRoundAndPack;\r
- aExpBigger:\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return propagateFloat32NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        --expDiff;\r
-    }\r
-    else {\r
-        bSig |= 0x40000000;\r
-    }\r
-    shift32RightJamming( bSig, expDiff, &bSig );\r
-    aSig |= 0x40000000;\r
- aBigger:\r
-    zSig = aSig - bSig;\r
-    zExp = aExp;\r
- normalizeRoundAndPack:\r
-    --zExp;\r
-    return normalizeRoundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the single-precision floating-point values `a'\r
-| and `b'.  The operation is performed according to the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_add( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return addFloat32Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return subFloat32Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the single-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_sub( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return subFloat32Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return addFloat32Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of multiplying the single-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_mul( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig;\r
-    bits64 zSig64;\r
-    bits32 zSig;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    bSign = extractFloat32Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {\r
-            return propagateFloat32NaN( a, b );\r
-        }\r
-        if ( ( bExp | bSig ) == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        return packFloat32( zSign, 0xFF, 0 );\r
-    }\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        if ( ( aExp | aSig ) == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        return packFloat32( zSign, 0xFF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) return packFloat32( zSign, 0, 0 );\r
-        normalizeFloat32Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    zExp = aExp + bExp - 0x7F;\r
-    aSig = ( aSig | 0x00800000 )<<7;\r
-    bSig = ( bSig | 0x00800000 )<<8;\r
-    shift64RightJamming( ( (bits64) aSig ) * bSig, 32, &zSig64 );\r
-    zSig = zSig64;\r
-    if ( 0 <= (sbits32) ( zSig<<1 ) ) {\r
-        zSig <<= 1;\r
-        --zExp;\r
-    }\r
-    return roundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of dividing the single-precision floating-point value `a'\r
-| by the corresponding value `b'.  The operation is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_div( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits32 aSig, bSig, zSig;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    bSign = extractFloat32Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return propagateFloat32NaN( a, b );\r
-        if ( bExp == 0xFF ) {\r
-            if ( bSig ) return propagateFloat32NaN( a, b );\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        return packFloat32( zSign, 0xFF, 0 );\r
-    }\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        return packFloat32( zSign, 0, 0 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            if ( ( aExp | aSig ) == 0 ) {\r
-                float_raise( float_flag_invalid );\r
-                return float32_default_nan;\r
-            }\r
-            float_raise( float_flag_divbyzero );\r
-            return packFloat32( zSign, 0xFF, 0 );\r
-        }\r
-        normalizeFloat32Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = aExp - bExp + 0x7D;\r
-    aSig = ( aSig | 0x00800000 )<<7;\r
-    bSig = ( bSig | 0x00800000 )<<8;\r
-    if ( bSig <= ( aSig + aSig ) ) {\r
-        aSig >>= 1;\r
-        ++zExp;\r
-    }\r
-    zSig = ( ( (bits64) aSig )<<32 ) / bSig;\r
-    if ( ( zSig & 0x3F ) == 0 ) {\r
-        zSig |= ( (bits64) bSig * zSig != ( (bits64) aSig )<<32 );\r
-    }\r
-    return roundAndPackFloat32( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the remainder of the single-precision floating-point value `a'\r
-| with respect to the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_rem( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, expDiff;\r
-    bits32 aSig, bSig;\r
-    bits32 q;\r
-    bits64 aSig64, bSig64, q64;\r
-    bits32 alternateASig;\r
-    sbits32 sigMean;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    bSig = extractFloat32Frac( b );\r
-    bExp = extractFloat32Exp( b );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {\r
-            return propagateFloat32NaN( a, b );\r
-        }\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( bExp == 0xFF ) {\r
-        if ( bSig ) return propagateFloat32NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float32_default_nan;\r
-        }\r
-        normalizeFloat32Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return a;\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    expDiff = aExp - bExp;\r
-    aSig |= 0x00800000;\r
-    bSig |= 0x00800000;\r
-    if ( expDiff < 32 ) {\r
-        aSig <<= 8;\r
-        bSig <<= 8;\r
-        if ( expDiff < 0 ) {\r
-            if ( expDiff < -1 ) return a;\r
-            aSig >>= 1;\r
-        }\r
-        q = ( bSig <= aSig );\r
-        if ( q ) aSig -= bSig;\r
-        if ( 0 < expDiff ) {\r
-            q = ( ( (bits64) aSig )<<32 ) / bSig;\r
-            q >>= 32 - expDiff;\r
-            bSig >>= 2;\r
-            aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;\r
-        }\r
-        else {\r
-            aSig >>= 2;\r
-            bSig >>= 2;\r
-        }\r
-    }\r
-    else {\r
-        if ( bSig <= aSig ) aSig -= bSig;\r
-        aSig64 = ( (bits64) aSig )<<40;\r
-        bSig64 = ( (bits64) bSig )<<40;\r
-        expDiff -= 64;\r
-        while ( 0 < expDiff ) {\r
-            q64 = estimateDiv128To64( aSig64, 0, bSig64 );\r
-            q64 = ( 2 < q64 ) ? q64 - 2 : 0;\r
-            aSig64 = - ( ( bSig * q64 )<<38 );\r
-            expDiff -= 62;\r
-        }\r
-        expDiff += 64;\r
-        q64 = estimateDiv128To64( aSig64, 0, bSig64 );\r
-        q64 = ( 2 < q64 ) ? q64 - 2 : 0;\r
-        q = q64>>( 64 - expDiff );\r
-        bSig <<= 6;\r
-        aSig = ( ( aSig64>>33 )<<( expDiff - 1 ) ) - bSig * q;\r
-    }\r
-    do {\r
-        alternateASig = aSig;\r
-        ++q;\r
-        aSig -= bSig;\r
-    } while ( 0 <= (sbits32) aSig );\r
-    sigMean = aSig + alternateASig;\r
-    if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {\r
-        aSig = alternateASig;\r
-    }\r
-    zSign = ( (sbits32) aSig < 0 );\r
-    if ( zSign ) aSig = - aSig;\r
-    return normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the square root of the single-precision floating-point value `a'.\r
-| The operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float32_sqrt( float32 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, zExp;\r
-    bits32 aSig, zSig;\r
-    bits64 rem, term;\r
-\r
-    aSig = extractFloat32Frac( a );\r
-    aExp = extractFloat32Exp( a );\r
-    aSign = extractFloat32Sign( a );\r
-    if ( aExp == 0xFF ) {\r
-        if ( aSig ) return propagateFloat32NaN( a, 0 );\r
-        if ( ! aSign ) return a;\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( aSign ) {\r
-        if ( ( aExp | aSig ) == 0 ) return a;\r
-        float_raise( float_flag_invalid );\r
-        return float32_default_nan;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return 0;\r
-        normalizeFloat32Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = ( ( aExp - 0x7F )>>1 ) + 0x7E;\r
-    aSig = ( aSig | 0x00800000 )<<8;\r
-    zSig = estimateSqrt32( aExp, aSig ) + 2;\r
-    if ( ( zSig & 0x7F ) <= 5 ) {\r
-        if ( zSig < 2 ) {\r
-            zSig = 0x7FFFFFFF;\r
-            goto roundAndPack;\r
-        }\r
-        aSig >>= aExp & 1;\r
-        term = ( (bits64) zSig ) * zSig;\r
-        rem = ( ( (bits64) aSig )<<32 ) - term;\r
-        while ( (sbits64) rem < 0 ) {\r
-            --zSig;\r
-            rem += ( ( (bits64) zSig )<<1 ) | 1;\r
-        }\r
-        zSig |= ( rem != 0 );\r
-    }\r
-    shift32RightJamming( zSig, 1, &zSig );\r
- roundAndPack:\r
-    return roundAndPackFloat32( 0, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_eq( float32 a, float32 b )\r
-{\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than\r
-| or equal to the corresponding value `b', and 0 otherwise.  The comparison\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_le( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-    return ( a == b ) || ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_lt( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );\r
-    return ( a != b ) && ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The invalid exception is\r
-| raised if either operand is a NaN.  Otherwise, the comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_eq_signaling( float32 a, float32 b )\r
-{\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than or\r
-| equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\r
-| cause an exception.  Otherwise, the comparison is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_le_quiet( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-    int16 aExp, bExp;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );\r
-    return ( a == b ) || ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\r
-| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_lt_quiet( float32 a, float32 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\r
-         || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\r
-       ) {\r
-        if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat32Sign( a );\r
-    bSign = extractFloat32Sign( b );\r
-    if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );\r
-    return ( a != b ) && ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float64_to_int32( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits64 aSig;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( ( aExp == 0x7FF ) && aSig ) aSign = 0;\r
-    if ( aExp ) aSig |= LIT64( 0x0010000000000000 );\r
-    shiftCount = 0x42C - aExp;\r
-    if ( 0 < shiftCount ) shift64RightJamming( aSig, shiftCount, &aSig );\r
-    return roundAndPackInt32( aSign, aSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the 32-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.\r
-| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\r
-| the conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float64_to_int32_round_to_zero( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits64 aSig, savedASig;\r
-    int32 z;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( 0x41E < aExp ) {\r
-        if ( ( aExp == 0x7FF ) && aSig ) aSign = 0;\r
-        goto invalid;\r
-    }\r
-    else if ( aExp < 0x3FF ) {\r
-        if ( aExp || aSig ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    aSig |= LIT64( 0x0010000000000000 );\r
-    shiftCount = 0x433 - aExp;\r
-    savedASig = aSig;\r
-    aSig >>= shiftCount;\r
-    z = aSig;\r
-    if ( aSign ) z = - z;\r
-    if ( ( z < 0 ) ^ aSign ) {\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\r
-    }\r
-    if ( ( aSig<<shiftCount ) != savedASig ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the 64-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 float64_to_int64( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits64 aSig, aSigExtra;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp ) aSig |= LIT64( 0x0010000000000000 );\r
-    shiftCount = 0x433 - aExp;\r
-    if ( shiftCount <= 0 ) {\r
-        if ( 0x43E < aExp ) {\r
-            float_raise( float_flag_invalid );\r
-            if (    ! aSign\r
-                 || (    ( aExp == 0x7FF )\r
-                      && ( aSig != LIT64( 0x0010000000000000 ) ) )\r
-               ) {\r
-                return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-            }\r
-            return (sbits64) LIT64( 0x8000000000000000 );\r
-        }\r
-        aSigExtra = 0;\r
-        aSig <<= - shiftCount;\r
-    }\r
-    else {\r
-        shift64ExtraRightJamming( aSig, 0, shiftCount, &aSig, &aSigExtra );\r
-    }\r
-    return roundAndPackInt64( aSign, aSig, aSigExtra );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the 64-bit two's complement integer format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.\r
-| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\r
-| the conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 float64_to_int64_round_to_zero( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, shiftCount;\r
-    bits64 aSig;\r
-    int64 z;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp ) aSig |= LIT64( 0x0010000000000000 );\r
-    shiftCount = aExp - 0x433;\r
-    if ( 0 <= shiftCount ) {\r
-        if ( 0x43E <= aExp ) {\r
-            if ( a != LIT64( 0xC3E0000000000000 ) ) {\r
-                float_raise( float_flag_invalid );\r
-                if (    ! aSign\r
-                     || (    ( aExp == 0x7FF )\r
-                          && ( aSig != LIT64( 0x0010000000000000 ) ) )\r
-                   ) {\r
-                    return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-                }\r
-            }\r
-            return (sbits64) LIT64( 0x8000000000000000 );\r
-        }\r
-        z = aSig<<shiftCount;\r
-    }\r
-    else {\r
-        if ( aExp < 0x3FE ) {\r
-            if ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\r
-            return 0;\r
-        }\r
-        z = aSig>>( - shiftCount );\r
-        if ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) {\r
-            float_exception_flags |= float_flag_inexact;\r
-        }\r
-    }\r
-    if ( aSign ) z = - z;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the single-precision floating-point format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float64_to_float32( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits64 aSig;\r
-    bits32 zSig;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig ) return commonNaNToFloat32( float64ToCommonNaN( a ) );\r
-        return packFloat32( aSign, 0xFF, 0 );\r
-    }\r
-    shift64RightJamming( aSig, 22, &aSig );\r
-    zSig = aSig;\r
-    if ( aExp || zSig ) {\r
-        zSig |= 0x40000000;\r
-        aExp -= 0x381;\r
-    }\r
-    return roundAndPackFloat32( aSign, aExp, zSig );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the extended double-precision floating-point format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 float64_to_floatx80( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits64 aSig;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig ) return commonNaNToFloatx80( float64ToCommonNaN( a ) );\r
-        return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    return\r
-        packFloatx80(\r
-            aSign, aExp + 0x3C00, ( aSig | LIT64( 0x0010000000000000 ) )<<11 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point value\r
-| `a' to the quadruple-precision floating-point format.  The conversion is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float64_to_float128( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits64 aSig, zSig0, zSig1;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig ) return commonNaNToFloat128( float64ToCommonNaN( a ) );\r
-        return packFloat128( aSign, 0x7FFF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig, &aExp, &aSig );\r
-        --aExp;\r
-    }\r
-    shift128Right( aSig, 0, 4, &zSig0, &zSig1 );\r
-    return packFloat128( aSign, aExp + 0x3C00, zSig0, zSig1 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Rounds the double-precision floating-point value `a' to an integer, and\r
-| returns the result as a double-precision floating-point value.  The\r
-| operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_round_to_int( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits64 lastBitMask, roundBitsMask;\r
-    int8 roundingMode;\r
-    float64 z;\r
-\r
-    aExp = extractFloat64Exp( a );\r
-    if ( 0x433 <= aExp ) {\r
-        if ( ( aExp == 0x7FF ) && extractFloat64Frac( a ) ) {\r
-            return propagateFloat64NaN( a, a );\r
-        }\r
-        return a;\r
-    }\r
-    if ( aExp < 0x3FF ) {\r
-        if ( (bits64) ( a<<1 ) == 0 ) return a;\r
-        float_exception_flags |= float_flag_inexact;\r
-        aSign = extractFloat64Sign( a );\r
-        switch ( float_rounding_mode ) {\r
-         case float_round_nearest_even:\r
-            if ( ( aExp == 0x3FE ) && extractFloat64Frac( a ) ) {\r
-                return packFloat64( aSign, 0x3FF, 0 );\r
-            }\r
-            break;\r
-         case float_round_down:\r
-            return aSign ? LIT64( 0xBFF0000000000000 ) : 0;\r
-         case float_round_up:\r
-            return\r
-            aSign ? LIT64( 0x8000000000000000 ) : LIT64( 0x3FF0000000000000 );\r
-        }\r
-        return packFloat64( aSign, 0, 0 );\r
-    }\r
-    lastBitMask = 1;\r
-    lastBitMask <<= 0x433 - aExp;\r
-    roundBitsMask = lastBitMask - 1;\r
-    z = a;\r
-    roundingMode = float_rounding_mode;\r
-    if ( roundingMode == float_round_nearest_even ) {\r
-        z += lastBitMask>>1;\r
-        if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;\r
-    }\r
-    else if ( roundingMode != float_round_to_zero ) {\r
-        if ( extractFloat64Sign( z ) ^ ( roundingMode == float_round_up ) ) {\r
-            z += roundBitsMask;\r
-        }\r
-    }\r
-    z &= ~ roundBitsMask;\r
-    if ( z != a ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the absolute values of the double-precision\r
-| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\r
-| before being returned.  `zSign' is ignored if the result is a NaN.\r
-| The addition is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 addFloat64Sigs( float64 a, float64 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig;\r
-    int16 expDiff;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    bSig = extractFloat64Frac( b );\r
-    bExp = extractFloat64Exp( b );\r
-    expDiff = aExp - bExp;\r
-    aSig <<= 9;\r
-    bSig <<= 9;\r
-    if ( 0 < expDiff ) {\r
-        if ( aExp == 0x7FF ) {\r
-            if ( aSig ) return propagateFloat64NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( bExp == 0 ) {\r
-            --expDiff;\r
-        }\r
-        else {\r
-            bSig |= LIT64( 0x2000000000000000 );\r
-        }\r
-        shift64RightJamming( bSig, expDiff, &bSig );\r
-        zExp = aExp;\r
-    }\r
-    else if ( expDiff < 0 ) {\r
-        if ( bExp == 0x7FF ) {\r
-            if ( bSig ) return propagateFloat64NaN( a, b );\r
-            return packFloat64( zSign, 0x7FF, 0 );\r
-        }\r
-        if ( aExp == 0 ) {\r
-            ++expDiff;\r
-        }\r
-        else {\r
-            aSig |= LIT64( 0x2000000000000000 );\r
-        }\r
-        shift64RightJamming( aSig, - expDiff, &aSig );\r
-        zExp = bExp;\r
-    }\r
-    else {\r
-        if ( aExp == 0x7FF ) {\r
-            if ( aSig | bSig ) return propagateFloat64NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( aExp == 0 ) return packFloat64( zSign, 0, ( aSig + bSig )>>9 );\r
-        zSig = LIT64( 0x4000000000000000 ) + aSig + bSig;\r
-        zExp = aExp;\r
-        goto roundAndPack;\r
-    }\r
-    aSig |= LIT64( 0x2000000000000000 );\r
-    zSig = ( aSig + bSig )<<1;\r
-    --zExp;\r
-    if ( (sbits64) zSig < 0 ) {\r
-        zSig = aSig + bSig;\r
-        ++zExp;\r
-    }\r
- roundAndPack:\r
-    return roundAndPackFloat64( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the absolute values of the double-\r
-| precision floating-point values `a' and `b'.  If `zSign' is 1, the\r
-| difference is negated before being returned.  `zSign' is ignored if the\r
-| result is a NaN.  The subtraction is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 subFloat64Sigs( float64 a, float64 b, flag zSign )\r
-{\r
-    int16 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig;\r
-    int16 expDiff;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    bSig = extractFloat64Frac( b );\r
-    bExp = extractFloat64Exp( b );\r
-    expDiff = aExp - bExp;\r
-    aSig <<= 10;\r
-    bSig <<= 10;\r
-    if ( 0 < expDiff ) goto aExpBigger;\r
-    if ( expDiff < 0 ) goto bExpBigger;\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig | bSig ) return propagateFloat64NaN( a, b );\r
-        float_raise( float_flag_invalid );\r
-        return float64_default_nan;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        aExp = 1;\r
-        bExp = 1;\r
-    }\r
-    if ( bSig < aSig ) goto aBigger;\r
-    if ( aSig < bSig ) goto bBigger;\r
-    return packFloat64( float_rounding_mode == float_round_down, 0, 0 );\r
- bExpBigger:\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig ) return propagateFloat64NaN( a, b );\r
-        return packFloat64( zSign ^ 1, 0x7FF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        ++expDiff;\r
-    }\r
-    else {\r
-        aSig |= LIT64( 0x4000000000000000 );\r
-    }\r
-    shift64RightJamming( aSig, - expDiff, &aSig );\r
-    bSig |= LIT64( 0x4000000000000000 );\r
- bBigger:\r
-    zSig = bSig - aSig;\r
-    zExp = bExp;\r
-    zSign ^= 1;\r
-    goto normalizeRoundAndPack;\r
- aExpBigger:\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig ) return propagateFloat64NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        --expDiff;\r
-    }\r
-    else {\r
-        bSig |= LIT64( 0x4000000000000000 );\r
-    }\r
-    shift64RightJamming( bSig, expDiff, &bSig );\r
-    aSig |= LIT64( 0x4000000000000000 );\r
- aBigger:\r
-    zSig = aSig - bSig;\r
-    zExp = aExp;\r
- normalizeRoundAndPack:\r
-    --zExp;\r
-    return normalizeRoundAndPackFloat64( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the double-precision floating-point values `a'\r
-| and `b'.  The operation is performed according to the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_add( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return addFloat64Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return subFloat64Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the double-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_sub( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return subFloat64Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return addFloat64Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of multiplying the double-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_mul( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig0, zSig1;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    bSig = extractFloat64Frac( b );\r
-    bExp = extractFloat64Exp( b );\r
-    bSign = extractFloat64Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) {\r
-            return propagateFloat64NaN( a, b );\r
-        }\r
-        if ( ( bExp | bSig ) == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float64_default_nan;\r
-        }\r
-        return packFloat64( zSign, 0x7FF, 0 );\r
-    }\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig ) return propagateFloat64NaN( a, b );\r
-        if ( ( aExp | aSig ) == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float64_default_nan;\r
-        }\r
-        return packFloat64( zSign, 0x7FF, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat64( zSign, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) return packFloat64( zSign, 0, 0 );\r
-        normalizeFloat64Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    zExp = aExp + bExp - 0x3FF;\r
-    aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10;\r
-    bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;\r
-    mul64To128( aSig, bSig, &zSig0, &zSig1 );\r
-    zSig0 |= ( zSig1 != 0 );\r
-    if ( 0 <= (sbits64) ( zSig0<<1 ) ) {\r
-        zSig0 <<= 1;\r
-        --zExp;\r
-    }\r
-    return roundAndPackFloat64( zSign, zExp, zSig0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of dividing the double-precision floating-point value `a'\r
-| by the corresponding value `b'.  The operation is performed according to\r
-| the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_div( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig;\r
-    bits64 rem0, rem1;\r
-    bits64 term0, term1;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    bSig = extractFloat64Frac( b );\r
-    bExp = extractFloat64Exp( b );\r
-    bSign = extractFloat64Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig ) return propagateFloat64NaN( a, b );\r
-        if ( bExp == 0x7FF ) {\r
-            if ( bSig ) return propagateFloat64NaN( a, b );\r
-            float_raise( float_flag_invalid );\r
-            return float64_default_nan;\r
-        }\r
-        return packFloat64( zSign, 0x7FF, 0 );\r
-    }\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig ) return propagateFloat64NaN( a, b );\r
-        return packFloat64( zSign, 0, 0 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            if ( ( aExp | aSig ) == 0 ) {\r
-                float_raise( float_flag_invalid );\r
-                return float64_default_nan;\r
-            }\r
-            float_raise( float_flag_divbyzero );\r
-            return packFloat64( zSign, 0x7FF, 0 );\r
-        }\r
-        normalizeFloat64Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloat64( zSign, 0, 0 );\r
-        normalizeFloat64Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = aExp - bExp + 0x3FD;\r
-    aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10;\r
-    bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;\r
-    if ( bSig <= ( aSig + aSig ) ) {\r
-        aSig >>= 1;\r
-        ++zExp;\r
-    }\r
-    zSig = estimateDiv128To64( aSig, 0, bSig );\r
-    if ( ( zSig & 0x1FF ) <= 2 ) {\r
-        mul64To128( bSig, zSig, &term0, &term1 );\r
-        sub128( aSig, 0, term0, term1, &rem0, &rem1 );\r
-        while ( (sbits64) rem0 < 0 ) {\r
-            --zSig;\r
-            add128( rem0, rem1, 0, bSig, &rem0, &rem1 );\r
-        }\r
-        zSig |= ( rem1 != 0 );\r
-    }\r
-    return roundAndPackFloat64( zSign, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the remainder of the double-precision floating-point value `a'\r
-| with respect to the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_rem( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int16 aExp, bExp, expDiff;\r
-    bits64 aSig, bSig;\r
-    bits64 q, alternateASig;\r
-    sbits64 sigMean;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    bSig = extractFloat64Frac( b );\r
-    bExp = extractFloat64Exp( b );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) {\r
-            return propagateFloat64NaN( a, b );\r
-        }\r
-        float_raise( float_flag_invalid );\r
-        return float64_default_nan;\r
-    }\r
-    if ( bExp == 0x7FF ) {\r
-        if ( bSig ) return propagateFloat64NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            float_raise( float_flag_invalid );\r
-            return float64_default_nan;\r
-        }\r
-        normalizeFloat64Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return a;\r
-        normalizeFloat64Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    expDiff = aExp - bExp;\r
-    aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<11;\r
-    bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;\r
-    if ( expDiff < 0 ) {\r
-        if ( expDiff < -1 ) return a;\r
-        aSig >>= 1;\r
-    }\r
-    q = ( bSig <= aSig );\r
-    if ( q ) aSig -= bSig;\r
-    expDiff -= 64;\r
-    while ( 0 < expDiff ) {\r
-        q = estimateDiv128To64( aSig, 0, bSig );\r
-        q = ( 2 < q ) ? q - 2 : 0;\r
-        aSig = - ( ( bSig>>2 ) * q );\r
-        expDiff -= 62;\r
-    }\r
-    expDiff += 64;\r
-    if ( 0 < expDiff ) {\r
-        q = estimateDiv128To64( aSig, 0, bSig );\r
-        q = ( 2 < q ) ? q - 2 : 0;\r
-        q >>= 64 - expDiff;\r
-        bSig >>= 2;\r
-        aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;\r
-    }\r
-    else {\r
-        aSig >>= 2;\r
-        bSig >>= 2;\r
-    }\r
-    do {\r
-        alternateASig = aSig;\r
-        ++q;\r
-        aSig -= bSig;\r
-    } while ( 0 <= (sbits64) aSig );\r
-    sigMean = aSig + alternateASig;\r
-    if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {\r
-        aSig = alternateASig;\r
-    }\r
-    zSign = ( (sbits64) aSig < 0 );\r
-    if ( zSign ) aSig = - aSig;\r
-    return normalizeRoundAndPackFloat64( aSign ^ zSign, bExp, aSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the square root of the double-precision floating-point value `a'.\r
-| The operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float64_sqrt( float64 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp, zExp;\r
-    bits64 aSig, zSig, doubleZSig;\r
-    bits64 rem0, rem1, term0, term1;\r
-    float64 z;\r
-\r
-    aSig = extractFloat64Frac( a );\r
-    aExp = extractFloat64Exp( a );\r
-    aSign = extractFloat64Sign( a );\r
-    if ( aExp == 0x7FF ) {\r
-        if ( aSig ) return propagateFloat64NaN( a, a );\r
-        if ( ! aSign ) return a;\r
-        float_raise( float_flag_invalid );\r
-        return float64_default_nan;\r
-    }\r
-    if ( aSign ) {\r
-        if ( ( aExp | aSig ) == 0 ) return a;\r
-        float_raise( float_flag_invalid );\r
-        return float64_default_nan;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return 0;\r
-        normalizeFloat64Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = ( ( aExp - 0x3FF )>>1 ) + 0x3FE;\r
-    aSig |= LIT64( 0x0010000000000000 );\r
-    zSig = estimateSqrt32( aExp, aSig>>21 );\r
-    aSig <<= 9 - ( aExp & 1 );\r
-    zSig = estimateDiv128To64( aSig, 0, zSig<<32 ) + ( zSig<<30 );\r
-    if ( ( zSig & 0x1FF ) <= 5 ) {\r
-        doubleZSig = zSig<<1;\r
-        mul64To128( zSig, zSig, &term0, &term1 );\r
-        sub128( aSig, 0, term0, term1, &rem0, &rem1 );\r
-        while ( (sbits64) rem0 < 0 ) {\r
-            --zSig;\r
-            doubleZSig -= 2;\r
-            add128( rem0, rem1, zSig>>63, doubleZSig | 1, &rem0, &rem1 );\r
-        }\r
-        zSig |= ( ( rem0 | rem1 ) != 0 );\r
-    }\r
-    return roundAndPackFloat64( 0, zExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is equal to the\r
-| corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_eq( float64 a, float64 b )\r
-{\r
-\r
-    if (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\r
-         || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\r
-       ) {\r
-        if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    return ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than or\r
-| equal to the corresponding value `b', and 0 otherwise.  The comparison is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_le( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\r
-         || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 );\r
-    return ( a == b ) || ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_lt( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\r
-         || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 );\r
-    return ( a != b ) && ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is equal to the\r
-| corresponding value `b', and 0 otherwise.  The invalid exception is raised\r
-| if either operand is a NaN.  Otherwise, the comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_eq_signaling( float64 a, float64 b )\r
-{\r
-\r
-    if (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\r
-         || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    return ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than or\r
-| equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\r
-| cause an exception.  Otherwise, the comparison is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_le_quiet( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-    int16 aExp, bExp;\r
-\r
-    if (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\r
-         || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\r
-       ) {\r
-        if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 );\r
-    return ( a == b ) || ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\r
-| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_lt_quiet( float64 a, float64 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\r
-         || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\r
-       ) {\r
-        if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat64Sign( a );\r
-    bSign = extractFloat64Sign( b );\r
-    if ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 );\r
-    return ( a != b ) && ( aSign ^ ( a < b ) );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the 32-bit two's complement integer format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic---which means in particular that the conversion\r
-| is rounded according to the current rounding mode.  If `a' is a NaN, the\r
-| largest positive integer is returned.  Otherwise, if the conversion\r
-| overflows, the largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 floatx80_to_int32( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0;\r
-    shiftCount = 0x4037 - aExp;\r
-    if ( shiftCount <= 0 ) shiftCount = 1;\r
-    shift64RightJamming( aSig, shiftCount, &aSig );\r
-    return roundAndPackInt32( aSign, aSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the 32-bit two's complement integer format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic, except that the conversion is always rounded\r
-| toward zero.  If `a' is a NaN, the largest positive integer is returned.\r
-| Otherwise, if the conversion overflows, the largest integer with the same\r
-| sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 floatx80_to_int32_round_to_zero( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig, savedASig;\r
-    int32 z;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    if ( 0x401E < aExp ) {\r
-        if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0;\r
-        goto invalid;\r
-    }\r
-    else if ( aExp < 0x3FFF ) {\r
-        if ( aExp || aSig ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    shiftCount = 0x403E - aExp;\r
-    savedASig = aSig;\r
-    aSig >>= shiftCount;\r
-    z = aSig;\r
-    if ( aSign ) z = - z;\r
-    if ( ( z < 0 ) ^ aSign ) {\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\r
-    }\r
-    if ( ( aSig<<shiftCount ) != savedASig ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the 64-bit two's complement integer format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic---which means in particular that the conversion\r
-| is rounded according to the current rounding mode.  If `a' is a NaN,\r
-| the largest positive integer is returned.  Otherwise, if the conversion\r
-| overflows, the largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 floatx80_to_int64( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig, aSigExtra;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    shiftCount = 0x403E - aExp;\r
-    if ( shiftCount <= 0 ) {\r
-        if ( shiftCount ) {\r
-            float_raise( float_flag_invalid );\r
-            if (    ! aSign\r
-                 || (    ( aExp == 0x7FFF )\r
-                      && ( aSig != LIT64( 0x8000000000000000 ) ) )\r
-               ) {\r
-                return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-            }\r
-            return (sbits64) LIT64( 0x8000000000000000 );\r
-        }\r
-        aSigExtra = 0;\r
-    }\r
-    else {\r
-        shift64ExtraRightJamming( aSig, 0, shiftCount, &aSig, &aSigExtra );\r
-    }\r
-    return roundAndPackInt64( aSign, aSig, aSigExtra );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the 64-bit two's complement integer format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic, except that the conversion is always rounded\r
-| toward zero.  If `a' is a NaN, the largest positive integer is returned.\r
-| Otherwise, if the conversion overflows, the largest integer with the same\r
-| sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 floatx80_to_int64_round_to_zero( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig;\r
-    int64 z;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    shiftCount = aExp - 0x403E;\r
-    if ( 0 <= shiftCount ) {\r
-        aSig &= LIT64( 0x7FFFFFFFFFFFFFFF );\r
-        if ( ( a.high != 0xC03E ) || aSig ) {\r
-            float_raise( float_flag_invalid );\r
-            if ( ! aSign || ( ( aExp == 0x7FFF ) && aSig ) ) {\r
-                return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-            }\r
-        }\r
-        return (sbits64) LIT64( 0x8000000000000000 );\r
-    }\r
-    else if ( aExp < 0x3FFF ) {\r
-        if ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    z = aSig>>( - shiftCount );\r
-    if ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    if ( aSign ) z = - z;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the single-precision floating-point format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 floatx80_to_float32( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 aSig;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( (bits64) ( aSig<<1 ) ) {\r
-            return commonNaNToFloat32( floatx80ToCommonNaN( a ) );\r
-        }\r
-        return packFloat32( aSign, 0xFF, 0 );\r
-    }\r
-    shift64RightJamming( aSig, 33, &aSig );\r
-    if ( aExp || aSig ) aExp -= 0x3F81;\r
-    return roundAndPackFloat32( aSign, aExp, aSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the double-precision floating-point format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 floatx80_to_float64( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 aSig, zSig;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( (bits64) ( aSig<<1 ) ) {\r
-            return commonNaNToFloat64( floatx80ToCommonNaN( a ) );\r
-        }\r
-        return packFloat64( aSign, 0x7FF, 0 );\r
-    }\r
-    shift64RightJamming( aSig, 1, &zSig );\r
-    if ( aExp || aSig ) aExp -= 0x3C01;\r
-    return roundAndPackFloat64( aSign, aExp, zSig );\r
-\r
-}\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point value `a' to the quadruple-precision floating-point format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 floatx80_to_float128( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int16 aExp;\r
-    bits64 aSig, zSig0, zSig1;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) {\r
-        return commonNaNToFloat128( floatx80ToCommonNaN( a ) );\r
-    }\r
-    shift128Right( aSig<<1, 0, 16, &zSig0, &zSig1 );\r
-    return packFloat128( aSign, aExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Rounds the extended double-precision floating-point value `a' to an integer,\r
-| and returns the result as an extended quadruple-precision floating-point\r
-| value.  The operation is performed according to the IEC/IEEE Standard for\r
-| Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_round_to_int( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 lastBitMask, roundBitsMask;\r
-    int8 roundingMode;\r
-    floatx80 z;\r
-\r
-    aExp = extractFloatx80Exp( a );\r
-    if ( 0x403E <= aExp ) {\r
-        if ( ( aExp == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) {\r
-            return propagateFloatx80NaN( a, a );\r
-        }\r
-        return a;\r
-    }\r
-    if ( aExp < 0x3FFF ) {\r
-        if (    ( aExp == 0 )\r
-             && ( (bits64) ( extractFloatx80Frac( a )<<1 ) == 0 ) ) {\r
-            return a;\r
-        }\r
-        float_exception_flags |= float_flag_inexact;\r
-        aSign = extractFloatx80Sign( a );\r
-        switch ( float_rounding_mode ) {\r
-         case float_round_nearest_even:\r
-            if ( ( aExp == 0x3FFE ) && (bits64) ( extractFloatx80Frac( a )<<1 )\r
-               ) {\r
-                return\r
-                    packFloatx80( aSign, 0x3FFF, LIT64( 0x8000000000000000 ) );\r
-            }\r
-            break;\r
-         case float_round_down:\r
-            return\r
-                  aSign ?\r
-                      packFloatx80( 1, 0x3FFF, LIT64( 0x8000000000000000 ) )\r
-                : packFloatx80( 0, 0, 0 );\r
-         case float_round_up:\r
-            return\r
-                  aSign ? packFloatx80( 1, 0, 0 )\r
-                : packFloatx80( 0, 0x3FFF, LIT64( 0x8000000000000000 ) );\r
-        }\r
-        return packFloatx80( aSign, 0, 0 );\r
-    }\r
-    lastBitMask = 1;\r
-    lastBitMask <<= 0x403E - aExp;\r
-    roundBitsMask = lastBitMask - 1;\r
-    z = a;\r
-    roundingMode = float_rounding_mode;\r
-    if ( roundingMode == float_round_nearest_even ) {\r
-        z.low += lastBitMask>>1;\r
-        if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;\r
-    }\r
-    else if ( roundingMode != float_round_to_zero ) {\r
-        if ( extractFloatx80Sign( z ) ^ ( roundingMode == float_round_up ) ) {\r
-            z.low += roundBitsMask;\r
-        }\r
-    }\r
-    z.low &= ~ roundBitsMask;\r
-    if ( z.low == 0 ) {\r
-        ++z.high;\r
-        z.low = LIT64( 0x8000000000000000 );\r
-    }\r
-    if ( z.low != a.low ) float_exception_flags |= float_flag_inexact;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the absolute values of the extended double-\r
-| precision floating-point values `a' and `b'.  If `zSign' is 1, the sum is\r
-| negated before being returned.  `zSign' is ignored if the result is a NaN.\r
-| The addition is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign )\r
-{\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig0, zSig1;\r
-    int32 expDiff;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    bSig = extractFloatx80Frac( b );\r
-    bExp = extractFloatx80Exp( b );\r
-    expDiff = aExp - bExp;\r
-    if ( 0 < expDiff ) {\r
-        if ( aExp == 0x7FFF ) {\r
-            if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( bExp == 0 ) --expDiff;\r
-        shift64ExtraRightJamming( bSig, 0, expDiff, &bSig, &zSig1 );\r
-        zExp = aExp;\r
-    }\r
-    else if ( expDiff < 0 ) {\r
-        if ( bExp == 0x7FFF ) {\r
-            if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-            return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-        }\r
-        if ( aExp == 0 ) ++expDiff;\r
-        shift64ExtraRightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );\r
-        zExp = bExp;\r
-    }\r
-    else {\r
-        if ( aExp == 0x7FFF ) {\r
-            if ( (bits64) ( ( aSig | bSig )<<1 ) ) {\r
-                return propagateFloatx80NaN( a, b );\r
-            }\r
-            return a;\r
-        }\r
-        zSig1 = 0;\r
-        zSig0 = aSig + bSig;\r
-        if ( aExp == 0 ) {\r
-            normalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 );\r
-            goto roundAndPack;\r
-        }\r
-        zExp = aExp;\r
-        goto shiftRight1;\r
-    }\r
-    zSig0 = aSig + bSig;\r
-    if ( (sbits64) zSig0 < 0 ) goto roundAndPack;\r
- shiftRight1:\r
-    shift64ExtraRightJamming( zSig0, zSig1, 1, &zSig0, &zSig1 );\r
-    zSig0 |= LIT64( 0x8000000000000000 );\r
-    ++zExp;\r
- roundAndPack:\r
-    return\r
-        roundAndPackFloatx80(\r
-            floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the absolute values of the extended\r
-| double-precision floating-point values `a' and `b'.  If `zSign' is 1, the\r
-| difference is negated before being returned.  `zSign' is ignored if the\r
-| result is a NaN.  The subtraction is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign )\r
-{\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig0, zSig1;\r
-    int32 expDiff;\r
-    floatx80 z;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    bSig = extractFloatx80Frac( b );\r
-    bExp = extractFloatx80Exp( b );\r
-    expDiff = aExp - bExp;\r
-    if ( 0 < expDiff ) goto aExpBigger;\r
-    if ( expDiff < 0 ) goto bExpBigger;\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( (bits64) ( ( aSig | bSig )<<1 ) ) {\r
-            return propagateFloatx80NaN( a, b );\r
-        }\r
-        float_raise( float_flag_invalid );\r
-        z.low = floatx80_default_nan_low;\r
-        z.high = floatx80_default_nan_high;\r
-        return z;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        aExp = 1;\r
-        bExp = 1;\r
-    }\r
-    zSig1 = 0;\r
-    if ( bSig < aSig ) goto aBigger;\r
-    if ( aSig < bSig ) goto bBigger;\r
-    return packFloatx80( float_rounding_mode == float_round_down, 0, 0 );\r
- bExpBigger:\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-        return packFloatx80( zSign ^ 1, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( aExp == 0 ) ++expDiff;\r
-    shift128RightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );\r
- bBigger:\r
-    sub128( bSig, 0, aSig, zSig1, &zSig0, &zSig1 );\r
-    zExp = bExp;\r
-    zSign ^= 1;\r
-    goto normalizeRoundAndPack;\r
- aExpBigger:\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) --expDiff;\r
-    shift128RightJamming( bSig, 0, expDiff, &bSig, &zSig1 );\r
- aBigger:\r
-    sub128( aSig, 0, bSig, zSig1, &zSig0, &zSig1 );\r
-    zExp = aExp;\r
- normalizeRoundAndPack:\r
-    return\r
-        normalizeRoundAndPackFloatx80(\r
-            floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the extended double-precision floating-point\r
-| values `a' and `b'.  The operation is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_add( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloatx80Sign( a );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return addFloatx80Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return subFloatx80Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the extended double-precision floating-\r
-| point values `a' and `b'.  The operation is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_sub( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloatx80Sign( a );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return subFloatx80Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return addFloatx80Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of multiplying the extended double-precision floating-\r
-| point values `a' and `b'.  The operation is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_mul( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig0, zSig1;\r
-    floatx80 z;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    bSig = extractFloatx80Frac( b );\r
-    bExp = extractFloatx80Exp( b );\r
-    bSign = extractFloatx80Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FFF ) {\r
-        if (    (bits64) ( aSig<<1 )\r
-             || ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) {\r
-            return propagateFloatx80NaN( a, b );\r
-        }\r
-        if ( ( bExp | bSig ) == 0 ) goto invalid;\r
-        return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-        if ( ( aExp | aSig ) == 0 ) {\r
- invalid:\r
-            float_raise( float_flag_invalid );\r
-            z.low = floatx80_default_nan_low;\r
-            z.high = floatx80_default_nan_high;\r
-            return z;\r
-        }\r
-        return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloatx80( zSign, 0, 0 );\r
-        normalizeFloatx80Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) return packFloatx80( zSign, 0, 0 );\r
-        normalizeFloatx80Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    zExp = aExp + bExp - 0x3FFE;\r
-    mul64To128( aSig, bSig, &zSig0, &zSig1 );\r
-    if ( 0 < (sbits64) zSig0 ) {\r
-        shortShift128Left( zSig0, zSig1, 1, &zSig0, &zSig1 );\r
-        --zExp;\r
-    }\r
-    return\r
-        roundAndPackFloatx80(\r
-            floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of dividing the extended double-precision floating-point\r
-| value `a' by the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_div( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig, bSig, zSig0, zSig1;\r
-    bits64 rem0, rem1, rem2, term0, term1, term2;\r
-    floatx80 z;\r
-\r
-    aSig = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    bSig = extractFloatx80Frac( b );\r
-    bExp = extractFloatx80Exp( b );\r
-    bSign = extractFloatx80Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-        if ( bExp == 0x7FFF ) {\r
-            if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-            goto invalid;\r
-        }\r
-        return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-        return packFloatx80( zSign, 0, 0 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
-            if ( ( aExp | aSig ) == 0 ) {\r
- invalid:\r
-                float_raise( float_flag_invalid );\r
-                z.low = floatx80_default_nan_low;\r
-                z.high = floatx80_default_nan_high;\r
-                return z;\r
-            }\r
-            float_raise( float_flag_divbyzero );\r
-            return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-        }\r
-        normalizeFloatx80Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig == 0 ) return packFloatx80( zSign, 0, 0 );\r
-        normalizeFloatx80Subnormal( aSig, &aExp, &aSig );\r
-    }\r
-    zExp = aExp - bExp + 0x3FFE;\r
-    rem1 = 0;\r
-    if ( bSig <= aSig ) {\r
-        shift128Right( aSig, 0, 1, &aSig, &rem1 );\r
-        ++zExp;\r
-    }\r
-    zSig0 = estimateDiv128To64( aSig, rem1, bSig );\r
-    mul64To128( bSig, zSig0, &term0, &term1 );\r
-    sub128( aSig, rem1, term0, term1, &rem0, &rem1 );\r
-    while ( (sbits64) rem0 < 0 ) {\r
-        --zSig0;\r
-        add128( rem0, rem1, 0, bSig, &rem0, &rem1 );\r
-    }\r
-    zSig1 = estimateDiv128To64( rem1, 0, bSig );\r
-    if ( (bits64) ( zSig1<<1 ) <= 8 ) {\r
-        mul64To128( bSig, zSig1, &term1, &term2 );\r
-        sub128( rem1, 0, term1, term2, &rem1, &rem2 );\r
-        while ( (sbits64) rem1 < 0 ) {\r
-            --zSig1;\r
-            add128( rem1, rem2, 0, bSig, &rem1, &rem2 );\r
-        }\r
-        zSig1 |= ( ( rem1 | rem2 ) != 0 );\r
-    }\r
-    return\r
-        roundAndPackFloatx80(\r
-            floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the remainder of the extended double-precision floating-point value\r
-| `a' with respect to the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_rem( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int32 aExp, bExp, expDiff;\r
-    bits64 aSig0, aSig1, bSig;\r
-    bits64 q, term0, term1, alternateASig0, alternateASig1;\r
-    floatx80 z;\r
-\r
-    aSig0 = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    bSig = extractFloatx80Frac( b );\r
-    bExp = extractFloatx80Exp( b );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aExp == 0x7FFF ) {\r
-        if (    (bits64) ( aSig0<<1 )\r
-             || ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) {\r
-            return propagateFloatx80NaN( a, b );\r
-        }\r
-        goto invalid;\r
-    }\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( bSig == 0 ) {\r
- invalid:\r
-            float_raise( float_flag_invalid );\r
-            z.low = floatx80_default_nan_low;\r
-            z.high = floatx80_default_nan_high;\r
-            return z;\r
-        }\r
-        normalizeFloatx80Subnormal( bSig, &bExp, &bSig );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( (bits64) ( aSig0<<1 ) == 0 ) return a;\r
-        normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 );\r
-    }\r
-    bSig |= LIT64( 0x8000000000000000 );\r
-    zSign = aSign;\r
-    expDiff = aExp - bExp;\r
-    aSig1 = 0;\r
-    if ( expDiff < 0 ) {\r
-        if ( expDiff < -1 ) return a;\r
-        shift128Right( aSig0, 0, 1, &aSig0, &aSig1 );\r
-        expDiff = 0;\r
-    }\r
-    q = ( bSig <= aSig0 );\r
-    if ( q ) aSig0 -= bSig;\r
-    expDiff -= 64;\r
-    while ( 0 < expDiff ) {\r
-        q = estimateDiv128To64( aSig0, aSig1, bSig );\r
-        q = ( 2 < q ) ? q - 2 : 0;\r
-        mul64To128( bSig, q, &term0, &term1 );\r
-        sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );\r
-        shortShift128Left( aSig0, aSig1, 62, &aSig0, &aSig1 );\r
-        expDiff -= 62;\r
-    }\r
-    expDiff += 64;\r
-    if ( 0 < expDiff ) {\r
-        q = estimateDiv128To64( aSig0, aSig1, bSig );\r
-        q = ( 2 < q ) ? q - 2 : 0;\r
-        q >>= 64 - expDiff;\r
-        mul64To128( bSig, q<<( 64 - expDiff ), &term0, &term1 );\r
-        sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );\r
-        shortShift128Left( 0, bSig, 64 - expDiff, &term0, &term1 );\r
-        while ( le128( term0, term1, aSig0, aSig1 ) ) {\r
-            ++q;\r
-            sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );\r
-        }\r
-    }\r
-    else {\r
-        term1 = 0;\r
-        term0 = bSig;\r
-    }\r
-    sub128( term0, term1, aSig0, aSig1, &alternateASig0, &alternateASig1 );\r
-    if (    lt128( alternateASig0, alternateASig1, aSig0, aSig1 )\r
-         || (    eq128( alternateASig0, alternateASig1, aSig0, aSig1 )\r
-              && ( q & 1 ) )\r
-       ) {\r
-        aSig0 = alternateASig0;\r
-        aSig1 = alternateASig1;\r
-        zSign = ! zSign;\r
-    }\r
-    return\r
-        normalizeRoundAndPackFloatx80(\r
-            80, zSign, bExp + expDiff, aSig0, aSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the square root of the extended double-precision floating-point\r
-| value `a'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 floatx80_sqrt( floatx80 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, zExp;\r
-    bits64 aSig0, aSig1, zSig0, zSig1, doubleZSig0;\r
-    bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\r
-    floatx80 z;\r
-\r
-    aSig0 = extractFloatx80Frac( a );\r
-    aExp = extractFloatx80Exp( a );\r
-    aSign = extractFloatx80Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( (bits64) ( aSig0<<1 ) ) return propagateFloatx80NaN( a, a );\r
-        if ( ! aSign ) return a;\r
-        goto invalid;\r
-    }\r
-    if ( aSign ) {\r
-        if ( ( aExp | aSig0 ) == 0 ) return a;\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        z.low = floatx80_default_nan_low;\r
-        z.high = floatx80_default_nan_high;\r
-        return z;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( aSig0 == 0 ) return packFloatx80( 0, 0, 0 );\r
-        normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 );\r
-    }\r
-    zExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFF;\r
-    zSig0 = estimateSqrt32( aExp, aSig0>>32 );\r
-    shift128Right( aSig0, 0, 2 + ( aExp & 1 ), &aSig0, &aSig1 );\r
-    zSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 );\r
-    doubleZSig0 = zSig0<<1;\r
-    mul64To128( zSig0, zSig0, &term0, &term1 );\r
-    sub128( aSig0, aSig1, term0, term1, &rem0, &rem1 );\r
-    while ( (sbits64) rem0 < 0 ) {\r
-        --zSig0;\r
-        doubleZSig0 -= 2;\r
-        add128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 );\r
-    }\r
-    zSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 );\r
-    if ( ( zSig1 & LIT64( 0x3FFFFFFFFFFFFFFF ) ) <= 5 ) {\r
-        if ( zSig1 == 0 ) zSig1 = 1;\r
-        mul64To128( doubleZSig0, zSig1, &term1, &term2 );\r
-        sub128( rem1, 0, term1, term2, &rem1, &rem2 );\r
-        mul64To128( zSig1, zSig1, &term2, &term3 );\r
-        sub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );\r
-        while ( (sbits64) rem1 < 0 ) {\r
-            --zSig1;\r
-            shortShift128Left( 0, zSig1, 1, &term2, &term3 );\r
-            term3 |= 1;\r
-            term2 |= doubleZSig0;\r
-            add192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );\r
-        }\r
-        zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\r
-    }\r
-    shortShift128Left( 0, zSig1, 1, &zSig0, &zSig1 );\r
-    zSig0 |= doubleZSig0;\r
-    return\r
-        roundAndPackFloatx80(\r
-            floatx80_rounding_precision, 0, zExp, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is\r
-| equal to the corresponding value `b', and 0 otherwise.  The comparison is\r
-| performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_eq( floatx80 a, floatx80 b )\r
-{\r
-\r
-    if (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( a )<<1 ) )\r
-         || (    ( extractFloatx80Exp( b ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( b )<<1 ) )\r
-       ) {\r
-        if (    floatx80_is_signaling_nan( a )\r
-             || floatx80_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    return\r
-           ( a.low == b.low )\r
-        && (    ( a.high == b.high )\r
-             || (    ( a.low == 0 )\r
-                  && ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) )\r
-           );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is\r
-| less than or equal to the corresponding value `b', and 0 otherwise.  The\r
-| comparison is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_le( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( a )<<1 ) )\r
-         || (    ( extractFloatx80Exp( b ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( b )<<1 ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloatx80Sign( a );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            || (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 == 0 );\r
-    }\r
-    return\r
-          aSign ? le128( b.high, b.low, a.high, a.low )\r
-        : le128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is\r
-| less than the corresponding value `b', and 0 otherwise.  The comparison\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_lt( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( a )<<1 ) )\r
-         || (    ( extractFloatx80Exp( b ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( b )<<1 ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloatx80Sign( a );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            && (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 != 0 );\r
-    }\r
-    return\r
-          aSign ? lt128( b.high, b.low, a.high, a.low )\r
-        : lt128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is equal\r
-| to the corresponding value `b', and 0 otherwise.  The invalid exception is\r
-| raised if either operand is a NaN.  Otherwise, the comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_eq_signaling( floatx80 a, floatx80 b )\r
-{\r
-\r
-    if (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( a )<<1 ) )\r
-         || (    ( extractFloatx80Exp( b ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( b )<<1 ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    return\r
-           ( a.low == b.low )\r
-        && (    ( a.high == b.high )\r
-             || (    ( a.low == 0 )\r
-                  && ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) )\r
-           );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is less\r
-| than or equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs\r
-| do not cause an exception.  Otherwise, the comparison is performed according\r
-| to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_le_quiet( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( a )<<1 ) )\r
-         || (    ( extractFloatx80Exp( b ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( b )<<1 ) )\r
-       ) {\r
-        if (    floatx80_is_signaling_nan( a )\r
-             || floatx80_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloatx80Sign( a );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            || (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 == 0 );\r
-    }\r
-    return\r
-          aSign ? le128( b.high, b.low, a.high, a.low )\r
-        : le128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is less\r
-| than the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause\r
-| an exception.  Otherwise, the comparison is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_lt_quiet( floatx80 a, floatx80 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( a )<<1 ) )\r
-         || (    ( extractFloatx80Exp( b ) == 0x7FFF )\r
-              && (bits64) ( extractFloatx80Frac( b )<<1 ) )\r
-       ) {\r
-        if (    floatx80_is_signaling_nan( a )\r
-             || floatx80_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloatx80Sign( a );\r
-    bSign = extractFloatx80Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            && (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 != 0 );\r
-    }\r
-    return\r
-          aSign ? lt128( b.high, b.low, a.high, a.low )\r
-        : lt128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the 32-bit two's complement integer format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float128_to_int32( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig0, aSig1;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) aSign = 0;\r
-    if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );\r
-    aSig0 |= ( aSig1 != 0 );\r
-    shiftCount = 0x4028 - aExp;\r
-    if ( 0 < shiftCount ) shift64RightJamming( aSig0, shiftCount, &aSig0 );\r
-    return roundAndPackInt32( aSign, aSig0 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the 32-bit two's complement integer format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.  If\r
-| `a' is a NaN, the largest positive integer is returned.  Otherwise, if the\r
-| conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int32 float128_to_int32_round_to_zero( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig0, aSig1, savedASig;\r
-    int32 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    aSig0 |= ( aSig1 != 0 );\r
-    if ( 0x401E < aExp ) {\r
-        if ( ( aExp == 0x7FFF ) && aSig0 ) aSign = 0;\r
-        goto invalid;\r
-    }\r
-    else if ( aExp < 0x3FFF ) {\r
-        if ( aExp || aSig0 ) float_exception_flags |= float_flag_inexact;\r
-        return 0;\r
-    }\r
-    aSig0 |= LIT64( 0x0001000000000000 );\r
-    shiftCount = 0x402F - aExp;\r
-    savedASig = aSig0;\r
-    aSig0 >>= shiftCount;\r
-    z = aSig0;\r
-    if ( aSign ) z = - z;\r
-    if ( ( z < 0 ) ^ aSign ) {\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\r
-    }\r
-    if ( ( aSig0<<shiftCount ) != savedASig ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the 64-bit two's complement integer format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic---which means in particular that the conversion is rounded\r
-| according to the current rounding mode.  If `a' is a NaN, the largest\r
-| positive integer is returned.  Otherwise, if the conversion overflows, the\r
-| largest integer with the same sign as `a' is returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 float128_to_int64( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig0, aSig1;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );\r
-    shiftCount = 0x402F - aExp;\r
-    if ( shiftCount <= 0 ) {\r
-        if ( 0x403E < aExp ) {\r
-            float_raise( float_flag_invalid );\r
-            if (    ! aSign\r
-                 || (    ( aExp == 0x7FFF )\r
-                      && ( aSig1 || ( aSig0 != LIT64( 0x0001000000000000 ) ) )\r
-                    )\r
-               ) {\r
-                return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-            }\r
-            return (sbits64) LIT64( 0x8000000000000000 );\r
-        }\r
-        shortShift128Left( aSig0, aSig1, - shiftCount, &aSig0, &aSig1 );\r
-    }\r
-    else {\r
-        shift64ExtraRightJamming( aSig0, aSig1, shiftCount, &aSig0, &aSig1 );\r
-    }\r
-    return roundAndPackInt64( aSign, aSig0, aSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the 64-bit two's complement integer format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic, except that the conversion is always rounded toward zero.\r
-| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\r
-| the conversion overflows, the largest integer with the same sign as `a' is\r
-| returned.\r
-*----------------------------------------------------------------------------*/\r
-\r
-int64 float128_to_int64_round_to_zero( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, shiftCount;\r
-    bits64 aSig0, aSig1;\r
-    int64 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );\r
-    shiftCount = aExp - 0x402F;\r
-    if ( 0 < shiftCount ) {\r
-        if ( 0x403E <= aExp ) {\r
-            aSig0 &= LIT64( 0x0000FFFFFFFFFFFF );\r
-            if (    ( a.high == LIT64( 0xC03E000000000000 ) )\r
-                 && ( aSig1 < LIT64( 0x0002000000000000 ) ) ) {\r
-                if ( aSig1 ) float_exception_flags |= float_flag_inexact;\r
-            }\r
-            else {\r
-                float_raise( float_flag_invalid );\r
-                if ( ! aSign || ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) ) {\r
-                    return LIT64( 0x7FFFFFFFFFFFFFFF );\r
-                }\r
-            }\r
-            return (sbits64) LIT64( 0x8000000000000000 );\r
-        }\r
-        z = ( aSig0<<shiftCount ) | ( aSig1>>( ( - shiftCount ) & 63 ) );\r
-        if ( (bits64) ( aSig1<<shiftCount ) ) {\r
-            float_exception_flags |= float_flag_inexact;\r
-        }\r
-    }\r
-    else {\r
-        if ( aExp < 0x3FFF ) {\r
-            if ( aExp | aSig0 | aSig1 ) {\r
-                float_exception_flags |= float_flag_inexact;\r
-            }\r
-            return 0;\r
-        }\r
-        z = aSig0>>( - shiftCount );\r
-        if (    aSig1\r
-             || ( shiftCount && (bits64) ( aSig0<<( shiftCount & 63 ) ) ) ) {\r
-            float_exception_flags |= float_flag_inexact;\r
-        }\r
-    }\r
-    if ( aSign ) z = - z;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the single-precision floating-point format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float32 float128_to_float32( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 aSig0, aSig1;\r
-    bits32 zSig;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 ) {\r
-            return commonNaNToFloat32( float128ToCommonNaN( a ) );\r
-        }\r
-        return packFloat32( aSign, 0xFF, 0 );\r
-    }\r
-    aSig0 |= ( aSig1 != 0 );\r
-    shift64RightJamming( aSig0, 18, &aSig0 );\r
-    zSig = aSig0;\r
-    if ( aExp || zSig ) {\r
-        zSig |= 0x40000000;\r
-        aExp -= 0x3F81;\r
-    }\r
-    return roundAndPackFloat32( aSign, aExp, zSig );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the double-precision floating-point format.  The conversion\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float64 float128_to_float64( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 aSig0, aSig1;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 ) {\r
-            return commonNaNToFloat64( float128ToCommonNaN( a ) );\r
-        }\r
-        return packFloat64( aSign, 0x7FF, 0 );\r
-    }\r
-    shortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 );\r
-    aSig0 |= ( aSig1 != 0 );\r
-    if ( aExp || aSig0 ) {\r
-        aSig0 |= LIT64( 0x4000000000000000 );\r
-        aExp -= 0x3C01;\r
-    }\r
-    return roundAndPackFloat64( aSign, aExp, aSig0 );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point\r
-| value `a' to the extended double-precision floating-point format.  The\r
-| conversion is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-floatx80 float128_to_floatx80( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 aSig0, aSig1;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 ) {\r
-            return commonNaNToFloatx80( float128ToCommonNaN( a ) );\r
-        }\r
-        return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloatx80( aSign, 0, 0 );\r
-        normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    else {\r
-        aSig0 |= LIT64( 0x0001000000000000 );\r
-    }\r
-    shortShift128Left( aSig0, aSig1, 15, &aSig0, &aSig1 );\r
-    return roundAndPackFloatx80( 80, aSign, aExp, aSig0, aSig1 );\r
-\r
-}\r
-\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Rounds the quadruple-precision floating-point value `a' to an integer, and\r
-| returns the result as a quadruple-precision floating-point value.  The\r
-| operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_round_to_int( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp;\r
-    bits64 lastBitMask, roundBitsMask;\r
-    int8 roundingMode;\r
-    float128 z;\r
-\r
-    aExp = extractFloat128Exp( a );\r
-    if ( 0x402F <= aExp ) {\r
-        if ( 0x406F <= aExp ) {\r
-            if (    ( aExp == 0x7FFF )\r
-                 && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) )\r
-               ) {\r
-                return propagateFloat128NaN( a, a );\r
-            }\r
-            return a;\r
-        }\r
-        lastBitMask = 1;\r
-        lastBitMask = ( lastBitMask<<( 0x406E - aExp ) )<<1;\r
-        roundBitsMask = lastBitMask - 1;\r
-        z = a;\r
-        roundingMode = float_rounding_mode;\r
-        if ( roundingMode == float_round_nearest_even ) {\r
-            if ( lastBitMask ) {\r
-                add128( z.high, z.low, 0, lastBitMask>>1, &z.high, &z.low );\r
-                if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;\r
-            }\r
-            else {\r
-                if ( (sbits64) z.low < 0 ) {\r
-                    ++z.high;\r
-                    if ( (bits64) ( z.low<<1 ) == 0 ) z.high &= ~1;\r
-                }\r
-            }\r
-        }\r
-        else if ( roundingMode != float_round_to_zero ) {\r
-            if (   extractFloat128Sign( z )\r
-                 ^ ( roundingMode == float_round_up ) ) {\r
-                add128( z.high, z.low, 0, roundBitsMask, &z.high, &z.low );\r
-            }\r
-        }\r
-        z.low &= ~ roundBitsMask;\r
-    }\r
-    else {\r
-        if ( aExp < 0x3FFF ) {\r
-            if ( ( ( (bits64) ( a.high<<1 ) ) | a.low ) == 0 ) return a;\r
-            float_exception_flags |= float_flag_inexact;\r
-            aSign = extractFloat128Sign( a );\r
-            switch ( float_rounding_mode ) {\r
-             case float_round_nearest_even:\r
-                if (    ( aExp == 0x3FFE )\r
-                     && (   extractFloat128Frac0( a )\r
-                          | extractFloat128Frac1( a ) )\r
-                   ) {\r
-                    return packFloat128( aSign, 0x3FFF, 0, 0 );\r
-                }\r
-                break;\r
-             case float_round_down:\r
-                return\r
-                      aSign ? packFloat128( 1, 0x3FFF, 0, 0 )\r
-                    : packFloat128( 0, 0, 0, 0 );\r
-             case float_round_up:\r
-                return\r
-                      aSign ? packFloat128( 1, 0, 0, 0 )\r
-                    : packFloat128( 0, 0x3FFF, 0, 0 );\r
-            }\r
-            return packFloat128( aSign, 0, 0, 0 );\r
-        }\r
-        lastBitMask = 1;\r
-        lastBitMask <<= 0x402F - aExp;\r
-        roundBitsMask = lastBitMask - 1;\r
-        z.low = 0;\r
-        z.high = a.high;\r
-        roundingMode = float_rounding_mode;\r
-        if ( roundingMode == float_round_nearest_even ) {\r
-            z.high += lastBitMask>>1;\r
-            if ( ( ( z.high & roundBitsMask ) | a.low ) == 0 ) {\r
-                z.high &= ~ lastBitMask;\r
-            }\r
-        }\r
-        else if ( roundingMode != float_round_to_zero ) {\r
-            if (   extractFloat128Sign( z )\r
-                 ^ ( roundingMode == float_round_up ) ) {\r
-                z.high |= ( a.low != 0 );\r
-                z.high += roundBitsMask;\r
-            }\r
-        }\r
-        z.high &= ~ roundBitsMask;\r
-    }\r
-    if ( ( z.low != a.low ) || ( z.high != a.high ) ) {\r
-        float_exception_flags |= float_flag_inexact;\r
-    }\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the absolute values of the quadruple-precision\r
-| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\r
-| before being returned.  `zSign' is ignored if the result is a NaN.\r
-| The addition is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128 addFloat128Sigs( float128 a, float128 b, flag zSign )\r
-{\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;\r
-    int32 expDiff;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    bSig1 = extractFloat128Frac1( b );\r
-    bSig0 = extractFloat128Frac0( b );\r
-    bExp = extractFloat128Exp( b );\r
-    expDiff = aExp - bExp;\r
-    if ( 0 < expDiff ) {\r
-        if ( aExp == 0x7FFF ) {\r
-            if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );\r
-            return a;\r
-        }\r
-        if ( bExp == 0 ) {\r
-            --expDiff;\r
-        }\r
-        else {\r
-            bSig0 |= LIT64( 0x0001000000000000 );\r
-        }\r
-        shift128ExtraRightJamming(\r
-            bSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2 );\r
-        zExp = aExp;\r
-    }\r
-    else if ( expDiff < 0 ) {\r
-        if ( bExp == 0x7FFF ) {\r
-            if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\r
-            return packFloat128( zSign, 0x7FFF, 0, 0 );\r
-        }\r
-        if ( aExp == 0 ) {\r
-            ++expDiff;\r
-        }\r
-        else {\r
-            aSig0 |= LIT64( 0x0001000000000000 );\r
-        }\r
-        shift128ExtraRightJamming(\r
-            aSig0, aSig1, 0, - expDiff, &aSig0, &aSig1, &zSig2 );\r
-        zExp = bExp;\r
-    }\r
-    else {\r
-        if ( aExp == 0x7FFF ) {\r
-            if ( aSig0 | aSig1 | bSig0 | bSig1 ) {\r
-                return propagateFloat128NaN( a, b );\r
-            }\r
-            return a;\r
-        }\r
-        add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\r
-        if ( aExp == 0 ) return packFloat128( zSign, 0, zSig0, zSig1 );\r
-        zSig2 = 0;\r
-        zSig0 |= LIT64( 0x0002000000000000 );\r
-        zExp = aExp;\r
-        goto shiftRight1;\r
-    }\r
-    aSig0 |= LIT64( 0x0001000000000000 );\r
-    add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\r
-    --zExp;\r
-    if ( zSig0 < LIT64( 0x0002000000000000 ) ) goto roundAndPack;\r
-    ++zExp;\r
- shiftRight1:\r
-    shift128ExtraRightJamming(\r
-        zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );\r
- roundAndPack:\r
-    return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the absolute values of the quadruple-\r
-| precision floating-point values `a' and `b'.  If `zSign' is 1, the\r
-| difference is negated before being returned.  `zSign' is ignored if the\r
-| result is a NaN.  The subtraction is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128 subFloat128Sigs( float128 a, float128 b, flag zSign )\r
-{\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1;\r
-    int32 expDiff;\r
-    float128 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    bSig1 = extractFloat128Frac1( b );\r
-    bSig0 = extractFloat128Frac0( b );\r
-    bExp = extractFloat128Exp( b );\r
-    expDiff = aExp - bExp;\r
-    shortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 );\r
-    shortShift128Left( bSig0, bSig1, 14, &bSig0, &bSig1 );\r
-    if ( 0 < expDiff ) goto aExpBigger;\r
-    if ( expDiff < 0 ) goto bExpBigger;\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 | bSig0 | bSig1 ) {\r
-            return propagateFloat128NaN( a, b );\r
-        }\r
-        float_raise( float_flag_invalid );\r
-        z.low = float128_default_nan_low;\r
-        z.high = float128_default_nan_high;\r
-        return z;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        aExp = 1;\r
-        bExp = 1;\r
-    }\r
-    if ( bSig0 < aSig0 ) goto aBigger;\r
-    if ( aSig0 < bSig0 ) goto bBigger;\r
-    if ( bSig1 < aSig1 ) goto aBigger;\r
-    if ( aSig1 < bSig1 ) goto bBigger;\r
-    return packFloat128( float_rounding_mode == float_round_down, 0, 0, 0 );\r
- bExpBigger:\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\r
-        return packFloat128( zSign ^ 1, 0x7FFF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        ++expDiff;\r
-    }\r
-    else {\r
-        aSig0 |= LIT64( 0x4000000000000000 );\r
-    }\r
-    shift128RightJamming( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );\r
-    bSig0 |= LIT64( 0x4000000000000000 );\r
- bBigger:\r
-    sub128( bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1 );\r
-    zExp = bExp;\r
-    zSign ^= 1;\r
-    goto normalizeRoundAndPack;\r
- aExpBigger:\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        --expDiff;\r
-    }\r
-    else {\r
-        bSig0 |= LIT64( 0x4000000000000000 );\r
-    }\r
-    shift128RightJamming( bSig0, bSig1, expDiff, &bSig0, &bSig1 );\r
-    aSig0 |= LIT64( 0x4000000000000000 );\r
- aBigger:\r
-    sub128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\r
-    zExp = aExp;\r
- normalizeRoundAndPack:\r
-    --zExp;\r
-    return normalizeRoundAndPackFloat128( zSign, zExp - 14, zSig0, zSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of adding the quadruple-precision floating-point values\r
-| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\r
-| for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_add( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat128Sign( a );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return addFloat128Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return subFloat128Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of subtracting the quadruple-precision floating-point\r
-| values `a' and `b'.  The operation is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_sub( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    aSign = extractFloat128Sign( a );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aSign == bSign ) {\r
-        return subFloat128Sigs( a, b, aSign );\r
-    }\r
-    else {\r
-        return addFloat128Sigs( a, b, aSign );\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of multiplying the quadruple-precision floating-point\r
-| values `a' and `b'.  The operation is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_mul( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3;\r
-    float128 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    bSig1 = extractFloat128Frac1( b );\r
-    bSig0 = extractFloat128Frac0( b );\r
-    bExp = extractFloat128Exp( b );\r
-    bSign = extractFloat128Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FFF ) {\r
-        if (    ( aSig0 | aSig1 )\r
-             || ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) {\r
-            return propagateFloat128NaN( a, b );\r
-        }\r
-        if ( ( bExp | bSig0 | bSig1 ) == 0 ) goto invalid;\r
-        return packFloat128( zSign, 0x7FFF, 0, 0 );\r
-    }\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\r
-        if ( ( aExp | aSig0 | aSig1 ) == 0 ) {\r
- invalid:\r
-            float_raise( float_flag_invalid );\r
-            z.low = float128_default_nan_low;\r
-            z.high = float128_default_nan_high;\r
-            return z;\r
-        }\r
-        return packFloat128( zSign, 0x7FFF, 0, 0 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );\r
-        normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( ( bSig0 | bSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );\r
-        normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\r
-    }\r
-    zExp = aExp + bExp - 0x4000;\r
-    aSig0 |= LIT64( 0x0001000000000000 );\r
-    shortShift128Left( bSig0, bSig1, 16, &bSig0, &bSig1 );\r
-    mul128To256( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3 );\r
-    add128( zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1 );\r
-    zSig2 |= ( zSig3 != 0 );\r
-    if ( LIT64( 0x0002000000000000 ) <= zSig0 ) {\r
-        shift128ExtraRightJamming(\r
-            zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );\r
-        ++zExp;\r
-    }\r
-    return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of dividing the quadruple-precision floating-point value\r
-| `a' by the corresponding value `b'.  The operation is performed according to\r
-| the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_div( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int32 aExp, bExp, zExp;\r
-    bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;\r
-    bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\r
-    float128 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    bSig1 = extractFloat128Frac1( b );\r
-    bSig0 = extractFloat128Frac0( b );\r
-    bExp = extractFloat128Exp( b );\r
-    bSign = extractFloat128Sign( b );\r
-    zSign = aSign ^ bSign;\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );\r
-        if ( bExp == 0x7FFF ) {\r
-            if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\r
-            goto invalid;\r
-        }\r
-        return packFloat128( zSign, 0x7FFF, 0, 0 );\r
-    }\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\r
-        return packFloat128( zSign, 0, 0, 0 );\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( ( bSig0 | bSig1 ) == 0 ) {\r
-            if ( ( aExp | aSig0 | aSig1 ) == 0 ) {\r
- invalid:\r
-                float_raise( float_flag_invalid );\r
-                z.low = float128_default_nan_low;\r
-                z.high = float128_default_nan_high;\r
-                return z;\r
-            }\r
-            float_raise( float_flag_divbyzero );\r
-            return packFloat128( zSign, 0x7FFF, 0, 0 );\r
-        }\r
-        normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );\r
-        normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    zExp = aExp - bExp + 0x3FFD;\r
-    shortShift128Left(\r
-        aSig0 | LIT64( 0x0001000000000000 ), aSig1, 15, &aSig0, &aSig1 );\r
-    shortShift128Left(\r
-        bSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 );\r
-    if ( le128( bSig0, bSig1, aSig0, aSig1 ) ) {\r
-        shift128Right( aSig0, aSig1, 1, &aSig0, &aSig1 );\r
-        ++zExp;\r
-    }\r
-    zSig0 = estimateDiv128To64( aSig0, aSig1, bSig0 );\r
-    mul128By64To192( bSig0, bSig1, zSig0, &term0, &term1, &term2 );\r
-    sub192( aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2 );\r
-    while ( (sbits64) rem0 < 0 ) {\r
-        --zSig0;\r
-        add192( rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2 );\r
-    }\r
-    zSig1 = estimateDiv128To64( rem1, rem2, bSig0 );\r
-    if ( ( zSig1 & 0x3FFF ) <= 4 ) {\r
-        mul128By64To192( bSig0, bSig1, zSig1, &term1, &term2, &term3 );\r
-        sub192( rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3 );\r
-        while ( (sbits64) rem1 < 0 ) {\r
-            --zSig1;\r
-            add192( rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3 );\r
-        }\r
-        zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\r
-    }\r
-    shift128ExtraRightJamming( zSig0, zSig1, 0, 15, &zSig0, &zSig1, &zSig2 );\r
-    return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the remainder of the quadruple-precision floating-point value `a'\r
-| with respect to the corresponding value `b'.  The operation is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_rem( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign, zSign;\r
-    int32 aExp, bExp, expDiff;\r
-    bits64 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2;\r
-    bits64 allZero, alternateASig0, alternateASig1, sigMean1;\r
-    sbits64 sigMean0;\r
-    float128 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    bSig1 = extractFloat128Frac1( b );\r
-    bSig0 = extractFloat128Frac0( b );\r
-    bExp = extractFloat128Exp( b );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aExp == 0x7FFF ) {\r
-        if (    ( aSig0 | aSig1 )\r
-             || ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) {\r
-            return propagateFloat128NaN( a, b );\r
-        }\r
-        goto invalid;\r
-    }\r
-    if ( bExp == 0x7FFF ) {\r
-        if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\r
-        return a;\r
-    }\r
-    if ( bExp == 0 ) {\r
-        if ( ( bSig0 | bSig1 ) == 0 ) {\r
- invalid:\r
-            float_raise( float_flag_invalid );\r
-            z.low = float128_default_nan_low;\r
-            z.high = float128_default_nan_high;\r
-            return z;\r
-        }\r
-        normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return a;\r
-        normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    expDiff = aExp - bExp;\r
-    if ( expDiff < -1 ) return a;\r
-    shortShift128Left(\r
-        aSig0 | LIT64( 0x0001000000000000 ),\r
-        aSig1,\r
-        15 - ( expDiff < 0 ),\r
-        &aSig0,\r
-        &aSig1\r
-    );\r
-    shortShift128Left(\r
-        bSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 );\r
-    q = le128( bSig0, bSig1, aSig0, aSig1 );\r
-    if ( q ) sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );\r
-    expDiff -= 64;\r
-    while ( 0 < expDiff ) {\r
-        q = estimateDiv128To64( aSig0, aSig1, bSig0 );\r
-        q = ( 4 < q ) ? q - 4 : 0;\r
-        mul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 );\r
-        shortShift192Left( term0, term1, term2, 61, &term1, &term2, &allZero );\r
-        shortShift128Left( aSig0, aSig1, 61, &aSig0, &allZero );\r
-        sub128( aSig0, 0, term1, term2, &aSig0, &aSig1 );\r
-        expDiff -= 61;\r
-    }\r
-    if ( -64 < expDiff ) {\r
-        q = estimateDiv128To64( aSig0, aSig1, bSig0 );\r
-        q = ( 4 < q ) ? q - 4 : 0;\r
-        q >>= - expDiff;\r
-        shift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 );\r
-        expDiff += 52;\r
-        if ( expDiff < 0 ) {\r
-            shift128Right( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );\r
-        }\r
-        else {\r
-            shortShift128Left( aSig0, aSig1, expDiff, &aSig0, &aSig1 );\r
-        }\r
-        mul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 );\r
-        sub128( aSig0, aSig1, term1, term2, &aSig0, &aSig1 );\r
-    }\r
-    else {\r
-        shift128Right( aSig0, aSig1, 12, &aSig0, &aSig1 );\r
-        shift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 );\r
-    }\r
-    do {\r
-        alternateASig0 = aSig0;\r
-        alternateASig1 = aSig1;\r
-        ++q;\r
-        sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );\r
-    } while ( 0 <= (sbits64) aSig0 );\r
-    add128(\r
-        aSig0, aSig1, alternateASig0, alternateASig1, &sigMean0, &sigMean1 );\r
-    if (    ( sigMean0 < 0 )\r
-         || ( ( ( sigMean0 | sigMean1 ) == 0 ) && ( q & 1 ) ) ) {\r
-        aSig0 = alternateASig0;\r
-        aSig1 = alternateASig1;\r
-    }\r
-    zSign = ( (sbits64) aSig0 < 0 );\r
-    if ( zSign ) sub128( 0, 0, aSig0, aSig1, &aSig0, &aSig1 );\r
-    return\r
-        normalizeRoundAndPackFloat128( aSign ^ zSign, bExp - 4, aSig0, aSig1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the square root of the quadruple-precision floating-point value `a'.\r
-| The operation is performed according to the IEC/IEEE Standard for Binary\r
-| Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-float128 float128_sqrt( float128 a )\r
-{\r
-    flag aSign;\r
-    int32 aExp, zExp;\r
-    bits64 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0;\r
-    bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\r
-    float128 z;\r
-\r
-    aSig1 = extractFloat128Frac1( a );\r
-    aSig0 = extractFloat128Frac0( a );\r
-    aExp = extractFloat128Exp( a );\r
-    aSign = extractFloat128Sign( a );\r
-    if ( aExp == 0x7FFF ) {\r
-        if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, a );\r
-        if ( ! aSign ) return a;\r
-        goto invalid;\r
-    }\r
-    if ( aSign ) {\r
-        if ( ( aExp | aSig0 | aSig1 ) == 0 ) return a;\r
- invalid:\r
-        float_raise( float_flag_invalid );\r
-        z.low = float128_default_nan_low;\r
-        z.high = float128_default_nan_high;\r
-        return z;\r
-    }\r
-    if ( aExp == 0 ) {\r
-        if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( 0, 0, 0, 0 );\r
-        normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\r
-    }\r
-    zExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFE;\r
-    aSig0 |= LIT64( 0x0001000000000000 );\r
-    zSig0 = estimateSqrt32( aExp, aSig0>>17 );\r
-    shortShift128Left( aSig0, aSig1, 13 - ( aExp & 1 ), &aSig0, &aSig1 );\r
-    zSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 );\r
-    doubleZSig0 = zSig0<<1;\r
-    mul64To128( zSig0, zSig0, &term0, &term1 );\r
-    sub128( aSig0, aSig1, term0, term1, &rem0, &rem1 );\r
-    while ( (sbits64) rem0 < 0 ) {\r
-        --zSig0;\r
-        doubleZSig0 -= 2;\r
-        add128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 );\r
-    }\r
-    zSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 );\r
-    if ( ( zSig1 & 0x1FFF ) <= 5 ) {\r
-        if ( zSig1 == 0 ) zSig1 = 1;\r
-        mul64To128( doubleZSig0, zSig1, &term1, &term2 );\r
-        sub128( rem1, 0, term1, term2, &rem1, &rem2 );\r
-        mul64To128( zSig1, zSig1, &term2, &term3 );\r
-        sub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );\r
-        while ( (sbits64) rem1 < 0 ) {\r
-            --zSig1;\r
-            shortShift128Left( 0, zSig1, 1, &term2, &term3 );\r
-            term3 |= 1;\r
-            term2 |= doubleZSig0;\r
-            add192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );\r
-        }\r
-        zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\r
-    }\r
-    shift128ExtraRightJamming( zSig0, zSig1, 0, 14, &zSig0, &zSig1, &zSig2 );\r
-    return roundAndPackFloat128( 0, zExp, zSig0, zSig1, zSig2 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_eq( float128 a, float128 b )\r
-{\r
-\r
-    if (    (    ( extractFloat128Exp( a ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\r
-         || (    ( extractFloat128Exp( b ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\r
-       ) {\r
-        if (    float128_is_signaling_nan( a )\r
-             || float128_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    return\r
-           ( a.low == b.low )\r
-        && (    ( a.high == b.high )\r
-             || (    ( a.low == 0 )\r
-                  && ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) )\r
-           );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is less than\r
-| or equal to the corresponding value `b', and 0 otherwise.  The comparison\r
-| is performed according to the IEC/IEEE Standard for Binary Floating-Point\r
-| Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_le( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat128Exp( a ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\r
-         || (    ( extractFloat128Exp( b ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat128Sign( a );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            || (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 == 0 );\r
-    }\r
-    return\r
-          aSign ? le128( b.high, b.low, a.high, a.low )\r
-        : le128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  The comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_lt( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat128Exp( a ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\r
-         || (    ( extractFloat128Exp( b ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    aSign = extractFloat128Sign( a );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            && (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 != 0 );\r
-    }\r
-    return\r
-          aSign ? lt128( b.high, b.low, a.high, a.low )\r
-        : lt128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is equal to\r
-| the corresponding value `b', and 0 otherwise.  The invalid exception is\r
-| raised if either operand is a NaN.  Otherwise, the comparison is performed\r
-| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_eq_signaling( float128 a, float128 b )\r
-{\r
-\r
-    if (    (    ( extractFloat128Exp( a ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\r
-         || (    ( extractFloat128Exp( b ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\r
-       ) {\r
-        float_raise( float_flag_invalid );\r
-        return 0;\r
-    }\r
-    return\r
-           ( a.low == b.low )\r
-        && (    ( a.high == b.high )\r
-             || (    ( a.low == 0 )\r
-                  && ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) )\r
-           );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is less than\r
-| or equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\r
-| cause an exception.  Otherwise, the comparison is performed according to the\r
-| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_le_quiet( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat128Exp( a ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\r
-         || (    ( extractFloat128Exp( b ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\r
-       ) {\r
-        if (    float128_is_signaling_nan( a )\r
-             || float128_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat128Sign( a );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            || (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 == 0 );\r
-    }\r
-    return\r
-          aSign ? le128( b.high, b.low, a.high, a.low )\r
-        : le128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is less than\r
-| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\r
-| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\r
-| Standard for Binary Floating-Point Arithmetic.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_lt_quiet( float128 a, float128 b )\r
-{\r
-    flag aSign, bSign;\r
-\r
-    if (    (    ( extractFloat128Exp( a ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\r
-         || (    ( extractFloat128Exp( b ) == 0x7FFF )\r
-              && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\r
-       ) {\r
-        if (    float128_is_signaling_nan( a )\r
-             || float128_is_signaling_nan( b ) ) {\r
-            float_raise( float_flag_invalid );\r
-        }\r
-        return 0;\r
-    }\r
-    aSign = extractFloat128Sign( a );\r
-    bSign = extractFloat128Sign( b );\r
-    if ( aSign != bSign ) {\r
-        return\r
-               aSign\r
-            && (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\r
-                 != 0 );\r
-    }\r
-    return\r
-          aSign ? lt128( b.high, b.low, a.high, a.low )\r
-        : lt128( a.high, a.low, b.high, b.low );\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/float/softfloat/softfloat/bits64/templates/milieu.h b/float/softfloat/softfloat/bits64/templates/milieu.h
deleted file mode 100644 (file)
index 02da6e8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Include common integer types and flags.\r
-*----------------------------------------------------------------------------*/\r
-#include "../../../processors/!!!processor.h"\r
-\r
-/*----------------------------------------------------------------------------\r
-| Symbolic Boolean literals.\r
-*----------------------------------------------------------------------------*/\r
-enum {\r
-    FALSE = 0,\r
-    TRUE  = 1\r
-};\r
-\r
diff --git a/float/softfloat/softfloat/bits64/templates/softfloat-specialize b/float/softfloat/softfloat/bits64/templates/softfloat-specialize
deleted file mode 100644 (file)
index 44c7e4d..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point\r
-Arithmetic Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| Underflow tininess-detection mode, statically initialized to default value.\r
-| (The declaration in `softfloat.h' must match the `int8' type here.)\r
-*----------------------------------------------------------------------------*/\r
-int8 float_detect_tininess = float_tininess_after_rounding;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Raises the exceptions specified by `flags'.  Floating-point traps can be\r
-| defined here if desired.  It is currently not possible for such a trap to\r
-| substitute a result value.  If traps are not implemented, this routine\r
-| should be simply `float_exception_flags |= flags;'.\r
-*----------------------------------------------------------------------------*/\r
-\r
-void float_raise( int8 flags )\r
-{\r
-\r
-    float_exception_flags |= flags;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Internal canonical NaN format.\r
-*----------------------------------------------------------------------------*/\r
-typedef struct {\r
-    flag sign;\r
-    bits64 high, low;\r
-} commonNaNT;\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated single-precision NaN.\r
-*----------------------------------------------------------------------------*/\r
-#define float32_default_nan 0xFFFFFFFF\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_nan( float32 a )\r
-{\r
-\r
-    return ( 0xFF000000 < (bits32) ( a<<1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the single-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float32_is_signaling_nan( float32 a )\r
-{\r
-\r
-    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the single-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float32ToCommonNaN( float32 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a>>31;\r
-    z.low = 0;\r
-    z.high = ( (bits64) a )<<41;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the single-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 commonNaNToFloat32( commonNaNT a )\r
-{\r
-\r
-    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two single-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float32 propagateFloat32NaN( float32 a, float32 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float32_is_nan( a );\r
-    aIsSignalingNaN = float32_is_signaling_nan( a );\r
-    bIsNaN = float32_is_nan( b );\r
-    bIsSignalingNaN = float32_is_signaling_nan( b );\r
-    a |= 0x00400000;\r
-    b |= 0x00400000;\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsNaN ) {\r
-        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated double-precision NaN.\r
-*----------------------------------------------------------------------------*/\r
-#define float64_default_nan LIT64( 0xFFFFFFFFFFFFFFFF )\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_nan( float64 a )\r
-{\r
-\r
-    return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the double-precision floating-point value `a' is a signaling\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float64_is_signaling_nan( float64 a )\r
-{\r
-\r
-    return\r
-           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )\r
-        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the double-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float64ToCommonNaN( float64 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a>>63;\r
-    z.low = 0;\r
-    z.high = a<<12;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the double-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 commonNaNToFloat64( commonNaNT a )\r
-{\r
-\r
-    return\r
-          ( ( (bits64) a.sign )<<63 )\r
-        | LIT64( 0x7FF8000000000000 )\r
-        | ( a.high>>12 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two double-precision floating-point values `a' and `b', one of which\r
-| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\r
-| signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float64 propagateFloat64NaN( float64 a, float64 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float64_is_nan( a );\r
-    aIsSignalingNaN = float64_is_signaling_nan( a );\r
-    bIsNaN = float64_is_nan( b );\r
-    bIsSignalingNaN = float64_is_signaling_nan( b );\r
-    a |= LIT64( 0x0008000000000000 );\r
-    b |= LIT64( 0x0008000000000000 );\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsNaN ) {\r
-        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated extended double-precision NaN.  The\r
-| `high' and `low' values hold the most- and least-significant bits,\r
-| respectively.\r
-*----------------------------------------------------------------------------*/\r
-#define floatx80_default_nan_high 0xFFFF\r
-#define floatx80_default_nan_low  LIT64( 0xFFFFFFFFFFFFFFFF )\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is a\r
-| NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_is_nan( floatx80 a )\r
-{\r
-\r
-    return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the extended double-precision floating-point value `a' is a\r
-| signaling NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag floatx80_is_signaling_nan( floatx80 a )\r
-{\r
-    bits64 aLow;\r
-\r
-    aLow = a.low & ~ LIT64( 0x4000000000000000 );\r
-    return\r
-           ( ( a.high & 0x7FFF ) == 0x7FFF )\r
-        && (bits64) ( aLow<<1 )\r
-        && ( a.low == aLow );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the extended double-precision floating-\r
-| point NaN `a' to the canonical NaN format.  If `a' is a signaling NaN, the\r
-| invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT floatx80ToCommonNaN( floatx80 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a.high>>15;\r
-    z.low = 0;\r
-    z.high = a.low<<1;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the extended\r
-| double-precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80 commonNaNToFloatx80( commonNaNT a )\r
-{\r
-    floatx80 z;\r
-\r
-    z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );\r
-    z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two extended double-precision floating-point values `a' and `b', one\r
-| of which is a NaN, and returns the appropriate NaN result.  If either `a' or\r
-| `b' is a signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = floatx80_is_nan( a );\r
-    aIsSignalingNaN = floatx80_is_signaling_nan( a );\r
-    bIsNaN = floatx80_is_nan( b );\r
-    bIsSignalingNaN = floatx80_is_signaling_nan( b );\r
-    a.low |= LIT64( 0xC000000000000000 );\r
-    b.low |= LIT64( 0xC000000000000000 );\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsNaN ) {\r
-        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| The pattern for a default generated quadruple-precision NaN.  The `high' and\r
-| `low' values hold the most- and least-significant bits, respectively.\r
-*----------------------------------------------------------------------------*/\r
-#define float128_default_nan_high LIT64( 0xFFFFFFFFFFFFFFFF )\r
-#define float128_default_nan_low  LIT64( 0xFFFFFFFFFFFFFFFF )\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is a NaN;\r
-| otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_is_nan( float128 a )\r
-{\r
-\r
-    return\r
-           ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )\r
-        && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns 1 if the quadruple-precision floating-point value `a' is a\r
-| signaling NaN; otherwise returns 0.\r
-*----------------------------------------------------------------------------*/\r
-\r
-flag float128_is_signaling_nan( float128 a )\r
-{\r
-\r
-    return\r
-           ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )\r
-        && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the quadruple-precision floating-point NaN\r
-| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\r
-| exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static commonNaNT float128ToCommonNaN( float128 a )\r
-{\r
-    commonNaNT z;\r
-\r
-    if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\r
-    z.sign = a.high>>63;\r
-    shortShift128Left( a.high, a.low, 16, &z.high, &z.low );\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Returns the result of converting the canonical NaN `a' to the quadruple-\r
-| precision floating-point format.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128 commonNaNToFloat128( commonNaNT a )\r
-{\r
-    float128 z;\r
-\r
-    shift128Right( a.high, a.low, 16, &z.high, &z.low );\r
-    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );\r
-    return z;\r
-\r
-}\r
-\r
-/*----------------------------------------------------------------------------\r
-| Takes two quadruple-precision floating-point values `a' and `b', one of\r
-| which is a NaN, and returns the appropriate NaN result.  If either `a' or\r
-| `b' is a signaling NaN, the invalid exception is raised.\r
-*----------------------------------------------------------------------------*/\r
-\r
-static float128 propagateFloat128NaN( float128 a, float128 b )\r
-{\r
-    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\r
-\r
-    aIsNaN = float128_is_nan( a );\r
-    aIsSignalingNaN = float128_is_signaling_nan( a );\r
-    bIsNaN = float128_is_nan( b );\r
-    bIsSignalingNaN = float128_is_signaling_nan( b );\r
-    a.high |= LIT64( 0x0000800000000000 );\r
-    b.high |= LIT64( 0x0000800000000000 );\r
-    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\r
-    if ( aIsNaN ) {\r
-        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\r
-    }\r
-    else {\r
-        return b;\r
-    }\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/float/softfloat/softfloat/bits64/templates/softfloat.h b/float/softfloat/softfloat/bits64/templates/softfloat.h
deleted file mode 100644 (file)
index e2487d6..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.  This work was made possible in part by the\r
-International Computer Science Institute, located at Suite 600, 1947 Center\r
-Street, Berkeley, California 94704.  Funding was partially provided by the\r
-National Science Foundation under grant MIP-9311980.  The original version\r
-of this code was written as part of a project to build a fixed-point vector\r
-processor in collaboration with the University of California at Berkeley,\r
-overseen by Profs. Nelson Morgan and John Wawrzynek.  More information\r
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/\r
-arithmetic/SoftFloat.html'.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\r
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\r
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-/*----------------------------------------------------------------------------\r
-| The macro `FLOATX80' must be defined to enable the extended double-precision\r
-| floating-point format `floatx80'.  If this macro is not defined, the\r
-| `floatx80' type will not be defined, and none of the functions that either\r
-| input or output the `floatx80' type will be defined.  The same applies to\r
-| the `FLOAT128' macro and the quadruple-precision format `float128'.\r
-*----------------------------------------------------------------------------*/\r
-#define FLOATX80\r
-#define FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point types.\r
-*----------------------------------------------------------------------------*/\r
-typedef !!!bits32 float32;\r
-typedef !!!bits64 float64;\r
-#ifdef FLOATX80\r
-typedef struct {\r
-    !!!bits16 high;\r
-    !!!bits64 low;\r
-} floatx80;\r
-#endif\r
-#ifdef FLOAT128\r
-typedef struct {\r
-    !!!bits64 high, low;\r
-} float128;\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point underflow tininess-detection mode.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 float_detect_tininess;\r
-enum {\r
-    float_tininess_after_rounding  = 0,\r
-    float_tininess_before_rounding = 1\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point rounding mode.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 float_rounding_mode;\r
-enum {\r
-    float_round_nearest_even = 0,\r
-    float_round_to_zero      = 1,\r
-    float_round_down         = 2,\r
-    float_round_up           = 3\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE floating-point exception flags.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 float_exception_flags;\r
-enum {\r
-    float_flag_inexact   =  1,\r
-    float_flag_underflow =  2,\r
-    float_flag_overflow  =  4,\r
-    float_flag_divbyzero =  8,\r
-    float_flag_invalid   = 16\r
-};\r
-\r
-/*----------------------------------------------------------------------------\r
-| Routine to raise any or all of the software IEC/IEEE floating-point\r
-| exception flags.\r
-*----------------------------------------------------------------------------*/\r
-void float_raise( !!!int8 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE integer-to-floating-point conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-float32 int32_to_float32( !!!int32 );\r
-float64 int32_to_float64( !!!int32 );\r
-#ifdef FLOATX80\r
-floatx80 int32_to_floatx80( !!!int32 );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 int32_to_float128( !!!int32 );\r
-#endif\r
-float32 int64_to_float32( !!!int64 );\r
-float64 int64_to_float64( !!!int64 );\r
-#ifdef FLOATX80\r
-floatx80 int64_to_floatx80( !!!int64 );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 int64_to_float128( !!!int64 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-!!!int32 float32_to_int32( float32 );\r
-!!!int32 float32_to_int32_round_to_zero( float32 );\r
-!!!int64 float32_to_int64( float32 );\r
-!!!int64 float32_to_int64_round_to_zero( float32 );\r
-float64 float32_to_float64( float32 );\r
-#ifdef FLOATX80\r
-floatx80 float32_to_floatx80( float32 );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 float32_to_float128( float32 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE single-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float32 float32_round_to_int( float32 );\r
-float32 float32_add( float32, float32 );\r
-float32 float32_sub( float32, float32 );\r
-float32 float32_mul( float32, float32 );\r
-float32 float32_div( float32, float32 );\r
-float32 float32_rem( float32, float32 );\r
-float32 float32_sqrt( float32 );\r
-!!!flag float32_eq( float32, float32 );\r
-!!!flag float32_le( float32, float32 );\r
-!!!flag float32_lt( float32, float32 );\r
-!!!flag float32_eq_signaling( float32, float32 );\r
-!!!flag float32_le_quiet( float32, float32 );\r
-!!!flag float32_lt_quiet( float32, float32 );\r
-!!!flag float32_is_signaling_nan( float32 );\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-!!!int32 float64_to_int32( float64 );\r
-!!!int32 float64_to_int32_round_to_zero( float64 );\r
-!!!int64 float64_to_int64( float64 );\r
-!!!int64 float64_to_int64_round_to_zero( float64 );\r
-float32 float64_to_float32( float64 );\r
-#ifdef FLOATX80\r
-floatx80 float64_to_floatx80( float64 );\r
-#endif\r
-#ifdef FLOAT128\r
-float128 float64_to_float128( float64 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE double-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float64 float64_round_to_int( float64 );\r
-float64 float64_add( float64, float64 );\r
-float64 float64_sub( float64, float64 );\r
-float64 float64_mul( float64, float64 );\r
-float64 float64_div( float64, float64 );\r
-float64 float64_rem( float64, float64 );\r
-float64 float64_sqrt( float64 );\r
-!!!flag float64_eq( float64, float64 );\r
-!!!flag float64_le( float64, float64 );\r
-!!!flag float64_lt( float64, float64 );\r
-!!!flag float64_eq_signaling( float64, float64 );\r
-!!!flag float64_le_quiet( float64, float64 );\r
-!!!flag float64_lt_quiet( float64, float64 );\r
-!!!flag float64_is_signaling_nan( float64 );\r
-\r
-#ifdef FLOATX80\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE extended double-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-!!!int32 floatx80_to_int32( floatx80 );\r
-!!!int32 floatx80_to_int32_round_to_zero( floatx80 );\r
-!!!int64 floatx80_to_int64( floatx80 );\r
-!!!int64 floatx80_to_int64_round_to_zero( floatx80 );\r
-float32 floatx80_to_float32( floatx80 );\r
-float64 floatx80_to_float64( floatx80 );\r
-#ifdef FLOAT128\r
-float128 floatx80_to_float128( floatx80 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE extended double-precision rounding precision.  Valid\r
-| values are 32, 64, and 80.\r
-*----------------------------------------------------------------------------*/\r
-extern !!!int8 floatx80_rounding_precision;\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE extended double-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-floatx80 floatx80_round_to_int( floatx80 );\r
-floatx80 floatx80_add( floatx80, floatx80 );\r
-floatx80 floatx80_sub( floatx80, floatx80 );\r
-floatx80 floatx80_mul( floatx80, floatx80 );\r
-floatx80 floatx80_div( floatx80, floatx80 );\r
-floatx80 floatx80_rem( floatx80, floatx80 );\r
-floatx80 floatx80_sqrt( floatx80 );\r
-!!!flag floatx80_eq( floatx80, floatx80 );\r
-!!!flag floatx80_le( floatx80, floatx80 );\r
-!!!flag floatx80_lt( floatx80, floatx80 );\r
-!!!flag floatx80_eq_signaling( floatx80, floatx80 );\r
-!!!flag floatx80_le_quiet( floatx80, floatx80 );\r
-!!!flag floatx80_lt_quiet( floatx80, floatx80 );\r
-!!!flag floatx80_is_signaling_nan( floatx80 );\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE quadruple-precision conversion routines.\r
-*----------------------------------------------------------------------------*/\r
-!!!int32 float128_to_int32( float128 );\r
-!!!int32 float128_to_int32_round_to_zero( float128 );\r
-!!!int64 float128_to_int64( float128 );\r
-!!!int64 float128_to_int64_round_to_zero( float128 );\r
-float32 float128_to_float32( float128 );\r
-float64 float128_to_float64( float128 );\r
-#ifdef FLOATX80\r
-floatx80 float128_to_floatx80( float128 );\r
-#endif\r
-\r
-/*----------------------------------------------------------------------------\r
-| Software IEC/IEEE quadruple-precision operations.\r
-*----------------------------------------------------------------------------*/\r
-float128 float128_round_to_int( float128 );\r
-float128 float128_add( float128, float128 );\r
-float128 float128_sub( float128, float128 );\r
-float128 float128_mul( float128, float128 );\r
-float128 float128_div( float128, float128 );\r
-float128 float128_rem( float128, float128 );\r
-float128 float128_sqrt( float128 );\r
-!!!flag float128_eq( float128, float128 );\r
-!!!flag float128_le( float128, float128 );\r
-!!!flag float128_lt( float128, float128 );\r
-!!!flag float128_eq_signaling( float128, float128 );\r
-!!!flag float128_le_quiet( float128, float128 );\r
-!!!flag float128_lt_quiet( float128, float128 );\r
-!!!flag float128_is_signaling_nan( float128 );\r
-\r
-#endif\r
-\r
diff --git a/float/softfloat/softfloat/bits64/timesoftfloat.c b/float/softfloat/softfloat/bits64/timesoftfloat.c
deleted file mode 100644 (file)
index 597e44b..0000000
+++ /dev/null
@@ -1,2628 +0,0 @@
-\r
-/*============================================================================\r
-\r
-This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\r
-Package, Release 2b.\r
-\r
-Written by John R. Hauser.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\r
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\r
-RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\r
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\r
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\r
-EFFECTIVELY INDEMNIFY THE AUTHOR, JOHN HAUSER, (possibly via similar legal\r
-warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR\r
-CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-Derivative works are acceptable, even for commercial purposes, so long as\r
-(1) the source code for the derivative work includes prominent notice that\r
-the work is derivative, and (2) the source code includes prominent notice with\r
-these four paragraphs for those parts of this code that are retained.\r
-\r
-=============================================================================*/\r
-\r
-#include <stdlib.h>\r
-#include <stdarg.h>\r
-#include <string.h>\r
-#include <stdio.h>\r
-#include <time.h>\r
-#include "milieu.h"\r
-#include "softfloat.h"\r
-\r
-enum {\r
-    minIterations = 1000\r
-};\r
-\r
-static void fail( const char *message, ... )\r
-{\r
-    va_list varArgs;\r
-\r
-    fputs( "timesoftfloat: ", stderr );\r
-    va_start( varArgs, message );\r
-    vfprintf( stderr, message, varArgs );\r
-    va_end( varArgs );\r
-    fputs( ".\n", stderr );\r
-    exit( EXIT_FAILURE );\r
-\r
-}\r
-\r
-static char *functionName;\r
-static char *roundingPrecisionName, *roundingModeName, *tininessModeName;\r
-\r
-static void reportTime( int32 count, long clocks )\r
-{\r
-\r
-    printf(\r
-        "%8.1f kops/s: %s",\r
-        ( count / ( ( (float) clocks ) / CLOCKS_PER_SEC ) ) / 1000,\r
-        functionName\r
-    );\r
-    if ( roundingModeName ) {\r
-        if ( roundingPrecisionName ) {\r
-            fputs( ", precision ", stdout );\r
-            fputs( roundingPrecisionName, stdout );\r
-        }\r
-        fputs( ", rounding ", stdout );\r
-        fputs( roundingModeName, stdout );\r
-        if ( tininessModeName ) {\r
-            fputs( ", tininess ", stdout );\r
-            fputs( tininessModeName, stdout );\r
-            fputs( " rounding", stdout );\r
-        }\r
-    }\r
-    fputc( '\n', stdout );\r
-\r
-}\r
-\r
-enum {\r
-    numInputs_int32 = 32\r
-};\r
-\r
-static const int32 inputs_int32[ numInputs_int32 ] = {\r
-    0xFFFFBB79, 0x405CF80F, 0x00000000, 0xFFFFFD04,\r
-    0xFFF20002, 0x0C8EF795, 0xF00011FF, 0x000006CA,\r
-    0x00009BFE, 0xFF4862E3, 0x9FFFEFFE, 0xFFFFFFB7,\r
-    0x0BFF7FFF, 0x0000F37A, 0x0011DFFE, 0x00000006,\r
-    0xFFF02006, 0xFFFFF7D1, 0x10200003, 0xDE8DF765,\r
-    0x00003E02, 0x000019E8, 0x0008FFFE, 0xFFFFFB5C,\r
-    0xFFDF7FFE, 0x07C42FBF, 0x0FFFE3FF, 0x040B9F13,\r
-    0xBFFFFFF8, 0x0001BF56, 0x000017F6, 0x000A908A\r
-};\r
-\r
-static void time_a_int32_z_float32( float32 function( int32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_int32_z_float64( float64 function( int32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-static void time_a_int32_z_floatx80( floatx80 function( int32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-static void time_a_int32_z_float128( float128 function( int32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-enum {\r
-    numInputs_int64 = 32\r
-};\r
-\r
-static const int64 inputs_int64[ numInputs_int64 ] = {\r
-    LIT64( 0xFBFFC3FFFFFFFFFF ),\r
-    LIT64( 0x0000000003C589BC ),\r
-    LIT64( 0x00000000400013FE ),\r
-    LIT64( 0x0000000000186171 ),\r
-    LIT64( 0xFFFFFFFFFFFEFBFA ),\r
-    LIT64( 0xFFFFFD79E6DFFC73 ),\r
-    LIT64( 0x0000000010001DFF ),\r
-    LIT64( 0xDD1A0F0C78513710 ),\r
-    LIT64( 0xFFFF83FFFFFEFFFE ),\r
-    LIT64( 0x00756EBD1AD0C1C7 ),\r
-    LIT64( 0x0003FDFFFFFFFFBE ),\r
-    LIT64( 0x0007D0FB2C2CA951 ),\r
-    LIT64( 0x0007FC0007FFFFFE ),\r
-    LIT64( 0x0000001F942B18BB ),\r
-    LIT64( 0x0000080101FFFFFE ),\r
-    LIT64( 0xFFFFFFFFFFFF0978 ),\r
-    LIT64( 0x000000000008BFFF ),\r
-    LIT64( 0x0000000006F5AF08 ),\r
-    LIT64( 0xFFDEFF7FFFFFFFFE ),\r
-    LIT64( 0x0000000000000003 ),\r
-    LIT64( 0x3FFFFFFFFF80007D ),\r
-    LIT64( 0x0000000000000078 ),\r
-    LIT64( 0xFFF80000007FDFFD ),\r
-    LIT64( 0x1BBC775B78016AB0 ),\r
-    LIT64( 0xFFF9001FFFFFFFFE ),\r
-    LIT64( 0xFFFD4767AB98E43F ),\r
-    LIT64( 0xFFFFFEFFFE00001E ),\r
-    LIT64( 0xFFFFFFFFFFF04EFD ),\r
-    LIT64( 0x07FFFFFFFFFFF7FF ),\r
-    LIT64( 0xFFFC9EAA38F89050 ),\r
-    LIT64( 0x00000020FBFFFFFE ),\r
-    LIT64( 0x0000099AE6455357 )\r
-};\r
-\r
-static void time_a_int64_z_float32( float32 function( int64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_int64_z_float64( float64 function( int64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-static void time_a_int64_z_floatx80( floatx80 function( int64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-static void time_a_int64_z_float128( float128 function( int64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_int64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_int64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-enum {\r
-    numInputs_float32 = 32\r
-};\r
-\r
-static const float32 inputs_float32[ numInputs_float32 ] = {\r
-    0x4EFA0000, 0xC1D0B328, 0x80000000, 0x3E69A31E,\r
-    0xAF803EFF, 0x3F800000, 0x17BF8000, 0xE74A301A,\r
-    0x4E010003, 0x7EE3C75D, 0xBD803FE0, 0xBFFEFF00,\r
-    0x7981F800, 0x431FFFFC, 0xC100C000, 0x3D87EFFF,\r
-    0x4103FEFE, 0xBC000007, 0xBF01F7FF, 0x4E6C6B5C,\r
-    0xC187FFFE, 0xC58B9F13, 0x4F88007F, 0xDF004007,\r
-    0xB7FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,\r
-    0xDB428661, 0x33F89B1F, 0xA3BFEFFF, 0x537BFFBE\r
-};\r
-\r
-static void time_a_float32_z_int32( int32 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float32_z_int64( int64 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float32_z_float64( float64 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-static void time_a_float32_z_floatx80( floatx80 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-static void time_a_float32_z_float128( float128 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-static void time_az_float32( float32 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_ab_float32_z_flag( flag function( float32, float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_abz_float32( float32 function( float32, float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-            function(\r
-                inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static const float32 inputs_float32_pos[ numInputs_float32 ] = {\r
-    0x4EFA0000, 0x41D0B328, 0x00000000, 0x3E69A31E,\r
-    0x2F803EFF, 0x3F800000, 0x17BF8000, 0x674A301A,\r
-    0x4E010003, 0x7EE3C75D, 0x3D803FE0, 0x3FFEFF00,\r
-    0x7981F800, 0x431FFFFC, 0x4100C000, 0x3D87EFFF,\r
-    0x4103FEFE, 0x3C000007, 0x3F01F7FF, 0x4E6C6B5C,\r
-    0x4187FFFE, 0x458B9F13, 0x4F88007F, 0x5F004007,\r
-    0x37FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,\r
-    0x5B428661, 0x33F89B1F, 0x23BFEFFF, 0x537BFFBE\r
-};\r
-\r
-static void time_az_float32_pos( float32 function( float32 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float32_pos[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float32_pos[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-enum {\r
-    numInputs_float64 = 32\r
-};\r
-\r
-static const float64 inputs_float64[ numInputs_float64 ] = {\r
-    LIT64( 0x422FFFC008000000 ),\r
-    LIT64( 0xB7E0000480000000 ),\r
-    LIT64( 0xF3FD2546120B7935 ),\r
-    LIT64( 0x3FF0000000000000 ),\r
-    LIT64( 0xCE07F766F09588D6 ),\r
-    LIT64( 0x8000000000000000 ),\r
-    LIT64( 0x3FCE000400000000 ),\r
-    LIT64( 0x8313B60F0032BED8 ),\r
-    LIT64( 0xC1EFFFFFC0002000 ),\r
-    LIT64( 0x3FB3C75D224F2B0F ),\r
-    LIT64( 0x7FD00000004000FF ),\r
-    LIT64( 0xA12FFF8000001FFF ),\r
-    LIT64( 0x3EE0000000FE0000 ),\r
-    LIT64( 0x0010000080000004 ),\r
-    LIT64( 0x41CFFFFE00000020 ),\r
-    LIT64( 0x40303FFFFFFFFFFD ),\r
-    LIT64( 0x3FD000003FEFFFFF ),\r
-    LIT64( 0xBFD0000010000000 ),\r
-    LIT64( 0xB7FC6B5C16CA55CF ),\r
-    LIT64( 0x413EEB940B9D1301 ),\r
-    LIT64( 0xC7E00200001FFFFF ),\r
-    LIT64( 0x47F00021FFFFFFFE ),\r
-    LIT64( 0xBFFFFFFFF80000FF ),\r
-    LIT64( 0xC07FFFFFE00FFFFF ),\r
-    LIT64( 0x001497A63740C5E8 ),\r
-    LIT64( 0xC4BFFFE0001FFFFF ),\r
-    LIT64( 0x96FFDFFEFFFFFFFF ),\r
-    LIT64( 0x403FC000000001FE ),\r
-    LIT64( 0xFFD00000000001F6 ),\r
-    LIT64( 0x0640400002000000 ),\r
-    LIT64( 0x479CEE1E4F789FE0 ),\r
-    LIT64( 0xC237FFFFFFFFFDFE )\r
-};\r
-\r
-static void time_a_float64_z_int32( int32 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float64_z_int64( int64 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float64_z_float32( float32 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-static void time_a_float64_z_floatx80( floatx80 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-static void time_a_float64_z_float128( float128 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-static void time_az_float64( float64 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_ab_float64_z_flag( flag function( float64, float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function(\r
-                inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-            function(\r
-                inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_abz_float64( float64 function( float64, float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function(\r
-                inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-            function(\r
-                inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static const float64 inputs_float64_pos[ numInputs_float64 ] = {\r
-    LIT64( 0x422FFFC008000000 ),\r
-    LIT64( 0x37E0000480000000 ),\r
-    LIT64( 0x73FD2546120B7935 ),\r
-    LIT64( 0x3FF0000000000000 ),\r
-    LIT64( 0x4E07F766F09588D6 ),\r
-    LIT64( 0x0000000000000000 ),\r
-    LIT64( 0x3FCE000400000000 ),\r
-    LIT64( 0x0313B60F0032BED8 ),\r
-    LIT64( 0x41EFFFFFC0002000 ),\r
-    LIT64( 0x3FB3C75D224F2B0F ),\r
-    LIT64( 0x7FD00000004000FF ),\r
-    LIT64( 0x212FFF8000001FFF ),\r
-    LIT64( 0x3EE0000000FE0000 ),\r
-    LIT64( 0x0010000080000004 ),\r
-    LIT64( 0x41CFFFFE00000020 ),\r
-    LIT64( 0x40303FFFFFFFFFFD ),\r
-    LIT64( 0x3FD000003FEFFFFF ),\r
-    LIT64( 0x3FD0000010000000 ),\r
-    LIT64( 0x37FC6B5C16CA55CF ),\r
-    LIT64( 0x413EEB940B9D1301 ),\r
-    LIT64( 0x47E00200001FFFFF ),\r
-    LIT64( 0x47F00021FFFFFFFE ),\r
-    LIT64( 0x3FFFFFFFF80000FF ),\r
-    LIT64( 0x407FFFFFE00FFFFF ),\r
-    LIT64( 0x001497A63740C5E8 ),\r
-    LIT64( 0x44BFFFE0001FFFFF ),\r
-    LIT64( 0x16FFDFFEFFFFFFFF ),\r
-    LIT64( 0x403FC000000001FE ),\r
-    LIT64( 0x7FD00000000001F6 ),\r
-    LIT64( 0x0640400002000000 ),\r
-    LIT64( 0x479CEE1E4F789FE0 ),\r
-    LIT64( 0x4237FFFFFFFFFDFE )\r
-};\r
-\r
-static void time_az_float64_pos( float64 function( float64 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            function( inputs_float64_pos[ inputNum ] );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        function( inputs_float64_pos[ inputNum ] );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-enum {\r
-    numInputs_floatx80 = 32\r
-};\r
-\r
-static const struct {\r
-    bits16 high;\r
-    bits64 low;\r
-} inputs_floatx80[ numInputs_floatx80 ] = {\r
-    { 0xC03F, LIT64( 0xA9BE15A19C1E8B62 ) },\r
-    { 0x8000, LIT64( 0x0000000000000000 ) },\r
-    { 0x75A8, LIT64( 0xE59591E4788957A5 ) },\r
-    { 0xBFFF, LIT64( 0xFFF0000000000040 ) },\r
-    { 0x0CD8, LIT64( 0xFC000000000007FE ) },\r
-    { 0x43BA, LIT64( 0x99A4000000000000 ) },\r
-    { 0x3FFF, LIT64( 0x8000000000000000 ) },\r
-    { 0x4081, LIT64( 0x94FBF1BCEB5545F0 ) },\r
-    { 0x403E, LIT64( 0xFFF0000000002000 ) },\r
-    { 0x3FFE, LIT64( 0xC860E3C75D224F28 ) },\r
-    { 0x407E, LIT64( 0xFC00000FFFFFFFFE ) },\r
-    { 0x737A, LIT64( 0x800000007FFDFFFE ) },\r
-    { 0x4044, LIT64( 0xFFFFFF80000FFFFF ) },\r
-    { 0xBBFE, LIT64( 0x8000040000001FFE ) },\r
-    { 0xC002, LIT64( 0xFF80000000000020 ) },\r
-    { 0xDE8D, LIT64( 0xFFFFFFFFFFE00004 ) },\r
-    { 0xC004, LIT64( 0x8000000000003FFB ) },\r
-    { 0x407F, LIT64( 0x800000000003FFFE ) },\r
-    { 0xC000, LIT64( 0xA459EE6A5C16CA55 ) },\r
-    { 0x8003, LIT64( 0xC42CBF7399AEEB94 ) },\r
-    { 0xBF7F, LIT64( 0xF800000000000006 ) },\r
-    { 0xC07F, LIT64( 0xBF56BE8871F28FEA ) },\r
-    { 0xC07E, LIT64( 0xFFFF77FFFFFFFFFE ) },\r
-    { 0xADC9, LIT64( 0x8000000FFFFFFFDE ) },\r
-    { 0xC001, LIT64( 0xEFF7FFFFFFFFFFFF ) },\r
-    { 0x4001, LIT64( 0xBE84F30125C497A6 ) },\r
-    { 0xC06B, LIT64( 0xEFFFFFFFFFFFFFFF ) },\r
-    { 0x4080, LIT64( 0xFFFFFFFFBFFFFFFF ) },\r
-    { 0x87E9, LIT64( 0x81FFFFFFFFFFFBFF ) },\r
-    { 0xA63F, LIT64( 0x801FFFFFFEFFFFFE ) },\r
-    { 0x403C, LIT64( 0x801FFFFFFFF7FFFF ) },\r
-    { 0x4018, LIT64( 0x8000000000080003 ) }\r
-};\r
-\r
-static void time_a_floatx80_z_int32( int32 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNum ].low;\r
-            a.high = inputs_floatx80[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNum ].low;\r
-        a.high = inputs_floatx80[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_floatx80_z_int64( int64 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNum ].low;\r
-            a.high = inputs_floatx80[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNum ].low;\r
-        a.high = inputs_floatx80[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_floatx80_z_float32( float32 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNum ].low;\r
-            a.high = inputs_floatx80[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNum ].low;\r
-        a.high = inputs_floatx80[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_floatx80_z_float64( float64 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNum ].low;\r
-            a.high = inputs_floatx80[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNum ].low;\r
-        a.high = inputs_floatx80[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOAT128\r
-\r
-static void time_a_floatx80_z_float128( float128 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNum ].low;\r
-            a.high = inputs_floatx80[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNum ].low;\r
-        a.high = inputs_floatx80[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-static void time_az_floatx80( floatx80 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNum ].low;\r
-            a.high = inputs_floatx80[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNum ].low;\r
-        a.high = inputs_floatx80[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_ab_floatx80_z_flag( flag function( floatx80, floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-    floatx80 a, b;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNumA ].low;\r
-            a.high = inputs_floatx80[ inputNumA ].high;\r
-            b.low = inputs_floatx80[ inputNumB ].low;\r
-            b.high = inputs_floatx80[ inputNumB ].high;\r
-            function( a, b );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNumA ].low;\r
-        a.high = inputs_floatx80[ inputNumA ].high;\r
-        b.low = inputs_floatx80[ inputNumB ].low;\r
-        b.high = inputs_floatx80[ inputNumB ].high;\r
-        function( a, b );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_abz_floatx80( floatx80 function( floatx80, floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-    floatx80 a, b;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80[ inputNumA ].low;\r
-            a.high = inputs_floatx80[ inputNumA ].high;\r
-            b.low = inputs_floatx80[ inputNumB ].low;\r
-            b.high = inputs_floatx80[ inputNumB ].high;\r
-            function( a, b );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80[ inputNumA ].low;\r
-        a.high = inputs_floatx80[ inputNumA ].high;\r
-        b.low = inputs_floatx80[ inputNumB ].low;\r
-        b.high = inputs_floatx80[ inputNumB ].high;\r
-        function( a, b );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static const struct {\r
-    bits16 high;\r
-    bits64 low;\r
-} inputs_floatx80_pos[ numInputs_floatx80 ] = {\r
-    { 0x403F, LIT64( 0xA9BE15A19C1E8B62 ) },\r
-    { 0x0000, LIT64( 0x0000000000000000 ) },\r
-    { 0x75A8, LIT64( 0xE59591E4788957A5 ) },\r
-    { 0x3FFF, LIT64( 0xFFF0000000000040 ) },\r
-    { 0x0CD8, LIT64( 0xFC000000000007FE ) },\r
-    { 0x43BA, LIT64( 0x99A4000000000000 ) },\r
-    { 0x3FFF, LIT64( 0x8000000000000000 ) },\r
-    { 0x4081, LIT64( 0x94FBF1BCEB5545F0 ) },\r
-    { 0x403E, LIT64( 0xFFF0000000002000 ) },\r
-    { 0x3FFE, LIT64( 0xC860E3C75D224F28 ) },\r
-    { 0x407E, LIT64( 0xFC00000FFFFFFFFE ) },\r
-    { 0x737A, LIT64( 0x800000007FFDFFFE ) },\r
-    { 0x4044, LIT64( 0xFFFFFF80000FFFFF ) },\r
-    { 0x3BFE, LIT64( 0x8000040000001FFE ) },\r
-    { 0x4002, LIT64( 0xFF80000000000020 ) },\r
-    { 0x5E8D, LIT64( 0xFFFFFFFFFFE00004 ) },\r
-    { 0x4004, LIT64( 0x8000000000003FFB ) },\r
-    { 0x407F, LIT64( 0x800000000003FFFE ) },\r
-    { 0x4000, LIT64( 0xA459EE6A5C16CA55 ) },\r
-    { 0x0003, LIT64( 0xC42CBF7399AEEB94 ) },\r
-    { 0x3F7F, LIT64( 0xF800000000000006 ) },\r
-    { 0x407F, LIT64( 0xBF56BE8871F28FEA ) },\r
-    { 0x407E, LIT64( 0xFFFF77FFFFFFFFFE ) },\r
-    { 0x2DC9, LIT64( 0x8000000FFFFFFFDE ) },\r
-    { 0x4001, LIT64( 0xEFF7FFFFFFFFFFFF ) },\r
-    { 0x4001, LIT64( 0xBE84F30125C497A6 ) },\r
-    { 0x406B, LIT64( 0xEFFFFFFFFFFFFFFF ) },\r
-    { 0x4080, LIT64( 0xFFFFFFFFBFFFFFFF ) },\r
-    { 0x07E9, LIT64( 0x81FFFFFFFFFFFBFF ) },\r
-    { 0x263F, LIT64( 0x801FFFFFFEFFFFFE ) },\r
-    { 0x403C, LIT64( 0x801FFFFFFFF7FFFF ) },\r
-    { 0x4018, LIT64( 0x8000000000080003 ) }\r
-};\r
-\r
-static void time_az_floatx80_pos( floatx80 function( floatx80 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    floatx80 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_floatx80_pos[ inputNum ].low;\r
-            a.high = inputs_floatx80_pos[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_floatx80_pos[ inputNum ].low;\r
-        a.high = inputs_floatx80_pos[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-#ifdef FLOAT128\r
-\r
-enum {\r
-    numInputs_float128 = 32\r
-};\r
-\r
-static const struct {\r
-    bits64 high, low;\r
-} inputs_float128[ numInputs_float128 ] = {\r
-    { LIT64( 0x3FDA200000100000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x3FFF000000000000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x85F14776190C8306 ), LIT64( 0xD8715F4E3D54BB92 ) },\r
-    { LIT64( 0xF2B00000007FFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },\r
-    { LIT64( 0x8000000000000000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0xBFFFFFFFFFE00000 ), LIT64( 0x0000008000000000 ) },\r
-    { LIT64( 0x407F1719CE722F3E ), LIT64( 0xDA6B3FE5FF29425B ) },\r
-    { LIT64( 0x43FFFF8000000000 ), LIT64( 0x0000000000400000 ) },\r
-    { LIT64( 0x401E000000000100 ), LIT64( 0x0000000000002000 ) },\r
-    { LIT64( 0x3FFED71DACDA8E47 ), LIT64( 0x4860E3C75D224F28 ) },\r
-    { LIT64( 0xBF7ECFC1E90647D1 ), LIT64( 0x7A124FE55623EE44 ) },\r
-    { LIT64( 0x0DF7007FFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },\r
-    { LIT64( 0x3FE5FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },\r
-    { LIT64( 0x403FFFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFE ) },\r
-    { LIT64( 0xBFFB2FBF7399AFEB ), LIT64( 0xA459EE6A5C16CA55 ) },\r
-    { LIT64( 0xBDB8FFFFFFFFFFFC ), LIT64( 0x0000000000000400 ) },\r
-    { LIT64( 0x3FC8FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },\r
-    { LIT64( 0x3FFBFFFFFFDFFFFF ), LIT64( 0xFFF8000000000000 ) },\r
-    { LIT64( 0x407043C11737BE84 ), LIT64( 0xDDD58212ADC937F4 ) },\r
-    { LIT64( 0x8001000000000000 ), LIT64( 0x0000001000000001 ) },\r
-    { LIT64( 0xC036FFFFFFFFFFFF ), LIT64( 0xFE40000000000000 ) },\r
-    { LIT64( 0x4002FFFFFE000002 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x4000C3FEDE897773 ), LIT64( 0x326AC4FD8EFBE6DC ) },\r
-    { LIT64( 0xBFFF0000000FFFFF ), LIT64( 0xFFFFFE0000000000 ) },\r
-    { LIT64( 0x62C3E502146E426D ), LIT64( 0x43F3CAA0DC7DF1A0 ) },\r
-    { LIT64( 0xB5CBD32E52BB570E ), LIT64( 0xBCC477CB11C6236C ) },\r
-    { LIT64( 0xE228FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x3F80000000000000 ), LIT64( 0x0000000080000008 ) },\r
-    { LIT64( 0xC1AFFFDFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },\r
-    { LIT64( 0xC96F000000000000 ), LIT64( 0x00000001FFFBFFFF ) },\r
-    { LIT64( 0x3DE09BFE7923A338 ), LIT64( 0xBCC8FBBD7CEC1F4F ) },\r
-    { LIT64( 0x401CFFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFF80 ) }\r
-};\r
-\r
-static void time_a_float128_z_int32( int32 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNum ].low;\r
-            a.high = inputs_float128[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNum ].low;\r
-        a.high = inputs_float128[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float128_z_int64( int64 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNum ].low;\r
-            a.high = inputs_float128[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNum ].low;\r
-        a.high = inputs_float128[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float128_z_float32( float32 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNum ].low;\r
-            a.high = inputs_float128[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNum ].low;\r
-        a.high = inputs_float128[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_a_float128_z_float64( float64 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNum ].low;\r
-            a.high = inputs_float128[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNum ].low;\r
-        a.high = inputs_float128[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#ifdef FLOATX80\r
-\r
-static void time_a_float128_z_floatx80( floatx80 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNum ].low;\r
-            a.high = inputs_float128[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNum ].low;\r
-        a.high = inputs_float128[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-static void time_az_float128( float128 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNum ].low;\r
-            a.high = inputs_float128[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNum ].low;\r
-        a.high = inputs_float128[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_ab_float128_z_flag( flag function( float128, float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-    float128 a, b;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNumA ].low;\r
-            a.high = inputs_float128[ inputNumA ].high;\r
-            b.low = inputs_float128[ inputNumB ].low;\r
-            b.high = inputs_float128[ inputNumB ].high;\r
-            function( a, b );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNumA ].low;\r
-        a.high = inputs_float128[ inputNumA ].high;\r
-        b.low = inputs_float128[ inputNumB ].low;\r
-        b.high = inputs_float128[ inputNumB ].high;\r
-        function( a, b );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static void time_abz_float128( float128 function( float128, float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNumA, inputNumB;\r
-    float128 a, b;\r
-\r
-    count = 0;\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128[ inputNumA ].low;\r
-            a.high = inputs_float128[ inputNumA ].high;\r
-            b.low = inputs_float128[ inputNumB ].low;\r
-            b.high = inputs_float128[ inputNumB ].high;\r
-            function( a, b );\r
-            inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );\r
-            if ( inputNumA == 0 ) ++inputNumB;\r
-            inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNumA = 0;\r
-    inputNumB = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128[ inputNumA ].low;\r
-        a.high = inputs_float128[ inputNumA ].high;\r
-        b.low = inputs_float128[ inputNumB ].low;\r
-        b.high = inputs_float128[ inputNumB ].high;\r
-        function( a, b );\r
-        inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );\r
-        if ( inputNumA == 0 ) ++inputNumB;\r
-        inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-static const struct {\r
-    bits64 high, low;\r
-} inputs_float128_pos[ numInputs_float128 ] = {\r
-    { LIT64( 0x3FDA200000100000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x3FFF000000000000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x05F14776190C8306 ), LIT64( 0xD8715F4E3D54BB92 ) },\r
-    { LIT64( 0x72B00000007FFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },\r
-    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x3FFFFFFFFFE00000 ), LIT64( 0x0000008000000000 ) },\r
-    { LIT64( 0x407F1719CE722F3E ), LIT64( 0xDA6B3FE5FF29425B ) },\r
-    { LIT64( 0x43FFFF8000000000 ), LIT64( 0x0000000000400000 ) },\r
-    { LIT64( 0x401E000000000100 ), LIT64( 0x0000000000002000 ) },\r
-    { LIT64( 0x3FFED71DACDA8E47 ), LIT64( 0x4860E3C75D224F28 ) },\r
-    { LIT64( 0x3F7ECFC1E90647D1 ), LIT64( 0x7A124FE55623EE44 ) },\r
-    { LIT64( 0x0DF7007FFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },\r
-    { LIT64( 0x3FE5FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },\r
-    { LIT64( 0x403FFFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFE ) },\r
-    { LIT64( 0x3FFB2FBF7399AFEB ), LIT64( 0xA459EE6A5C16CA55 ) },\r
-    { LIT64( 0x3DB8FFFFFFFFFFFC ), LIT64( 0x0000000000000400 ) },\r
-    { LIT64( 0x3FC8FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },\r
-    { LIT64( 0x3FFBFFFFFFDFFFFF ), LIT64( 0xFFF8000000000000 ) },\r
-    { LIT64( 0x407043C11737BE84 ), LIT64( 0xDDD58212ADC937F4 ) },\r
-    { LIT64( 0x0001000000000000 ), LIT64( 0x0000001000000001 ) },\r
-    { LIT64( 0x4036FFFFFFFFFFFF ), LIT64( 0xFE40000000000000 ) },\r
-    { LIT64( 0x4002FFFFFE000002 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x4000C3FEDE897773 ), LIT64( 0x326AC4FD8EFBE6DC ) },\r
-    { LIT64( 0x3FFF0000000FFFFF ), LIT64( 0xFFFFFE0000000000 ) },\r
-    { LIT64( 0x62C3E502146E426D ), LIT64( 0x43F3CAA0DC7DF1A0 ) },\r
-    { LIT64( 0x35CBD32E52BB570E ), LIT64( 0xBCC477CB11C6236C ) },\r
-    { LIT64( 0x6228FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },\r
-    { LIT64( 0x3F80000000000000 ), LIT64( 0x0000000080000008 ) },\r
-    { LIT64( 0x41AFFFDFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },\r
-    { LIT64( 0x496F000000000000 ), LIT64( 0x00000001FFFBFFFF ) },\r
-    { LIT64( 0x3DE09BFE7923A338 ), LIT64( 0xBCC8FBBD7CEC1F4F ) },\r
-    { LIT64( 0x401CFFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFF80 ) }\r
-};\r
-\r
-static void time_az_float128_pos( float128 function( float128 ) )\r
-{\r
-    clock_t startClock, endClock;\r
-    int32 count, i;\r
-    int8 inputNum;\r
-    float128 a;\r
-\r
-    count = 0;\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    do {\r
-        for ( i = minIterations; i; --i ) {\r
-            a.low = inputs_float128_pos[ inputNum ].low;\r
-            a.high = inputs_float128_pos[ inputNum ].high;\r
-            function( a );\r
-            inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-        }\r
-        count += minIterations;\r
-    } while ( clock() - startClock < CLOCKS_PER_SEC );\r
-    inputNum = 0;\r
-    startClock = clock();\r
-    for ( i = count; i; --i ) {\r
-        a.low = inputs_float128_pos[ inputNum ].low;\r
-        a.high = inputs_float128_pos[ inputNum ].high;\r
-        function( a );\r
-        inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );\r
-    }\r
-    endClock = clock();\r
-    reportTime( count, endClock - startClock );\r
-\r
-}\r
-\r
-#endif\r
-\r
-enum {\r
-    INT32_TO_FLOAT32 = 1,\r
-    INT32_TO_FLOAT64,\r
-#ifdef FLOATX80\r
-    INT32_TO_FLOATX80,\r
-#endif\r
-#ifdef FLOAT128\r
-    INT32_TO_FLOAT128,\r
-#endif\r
-    INT64_TO_FLOAT32,\r
-    INT64_TO_FLOAT64,\r
-#ifdef FLOATX80\r
-    INT64_TO_FLOATX80,\r
-#endif\r
-#ifdef FLOAT128\r
-    INT64_TO_FLOAT128,\r
-#endif\r
-    FLOAT32_TO_INT32,\r
-    FLOAT32_TO_INT32_ROUND_TO_ZERO,\r
-    FLOAT32_TO_INT64,\r
-    FLOAT32_TO_INT64_ROUND_TO_ZERO,\r
-    FLOAT32_TO_FLOAT64,\r
-#ifdef FLOATX80\r
-    FLOAT32_TO_FLOATX80,\r
-#endif\r
-#ifdef FLOAT128\r
-    FLOAT32_TO_FLOAT128,\r
-#endif\r
-    FLOAT32_ROUND_TO_INT,\r
-    FLOAT32_ADD,\r
-    FLOAT32_SUB,\r
-    FLOAT32_MUL,\r
-    FLOAT32_DIV,\r
-    FLOAT32_REM,\r
-    FLOAT32_SQRT,\r
-    FLOAT32_EQ,\r
-    FLOAT32_LE,\r
-    FLOAT32_LT,\r
-    FLOAT32_EQ_SIGNALING,\r
-    FLOAT32_LE_QUIET,\r
-    FLOAT32_LT_QUIET,\r
-    FLOAT64_TO_INT32,\r
-    FLOAT64_TO_INT32_ROUND_TO_ZERO,\r
-    FLOAT64_TO_INT64,\r
-    FLOAT64_TO_INT64_ROUND_TO_ZERO,\r
-    FLOAT64_TO_FLOAT32,\r
-#ifdef FLOATX80\r
-    FLOAT64_TO_FLOATX80,\r
-#endif\r
-#ifdef FLOAT128\r
-    FLOAT64_TO_FLOAT128,\r
-#endif\r
-    FLOAT64_ROUND_TO_INT,\r
-    FLOAT64_ADD,\r
-    FLOAT64_SUB,\r
-    FLOAT64_MUL,\r
-    FLOAT64_DIV,\r
-    FLOAT64_REM,\r
-    FLOAT64_SQRT,\r
-    FLOAT64_EQ,\r
-    FLOAT64_LE,\r
-    FLOAT64_LT,\r
-    FLOAT64_EQ_SIGNALING,\r
-    FLOAT64_LE_QUIET,\r
-    FLOAT64_LT_QUIET,\r
-#ifdef FLOATX80\r
-    FLOATX80_TO_INT32,\r
-    FLOATX80_TO_INT32_ROUND_TO_ZERO,\r
-    FLOATX80_TO_INT64,\r
-    FLOATX80_TO_INT64_ROUND_TO_ZERO,\r
-    FLOATX80_TO_FLOAT32,\r
-    FLOATX80_TO_FLOAT64,\r
-#ifdef FLOAT128\r
-    FLOATX80_TO_FLOAT128,\r
-#endif\r
-    FLOATX80_ROUND_TO_INT,\r
-    FLOATX80_ADD,\r
-    FLOATX80_SUB,\r
-    FLOATX80_MUL,\r
-    FLOATX80_DIV,\r
-    FLOATX80_REM,\r
-    FLOATX80_SQRT,\r
-    FLOATX80_EQ,\r
-    FLOATX80_LE,\r
-    FLOATX80_LT,\r
-    FLOATX80_EQ_SIGNALING,\r
-    FLOATX80_LE_QUIET,\r
-    FLOATX80_LT_QUIET,\r
-#endif\r
-#ifdef FLOAT128\r
-    FLOAT128_TO_INT32,\r
-    FLOAT128_TO_INT32_ROUND_TO_ZERO,\r
-    FLOAT128_TO_INT64,\r
-    FLOAT128_TO_INT64_ROUND_TO_ZERO,\r
-    FLOAT128_TO_FLOAT32,\r
-    FLOAT128_TO_FLOAT64,\r
-#ifdef FLOATX80\r
-    FLOAT128_TO_FLOATX80,\r
-#endif\r
-    FLOAT128_ROUND_TO_INT,\r
-    FLOAT128_ADD,\r
-    FLOAT128_SUB,\r
-    FLOAT128_MUL,\r
-    FLOAT128_DIV,\r
-    FLOAT128_REM,\r
-    FLOAT128_SQRT,\r
-    FLOAT128_EQ,\r
-    FLOAT128_LE,\r
-    FLOAT128_LT,\r
-    FLOAT128_EQ_SIGNALING,\r
-    FLOAT128_LE_QUIET,\r
-    FLOAT128_LT_QUIET,\r
-#endif\r
-    NUM_FUNCTIONS\r
-};\r
-\r
-static struct {\r
-    char *name;\r
-    int8 numInputs;\r
-    flag roundingPrecision, roundingMode;\r
-    flag tininessMode, tininessModeAtReducedPrecision;\r
-} functions[ NUM_FUNCTIONS ] = {\r
-    { 0, 0, 0, 0, 0, 0 },\r
-    { "int32_to_float32",                1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "int32_to_float64",                1, FALSE, FALSE, FALSE, FALSE },\r
-#ifdef FLOATX80\r
-    { "int32_to_floatx80",               1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-#ifdef FLOAT128\r
-    { "int32_to_float128",               1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-    { "int64_to_float32",                1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "int64_to_float64",                1, FALSE, TRUE,  FALSE, FALSE },\r
-#ifdef FLOATX80\r
-    { "int64_to_floatx80",               1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-#ifdef FLOAT128\r
-    { "int64_to_float128",               1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-    { "float32_to_int32",                1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_to_int32_round_to_zero",  1, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_to_int64",                1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_to_int64_round_to_zero",  1, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_to_float64",              1, FALSE, FALSE, FALSE, FALSE },\r
-#ifdef FLOATX80\r
-    { "float32_to_floatx80",             1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-#ifdef FLOAT128\r
-    { "float32_to_float128",             1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-    { "float32_round_to_int",            1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_add",                     2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_sub",                     2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_mul",                     2, FALSE, TRUE,  TRUE,  FALSE },\r
-    { "float32_div",                     2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_rem",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_sqrt",                    1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float32_eq",                      2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_le",                      2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_lt",                      2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_eq_signaling",            2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_le_quiet",                2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float32_lt_quiet",                2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_to_int32",                1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_to_int32_round_to_zero",  1, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_to_int64",                1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_to_int64_round_to_zero",  1, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_to_float32",              1, FALSE, TRUE,  TRUE,  FALSE },\r
-#ifdef FLOATX80\r
-    { "float64_to_floatx80",             1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-#ifdef FLOAT128\r
-    { "float64_to_float128",             1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-    { "float64_round_to_int",            1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_add",                     2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_sub",                     2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_mul",                     2, FALSE, TRUE,  TRUE,  FALSE },\r
-    { "float64_div",                     2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_rem",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_sqrt",                    1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float64_eq",                      2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_le",                      2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_lt",                      2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_eq_signaling",            2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_le_quiet",                2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float64_lt_quiet",                2, FALSE, FALSE, FALSE, FALSE },\r
-#ifdef FLOATX80\r
-    { "floatx80_to_int32",               1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_to_int64",               1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_to_float32",             1, FALSE, TRUE,  TRUE,  FALSE },\r
-    { "floatx80_to_float64",             1, FALSE, TRUE,  TRUE,  FALSE },\r
-#ifdef FLOAT128\r
-    { "floatx80_to_float128",            1, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-    { "floatx80_round_to_int",           1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "floatx80_add",                    2, TRUE,  TRUE,  FALSE, TRUE  },\r
-    { "floatx80_sub",                    2, TRUE,  TRUE,  FALSE, TRUE  },\r
-    { "floatx80_mul",                    2, TRUE,  TRUE,  TRUE,  TRUE  },\r
-    { "floatx80_div",                    2, TRUE,  TRUE,  FALSE, TRUE  },\r
-    { "floatx80_rem",                    2, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_sqrt",                   1, TRUE,  TRUE,  FALSE, FALSE },\r
-    { "floatx80_eq",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_le",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_lt",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_eq_signaling",           2, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_le_quiet",               2, FALSE, FALSE, FALSE, FALSE },\r
-    { "floatx80_lt_quiet",               2, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-#ifdef FLOAT128\r
-    { "float128_to_int32",               1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_to_int64",               1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_to_float32",             1, FALSE, TRUE,  TRUE,  FALSE },\r
-    { "float128_to_float64",             1, FALSE, TRUE,  TRUE,  FALSE },\r
-#ifdef FLOATX80\r
-    { "float128_to_floatx80",            1, FALSE, TRUE,  TRUE,  FALSE },\r
-#endif\r
-    { "float128_round_to_int",           1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_add",                    2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_sub",                    2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_mul",                    2, FALSE, TRUE,  TRUE,  FALSE },\r
-    { "float128_div",                    2, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_rem",                    2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_sqrt",                   1, FALSE, TRUE,  FALSE, FALSE },\r
-    { "float128_eq",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_le",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_lt",                     2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_eq_signaling",           2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_le_quiet",               2, FALSE, FALSE, FALSE, FALSE },\r
-    { "float128_lt_quiet",               2, FALSE, FALSE, FALSE, FALSE },\r
-#endif\r
-};\r
-\r
-enum {\r
-    ROUND_NEAREST_EVEN = 1,\r
-    ROUND_TO_ZERO,\r
-    ROUND_DOWN,\r
-    ROUND_UP,\r
-    NUM_ROUNDINGMODES\r
-};\r
-enum {\r
-    TININESS_BEFORE_ROUNDING = 1,\r
-    TININESS_AFTER_ROUNDING,\r
-    NUM_TININESSMODES\r
-};\r
-\r
-static void\r
- timeFunctionVariety(\r
-     uint8 functionCode,\r
-     int8 roundingPrecision,\r
-     int8 roundingMode,\r
-     int8 tininessMode\r
- )\r
-{\r
-    uint8 roundingCode;\r
-    int8 tininessCode;\r
-\r
-    functionName = functions[ functionCode ].name;\r
-    if ( roundingPrecision == 32 ) {\r
-        roundingPrecisionName = "32";\r
-    }\r
-    else if ( roundingPrecision == 64 ) {\r
-        roundingPrecisionName = "64";\r
-    }\r
-    else if ( roundingPrecision == 80 ) {\r
-        roundingPrecisionName = "80";\r
-    }\r
-    else {\r
-        roundingPrecisionName = 0;\r
-    }\r
-#ifdef FLOATX80\r
-    floatx80_rounding_precision = roundingPrecision;\r
-#endif\r
-    switch ( roundingMode ) {\r
-     case 0:\r
-        roundingModeName = 0;\r
-        roundingCode = float_round_nearest_even;\r
-        break;\r
-     case ROUND_NEAREST_EVEN:\r
-        roundingModeName = "nearest_even";\r
-        roundingCode = float_round_nearest_even;\r
-        break;\r
-     case ROUND_TO_ZERO:\r
-        roundingModeName = "to_zero";\r
-        roundingCode = float_round_to_zero;\r
-        break;\r
-     case ROUND_DOWN:\r
-        roundingModeName = "down";\r
-        roundingCode = float_round_down;\r
-        break;\r
-     case ROUND_UP:\r
-        roundingModeName = "up";\r
-        roundingCode = float_round_up;\r
-        break;\r
-    }\r
-    float_rounding_mode = roundingCode;\r
-    switch ( tininessMode ) {\r
-     case 0:\r
-        tininessModeName = 0;\r
-        tininessCode = float_tininess_after_rounding;\r
-        break;\r
-     case TININESS_BEFORE_ROUNDING:\r
-        tininessModeName = "before";\r
-        tininessCode = float_tininess_before_rounding;\r
-        break;\r
-     case TININESS_AFTER_ROUNDING:\r
-        tininessModeName = "after";\r
-        tininessCode = float_tininess_after_rounding;\r
-        break;\r
-    }\r
-    float_detect_tininess = tininessCode;\r
-    switch ( functionCode ) {\r
-     case INT32_TO_FLOAT32:\r
-        time_a_int32_z_float32( int32_to_float32 );\r
-        break;\r
-     case INT32_TO_FLOAT64:\r
-        time_a_int32_z_float64( int32_to_float64 );\r
-        break;\r
-#ifdef FLOATX80\r
-     case INT32_TO_FLOATX80:\r
-        time_a_int32_z_floatx80( int32_to_floatx80 );\r
-        break;\r
-#endif\r
-#ifdef FLOAT128\r
-     case INT32_TO_FLOAT128:\r
-        time_a_int32_z_float128( int32_to_float128 );\r
-        break;\r
-#endif\r
-     case INT64_TO_FLOAT32:\r
-        time_a_int64_z_float32( int64_to_float32 );\r
-        break;\r
-     case INT64_TO_FLOAT64:\r
-        time_a_int64_z_float64( int64_to_float64 );\r
-        break;\r
-#ifdef FLOATX80\r
-     case INT64_TO_FLOATX80:\r
-        time_a_int64_z_floatx80( int64_to_floatx80 );\r
-        break;\r
-#endif\r
-#ifdef FLOAT128\r
-     case INT64_TO_FLOAT128:\r
-        time_a_int64_z_float128( int64_to_float128 );\r
-        break;\r
-#endif\r
-     case FLOAT32_TO_INT32:\r
-        time_a_float32_z_int32( float32_to_int32 );\r
-        break;\r
-     case FLOAT32_TO_INT32_ROUND_TO_ZERO:\r
-        time_a_float32_z_int32( float32_to_int32_round_to_zero );\r
-        break;\r
-     case FLOAT32_TO_INT64:\r
-        time_a_float32_z_int64( float32_to_int64 );\r
-        break;\r
-     case FLOAT32_TO_INT64_ROUND_TO_ZERO:\r
-        time_a_float32_z_int64( float32_to_int64_round_to_zero );\r
-        break;\r
-     case FLOAT32_TO_FLOAT64:\r
-        time_a_float32_z_float64( float32_to_float64 );\r
-        break;\r
-#ifdef FLOATX80\r
-     case FLOAT32_TO_FLOATX80:\r
-        time_a_float32_z_floatx80( float32_to_floatx80 );\r
-        break;\r
-#endif\r
-#ifdef FLOAT128\r
-     case FLOAT32_TO_FLOAT128:\r
-        time_a_float32_z_float128( float32_to_float128 );\r
-        break;\r
-#endif\r
-     case FLOAT32_ROUND_TO_INT:\r
-        time_az_float32( float32_round_to_int );\r
-        break;\r
-     case FLOAT32_ADD:\r
-        time_abz_float32( float32_add );\r
-        break;\r
-     case FLOAT32_SUB:\r
-        time_abz_float32( float32_sub );\r
-        break;\r
-     case FLOAT32_MUL:\r
-        time_abz_float32( float32_mul );\r
-        break;\r
-     case FLOAT32_DIV:\r
-        time_abz_float32( float32_div );\r
-        break;\r
-     case FLOAT32_REM:\r
-        time_abz_float32( float32_rem );\r
-        break;\r
-     case FLOAT32_SQRT:\r
-        time_az_float32_pos( float32_sqrt );\r
-        break;\r
-     case FLOAT32_EQ:\r
-        time_ab_float32_z_flag( float32_eq );\r
-        break;\r
-     case FLOAT32_LE:\r
-        time_ab_float32_z_flag( float32_le );\r
-        break;\r
-     case FLOAT32_LT:\r
-        time_ab_float32_z_flag( float32_lt );\r
-        break;\r
-     case FLOAT32_EQ_SIGNALING:\r
-        time_ab_float32_z_flag( float32_eq_signaling );\r
-        break;\r
-     case FLOAT32_LE_QUIET:\r
-        time_ab_float32_z_flag( float32_le_quiet );\r
-        break;\r
-     case FLOAT32_LT_QUIET:\r
-        time_ab_float32_z_flag( float32_lt_quiet );\r
-        break;\r
-     case FLOAT64_TO_INT32:\r
-        time_a_float64_z_int32( float64_to_int32 );\r
-        break;\r
-     case FLOAT64_TO_INT32_ROUND_TO_ZERO:\r
-        time_a_float64_z_int32( float64_to_int32_round_to_zero );\r
-        break;\r
-     case FLOAT64_TO_INT64:\r
-        time_a_float64_z_int64( float64_to_int64 );\r
-        break;\r
-     case FLOAT64_TO_INT64_ROUND_TO_ZERO:\r
-        time_a_float64_z_int64( float64_to_int64_round_to_zero );\r
-        break;\r
-     case FLOAT64_TO_FLOAT32:\r
-        time_a_float64_z_float32( float64_to_float32 );\r
-        break;\r
-#ifdef FLOATX80\r
-     case FLOAT64_TO_FLOATX80:\r
-        time_a_float64_z_floatx80( float64_to_floatx80 );\r
-        break;\r
-#endif\r
-#ifdef FLOAT128\r
-     case FLOAT64_TO_FLOAT128:\r
-        time_a_float64_z_float128( float64_to_float128 );\r
-        break;\r
-#endif\r
-     case FLOAT64_ROUND_TO_INT:\r
-        time_az_float64( float64_round_to_int );\r
-        break;\r
-     case FLOAT64_ADD:\r
-        time_abz_float64( float64_add );\r
-        break;\r
-     case FLOAT64_SUB:\r
-        time_abz_float64( float64_sub );\r
-        break;\r
-     case FLOAT64_MUL:\r
-        time_abz_float64( float64_mul );\r
-        break;\r
-     case FLOAT64_DIV:\r
-        time_abz_float64( float64_div );\r
-        break;\r
-     case FLOAT64_REM:\r
-        time_abz_float64( float64_rem );\r
-        break;\r
-     case FLOAT64_SQRT:\r
-        time_az_float64_pos( float64_sqrt );\r
-        break;\r
-     case FLOAT64_EQ:\r
-        time_ab_float64_z_flag( float64_eq );\r
-        break;\r
-     case FLOAT64_LE:\r
-        time_ab_float64_z_flag( float64_le );\r
-        break;\r
-     case FLOAT64_LT:\r
-        time_ab_float64_z_flag( float64_lt );\r
-        break;\r
-     case FLOAT64_EQ_SIGNALING:\r
-        time_ab_float64_z_flag( float64_eq_signaling );\r
-        break;\r
-     case FLOAT64_LE_QUIET:\r
-        time_ab_float64_z_flag( float64_le_quiet );\r
-        break;\r
-     case FLOAT64_LT_QUIET:\r
-        time_ab_float64_z_flag( float64_lt_quiet );\r
-        break;\r
-#ifdef FLOATX80\r
-     case FLOATX80_TO_INT32:\r
-        time_a_floatx80_z_int32( floatx80_to_int32 );\r
-        break;\r
-     case FLOATX80_TO_INT32_ROUND_TO_ZERO:\r
-        time_a_floatx80_z_int32( floatx80_to_int32_round_to_zero );\r
-        break;\r
-     case FLOATX80_TO_INT64:\r
-        time_a_floatx80_z_int64( floatx80_to_int64 );\r
-        break;\r
-     case FLOATX80_TO_INT64_ROUND_TO_ZERO:\r
-        time_a_floatx80_z_int64( floatx80_to_int64_round_to_zero );\r
-        break;\r
-     case FLOATX80_TO_FLOAT32:\r
-        time_a_floatx80_z_float32( floatx80_to_float32 );\r
-        break;\r
-     case FLOATX80_TO_FLOAT64:\r
-        time_a_floatx80_z_float64( floatx80_to_float64 );\r
-        break;\r
-#ifdef FLOAT128\r
-     case FLOATX80_TO_FLOAT128:\r
-        time_a_floatx80_z_float128( floatx80_to_float128 );\r
-        break;\r
-#endif\r
-     case FLOATX80_ROUND_TO_INT:\r
-        time_az_floatx80( floatx80_round_to_int );\r
-        break;\r
-     case FLOATX80_ADD:\r
-        time_abz_floatx80( floatx80_add );\r
-        break;\r
-     case FLOATX80_SUB:\r
-        time_abz_floatx80( floatx80_sub );\r
-        break;\r
-     case FLOATX80_MUL:\r
-        time_abz_floatx80( floatx80_mul );\r
-        break;\r
-     case FLOATX80_DIV:\r
-        time_abz_floatx80( floatx80_div );\r
-        break;\r
-     case FLOATX80_REM:\r
-        time_abz_floatx80( floatx80_rem );\r
-        break;\r
-     case FLOATX80_SQRT:\r
-        time_az_floatx80_pos( floatx80_sqrt );\r
-        break;\r
-     case FLOATX80_EQ:\r
-        time_ab_floatx80_z_flag( floatx80_eq );\r
-        break;\r
-     case FLOATX80_LE:\r
-        time_ab_floatx80_z_flag( floatx80_le );\r
-        break;\r
-     case FLOATX80_LT:\r
-        time_ab_floatx80_z_flag( floatx80_lt );\r
-        break;\r
-     case FLOATX80_EQ_SIGNALING:\r
-        time_ab_floatx80_z_flag( floatx80_eq_signaling );\r
-        break;\r
-     case FLOATX80_LE_QUIET:\r
-        time_ab_floatx80_z_flag( floatx80_le_quiet );\r
-        break;\r
-     case FLOATX80_LT_QUIET:\r
-        time_ab_floatx80_z_flag( floatx80_lt_quiet );\r
-        break;\r
-#endif\r
-#ifdef FLOAT128\r
-     case FLOAT128_TO_INT32:\r
-        time_a_float128_z_int32( float128_to_int32 );\r
-        break;\r
-     case FLOAT128_TO_INT32_ROUND_TO_ZERO:\r
-        time_a_float128_z_int32( float128_to_int32_round_to_zero );\r
-        break;\r
-     case FLOAT128_TO_INT64:\r
-        time_a_float128_z_int64( float128_to_int64 );\r
-        break;\r
-     case FLOAT128_TO_INT64_ROUND_TO_ZERO:\r
-        time_a_float128_z_int64( float128_to_int64_round_to_zero );\r
-        break;\r
-     case FLOAT128_TO_FLOAT32:\r
-        time_a_float128_z_float32( float128_to_float32 );\r
-        break;\r
-     case FLOAT128_TO_FLOAT64:\r
-        time_a_float128_z_float64( float128_to_float64 );\r
-        break;\r
-#ifdef FLOATX80\r
-     case FLOAT128_TO_FLOATX80:\r
-        time_a_float128_z_floatx80( float128_to_floatx80 );\r
-        break;\r
-#endif\r
-     case FLOAT128_ROUND_TO_INT:\r
-        time_az_float128( float128_round_to_int );\r
-        break;\r
-     case FLOAT128_ADD:\r
-        time_abz_float128( float128_add );\r
-        break;\r
-     case FLOAT128_SUB:\r
-        time_abz_float128( float128_sub );\r
-        break;\r
-     case FLOAT128_MUL:\r
-        time_abz_float128( float128_mul );\r
-        break;\r
-     case FLOAT128_DIV:\r
-        time_abz_float128( float128_div );\r
-        break;\r
-     case FLOAT128_REM:\r
-        time_abz_float128( float128_rem );\r
-        break;\r
-     case FLOAT128_SQRT:\r
-        time_az_float128_pos( float128_sqrt );\r
-        break;\r
-     case FLOAT128_EQ:\r
-        time_ab_float128_z_flag( float128_eq );\r
-        break;\r
-     case FLOAT128_LE:\r
-        time_ab_float128_z_flag( float128_le );\r
-        break;\r
-     case FLOAT128_LT:\r
-        time_ab_float128_z_flag( float128_lt );\r
-        break;\r
-     case FLOAT128_EQ_SIGNALING:\r
-        time_ab_float128_z_flag( float128_eq_signaling );\r
-        break;\r
-     case FLOAT128_LE_QUIET:\r
-        time_ab_float128_z_flag( float128_le_quiet );\r
-        break;\r
-     case FLOAT128_LT_QUIET:\r
-        time_ab_float128_z_flag( float128_lt_quiet );\r
-        break;\r
-#endif\r
-    }\r
-\r
-}\r
-\r
-static void\r
- timeFunction(\r
-     uint8 functionCode,\r
-     int8 roundingPrecisionIn,\r
-     int8 roundingModeIn,\r
-     int8 tininessModeIn\r
- )\r
-{\r
-    int8 roundingPrecision, roundingMode, tininessMode;\r
-\r
-    roundingPrecision = 32;\r
-    for (;;) {\r
-        if ( ! functions[ functionCode ].roundingPrecision ) {\r
-            roundingPrecision = 0;\r
-        }\r
-        else if ( roundingPrecisionIn ) {\r
-            roundingPrecision = roundingPrecisionIn;\r
-        }\r
-        for ( roundingMode = 1;\r
-              roundingMode < NUM_ROUNDINGMODES;\r
-              ++roundingMode\r
-            ) {\r
-            if ( ! functions[ functionCode ].roundingMode ) {\r
-                roundingMode = 0;\r
-            }\r
-            else if ( roundingModeIn ) {\r
-                roundingMode = roundingModeIn;\r
-            }\r
-            for ( tininessMode = 1;\r
-                  tininessMode < NUM_TININESSMODES;\r
-                  ++tininessMode\r
-                ) {\r
-                if (    ( roundingPrecision == 32 )\r
-                     || ( roundingPrecision == 64 ) ) {\r
-                    if ( ! functions[ functionCode ]\r
-                               .tininessModeAtReducedPrecision\r
-                       ) {\r
-                        tininessMode = 0;\r
-                    }\r
-                    else if ( tininessModeIn ) {\r
-                        tininessMode = tininessModeIn;\r
-                    }\r
-                }\r
-                else {\r
-                    if ( ! functions[ functionCode ].tininessMode ) {\r
-                        tininessMode = 0;\r
-                    }\r
-                    else if ( tininessModeIn ) {\r
-                        tininessMode = tininessModeIn;\r
-                    }\r
-                }\r
-                timeFunctionVariety(\r
-                    functionCode, roundingPrecision, roundingMode, tininessMode\r
-                );\r
-                if ( tininessModeIn || ! tininessMode ) break;\r
-            }\r
-            if ( roundingModeIn || ! roundingMode ) break;\r
-        }\r
-        if ( roundingPrecisionIn || ! roundingPrecision ) break;\r
-        if ( roundingPrecision == 80 ) {\r
-            break;\r
-        }\r
-        else if ( roundingPrecision == 64 ) {\r
-            roundingPrecision = 80;\r
-        }\r
-        else if ( roundingPrecision == 32 ) {\r
-            roundingPrecision = 64;\r
-        }\r
-    }\r
-\r
-}\r
-\r
-main( int argc, char **argv )\r
-{\r
-    char *argPtr;\r
-    flag functionArgument;\r
-    uint8 functionCode;\r
-    int8 operands, roundingPrecision, roundingMode, tininessMode;\r
-\r
-    if ( argc <= 1 ) goto writeHelpMessage;\r
-    functionArgument = FALSE;\r
-    functionCode = 0;\r
-    operands = 0;\r
-    roundingPrecision = 0;\r
-    roundingMode = 0;\r
-    tininessMode = 0;\r
-    --argc;\r
-    ++argv;\r
-    while ( argc && ( argPtr = argv[ 0 ] ) ) {\r
-        if ( argPtr[ 0 ] == '-' ) ++argPtr;\r
-        if ( strcmp( argPtr, "help" ) == 0 ) {\r
- writeHelpMessage:\r
-            fputs(\r
-"timesoftfloat [<option>...] <function>\n"\r
-"  <option>:  (* is default)\n"\r
-"    -help            --Write this message and exit.\n"\r
-#ifdef FLOATX80\r
-"    -precision32     --Only time rounding precision equivalent to float32.\n"\r
-"    -precision64     --Only time rounding precision equivalent to float64.\n"\r
-"    -precision80     --Only time maximum rounding precision.\n"\r
-#endif\r
-"    -nearesteven     --Only time rounding to nearest/even.\n"\r
-"    -tozero          --Only time rounding to zero.\n"\r
-"    -down            --Only time rounding down.\n"\r
-"    -up              --Only time rounding up.\n"\r
-"    -tininessbefore  --Only time underflow tininess before rounding.\n"\r
-"    -tininessafter   --Only time underflow tininess after rounding.\n"\r
-"  <function>:\n"\r
-"    int32_to_<float>                 <float>_add   <float>_eq\n"\r
-"    <float>_to_int32                 <float>_sub   <float>_le\n"\r
-"    <float>_to_int32_round_to_zero   <float>_mul   <float>_lt\n"\r
-"    int64_to_<float>                 <float>_div   <float>_eq_signaling\n"\r
-"    <float>_to_int64                 <float>_rem   <float>_le_quiet\n"\r
-"    <float>_to_int64_round_to_zero                 <float>_lt_quiet\n"\r
-"    <float>_to_<float>\n"\r
-"    <float>_round_to_int\n"\r
-"    <float>_sqrt\n"\r
-"    -all1            --All 1-operand functions.\n"\r
-"    -all2            --All 2-operand functions.\n"\r
-"    -all             --All functions.\n"\r
-"  <float>:\n"\r
-"    float32          --Single precision.\n"\r
-"    float64          --Double precision.\n"\r
-#ifdef FLOATX80\r
-"    floatx80         --Extended double precision.\n"\r
-#endif\r
-#ifdef FLOAT128\r
-"    float128         --Quadruple precision.\n"\r
-#endif\r
-                ,\r
-                stdout\r
-            );\r
-            return EXIT_SUCCESS;\r
-        }\r
-#ifdef FLOATX80\r
-        else if ( strcmp( argPtr, "precision32" ) == 0 ) {\r
-            roundingPrecision = 32;\r
-        }\r
-        else if ( strcmp( argPtr, "precision64" ) == 0 ) {\r
-            roundingPrecision = 64;\r
-        }\r
-        else if ( strcmp( argPtr, "precision80" ) == 0 ) {\r
-            roundingPrecision = 80;\r
-        }\r
-#endif\r
-        else if (    ( strcmp( argPtr, "nearesteven" ) == 0 )\r
-                  || ( strcmp( argPtr, "nearest_even" ) == 0 ) ) {\r
-            roundingMode = ROUND_NEAREST_EVEN;\r
-        }\r
-        else if (    ( strcmp( argPtr, "tozero" ) == 0 )\r
-                  || ( strcmp( argPtr, "to_zero" ) == 0 ) ) {\r
-            roundingMode = ROUND_TO_ZERO;\r
-        }\r
-        else if ( strcmp( argPtr, "down" ) == 0 ) {\r
-            roundingMode = ROUND_DOWN;\r
-        }\r
-        else if ( strcmp( argPtr, "up" ) == 0 ) {\r
-            roundingMode = ROUND_UP;\r
-        }\r
-        else if ( strcmp( argPtr, "tininessbefore" ) == 0 ) {\r
-            tininessMode = TININESS_BEFORE_ROUNDING;\r
-        }\r
-        else if ( strcmp( argPtr, "tininessafter" ) == 0 ) {\r
-            tininessMode = TININESS_AFTER_ROUNDING;\r
-        }\r
-        else if ( strcmp( argPtr, "all1" ) == 0 ) {\r
-            functionArgument = TRUE;\r
-            functionCode = 0;\r
-            operands = 1;\r
-        }\r
-        else if ( strcmp( argPtr, "all2" ) == 0 ) {\r
-            functionArgument = TRUE;\r
-            functionCode = 0;\r
-            operands = 2;\r
-        }\r
-        else if ( strcmp( argPtr, "all" ) == 0 ) {\r
-            functionArgument = TRUE;\r
-            functionCode = 0;\r
-            operands = 0;\r
-        }\r
-        else {\r
-            for ( functionCode = 1;\r
-                  functionCode < NUM_FUNCTIONS;\r
-                  ++functionCode \r
-                ) {\r
-                if ( strcmp( argPtr, functions[ functionCode ].name ) == 0 ) {\r
-                    break;\r
-                }\r
-            }\r
-            if ( functionCode == NUM_FUNCTIONS ) {\r
-                fail( "Invalid option or function `%s'", argv[ 0 ] );\r
-            }\r
-            functionArgument = TRUE;\r
-        }\r
-        --argc;\r
-        ++argv;\r
-    }\r
-    if ( ! functionArgument ) fail( "Function argument required" );\r
-    if ( functionCode ) {\r
-        timeFunction(\r
-            functionCode, roundingPrecision, roundingMode, tininessMode );\r
-    }\r
-    else if ( operands == 1 ) {\r
-        for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode\r
-            ) {\r
-            if ( functions[ functionCode ].numInputs == 1 ) {\r
-                timeFunction(\r
-                    functionCode, roundingPrecision, roundingMode, tininessMode\r
-                );\r
-            }\r
-        }\r
-    }\r
-    else if ( operands == 2 ) {\r
-        for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode\r
-            ) {\r
-            if ( functions[ functionCode ].numInputs == 2 ) {\r
-                timeFunction(\r
-                    functionCode, roundingPrecision, roundingMode, tininessMode\r
-                );\r
-            }\r
-        }\r
-    }\r
-    else {\r
-        for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode\r
-            ) {\r
-            timeFunction(\r
-                functionCode, roundingPrecision, roundingMode, tininessMode );\r
-        }\r
-    }\r
-    return EXIT_SUCCESS;\r
-\r
-}\r
-\r
diff --git a/float/softfloat/softfloat/timesoftfloat.txt b/float/softfloat/softfloat/timesoftfloat.txt
deleted file mode 100644 (file)
index f38f465..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-\r
-Documentation for the `timesoftfloat' Program of SoftFloat Release 2b\r
-\r
-John R. Hauser\r
-2002 May 27\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Introduction\r
-\r
-The `timesoftfloat' program evaluates the speed of SoftFloat's floating-\r
-point routines.  Each routine can be evaluated for every relevant rounding\r
-mode, tininess mode, and/or rounding precision.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Contents\r
-\r
-    Introduction\r
-    Contents\r
-    Legal Notice\r
-    Executing `timesoftfloat'\r
-    Options\r
-        -help\r
-        -precision32, -precision64, -precision80\r
-        -nearesteven, -tozero, -down, -up\r
-        -tininessbefore, -tininessafter\r
-    Function Sets\r
-\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Legal Notice\r
-\r
-The `timesoftfloat' program was written by John R. Hauser.\r
-\r
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort\r
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT\r
-TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO\r
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL\r
-LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO\r
-FURTHERMORE EFFECTIVELY INDEMNIFY THE AUTHOR, JOHN HAUSER, (possibly via\r
-similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED\r
-BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Executing `timesoftfloat'\r
-\r
-The `timesoftfloat' program is intended to be invoked from a command line\r
-interpreter as follows:\r
-\r
-    timesoftfloat [<option>...] <function>\r
-\r
-Here square brackets ([]) indicate optional items, while angled brackets\r
-(<>) denote parameters to be filled in.  The `<function>' argument is\r
-the name of the SoftFloat routine to evaluate, such as `float32_add' or\r
-`float64_to_int32'.  The allowed options are detailed in the next section,\r
-_Options_.  If `timesoftfloat' is executed without any arguments, a summary\r
-of usage is written.  It is also possible to evaluate all machine functions\r
-in a single invocation as explained in the section _Function Sets_ later in\r
-this document.\r
-\r
-Ordinarily, a function's speed will be evaulated separately for each of\r
-the four rounding modes, one after the other.  If the rounding mode is not\r
-supposed to have any effect on the results of a function--for instance,\r
-some operations do not require rounding--only the nearest/even rounding mode\r
-is timed.  In the same way, if a function is affected by the way in which\r
-underflow tininess is detected, `timesoftfloat' times the function both with\r
-tininess detected before rounding and after rounding.  For extended double-\r
-precision operations affected by rounding precision control, `timesoftfloat'\r
-also times the function for all three rounding precision modes, one after\r
-the other.  Evaluation of a function can be limited to a single rounding\r
-mode, a single tininess mode, and/or a single rounding precision with\r
-appropriate options (see _Options_).\r
-\r
-For each function and mode evaluated, `timesoftfloat' reports the speed of\r
-the function in kops/s, or ``thousands of operations per second''.  This\r
-unit of measure differs from the traditional MFLOPS (``millions of floating-\r
-point operations per second'') only in being a factor of 1000 smaller.\r
-(1000 kops/s is exactly 1 MFLOPS.)  Speeds are reported in thousands\r
-instead of millions because software floating-point may execute at less than\r
-1 MFLOPS.\r
-\r
-The speeds reported by `timesoftfloat' may be affected somewhat by other\r
-programs executing at the same time as `timesoftfloat'.\r
-\r
-Note that the remainder operations (`float32_rem', `float64_rem',\r
-`floatx80_rem' and `float128_rem') will be markedly slower than other\r
-operations, particularly for extended double precision (`floatx80') and\r
-quadruple precision (`float128').  This is inherent to the remainder\r
-function itself and is not a failing of the SoftFloat implementation.\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Options\r
-\r
-The `timesoftfloat' program accepts several command options.  If mutually\r
-contradictory options are given, the last one has priority.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
--help\r
-\r
-The `-help' option causes a summary of program usage to be written, after\r
-which the program exits.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
--precision32, -precision64, -precision80\r
-\r
-For extended double-precision functions affected by rounding precision\r
-control, the `-precision32' option restricts evaluation to only the cases\r
-in which rounding precision is equivalent to single precision.  The other\r
-rounding precision options are not timed.  Likewise, the `-precision64'\r
-and `-precision80' options fix the rounding precision equivalent to double\r
-precision or extended double precision, respectively.  These options are\r
-ignored for functions not affected by rounding precision control.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
--nearesteven, -tozero, -down, -up\r
-\r
-The `-nearesteven' option restricts evaluation to only the cases in which\r
-the rounding mode is nearest/even.  The other rounding mode options are\r
-not timed.  Likewise, `-tozero' forces rounding toward zero; `-down' forces\r
-rounding down; and `-up' forces rounding up.  These options are ignored for\r
-functions that are exact and thus do not round.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
--tininessbefore, -tininessafter\r
-\r
-The `-tininessbefore' option restricts evaluation to only the cases\r
-detecting underflow tininess before rounding.  Tininess after rounding\r
-is not timed.  Likewise, `-tininessafter' forces underflow tininess to be\r
-detected after rounding only.  These options are ignored for functions not\r
-affected by the way in which underflow tininess is detected.\r
-\r
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
-\r
-\r
-----------------------------------------------------------------------------\r
-Function Sets\r
-\r
-Just as `timesoftfloat' can test an operation for all four rounding modes in\r
-sequence, multiple operations can also be tested with a single invocation.\r
-Three sets are recognized:  `-all1', `-all2', and `-all'.  The set `-all1'\r
-comprises all one-operand functions; `-all2' is all two-operand functions;\r
-and `-all' is all functions.  A function set can be used in place of a\r
-function name in the command line, as in\r
-\r
-    timesoftfloat [<option>...] -all\r
-\r
-\r