Berkeley SoftFloat History

# History of Berkeley SoftFloat, to Release 3a

John R. Hauser
2015 October 23

### Release 3a (2015 October)

- Replaced the license text supplied by the University of California, Berkeley.

### Release 3 (2015 February)

- Complete rewrite, funded by the University of California, Berkeley, and consequently having a different use license than earlier releases. Major changes included renaming most types and functions, upgrading some algorithms, restructuring the source files, and making SoftFloat into a true library.
- Added functions to convert between floating-point and unsigned integers, both 32-bit and 64-bit (`uint32_t` and `uint64_t`).
- Added functions for fused multiply-add, for all supported floating-point formats except 80-bit double-extended-precision.
- Added support for a fifth rounding mode, `near_maxMag` (round to nearest, with ties to maximum magnitude, away from zero).
- Dropped the `timesoftfloat` program (now part of the Berkeley TestFloat package).

### Release 2c (2015 January)

- Fixed mistakes affecting some 64-bit processors.
- Further improved the documentation and the wording for the legal restrictions on using SoftFloat releases through 2c (not applicable to Release 3 or later).

### Release 2b (2002 May)

- Made minor updates to the documentation, including improved wording for the legal restrictions on using SoftFloat.

### Release 2a (1998 December)

- Added functions to convert between 64-bit integers (`int64`) and all supported floating-point formats.
- Fixed a bug in all 64-bit-version square root functions except `float32_sqrt` that caused the result sometimes to be off by 1 unit in the last place (1 ulp) from what it should be. (Bug discovered by Paul Donahue.)
- Improved the Makefiles.

### Release 2 (1997 June)

- Created the 64-bit (`bits64`) version, adding the `floatx80` and `float128` formats.
- Changed the source directory structure, splitting the sources into a `bits32` and a `bits64` version. Renamed `environment.h` to `milieu.h` to avoid confusion with environment variables.
- Fixed a small error that caused `float64_round_to_int` often to round the wrong way in nearest/even mode when the operand was between 220 and 221 and halfway between two integers.

### Release 1a (1996 July)

- Corrected a mistake that caused borderline underflow cases not to raise the underflow flag when they should have. (Problem reported by Doug Priest.)
- Added the `float_detect_tininess` variable to control whether tininess is detected before or after rounding.

### Release 1 (1996 July)

- Original release, based on work done for the International Computer Science Institute (ICSI) in Berkeley, California.