(http://www.jhauser.us/arithmetic/SoftFloat.html) with RISCV specialization and cmake build
		
			
				
	
	
	
		
			6.2 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			6.2 KiB
		
	
	
	
	
	
	
	
			
				
<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 
oddwhen rounding to an integer value (either conversion to an integer format or a ‘roundToInt’ function). Previously, for those cases only, rounding modeoddacted 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_ui64might 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 inf128_sqrtwas 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_LOCALto 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
makecommand. - 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_tanduint64_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 
timesoftfloatprogram (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_sqrtthat 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 thefloatx80andfloat128formats. - 
Changed the source directory structure, splitting the sources into a
bits32and abits64version. Renamedenvironment.htomilieu.hto avoid confusion with environment variables. - 
Fixed a small error that caused 
float64_round_to_intoften 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_tininessvariable 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.