This directory contains the version 0.92 test release of the NetWinder 
Floating Point Emulator.

The majority of the code was written by me, Scott Bambrough It is
written in C, with a small number of routines in inline assembler
where required.  It was written quickly, with a goal of implementing a
working version of all the floating point instructions the compiler
emits as the first target.  I have attempted to be as optimal as
possible, but there remains much room for improvement.

I have attempted to make the emulator as portable as possible.  One of
the problems is with leading underscores on kernel symbols.  Elf
kernels have no leading underscores, a.out compiled kernels do.  I
have attempted to use the C_SYMBOL_NAME macro wherever this may be
important.

Another choice I made was in the file structure.  I have attempted to
contain all operating system specific code in one module (fpmodule.*).
All the other files contain emulator specific code.  This should allow
others to port the emulator to NetBSD for instance relatively easily.

The floating point operations are based on SoftFloat Release 2, by
John Hauser.  SoftFloat is a software implementation of floating-point
that conforms to the IEC/IEEE Standard for Binary Floating-point
Arithmetic.  As many as four formats are supported: single precision,
double precision, extended double precision, and quadruple precision.
All operations required by the standard are implemented, except for
conversions to and from decimal.  We use only the single precision,
double precision and extended double precision formats.  The port of
SoftFloat to the ARM was done by Phil Blundell, based on an earlier
port of SoftFloat version 1 by Neil Carson for NetBSD/arm32.

The file README.FPE contains a description of what has been implemented
so far in the emulator.  The file TODO contains a information on what 
remains to be done, and other ideas for the emulator.

Bug reports, comments, suggestions should be directed to me at
<scottb@netwinder.org>.  General reports of "this program doesn't
work correctly when your emulator is installed" are useful for
determining that bugs still exist; but are virtually useless when
attempting to isolate the problem.  Please report them, but don't
expect quick action.  Bugs still exist.  The problem remains in isolating
which instruction contains the bug.  Small programs illustrating a specific
problem are a godsend.

Legal Notices
-------------

The NetWinder Floating Point Emulator is free software.  Everything Rebel.com
has written is provided under the GNU GPL.  See the file COPYING for copying
conditions.  Excluded from the above is the SoftFloat code.  John Hauser's 
legal notice for SoftFloat is included below.

-------------------------------------------------------------------------------
SoftFloat Legal Notice

SoftFloat was 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.

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 ANY
AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-------------------------------------------------------------------------------
