1 |
|
---|
2 | <HTML>
|
---|
3 |
|
---|
4 | <HEAD>
|
---|
5 | <TITLE>Berkeley SoftFloat History</TITLE>
|
---|
6 | </HEAD>
|
---|
7 |
|
---|
8 | <BODY>
|
---|
9 |
|
---|
10 | <H1>History of Berkeley SoftFloat, to Release 3e</H1>
|
---|
11 |
|
---|
12 | <P>
|
---|
13 | John R. Hauser<BR>
|
---|
14 | 2018 January 20<BR>
|
---|
15 | </P>
|
---|
16 |
|
---|
17 |
|
---|
18 | <H3>Release 3e (2018 January)</H3>
|
---|
19 |
|
---|
20 | <UL>
|
---|
21 |
|
---|
22 | <LI>
|
---|
23 | Changed the default numeric code for optional rounding mode <CODE>odd</CODE>
|
---|
24 | (round to odd, also known as <EM>jamming</EM>) from 5 to 6.
|
---|
25 |
|
---|
26 | <LI>
|
---|
27 | Modified the behavior of rounding mode <CODE>odd</CODE> when rounding to an
|
---|
28 | integer value (either conversion to an integer format or a
|
---|
29 | ‘<CODE>roundToInt</CODE>’ function).
|
---|
30 | Previously, for those cases only, rounding mode <CODE>odd</CODE> acted the same
|
---|
31 | as rounding to minimum magnitude.
|
---|
32 | Now all operations are rounded consistently.
|
---|
33 |
|
---|
34 | <LI>
|
---|
35 | Fixed some errors in the specialization code modeling Intel x86 floating-point,
|
---|
36 | specifically the integers returned on invalid operations and the propagation of
|
---|
37 | NaN payloads in a few rare cases.
|
---|
38 |
|
---|
39 | <LI>
|
---|
40 | Added specialization code modeling ARM floating-point, conforming to VFPv2 or
|
---|
41 | later.
|
---|
42 |
|
---|
43 | <LI>
|
---|
44 | Added an example target for ARM processors.
|
---|
45 |
|
---|
46 | <LI>
|
---|
47 | Fixed a minor bug whereby function <CODE>f16_to_ui64</CODE> might return a
|
---|
48 | different integer than expected in the case that the floating-point operand is
|
---|
49 | negative.
|
---|
50 |
|
---|
51 | <LI>
|
---|
52 | Added example target-specific optimization for GCC, employing GCC instrinsics
|
---|
53 | and support for <NOBR>128-bit</NOBR> integer arithmetic.
|
---|
54 |
|
---|
55 | <LI>
|
---|
56 | Made other minor improvements.
|
---|
57 |
|
---|
58 | </UL>
|
---|
59 |
|
---|
60 |
|
---|
61 | <H3>Release 3d (2017 August)</H3>
|
---|
62 |
|
---|
63 | <UL>
|
---|
64 |
|
---|
65 | <LI>
|
---|
66 | Fixed bugs in the square root functions for <NOBR>64-bit</NOBR>
|
---|
67 | double-precision, <NOBR>80-bit</NOBR> double-extended-precision, and
|
---|
68 | <NOBR>128-bit</NOBR> quadruple-precision.
|
---|
69 | For <NOBR>64-bit</NOBR> double-precision (<CODE>f64_sqrt</CODE>), the result
|
---|
70 | could sometimes be off by <NOBR>1 unit</NOBR> in the last place
|
---|
71 | (<NOBR>1 ulp</NOBR>) from what it should be.
|
---|
72 | For the larger formats, the square root could be wrong in a large portion of
|
---|
73 | the less-significant bits.
|
---|
74 | (A bug in <CODE>f128_sqrt</CODE> was first reported by Alexei Sibidanov.)
|
---|
75 |
|
---|
76 | </UL>
|
---|
77 |
|
---|
78 |
|
---|
79 | <H3>Release 3c (2017 February)</H3>
|
---|
80 |
|
---|
81 | <UL>
|
---|
82 |
|
---|
83 | <LI>
|
---|
84 | Added optional rounding mode <CODE>odd</CODE> (round to odd, also known as
|
---|
85 | <EM>jamming</EM>).
|
---|
86 |
|
---|
87 | <LI>
|
---|
88 | Corrected the documentation concerning non-canonical representations in
|
---|
89 | <NOBR>80-bit</NOBR> double-extended-precision.
|
---|
90 |
|
---|
91 | </UL>
|
---|
92 |
|
---|
93 |
|
---|
94 | <H3>Release 3b (2016 July)</H3>
|
---|
95 |
|
---|
96 | <UL>
|
---|
97 |
|
---|
98 | <LI>
|
---|
99 | Implemented the common <NOBR>16-bit</NOBR> “half-precision”
|
---|
100 | floating-point format (<CODE>float16_t</CODE>).
|
---|
101 |
|
---|
102 | <LI>
|
---|
103 | Made the integer values returned on invalid conversions to integer formats
|
---|
104 | be determined by the port-specific specialization instead of being the same for
|
---|
105 | all ports.
|
---|
106 |
|
---|
107 | <LI>
|
---|
108 | Added preprocessor macro <CODE>THREAD_LOCAL</CODE> to allow the floating-point
|
---|
109 | state (modes and exception flags) to be made per-thread.
|
---|
110 |
|
---|
111 | <LI>
|
---|
112 | Modified the provided Makefiles to allow some options to be overridden from the
|
---|
113 | <CODE>make</CODE> command.
|
---|
114 |
|
---|
115 | <LI>
|
---|
116 | Made other minor improvements.
|
---|
117 |
|
---|
118 | </UL>
|
---|
119 |
|
---|
120 |
|
---|
121 | <H3>Release 3a (2015 October)</H3>
|
---|
122 |
|
---|
123 | <UL>
|
---|
124 |
|
---|
125 | <LI>
|
---|
126 | Replaced the license text supplied by the University of California, Berkeley.
|
---|
127 |
|
---|
128 | </UL>
|
---|
129 |
|
---|
130 |
|
---|
131 | <H3>Release 3 (2015 February)</H3>
|
---|
132 |
|
---|
133 | <UL>
|
---|
134 |
|
---|
135 | <LI>
|
---|
136 | Complete rewrite, funded by the University of California, Berkeley, and
|
---|
137 | consequently having a different use license than earlier releases.
|
---|
138 | Major changes included renaming most types and functions, upgrading some
|
---|
139 | algorithms, restructuring the source files, and making SoftFloat into a true
|
---|
140 | library.
|
---|
141 |
|
---|
142 | <LI>
|
---|
143 | Added functions to convert between floating-point and unsigned integers, both
|
---|
144 | <NOBR>32-bit</NOBR> and <NOBR>64-bit</NOBR> (<CODE>uint32_t</CODE> and
|
---|
145 | <CODE>uint64_t</CODE>).
|
---|
146 |
|
---|
147 | <LI>
|
---|
148 | Added functions for fused multiply-add, for all supported floating-point
|
---|
149 | formats except <NOBR>80-bit</NOBR> double-extended-precision.
|
---|
150 |
|
---|
151 | <LI>
|
---|
152 | Added support for a fifth rounding mode, <CODE>near_maxMag</CODE> (round to
|
---|
153 | nearest, with ties to maximum magnitude, away from zero).
|
---|
154 |
|
---|
155 | <LI>
|
---|
156 | Dropped the <CODE>timesoftfloat</CODE> program (now part of the Berkeley
|
---|
157 | TestFloat package).
|
---|
158 |
|
---|
159 | </UL>
|
---|
160 |
|
---|
161 |
|
---|
162 | <H3>Release 2c (2015 January)</H3>
|
---|
163 |
|
---|
164 | <UL>
|
---|
165 |
|
---|
166 | <LI>
|
---|
167 | Fixed mistakes affecting some <NOBR>64-bit</NOBR> processors.
|
---|
168 |
|
---|
169 | <LI>
|
---|
170 | Further improved the documentation and the wording for the legal restrictions
|
---|
171 | on using SoftFloat releases <NOBR>through 2c</NOBR> (not applicable to
|
---|
172 | <NOBR>Release 3</NOBR> or later).
|
---|
173 |
|
---|
174 | </UL>
|
---|
175 |
|
---|
176 |
|
---|
177 | <H3>Release 2b (2002 May)</H3>
|
---|
178 |
|
---|
179 | <UL>
|
---|
180 |
|
---|
181 | <LI>
|
---|
182 | Made minor updates to the documentation, including improved wording for the
|
---|
183 | legal restrictions on using SoftFloat.
|
---|
184 |
|
---|
185 | </UL>
|
---|
186 |
|
---|
187 |
|
---|
188 | <H3>Release 2a (1998 December)</H3>
|
---|
189 |
|
---|
190 | <UL>
|
---|
191 |
|
---|
192 | <LI>
|
---|
193 | Added functions to convert between <NOBR>64-bit</NOBR> integers
|
---|
194 | (<CODE>int64</CODE>) and all supported floating-point formats.
|
---|
195 |
|
---|
196 | <LI>
|
---|
197 | Fixed a bug in all <NOBR>64-bit</NOBR>-version square root functions except
|
---|
198 | <CODE>float32_sqrt</CODE> that caused the result sometimes to be off by
|
---|
199 | <NOBR>1 unit</NOBR> in the last place (<NOBR>1 ulp</NOBR>) from what it should
|
---|
200 | be.
|
---|
201 | (Bug discovered by Paul Donahue.)
|
---|
202 |
|
---|
203 | <LI>
|
---|
204 | Improved the Makefiles.
|
---|
205 | </UL>
|
---|
206 |
|
---|
207 |
|
---|
208 | <H3>Release 2 (1997 June)</H3>
|
---|
209 |
|
---|
210 | <UL>
|
---|
211 |
|
---|
212 | <LI>
|
---|
213 | Created the <NOBR>64-bit</NOBR> (<CODE>bits64</CODE>) version, adding the
|
---|
214 | <CODE>floatx80</CODE> and <CODE>float128</CODE> formats.
|
---|
215 |
|
---|
216 | <LI>
|
---|
217 | Changed the source directory structure, splitting the sources into a
|
---|
218 | <CODE>bits32</CODE> and a <CODE>bits64</CODE> version.
|
---|
219 | Renamed <CODE>environment.h</CODE> to <CODE>milieu.h</CODE> to avoid confusion
|
---|
220 | with environment variables.
|
---|
221 |
|
---|
222 | <LI>
|
---|
223 | Fixed a small error that caused <CODE>float64_round_to_int</CODE> often to
|
---|
224 | round the wrong way in nearest/even mode when the operand was between
|
---|
225 | 2<SUP>20</SUP> and 2<SUP>21</SUP> and halfway between two integers.
|
---|
226 |
|
---|
227 | </UL>
|
---|
228 |
|
---|
229 |
|
---|
230 | <H3>Release 1a (1996 July)</H3>
|
---|
231 |
|
---|
232 | <UL>
|
---|
233 |
|
---|
234 | <LI>
|
---|
235 | Corrected a mistake that caused borderline underflow cases not to raise the
|
---|
236 | underflow flag when they should have.
|
---|
237 | (Problem reported by Doug Priest.)
|
---|
238 |
|
---|
239 | <LI>
|
---|
240 | Added the <CODE>float_detect_tininess</CODE> variable to control whether
|
---|
241 | tininess is detected before or after rounding.
|
---|
242 |
|
---|
243 | </UL>
|
---|
244 |
|
---|
245 |
|
---|
246 | <H3>Release 1 (1996 July)</H3>
|
---|
247 |
|
---|
248 | <UL>
|
---|
249 |
|
---|
250 | <LI>
|
---|
251 | Original release, based on work done for the International Computer Science
|
---|
252 | Institute (ICSI) in Berkeley, California.
|
---|
253 |
|
---|
254 | </UL>
|
---|
255 |
|
---|
256 |
|
---|
257 | </BODY>
|
---|
258 |
|
---|