History of Berkeley SoftFloat, to Release 3c
John R. Hauser
2017 February 10
Release 3c (2017 February)
Added optional rounding mode
odd (round to odd, also known as
Corrected the documentation concerning non-canonical representations in
Release 3b (2016 July)
Implemented the common 16-bit “half-precision”
floating-point format (
Made the integer values returned on invalid conversions to integer formats
be determined by the port-specific specialization instead of being the same for
Added preprocessor macro
THREAD_LOCAL to allow the floating-point
state (modes and exception flags) to be made per-thread.
Modified the provided Makefiles to allow some options to be overridden from the
Made other minor improvements.
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
Added functions to convert between floating-point and unsigned integers, both
32-bit and 64-bit (
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).
timesoftfloat program (now part of the Berkeley
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
(Bug discovered by Paul Donahue.)
Improved the Makefiles.
Release 2 (1997 June)
Created the 64-bit (
bits64) version, adding the
Changed the source directory structure, splitting the sources into a
bits32 and a
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.)
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.