HIFIVE1-VP/softfloat/doc/SoftFloat-history.html

6.2 KiB
Raw Blame History

<HTML> <HEAD> </HEAD>

History of Berkeley SoftFloat, to Release 3e

John R. Hauser
2018 January 20

Release 3e (2018 January)

  • Changed the default numeric code for optional rounding mode odd (round to odd, also known as jamming) from 5 to 6.
  • Modified the behavior of rounding mode odd when rounding to an integer value (either conversion to an integer format or a roundToInt function). Previously, for those cases only, rounding mode odd acted the same as rounding to minimum magnitude. Now all operations are rounded consistently.
  • Fixed some errors in the specialization code modeling Intel x86 floating-point, specifically the integers returned on invalid operations and the propagation of NaN payloads in a few rare cases.
  • Added specialization code modeling ARM floating-point, conforming to VFPv2 or later.
  • Added an example target for ARM processors.
  • Fixed a minor bug whereby function f16_to_ui64 might return a different integer than expected in the case that the floating-point operand is negative.
  • Added example target-specific optimization for GCC, employing GCC instrinsics and support for 128-bit integer arithmetic.
  • Made other minor improvements.

Release 3d (2017 August)

  • Fixed bugs in the square root functions for 64-bit double-precision, 80-bit double-extended-precision, and 128-bit quadruple-precision. For 64-bit double-precision (f64_sqrt), the result could sometimes be off by 1 unit in the last place (1 ulp) from what it should be. For the larger formats, the square root could be wrong in a large portion of the less-significant bits. (A bug in f128_sqrt was first reported by Alexei Sibidanov.)

Release 3c (2017 February)

  • Added optional rounding mode odd (round to odd, also known as jamming).
  • Corrected the documentation concerning non-canonical representations in 80-bit double-extended-precision.

Release 3b (2016 July)

  • Implemented the common 16-bit “half-precision” floating-point format (float16_t).
  • Made the integer values returned on invalid conversions to integer formats be determined by the port-specific specialization instead of being the same for all ports.
  • 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 make command.
  • 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 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.