This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

New IEEE P854 emulation library


We wrote a new soft floating-point emulation library a while ago, since the
old one (fp-bit.c) is big, buggy, and slow.  This new library is 3 to 15
times faster, depending on the operands, host, and operation.  It is also
smaller, and we believe it is very accurate.

We (Swox AB) hereby donate this to the GNU project.

We have run hundreds of billions of tests for this, comparing the results to
the arithmetic of a Solaris machine.  Testing vectors were pseudorandom,
with a pattern that more likely triggers corner cases.  (I'll give more
information on testing on demand.)

It is possible to configuire this for up to 128-bit floats by using the
`long long' type.  The resulting code would be efficient for 64-bit
machines, and not terribly slow on 32-bit machines.  Only the 32-bit and
64-bit IEEE types have been thoroughly tested, though.

The key to efficiency is having each routine in two flavors; one for when a
single machine word is greater than the mantissa precision (routines ending
in _1), and another for when the mantissa needs to machine words (routines
ending in _2).  Conversion routines actually come in three flavors, since
there are several possible combinations depending on whether the source and
target operands fit into a machine word.  Conditional compiling exclude
unneeded flavors.

It is trivial to replace fp-bit.c by this library for individual targets.

Here is a generic conf for a 32-bit target (this could be simplified, but I
don't feel a strong need for that):

LIB2FUNCS_EXTRA = sfieeelib.c dfieeelib.c sfdfcvt.c
# Compile SFmode routines
sfieeelib.c: $(srcdir)/config/m68k/ieeelib.c
        echo '#define COMPUTE_TYPE unsigned long'       >sfieeelib.c
        echo '#define COMPUTE_STYPE signed long'        >>sfieeelib.c
        echo '#define COMPUTE_TYPE_BITS 32'             >>sfieeelib.c
        echo '#define MANTISSA_NWORDS 1'                >>sfieeelib.c
        echo '#define MANTISSA_BITS 24'                 >>sfieeelib.c
        echo '#define EXP_BITS 8'                       >>sfieeelib.c
        echo '#define FLOATING_TYPE float'              >>sfieeelib.c
        echo '#define SFmode'                           >>sfieeelib.c
        echo '#define MSB_IMPLICIT true'                >>sfieeelib.c
        echo '#define FLOAT_WORDS_BIG_ENDIAN'           >>sfieeelib.c
        cat $(srcdir)/config/m68k/ieeelib.c             >>sfieeelib.c
# Compile DFmode routines
dfieeelib.c: $(srcdir)/config/m68k/ieeelib.c
        echo '#define COMPUTE_TYPE unsigned long'       >dfieeelib.c
        echo '#define COMPUTE_STYPE signed long'        >>dfieeelib.c
        echo '#define COMPUTE_TYPE_BITS 32'             >>dfieeelib.c
        echo '#define MANTISSA_NWORDS 2'                >>dfieeelib.c
        echo '#define MANTISSA_BITS 53'                 >>dfieeelib.c
        echo '#define EXP_BITS 11'                      >>dfieeelib.c
        echo '#define FLOATING_TYPE double'             >>dfieeelib.c
        echo '#define DFmode'                           >>dfieeelib.c
        echo '#define MSB_IMPLICIT true'                >>dfieeelib.c
        echo '#define FLOAT_WORDS_BIG_ENDIAN'           >>dfieeelib.c
        cat $(srcdir)/config/m68k/ieeelib.c             >>dfieeelib.c
# Compile conversion routines between DFmode and SFmode
sfdfcvt.c: $(srcdir)/config/m68k/ieeecvt.c
        echo '#define S_FLOATING_TYPE float'            >sfdfcvt.c
        echo '#define S_MANTISSA_BITS 24'               >>sfdfcvt.c
        echo '#define S_EXP_BITS 8'                     >>sfdfcvt.c
        echo '#define B_FLOATING_TYPE double'           >>sfdfcvt.c
        echo '#define B_MANTISSA_BITS 53'               >>sfdfcvt.c
        echo '#define B_EXP_BITS 11'                    >>sfdfcvt.c
        echo '#define INTEGER_TYPE unsigned long int'   >>sfdfcvt.c
        echo '#define INTEGER_STYPE signed long int'    >>sfdfcvt.c
        echo '#define INTEGER_TYPE_BITS 32'             >>sfdfcvt.c
        echo '#define S_MANTISSA_NWORDS 1'              >>sfdfcvt.c
        echo '#define B_MANTISSA_NWORDS 2'              >>sfdfcvt.c
        echo '#define FLOAT_WORDS_BIG_ENDIAN'           >>sfdfcvt.c
        echo '#define extend_fname __extendsfdf2'       >>sfdfcvt.c
        echo '#define truncate_fname __truncdfsf2'      >>sfdfcvt.c
        cat $(srcdir)/config/m68k/ieeecvt.c             >>sfdfcvt.c

Here is the library source.  Note that this creates (two) files directly on
pwd, not using a subdirectory.

begin 664 gieee-19990715.tar.gz
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
=:4M;VM*6MK2E+6UI2UO:TI:V8/D+F6NH7``8`0"V
`
end



-- 
Torbjörn


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]