* [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a
@ 2015-01-12 14:38 Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 1/4] softfloat: Apply patch corresponding to rebasing to softfloat-2a Peter Maydell
` (4 more replies)
0 siblings, 5 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-12 14:38 UTC (permalink / raw)
To: qemu-devel
Cc: patches, Maciej W. Rozycki, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
Hi; as you may be aware, we discovered some time back that
the license of SoftFloat-2b is claimed to be GPLv2 incompatible by
the FSF due to an indemnification clause. The previous release,
SoftFloat-2a, did not contain this clause. We're therefore switching
to the -2a release and relicensing (or reverting and reimplementing)
all subsequent commits by QEMU contributors.
Last time around we were able to collect acks for the relicensing
from almost all contributors, so thanks to all of you. This patchset
aims to complete the process by applying the relicensing patch and
providing reimplemented code for the handful of commits that had to
be reverted.
The patch switching from upstream's SoftFloat-2b to -2a is
constructed in the same way Anthony Liguori used in 2013:
* diff commit 158142c2 against SoftFloat-2b to separate out the
changes made by Fabrice as part of the import
* copy over the SoftFloat-2a versions of the files instead
* apply some mechanical transformations (line endings, block comment style)
* re-apply Fabrice's patches
* diff this endpoint against 158142c2 to give a 2b-to-2a relicensing patch
* apply that to current master
Following this change are a set of patches which revert and reimplement
the only four commits in the tree which are still relevant and for which
we could not get acks for relicensing.
Finally there's a patch which adds comments to the top of each
affected file clarifying the new licensing status (where the files
contain portions under variously SoftFloat-2a, BSD and GPLv2+
licenses) and specifying the default license for new contributions (so
we don't have to keep asking patch submitters to specify it). I've
applied the Acked-by tags from the 2013 round to this patch as it
seemed the most appropriate place. (Those acks should thus be taken to
indicate approval for the relicensing rather than necessarily
specifically for the wording choice.)
I have updated the tarball at:
http://people.linaro.org/~peter.maydell/softfloat-relicensing-proposed.tar.gz
which describes in detail how the patchset was produced, including
copies of upstream's pristine 2a and 2b tarballs, the commands for
regenerating the "relicense" patch, and copies of the ack-emails.
It also has the 'revert' and 'reimplement' patches as separate non-squashed
patches.
Changes v1->v2:
* fixed the bad values of NaN constants in the reimplemented code
* squashed the 'revert' and 'reimplement' patches together to avoid
bisection breaks
* use SF2a for new contributions, not GPLv2+ (as discussed in review)
Peter Maydell (4):
softfloat: Apply patch corresponding to rebasing to softfloat-2a
softfloat: Revert and reimplement remaining portions of 75d62a5856 and
3430b0be36f
softfloat: Revert and reimplement remaining parts of b645bb4885 and
5a6932d51d
softfloat: Clarify license status
fpu/softfloat-macros.h | 86 ++++++++++++++++-----
fpu/softfloat-specialize.h | 135 +++++++++++++++++++++-----------
fpu/softfloat.c | 186 +++++++++++++++++++++++++++++++--------------
include/fpu/softfloat.h | 84 +++++++++++++++-----
4 files changed, 349 insertions(+), 142 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v2 1/4] softfloat: Apply patch corresponding to rebasing to softfloat-2a
2015-01-12 14:38 [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
@ 2015-01-12 14:38 ` Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 2/4] softfloat: Revert and reimplement remaining portions of 75d62a5856 and 3430b0be36f Peter Maydell
` (3 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-12 14:38 UTC (permalink / raw)
To: qemu-devel
Cc: patches, Maciej W. Rozycki, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
This commit applies the changes to master which correspond to
replacing commit 158142c2c2df with a set of changes made by:
* taking the SoftFloat-2a release
* mechanically transforming the block comment style
* reapplying Fabrice's original changes from 158142c2c2df
This commit was created by:
diff -u 158142c2c2df import-sf-2a
patch -p1 --fuzz 10 <../relicense-patch.txt
(where import-sf-2a is the branch resulting from the changes above).
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
fpu/softfloat-macros.h | 38 ++++++++++++++++++--------------------
fpu/softfloat-specialize.h | 30 ++++++++++++++----------------
fpu/softfloat.c | 38 ++++++++++++++++++--------------------
include/fpu/softfloat.h | 32 +++++++++++++++-----------------
4 files changed, 65 insertions(+), 73 deletions(-)
diff --git a/fpu/softfloat-macros.h b/fpu/softfloat-macros.h
index 0dcda93..ca1d81e 100644
--- a/fpu/softfloat-macros.h
+++ b/fpu/softfloat-macros.h
@@ -4,10 +4,10 @@
* Derived from SoftFloat.
*/
-/*============================================================================
-
+/*
+===============================================================================
This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2b.
+Arithmetic Package, Release 2a.
Written by John R. Hauser. This work was made possible in part by the
International Computer Science Institute, located at Suite 600, 1947 Center
@@ -16,24 +16,22 @@ National Science Foundation under grant MIP-9311980. The original version
of this code was written as part of a project to build a fixed-point vector
processor in collaboration with the University of California at Berkeley,
overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
+is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
arithmetic/SoftFloat.html'.
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal notice) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
+THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
+has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
+TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
+PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
+AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
+(1) they include prominent notice that the work is derivative, and (2) they
+include prominent notice akin to these four paragraphs for those parts of
+this code that are retained.
-=============================================================================*/
+===============================================================================
+*/
/*----------------------------------------------------------------------------
| This macro tests for minimum version of the GNU C compiler.
@@ -107,10 +105,10 @@ static inline void shift64RightJamming(uint64_t a, int_fast16_t count, uint64_t
| 63 bits of the extra result are all zero if and only if _all_but_the_last_
| bits shifted off were all zero. This extra result is stored in the location
| pointed to by `z1Ptr'. The value of `count' can be arbitrarily large.
-| (This routine makes more sense if `a0' and `a1' are considered to form
-| a fixed-point value with binary point between `a0' and `a1'. This fixed-
-| point value is shifted right by the number of bits given in `count', and
-| the integer part of the result is returned at the location pointed to by
+| (This routine makes more sense if `a0' and `a1' are considered to form a
+| fixed-point value with binary point between `a0' and `a1'. This fixed-point
+| value is shifted right by the number of bits given in `count', and the
+| integer part of the result is returned at the location pointed to by
| `z0Ptr'. The fractional part of the result may be slightly corrupted as
| described above, and is returned at the location pointed to by `z1Ptr'.)
*----------------------------------------------------------------------------*/
diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h
index 518f694..39335b4 100644
--- a/fpu/softfloat-specialize.h
+++ b/fpu/softfloat-specialize.h
@@ -4,10 +4,10 @@
* Derived from SoftFloat.
*/
-/*============================================================================
-
+/*
+===============================================================================
This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2b.
+Arithmetic Package, Release 2a.
Written by John R. Hauser. This work was made possible in part by the
International Computer Science Institute, located at Suite 600, 1947 Center
@@ -16,24 +16,22 @@ National Science Foundation under grant MIP-9311980. The original version
of this code was written as part of a project to build a fixed-point vector
processor in collaboration with the University of California at Berkeley,
overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
+is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
arithmetic/SoftFloat.html'.
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
+THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
+has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
+TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
+PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
+AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
+(1) they include prominent notice that the work is derivative, and (2) they
+include prominent notice akin to these four paragraphs for those parts of
+this code that are retained.
-=============================================================================*/
+===============================================================================
+*/
#if defined(TARGET_MIPS) || defined(TARGET_SH4) || defined(TARGET_UNICORE32)
#define SNAN_BIT_IS_ONE 1
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 16b21eb..6041dbd 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -4,10 +4,10 @@
* Derived from SoftFloat.
*/
-/*============================================================================
-
-This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic
-Package, Release 2b.
+/*
+===============================================================================
+This C source file is part of the SoftFloat IEC/IEEE Floating-point
+Arithmetic Package, Release 2a.
Written by John R. Hauser. This work was made possible in part by the
International Computer Science Institute, located at Suite 600, 1947 Center
@@ -16,24 +16,22 @@ National Science Foundation under grant MIP-9311980. The original version
of this code was written as part of a project to build a fixed-point vector
processor in collaboration with the University of California at Berkeley,
overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
+is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
arithmetic/SoftFloat.html'.
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
+THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
+has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
+TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
+PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
+AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
+(1) they include prominent notice that the work is derivative, and (2) they
+include prominent notice akin to these four paragraphs for those parts of
+this code that are retained.
-=============================================================================*/
+===============================================================================
+*/
/* softfloat (and in particular the code in softfloat-specialize.h) is
* target-dependent and needs the TARGET_* macros.
@@ -529,9 +527,9 @@ static inline float64 packFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig)
| the inexact exception raised if the abstract input cannot be represented
| exactly. However, if the abstract value is too large, the overflow and
| inexact exceptions are raised and an infinity or maximal finite value is
-| returned. If the abstract value is too small, the input value is rounded
-| to a subnormal number, and the underflow and inexact exceptions are raised
-| if the abstract input cannot be represented exactly as a subnormal double-
+| returned. If the abstract value is too small, the input value is rounded to
+| a subnormal number, and the underflow and inexact exceptions are raised if
+| the abstract input cannot be represented exactly as a subnormal double-
| precision floating-point number.
| The input significand `zSig' has its binary point between bits 62
| and 61, which is 10 bits to the left of the usual location. This shifted
diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
index e32e25d..4da5778 100644
--- a/include/fpu/softfloat.h
+++ b/include/fpu/softfloat.h
@@ -4,10 +4,10 @@
* Derived from SoftFloat.
*/
-/*============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic
-Package, Release 2b.
+/*
+===============================================================================
+This C header file is part of the SoftFloat IEC/IEEE Floating-point
+Arithmetic Package, Release 2a.
Written by John R. Hauser. This work was made possible in part by the
International Computer Science Institute, located at Suite 600, 1947 Center
@@ -16,24 +16,22 @@ National Science Foundation under grant MIP-9311980. The original version
of this code was written as part of a project to build a fixed-point vector
processor in collaboration with the University of California at Berkeley,
overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://www.cs.berkeley.edu/~jhauser/
+is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
arithmetic/SoftFloat.html'.
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has
-been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES
-RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS
-AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,
-COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE
-EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE
-INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR
-OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.
+THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
+has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
+TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
+PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
+AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
Derivative works are acceptable, even for commercial purposes, so long as
-(1) the source code for the derivative work includes prominent notice that
-the work is derivative, and (2) the source code includes prominent notice with
-these four paragraphs for those parts of this code that are retained.
+(1) they include prominent notice that the work is derivative, and (2) they
+include prominent notice akin to these four paragraphs for those parts of
+this code that are retained.
-=============================================================================*/
+===============================================================================
+*/
#ifndef SOFTFLOAT_H
#define SOFTFLOAT_H
--
1.9.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v2 2/4] softfloat: Revert and reimplement remaining portions of 75d62a5856 and 3430b0be36f
2015-01-12 14:38 [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 1/4] softfloat: Apply patch corresponding to rebasing to softfloat-2a Peter Maydell
@ 2015-01-12 14:38 ` Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 3/4] softfloat: Revert and reimplement remaining parts of b645bb4885 and 5a6932d51d Peter Maydell
` (2 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-12 14:38 UTC (permalink / raw)
To: qemu-devel
Cc: patches, Maciej W. Rozycki, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
Revert the remaining portions of commits 75d62a5856 and 3430b0be36f
which are under a SoftFloat-2b license, ie the functions
uint64_to_float32() and uint64_to_float64(). (The float64_to_uint64()
and float64_to_uint64_round_to_zero() functions were completely
rewritten in commits fb3ea83aa and 0a87a3107d so can stay.)
Reimplement from scratch the uint64_to_float64() and uint64_to_float32()
conversion functions.
[This is a mechanical squashing together of two separate "revert"
and "reimplement" patches.]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
fpu/softfloat.c | 100 +++++++++++++++++++++++++++++++-----------------
include/fpu/softfloat.h | 4 +-
2 files changed, 67 insertions(+), 37 deletions(-)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 6041dbd..ad316e7 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1302,27 +1302,6 @@ float32 int64_to_float32(int64_t a STATUS_PARAM)
}
-float32 uint64_to_float32(uint64_t a STATUS_PARAM)
-{
- int8 shiftCount;
-
- if ( a == 0 ) return float32_zero;
- shiftCount = countLeadingZeros64( a ) - 40;
- if ( 0 <= shiftCount ) {
- return packFloat32(0, 0x95 - shiftCount, a<<shiftCount);
- }
- else {
- shiftCount += 7;
- if ( shiftCount < 0 ) {
- shift64RightJamming( a, - shiftCount, &a );
- }
- else {
- a <<= shiftCount;
- }
- return roundAndPackFloat32(0, 0x9C - shiftCount, a STATUS_VAR);
- }
-}
-
/*----------------------------------------------------------------------------
| Returns the result of converting the 64-bit two's complement integer `a'
| to the double-precision floating-point format. The conversion is performed
@@ -1342,20 +1321,6 @@ float64 int64_to_float64(int64_t a STATUS_PARAM)
}
-float64 uint64_to_float64(uint64_t a STATUS_PARAM)
-{
- int exp = 0x43C;
-
- if (a == 0) {
- return float64_zero;
- }
- if ((int64_t)a < 0) {
- shift64RightJamming(a, 1, &a);
- exp += 1;
- }
- return normalizeRoundAndPackFloat64(0, exp, a STATUS_VAR);
-}
-
/*----------------------------------------------------------------------------
| Returns the result of converting the 64-bit two's complement integer `a'
| to the extended double-precision floating-point format. The conversion
@@ -1410,6 +1375,71 @@ float128 int64_to_float128(int64_t a STATUS_PARAM)
}
+/*----------------------------------------------------------------------------
+| Returns the result of converting the 64-bit unsigned integer `a'
+| to the single-precision floating-point format. The conversion is performed
+| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
+*----------------------------------------------------------------------------*/
+
+float32 uint64_to_float32(uint64_t a STATUS_PARAM)
+{
+ int shiftcount;
+
+ if (a == 0) {
+ return float32_zero;
+ }
+
+ /* Determine (left) shift needed to put first set bit into bit posn 23
+ * (since packFloat32() expects the binary point between bits 23 and 22);
+ * this is the fast case for smallish numbers.
+ */
+ shiftcount = countLeadingZeros64(a) - 40;
+ if (shiftcount >= 0) {
+ return packFloat32(0, 0x95 - shiftcount, a << shiftcount);
+ }
+ /* Otherwise we need to do a round-and-pack. roundAndPackFloat32()
+ * expects the binary point between bits 30 and 29, hence the + 7.
+ */
+ shiftcount += 7;
+ if (shiftcount < 0) {
+ shift64RightJamming(a, -shiftcount, &a);
+ } else {
+ a <<= shiftcount;
+ }
+
+ return roundAndPackFloat32(0, 0x9c - shiftcount, a STATUS_VAR);
+}
+
+/*----------------------------------------------------------------------------
+| Returns the result of converting the 64-bit unsigned integer `a'
+| to the double-precision floating-point format. The conversion is performed
+| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
+*----------------------------------------------------------------------------*/
+
+float64 uint64_to_float64(uint64_t a STATUS_PARAM)
+{
+ int exp = 0x43C;
+ int shiftcount;
+
+ if (a == 0) {
+ return float64_zero;
+ }
+
+ shiftcount = countLeadingZeros64(a) - 1;
+ if (shiftcount < 0) {
+ shift64RightJamming(a, -shiftcount, &a);
+ } else {
+ a <<= shiftcount;
+ }
+ return roundAndPackFloat64(0, exp - shiftcount, a STATUS_VAR);
+}
+
+/*----------------------------------------------------------------------------
+| Returns the result of converting the 64-bit unsigned integer `a'
+| to the quadruple-precision floating-point format. The conversion is performed
+| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
+*----------------------------------------------------------------------------*/
+
float128 uint64_to_float128(uint64_t a STATUS_PARAM)
{
if (a == 0) {
diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
index 4da5778..b3c710a 100644
--- a/include/fpu/softfloat.h
+++ b/include/fpu/softfloat.h
@@ -273,11 +273,11 @@ float64 uint32_to_float64(uint32_t STATUS_PARAM);
floatx80 int32_to_floatx80(int32_t STATUS_PARAM);
float128 int32_to_float128(int32_t STATUS_PARAM);
float32 int64_to_float32(int64_t STATUS_PARAM);
-float32 uint64_to_float32(uint64_t STATUS_PARAM);
float64 int64_to_float64(int64_t STATUS_PARAM);
-float64 uint64_to_float64(uint64_t STATUS_PARAM);
floatx80 int64_to_floatx80(int64_t STATUS_PARAM);
float128 int64_to_float128(int64_t STATUS_PARAM);
+float32 uint64_to_float32(uint64_t STATUS_PARAM);
+float64 uint64_to_float64(uint64_t STATUS_PARAM);
float128 uint64_to_float128(uint64_t STATUS_PARAM);
/* We provide the int16 versions for symmetry of API with float-to-int */
--
1.9.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v2 3/4] softfloat: Revert and reimplement remaining parts of b645bb4885 and 5a6932d51d
2015-01-12 14:38 [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 1/4] softfloat: Apply patch corresponding to rebasing to softfloat-2a Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 2/4] softfloat: Revert and reimplement remaining portions of 75d62a5856 and 3430b0be36f Peter Maydell
@ 2015-01-12 14:38 ` Peter Maydell
2015-01-29 16:46 ` Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 4/4] softfloat: Clarify license status Peter Maydell
2015-01-26 10:44 ` [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
4 siblings, 1 reply; 10+ messages in thread
From: Peter Maydell @ 2015-01-12 14:38 UTC (permalink / raw)
To: qemu-devel
Cc: patches, Maciej W. Rozycki, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
Revert the parts of commits b645bb4885 and 5a6932d51d which are still
in the codebase and under a SoftFloat-2b license.
Reimplement support for architectures where the most significant bit
in the mantissa is 1 for a signaling NaN rather than a quiet NaN,
by adding handling for SNAN_BIT_IS_ONE being set to the functions
which test values for NaN-ness.
This includes restoring the bugfixes lost in the reversion where
some of the float*_is_quiet_nan() functions were returning true
for both signaling and quiet NaNs.
[This is a mechanical squashing together of two separate "revert"
and "reimplement" patches.]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
fpu/softfloat-specialize.h | 57 +++++++++++++++++++++++-----------------------
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h
index 39335b4..ef77e28 100644
--- a/fpu/softfloat-specialize.h
+++ b/fpu/softfloat-specialize.h
@@ -33,10 +33,14 @@ this code that are retained.
===============================================================================
*/
+/* Does the target distinguish signaling NaNs from non-signaling NaNs
+ * by setting the most significant bit of the mantissa for a signaling NaN?
+ * (The more common choice is to have it be zero for SNaN and one for QNaN.)
+ */
#if defined(TARGET_MIPS) || defined(TARGET_SH4) || defined(TARGET_UNICORE32)
-#define SNAN_BIT_IS_ONE 1
+#define SNAN_BIT_IS_ONE 1
#else
-#define SNAN_BIT_IS_ONE 0
+#define SNAN_BIT_IS_ONE 0
#endif
#if defined(TARGET_XTENSA)
@@ -79,7 +83,7 @@ const float64 float64_default_nan = const_float64(LIT64( 0x7FFFFFFFFFFFFFFF ));
#elif defined(TARGET_PPC) || defined(TARGET_ARM) || defined(TARGET_ALPHA)
const float64 float64_default_nan = const_float64(LIT64( 0x7FF8000000000000 ));
#elif SNAN_BIT_IS_ONE
-const float64 float64_default_nan = const_float64(LIT64( 0x7FF7FFFFFFFFFFFF ));
+const float64 float64_default_nan = const_float64(LIT64(0x7FF7FFFFFFFFFFFF));
#else
const float64 float64_default_nan = const_float64(LIT64( 0xFFF8000000000000 ));
#endif
@@ -89,7 +93,7 @@ const float64 float64_default_nan = const_float64(LIT64( 0xFFF8000000000000 ));
*----------------------------------------------------------------------------*/
#if SNAN_BIT_IS_ONE
#define floatx80_default_nan_high 0x7FFF
-#define floatx80_default_nan_low LIT64( 0xBFFFFFFFFFFFFFFF )
+#define floatx80_default_nan_low LIT64(0xBFFFFFFFFFFFFFFF)
#else
#define floatx80_default_nan_high 0xFFFF
#define floatx80_default_nan_low LIT64( 0xC000000000000000 )
@@ -103,8 +107,8 @@ const floatx80 floatx80_default_nan
| `low' values hold the most- and least-significant bits, respectively.
*----------------------------------------------------------------------------*/
#if SNAN_BIT_IS_ONE
-#define float128_default_nan_high LIT64( 0x7FFF7FFFFFFFFFFF )
-#define float128_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF )
+#define float128_default_nan_high LIT64(0x7FFF7FFFFFFFFFFF)
+#define float128_default_nan_low LIT64(0xFFFFFFFFFFFFFFFF)
#else
#define float128_default_nan_high LIT64( 0xFFFF800000000000 )
#define float128_default_nan_low LIT64( 0x0000000000000000 )
@@ -255,9 +259,9 @@ int float32_is_quiet_nan( float32 a_ )
{
uint32_t a = float32_val(a_);
#if SNAN_BIT_IS_ONE
- return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
+ return (((a >> 22) & 0x1ff) == 0x1fe) && (a & 0x003fffff);
#else
- return ( 0xFF800000 <= (uint32_t) ( a<<1 ) );
+ return ((uint32_t)(a << 1) >= 0xff800000);
#endif
}
@@ -270,7 +274,7 @@ int float32_is_signaling_nan( float32 a_ )
{
uint32_t a = float32_val(a_);
#if SNAN_BIT_IS_ONE
- return ( 0xFF800000 <= (uint32_t) ( a<<1 ) );
+ return ((uint32_t)(a << 1) >= 0xff800000);
#else
return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
#endif
@@ -663,11 +667,10 @@ int float64_is_quiet_nan( float64 a_ )
{
uint64_t a = float64_val(a_);
#if SNAN_BIT_IS_ONE
- return
- ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
- && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );
+ return (((a >> 51) & 0xfff) == 0xffe)
+ && (a & 0x0007ffffffffffffULL);
#else
- return ( LIT64( 0xFFF0000000000000 ) <= (uint64_t) ( a<<1 ) );
+ return ((a << 1) >= 0xfff0000000000000ULL);
#endif
}
@@ -680,7 +683,7 @@ int float64_is_signaling_nan( float64 a_ )
{
uint64_t a = float64_val(a_);
#if SNAN_BIT_IS_ONE
- return ( LIT64( 0xFFF0000000000000 ) <= (uint64_t) ( a<<1 ) );
+ return ((a << 1) >= 0xfff0000000000000ULL);
#else
return
( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
@@ -864,11 +867,10 @@ int floatx80_is_quiet_nan( floatx80 a )
#if SNAN_BIT_IS_ONE
uint64_t aLow;
- aLow = a.low & ~ LIT64( 0x4000000000000000 );
- return
- ( ( a.high & 0x7FFF ) == 0x7FFF )
- && (uint64_t) ( aLow<<1 )
- && ( a.low == aLow );
+ aLow = a.low & ~0x4000000000000000ULL;
+ return ((a.high & 0x7fff) == 0x7fff)
+ && (aLow << 1)
+ && (a.low == aLow);
#else
return ( ( a.high & 0x7FFF ) == 0x7FFF )
&& (LIT64( 0x8000000000000000 ) <= ((uint64_t) ( a.low<<1 )));
@@ -884,8 +886,8 @@ int floatx80_is_quiet_nan( floatx80 a )
int floatx80_is_signaling_nan( floatx80 a )
{
#if SNAN_BIT_IS_ONE
- return ( ( a.high & 0x7FFF ) == 0x7FFF )
- && (LIT64( 0x8000000000000000 ) <= ((uint64_t) ( a.low<<1 )));
+ return ((a.high & 0x7fff) == 0x7fff)
+ && ((a.low << 1) >= 0x8000000000000000ULL);
#else
uint64_t aLow;
@@ -1029,13 +1031,12 @@ int float128_is_signaling_nan(float128 a_)
int float128_is_quiet_nan( float128 a )
{
#if SNAN_BIT_IS_ONE
- return
- ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
- && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );
+ return (((a.high >> 47) & 0xffff) == 0xfffe)
+ && (a.low || (a.high & 0x00007fffffffffffULL));
#else
return
- ( LIT64( 0xFFFE000000000000 ) <= (uint64_t) ( a.high<<1 ) )
- && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
+ ((a.high << 1) >= 0xffff000000000000)
+ && (a.low || (a.high & 0x0000ffffffffffffULL));
#endif
}
@@ -1048,8 +1049,8 @@ int float128_is_signaling_nan( float128 a )
{
#if SNAN_BIT_IS_ONE
return
- ( LIT64( 0xFFFE000000000000 ) <= (uint64_t) ( a.high<<1 ) )
- && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
+ ((a.high << 1) >= 0xffff000000000000)
+ && (a.low || (a.high & 0x0000ffffffffffffULL));
#else
return
( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
--
1.9.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v2 4/4] softfloat: Clarify license status
2015-01-12 14:38 [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
` (2 preceding siblings ...)
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 3/4] softfloat: Revert and reimplement remaining parts of b645bb4885 and 5a6932d51d Peter Maydell
@ 2015-01-12 14:38 ` Peter Maydell
2015-01-26 10:44 ` [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
4 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-12 14:38 UTC (permalink / raw)
To: qemu-devel
Cc: patches, Maciej W. Rozycki, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
The code in the softfloat source files is under a mixture of
licenses: the original code and many changes from QEMU contributors
are under the base SoftFloat-2a license; changes from Stefan Weil
and RedHat employees are GPLv2-or-later; changes from Fabrice Bellard
are under the BSD license. Clarify this in the comments at the
top of each affected source file, including a statement about
the assumed licensing for future contributions, so we don't need
to remember to ask patch submitters explicitly to pick a license.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Acked-by: Andreas Färber <afaerber@suse.de>
Acked-by: Aurelien Jarno <aurelien@aurel32.net>
Acked-by: Avi Kivity <avi.kivity@gmail.com>
Acked-by: Ben Taylor <bentaylor.solx86@gmail.com>
Acked-by: Blue Swirl <blauwirbel@gmail.com>
Acked-by: Christophe Lyon <christophe.lyon@st.com>
Acked-by: Fabrice Bellard <fabrice@bellard.org>
Acked-by: Guan Xuetao <gxt@mprc.pku.edu.cn>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Max Filippov <jcmvbkbc@gmail.com>
Acked-by: Paul Brook <paul@codesourcery.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Peter Maydell <peter.maydell@linaro.org>
Acked-by: Richard Henderson <rth@twiddle.net>
Acked-by: Richard Sandiford <rdsandiford@googlemail.com>
Acked-by: Stefan Weil <sw@weilnetz.de>
---
fpu/softfloat-macros.h | 48 +++++++++++++++++++++++++++++++++++++++++++++-
fpu/softfloat-specialize.h | 48 +++++++++++++++++++++++++++++++++++++++++++++-
fpu/softfloat.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
include/fpu/softfloat.h | 48 +++++++++++++++++++++++++++++++++++++++++++++-
4 files changed, 188 insertions(+), 4 deletions(-)
diff --git a/fpu/softfloat-macros.h b/fpu/softfloat-macros.h
index ca1d81e..5e030cd 100644
--- a/fpu/softfloat-macros.h
+++ b/fpu/softfloat-macros.h
@@ -1,7 +1,18 @@
/*
* QEMU float support macros
*
- * Derived from SoftFloat.
+ * The code in this source file is derived from release 2a of the SoftFloat
+ * IEC/IEEE Floating-point Arithmetic Package. Those parts of the code (and
+ * some later contributions) are provided under that license, as detailed below.
+ * It has subsequently been modified by contributors to the QEMU Project,
+ * so some portions are provided under:
+ * the SoftFloat-2a license
+ * the BSD license
+ * GPL-v2-or-later
+ *
+ * Any future contributions to this file after December 1st 2014 will be
+ * taken to be licensed under the Softfloat-2a license unless specifically
+ * indicated otherwise.
*/
/*
@@ -33,6 +44,41 @@ this code that are retained.
===============================================================================
*/
+/* BSD licensing:
+ * Copyright (c) 2006, Fabrice Bellard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Portions of this work are licensed under the terms of the GNU GPL,
+ * version 2 or later. See the COPYING file in the top-level directory.
+ */
+
/*----------------------------------------------------------------------------
| This macro tests for minimum version of the GNU C compiler.
*----------------------------------------------------------------------------*/
diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h
index ef77e28..4b6a33b 100644
--- a/fpu/softfloat-specialize.h
+++ b/fpu/softfloat-specialize.h
@@ -1,7 +1,18 @@
/*
* QEMU float support
*
- * Derived from SoftFloat.
+ * The code in this source file is derived from release 2a of the SoftFloat
+ * IEC/IEEE Floating-point Arithmetic Package. Those parts of the code (and
+ * some later contributions) are provided under that license, as detailed below.
+ * It has subsequently been modified by contributors to the QEMU Project,
+ * so some portions are provided under:
+ * the SoftFloat-2a license
+ * the BSD license
+ * GPL-v2-or-later
+ *
+ * Any future contributions to this file after December 1st 2014 will be
+ * taken to be licensed under the Softfloat-2a license unless specifically
+ * indicated otherwise.
*/
/*
@@ -33,6 +44,41 @@ this code that are retained.
===============================================================================
*/
+/* BSD licensing:
+ * Copyright (c) 2006, Fabrice Bellard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Portions of this work are licensed under the terms of the GNU GPL,
+ * version 2 or later. See the COPYING file in the top-level directory.
+ */
+
/* Does the target distinguish signaling NaNs from non-signaling NaNs
* by setting the most significant bit of the mantissa for a signaling NaN?
* (The more common choice is to have it be zero for SNaN and one for QNaN.)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index ad316e7..a1f1cb3 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1,7 +1,18 @@
/*
* QEMU float support
*
- * Derived from SoftFloat.
+ * The code in this source file is derived from release 2a of the SoftFloat
+ * IEC/IEEE Floating-point Arithmetic Package. Those parts of the code (and
+ * some later contributions) are provided under that license, as detailed below.
+ * It has subsequently been modified by contributors to the QEMU Project,
+ * so some portions are provided under:
+ * the SoftFloat-2a license
+ * the BSD license
+ * GPL-v2-or-later
+ *
+ * Any future contributions to this file after December 1st 2014 will be
+ * taken to be licensed under the Softfloat-2a license unless specifically
+ * indicated otherwise.
*/
/*
@@ -33,6 +44,41 @@ this code that are retained.
===============================================================================
*/
+/* BSD licensing:
+ * Copyright (c) 2006, Fabrice Bellard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Portions of this work are licensed under the terms of the GNU GPL,
+ * version 2 or later. See the COPYING file in the top-level directory.
+ */
+
/* softfloat (and in particular the code in softfloat-specialize.h) is
* target-dependent and needs the TARGET_* macros.
*/
diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
index b3c710a..35019c9 100644
--- a/include/fpu/softfloat.h
+++ b/include/fpu/softfloat.h
@@ -1,7 +1,18 @@
/*
* QEMU float support
*
- * Derived from SoftFloat.
+ * The code in this source file is derived from release 2a of the SoftFloat
+ * IEC/IEEE Floating-point Arithmetic Package. Those parts of the code (and
+ * some later contributions) are provided under that license, as detailed below.
+ * It has subsequently been modified by contributors to the QEMU Project,
+ * so some portions are provided under:
+ * the SoftFloat-2a license
+ * the BSD license
+ * GPL-v2-or-later
+ *
+ * Any future contributions to this file after December 1st 2014 will be
+ * taken to be licensed under the Softfloat-2a license unless specifically
+ * indicated otherwise.
*/
/*
@@ -33,6 +44,41 @@ this code that are retained.
===============================================================================
*/
+/* BSD licensing:
+ * Copyright (c) 2006, Fabrice Bellard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Portions of this work are licensed under the terms of the GNU GPL,
+ * version 2 or later. See the COPYING file in the top-level directory.
+ */
+
#ifndef SOFTFLOAT_H
#define SOFTFLOAT_H
--
1.9.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a
2015-01-12 14:38 [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
` (3 preceding siblings ...)
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 4/4] softfloat: Clarify license status Peter Maydell
@ 2015-01-26 10:44 ` Peter Maydell
2015-01-26 11:21 ` Paolo Bonzini
4 siblings, 1 reply; 10+ messages in thread
From: Peter Maydell @ 2015-01-26 10:44 UTC (permalink / raw)
To: QEMU Developers
Cc: Maciej W. Rozycki, Patch Tracking, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
Ping for review of this v2 (for code, if you like, but primarily
for methodology and sanity of the relicensing; we can always fix
code bugs later).
We really need to get this sorted out for the next release.
I am very strongly tempted to say that I'm just going to stop
processing pull requests until we can get this series reviewed
and into master...
-- PMM
On 12 January 2015 at 14:38, Peter Maydell <peter.maydell@linaro.org> wrote:
> Hi; as you may be aware, we discovered some time back that
> the license of SoftFloat-2b is claimed to be GPLv2 incompatible by
> the FSF due to an indemnification clause. The previous release,
> SoftFloat-2a, did not contain this clause. We're therefore switching
> to the -2a release and relicensing (or reverting and reimplementing)
> all subsequent commits by QEMU contributors.
>
> Last time around we were able to collect acks for the relicensing
> from almost all contributors, so thanks to all of you. This patchset
> aims to complete the process by applying the relicensing patch and
> providing reimplemented code for the handful of commits that had to
> be reverted.
>
> The patch switching from upstream's SoftFloat-2b to -2a is
> constructed in the same way Anthony Liguori used in 2013:
> * diff commit 158142c2 against SoftFloat-2b to separate out the
> changes made by Fabrice as part of the import
> * copy over the SoftFloat-2a versions of the files instead
> * apply some mechanical transformations (line endings, block comment style)
> * re-apply Fabrice's patches
> * diff this endpoint against 158142c2 to give a 2b-to-2a relicensing patch
> * apply that to current master
>
> Following this change are a set of patches which revert and reimplement
> the only four commits in the tree which are still relevant and for which
> we could not get acks for relicensing.
>
> Finally there's a patch which adds comments to the top of each
> affected file clarifying the new licensing status (where the files
> contain portions under variously SoftFloat-2a, BSD and GPLv2+
> licenses) and specifying the default license for new contributions (so
> we don't have to keep asking patch submitters to specify it). I've
> applied the Acked-by tags from the 2013 round to this patch as it
> seemed the most appropriate place. (Those acks should thus be taken to
> indicate approval for the relicensing rather than necessarily
> specifically for the wording choice.)
>
> I have updated the tarball at:
> http://people.linaro.org/~peter.maydell/softfloat-relicensing-proposed.tar.gz
> which describes in detail how the patchset was produced, including
> copies of upstream's pristine 2a and 2b tarballs, the commands for
> regenerating the "relicense" patch, and copies of the ack-emails.
> It also has the 'revert' and 'reimplement' patches as separate non-squashed
> patches.
>
> Changes v1->v2:
> * fixed the bad values of NaN constants in the reimplemented code
> * squashed the 'revert' and 'reimplement' patches together to avoid
> bisection breaks
> * use SF2a for new contributions, not GPLv2+ (as discussed in review)
>
> Peter Maydell (4):
> softfloat: Apply patch corresponding to rebasing to softfloat-2a
> softfloat: Revert and reimplement remaining portions of 75d62a5856 and
> 3430b0be36f
> softfloat: Revert and reimplement remaining parts of b645bb4885 and
> 5a6932d51d
> softfloat: Clarify license status
>
> fpu/softfloat-macros.h | 86 ++++++++++++++++-----
> fpu/softfloat-specialize.h | 135 +++++++++++++++++++++-----------
> fpu/softfloat.c | 186 +++++++++++++++++++++++++++++++--------------
> include/fpu/softfloat.h | 84 +++++++++++++++-----
> 4 files changed, 349 insertions(+), 142 deletions(-)
>
> --
> 1.9.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a
2015-01-26 10:44 ` [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
@ 2015-01-26 11:21 ` Paolo Bonzini
2015-01-26 11:23 ` Peter Maydell
2015-01-29 18:22 ` Peter Maydell
0 siblings, 2 replies; 10+ messages in thread
From: Paolo Bonzini @ 2015-01-26 11:21 UTC (permalink / raw)
To: Peter Maydell, QEMU Developers
Cc: Maciej W. Rozycki, Patch Tracking, Anthony Liguori,
Andreas Färber, Aurelien Jarno, Richard Henderson
On 26/01/2015 11:44, Peter Maydell wrote:
> Ping for review of this v2 (for code, if you like, but primarily
> for methodology and sanity of the relicensing; we can always fix
> code bugs later).
For the method and sanity:
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
I'm still fairly sure that RH changes can be considered
SoftFloat-2a-licensed, but that's a minor detail in a commit message.
Paolo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a
2015-01-26 11:21 ` Paolo Bonzini
@ 2015-01-26 11:23 ` Peter Maydell
2015-01-29 18:22 ` Peter Maydell
1 sibling, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-26 11:23 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Maciej W. Rozycki, Patch Tracking, QEMU Developers,
Anthony Liguori, Andreas Färber, Aurelien Jarno,
Richard Henderson
On 26 January 2015 at 11:21, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
>
> On 26/01/2015 11:44, Peter Maydell wrote:
>> Ping for review of this v2 (for code, if you like, but primarily
>> for methodology and sanity of the relicensing; we can always fix
>> code bugs later).
>
> For the method and sanity:
>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
>
> I'm still fairly sure that RH changes can be considered
> SoftFloat-2a-licensed, but that's a minor detail in a commit message.
Mmm. I archived your clarifying emails about the acked-by in
the tarball, so if it ever becomes an issue in practice
(let's hope not...) we'll have the records.
-- PMM
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v2 3/4] softfloat: Revert and reimplement remaining parts of b645bb4885 and 5a6932d51d
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 3/4] softfloat: Revert and reimplement remaining parts of b645bb4885 and 5a6932d51d Peter Maydell
@ 2015-01-29 16:46 ` Peter Maydell
0 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-29 16:46 UTC (permalink / raw)
To: QEMU Developers
Cc: Patch Tracking, Anthony Liguori, Paolo Bonzini,
Andreas Färber, Aurelien Jarno, Richard Henderson
On 12 January 2015 at 14:38, Peter Maydell <peter.maydell@linaro.org> wrote:
> Revert the parts of commits b645bb4885 and 5a6932d51d which are still
> in the codebase and under a SoftFloat-2b license.
>
> Reimplement support for architectures where the most significant bit
> in the mantissa is 1 for a signaling NaN rather than a quiet NaN,
> by adding handling for SNAN_BIT_IS_ONE being set to the functions
> which test values for NaN-ness.
>
> This includes restoring the bugfixes lost in the reversion where
> some of the float*_is_quiet_nan() functions were returning true
> for both signaling and quiet NaNs.
>
> [This is a mechanical squashing together of two separate "revert"
> and "reimplement" patches.]
> @@ -1029,13 +1031,12 @@ int float128_is_signaling_nan(float128 a_)
> int float128_is_quiet_nan( float128 a )
> {
> #if SNAN_BIT_IS_ONE
> - return
> - ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
> - && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );
> + return (((a.high >> 47) & 0xffff) == 0xfffe)
> + && (a.low || (a.high & 0x00007fffffffffffULL));
> #else
> return
> - ( LIT64( 0xFFFE000000000000 ) <= (uint64_t) ( a.high<<1 ) )
> - && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
> + ((a.high << 1) >= 0xffff000000000000)
> + && (a.low || (a.high & 0x0000ffffffffffffULL));
> #endif
> }
>
> @@ -1048,8 +1049,8 @@ int float128_is_signaling_nan( float128 a )
> {
> #if SNAN_BIT_IS_ONE
> return
> - ( LIT64( 0xFFFE000000000000 ) <= (uint64_t) ( a.high<<1 ) )
> - && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
> + ((a.high << 1) >= 0xffff000000000000)
> + && (a.low || (a.high & 0x0000ffffffffffffULL));
> #else
> return
> ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
These hunks turn out to be missing some "ULL" suffixes on the
"0xffff000000000000" constants, which makes the Windows build
complain. I'm going to fold the trivial fix in as I apply.
-- PMM
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a
2015-01-26 11:21 ` Paolo Bonzini
2015-01-26 11:23 ` Peter Maydell
@ 2015-01-29 18:22 ` Peter Maydell
1 sibling, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2015-01-29 18:22 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Maciej W. Rozycki, Patch Tracking, QEMU Developers,
Anthony Liguori, Andreas Färber, Aurelien Jarno,
Richard Henderson
On 26 January 2015 at 11:21, Paolo Bonzini <pbonzini@redhat.com> wrote:
> On 26/01/2015 11:44, Peter Maydell wrote:
>> Ping for review of this v2 (for code, if you like, but primarily
>> for methodology and sanity of the relicensing; we can always fix
>> code bugs later).
>
> For the method and sanity:
>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Thanks; applied to master. (I still need to find somewhere to
archive the tarball.)
-- PMM
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-01-29 18:22 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-12 14:38 [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 1/4] softfloat: Apply patch corresponding to rebasing to softfloat-2a Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 2/4] softfloat: Revert and reimplement remaining portions of 75d62a5856 and 3430b0be36f Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 3/4] softfloat: Revert and reimplement remaining parts of b645bb4885 and 5a6932d51d Peter Maydell
2015-01-29 16:46 ` Peter Maydell
2015-01-12 14:38 ` [Qemu-devel] [PATCH v2 4/4] softfloat: Clarify license status Peter Maydell
2015-01-26 10:44 ` [Qemu-devel] [PATCH v2 0/4] relicense QEMU softfloat from 2b to to 2a Peter Maydell
2015-01-26 11:21 ` Paolo Bonzini
2015-01-26 11:23 ` Peter Maydell
2015-01-29 18:22 ` Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).