* [Qemu-devel] [PATCH v2 0/2] soft-float fixes for target-s390x
@ 2012-12-07 21:52 Richard Henderson
2012-12-07 21:52 ` [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64 Richard Henderson
2012-12-07 21:52 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
0 siblings, 2 replies; 12+ messages in thread
From: Richard Henderson @ 2012-12-07 21:52 UTC (permalink / raw)
To: qemu-devel
... or for upcoming s390x changes.
The s390x isa has insns for both signed and unsigned conversions
to all three (binary) floating point types. One of these was
missing and the other producing incorrect results.
Tested with the s390x rewrite on the gcc testsuite.
Changes v1-v2:
Incorporating feedback from Peter Maydell (previously missed in
the 140+ message thread).
r~
Richard Henderson (2):
softfloat: Fix uint64_to_float64
softfloat: Implement uint64_to_float128
fpu/softfloat.c | 17 +++++++++++++++--
fpu/softfloat.h | 3 +++
2 files changed, 18 insertions(+), 2 deletions(-)
--
1.7.11.7
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64
2012-12-07 21:52 [Qemu-devel] [PATCH v2 0/2] soft-float fixes for target-s390x Richard Henderson
@ 2012-12-07 21:52 ` Richard Henderson
2012-12-08 10:42 ` Peter Maydell
2012-12-08 14:48 ` Andreas Färber
2012-12-07 21:52 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
1 sibling, 2 replies; 12+ messages in thread
From: Richard Henderson @ 2012-12-07 21:52 UTC (permalink / raw)
To: qemu-devel
The interface to normalizeRoundAndPackFloat64 requires that the
high bit be clear. Perform one shift-right-and-jam if needed.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
fpu/softfloat.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 8413146..62830d7 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1273,9 +1273,14 @@ float64 int64_to_float64( int64 a STATUS_PARAM )
float64 uint64_to_float64( uint64 a STATUS_PARAM )
{
- if ( a == 0 ) return float64_zero;
- return normalizeRoundAndPackFloat64( 0, 0x43C, a STATUS_VAR );
+ 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 );
}
/*----------------------------------------------------------------------------
--
1.7.11.7
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64
2012-12-07 21:52 ` [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64 Richard Henderson
@ 2012-12-08 10:42 ` Peter Maydell
2012-12-08 14:48 ` Andreas Färber
1 sibling, 0 replies; 12+ messages in thread
From: Peter Maydell @ 2012-12-08 10:42 UTC (permalink / raw)
To: Richard Henderson; +Cc: qemu-devel
On 7 December 2012 21:52, Richard Henderson <rth@twiddle.net> wrote:
> The interface to normalizeRoundAndPackFloat64 requires that the
> high bit be clear. Perform one shift-right-and-jam if needed.
>
> Signed-off-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64
2012-12-07 21:52 ` [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64 Richard Henderson
2012-12-08 10:42 ` Peter Maydell
@ 2012-12-08 14:48 ` Andreas Färber
2012-12-08 16:08 ` Peter Maydell
1 sibling, 1 reply; 12+ messages in thread
From: Andreas Färber @ 2012-12-08 14:48 UTC (permalink / raw)
To: Richard Henderson; +Cc: Peter Maydell, qemu-devel
Am 07.12.2012 22:52, schrieb Richard Henderson:
> The interface to normalizeRoundAndPackFloat64 requires that the
> high bit be clear. Perform one shift-right-and-jam if needed.
>
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> fpu/softfloat.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/fpu/softfloat.c b/fpu/softfloat.c
> index 8413146..62830d7 100644
> --- a/fpu/softfloat.c
> +++ b/fpu/softfloat.c
> @@ -1273,9 +1273,14 @@ float64 int64_to_float64( int64 a STATUS_PARAM )
>
> float64 uint64_to_float64( uint64 a STATUS_PARAM )
> {
> - if ( a == 0 ) return float64_zero;
> - return normalizeRoundAndPackFloat64( 0, 0x43C, a STATUS_VAR );
> + int exp = 0x43C;
Extra space before number.
>
> + if ( a == 0 ) return float64_zero;
> + if ( (int64_t)a < 0 ) {
> + shift64RightJamming(a, 1, &a);
> + exp += 1;
> + }
> + return normalizeRoundAndPackFloat64( 0, exp, a STATUS_VAR );
> }
>
> /*----------------------------------------------------------------------------
Shouldn't we be updating the Coding Style on all lines we touch? The
shift line matches it but the normalize and ifs don't.
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64
2012-12-08 14:48 ` Andreas Färber
@ 2012-12-08 16:08 ` Peter Maydell
2012-12-08 17:05 ` Andreas Färber
0 siblings, 1 reply; 12+ messages in thread
From: Peter Maydell @ 2012-12-08 16:08 UTC (permalink / raw)
To: Andreas Färber; +Cc: qemu-devel, Richard Henderson
On 8 December 2012 14:48, Andreas Färber <afaerber@suse.de> wrote:
> Shouldn't we be updating the Coding Style on all lines we touch? The
> shift line matches it but the normalize and ifs don't.
fpu/ is a special case because the softfloat library has such
a bonkers coding style. I tend to update to qemu standard when
I touch bits of it, but following the existing practice is
also OK in my opinion.
-- PMM
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64
2012-12-08 16:08 ` Peter Maydell
@ 2012-12-08 17:05 ` Andreas Färber
0 siblings, 0 replies; 12+ messages in thread
From: Andreas Färber @ 2012-12-08 17:05 UTC (permalink / raw)
To: Peter Maydell; +Cc: qemu-devel, Richard Henderson
Am 08.12.2012 17:08, schrieb Peter Maydell:
> On 8 December 2012 14:48, Andreas Färber <afaerber@suse.de> wrote:
>> Shouldn't we be updating the Coding Style on all lines we touch? The
>> shift line matches it but the normalize and ifs don't.
>
> fpu/ is a special case because the softfloat library has such
> a bonkers coding style. I tend to update to qemu standard when
> I touch bits of it, but following the existing practice is
> also OK in my opinion.
The same applies to linux-user and much of ppc code (spaces before
parenthesis, no braces). The only agreed-on way to address this is by
fixing the parts we touch - no veto here, but seems trivial enough to
fix. Otherwise the situation won't ever improve.
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128
2012-12-07 21:52 [Qemu-devel] [PATCH v2 0/2] soft-float fixes for target-s390x Richard Henderson
2012-12-07 21:52 ` [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64 Richard Henderson
@ 2012-12-07 21:52 ` Richard Henderson
2012-12-08 10:43 ` Peter Maydell
2012-12-08 14:53 ` Andreas Färber
1 sibling, 2 replies; 12+ messages in thread
From: Richard Henderson @ 2012-12-07 21:52 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
fpu/softfloat.c | 8 ++++++++
fpu/softfloat.h | 3 +++
2 files changed, 11 insertions(+)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 62830d7..d3290d8 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1337,6 +1337,14 @@ float128 int64_to_float128( int64 a STATUS_PARAM )
}
+float128 uint64_to_float128( uint64 a STATUS_PARAM )
+{
+ if (a == 0) {
+ return float128_zero;
+ }
+ return normalizeRoundAndPackFloat128(0, 0x406E, a, 0 STATUS_VAR);
+}
+
/*----------------------------------------------------------------------------
| Returns the result of converting the single-precision floating-point value
| `a' to the 32-bit two's complement integer format. The conversion is
diff --git a/fpu/softfloat.h b/fpu/softfloat.h
index d8999b3..c1ea196 100644
--- a/fpu/softfloat.h
+++ b/fpu/softfloat.h
@@ -237,6 +237,7 @@ float64 int64_to_float64( int64 STATUS_PARAM );
float64 uint64_to_float64( uint64 STATUS_PARAM );
floatx80 int64_to_floatx80( int64 STATUS_PARAM );
float128 int64_to_float128( int64 STATUS_PARAM );
+float128 uint64_to_float128( uint64 STATUS_PARAM );
/*----------------------------------------------------------------------------
| Software half-precision conversion routines.
@@ -630,6 +631,8 @@ INLINE int float128_is_any_nan(float128 a)
((a.low != 0) || ((a.high & 0xffffffffffffLL) != 0));
}
+#define float128_zero make_float128(0, 0)
+
/*----------------------------------------------------------------------------
| The pattern for a default generated quadruple-precision NaN.
*----------------------------------------------------------------------------*/
--
1.7.11.7
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128
2012-12-07 21:52 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
@ 2012-12-08 10:43 ` Peter Maydell
2012-12-08 14:53 ` Andreas Färber
1 sibling, 0 replies; 12+ messages in thread
From: Peter Maydell @ 2012-12-08 10:43 UTC (permalink / raw)
To: Richard Henderson; +Cc: qemu-devel
On 7 December 2012 21:52, Richard Henderson <rth@twiddle.net> wrote:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
-- PMM
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128
2012-12-07 21:52 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
2012-12-08 10:43 ` Peter Maydell
@ 2012-12-08 14:53 ` Andreas Färber
1 sibling, 0 replies; 12+ messages in thread
From: Andreas Färber @ 2012-12-08 14:53 UTC (permalink / raw)
To: Richard Henderson; +Cc: Peter Maydell, qemu-devel
Am 07.12.2012 22:52, schrieb Richard Henderson:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> fpu/softfloat.c | 8 ++++++++
> fpu/softfloat.h | 3 +++
> 2 files changed, 11 insertions(+)
>
> diff --git a/fpu/softfloat.c b/fpu/softfloat.c
> index 62830d7..d3290d8 100644
> --- a/fpu/softfloat.c
> +++ b/fpu/softfloat.c
> @@ -1337,6 +1337,14 @@ float128 int64_to_float128( int64 a STATUS_PARAM )
>
> }
>
> +float128 uint64_to_float128( uint64 a STATUS_PARAM )
Update the parenthesis style as well? You adopted QEMU's style below.
> +{
> + if (a == 0) {
> + return float128_zero;
> + }
> + return normalizeRoundAndPackFloat128(0, 0x406E, a, 0 STATUS_VAR);
> +}
> +
> /*----------------------------------------------------------------------------
> | Returns the result of converting the single-precision floating-point value
> | `a' to the 32-bit two's complement integer format. The conversion is
> diff --git a/fpu/softfloat.h b/fpu/softfloat.h
> index d8999b3..c1ea196 100644
> --- a/fpu/softfloat.h
> +++ b/fpu/softfloat.h
> @@ -237,6 +237,7 @@ float64 int64_to_float64( int64 STATUS_PARAM );
> float64 uint64_to_float64( uint64 STATUS_PARAM );
> floatx80 int64_to_floatx80( int64 STATUS_PARAM );
> float128 int64_to_float128( int64 STATUS_PARAM );
> +float128 uint64_to_float128( uint64 STATUS_PARAM );
Ditto? I would've expected checkpatch.pl complaints...
Andreas
>
> /*----------------------------------------------------------------------------
> | Software half-precision conversion routines.
> @@ -630,6 +631,8 @@ INLINE int float128_is_any_nan(float128 a)
> ((a.low != 0) || ((a.high & 0xffffffffffffLL) != 0));
> }
>
> +#define float128_zero make_float128(0, 0)
> +
> /*----------------------------------------------------------------------------
> | The pattern for a default generated quadruple-precision NaN.
> *----------------------------------------------------------------------------*/
>
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH v3 0/2] soft-float-fixes for target-s390x
@ 2012-12-11 17:21 Richard Henderson
2012-12-11 17:21 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
0 siblings, 1 reply; 12+ messages in thread
From: Richard Henderson @ 2012-12-11 17:21 UTC (permalink / raw)
To: qemu-devel; +Cc: afaerber
Changes v2-v3:
Ignore softfloat "style" completely. Code now formatted per QEMU.
Changes v1-v2:
Incorporating feedback from Peter Maydell (previously missed in
the 140+ message thread).
r~
Richard Henderson (2):
softfloat: Fix uint64_to_float64
softfloat: Implement uint64_to_float128
fpu/softfloat.c | 21 ++++++++++++++++++---
fpu/softfloat.h | 3 +++
2 files changed, 21 insertions(+), 3 deletions(-)
--
1.7.11.7
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128
2012-12-11 17:21 [Qemu-devel] [PATCH v3 0/2] soft-float-fixes for target-s390x Richard Henderson
@ 2012-12-11 17:21 ` Richard Henderson
2012-12-11 17:34 ` Peter Maydell
0 siblings, 1 reply; 12+ messages in thread
From: Richard Henderson @ 2012-12-11 17:21 UTC (permalink / raw)
To: qemu-devel; +Cc: afaerber
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
fpu/softfloat.c | 8 ++++++++
fpu/softfloat.h | 3 +++
2 files changed, 11 insertions(+)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 0daad0d..506defb 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1339,6 +1339,14 @@ float128 int64_to_float128( int64 a STATUS_PARAM )
}
+float128 uint64_to_float128(uint64 a STATUS_PARAM)
+{
+ if (a == 0) {
+ return float128_zero;
+ }
+ return normalizeRoundAndPackFloat128(0, 0x406E, a, 0 STATUS_VAR);
+}
+
/*----------------------------------------------------------------------------
| Returns the result of converting the single-precision floating-point value
| `a' to the 32-bit two's complement integer format. The conversion is
diff --git a/fpu/softfloat.h b/fpu/softfloat.h
index d8999b3..48cdb7d 100644
--- a/fpu/softfloat.h
+++ b/fpu/softfloat.h
@@ -237,6 +237,7 @@ float64 int64_to_float64( int64 STATUS_PARAM );
float64 uint64_to_float64( uint64 STATUS_PARAM );
floatx80 int64_to_floatx80( int64 STATUS_PARAM );
float128 int64_to_float128( int64 STATUS_PARAM );
+float128 uint64_to_float128(uint64 STATUS_PARAM);
/*----------------------------------------------------------------------------
| Software half-precision conversion routines.
@@ -630,6 +631,8 @@ INLINE int float128_is_any_nan(float128 a)
((a.low != 0) || ((a.high & 0xffffffffffffLL) != 0));
}
+#define float128_zero make_float128(0, 0)
+
/*----------------------------------------------------------------------------
| The pattern for a default generated quadruple-precision NaN.
*----------------------------------------------------------------------------*/
--
1.7.11.7
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH v4 0/2] soft-float-fixes for target-s390x
@ 2012-12-31 18:09 Richard Henderson
2012-12-31 18:09 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
0 siblings, 1 reply; 12+ messages in thread
From: Richard Henderson @ 2012-12-31 18:09 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl
Changes v3-v4:
Rebase after source tree rearrangements.
Changes v2-v3:
Ignore softfloat "style" completely. Code now formatted per QEMU.
Changes v1-v2:
Incorporating feedback from Peter Maydell (previously missed in
the 140+ message thread).
r~
Richard Henderson (2):
softfloat: Fix uint64_to_float64
softfloat: Implement uint64_to_float128
fpu/softfloat.c | 21 ++++++++++++++++++---
include/fpu/softfloat.h | 3 +++
2 files changed, 21 insertions(+), 3 deletions(-)
--
1.7.11.7
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128
2012-12-31 18:09 [Qemu-devel] [PATCH v4 0/2] soft-float-fixes for target-s390x Richard Henderson
@ 2012-12-31 18:09 ` Richard Henderson
0 siblings, 0 replies; 12+ messages in thread
From: Richard Henderson @ 2012-12-31 18:09 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
fpu/softfloat.c | 8 ++++++++
include/fpu/softfloat.h | 3 +++
2 files changed, 11 insertions(+)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 20b05d4..ac3d150 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1339,6 +1339,14 @@ float128 int64_to_float128( int64 a STATUS_PARAM )
}
+float128 uint64_to_float128(uint64 a STATUS_PARAM)
+{
+ if (a == 0) {
+ return float128_zero;
+ }
+ return normalizeRoundAndPackFloat128(0, 0x406E, a, 0 STATUS_VAR);
+}
+
/*----------------------------------------------------------------------------
| Returns the result of converting the single-precision floating-point value
| `a' to the 32-bit two's complement integer format. The conversion is
diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
index 0946f07..f3927e2 100644
--- a/include/fpu/softfloat.h
+++ b/include/fpu/softfloat.h
@@ -237,6 +237,7 @@ float64 int64_to_float64( int64 STATUS_PARAM );
float64 uint64_to_float64( uint64 STATUS_PARAM );
floatx80 int64_to_floatx80( int64 STATUS_PARAM );
float128 int64_to_float128( int64 STATUS_PARAM );
+float128 uint64_to_float128( uint64 STATUS_PARAM );
/*----------------------------------------------------------------------------
| Software half-precision conversion routines.
@@ -630,6 +631,8 @@ INLINE int float128_is_any_nan(float128 a)
((a.low != 0) || ((a.high & 0xffffffffffffLL) != 0));
}
+#define float128_zero make_float128(0, 0)
+
/*----------------------------------------------------------------------------
| The pattern for a default generated quadruple-precision NaN.
*----------------------------------------------------------------------------*/
--
1.7.11.7
^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2012-12-31 18:09 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-07 21:52 [Qemu-devel] [PATCH v2 0/2] soft-float fixes for target-s390x Richard Henderson
2012-12-07 21:52 ` [Qemu-devel] [PATCH 1/2] softfloat: Fix uint64_to_float64 Richard Henderson
2012-12-08 10:42 ` Peter Maydell
2012-12-08 14:48 ` Andreas Färber
2012-12-08 16:08 ` Peter Maydell
2012-12-08 17:05 ` Andreas Färber
2012-12-07 21:52 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
2012-12-08 10:43 ` Peter Maydell
2012-12-08 14:53 ` Andreas Färber
-- strict thread matches above, loose matches on Subject: below --
2012-12-11 17:21 [Qemu-devel] [PATCH v3 0/2] soft-float-fixes for target-s390x Richard Henderson
2012-12-11 17:21 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
2012-12-11 17:34 ` Peter Maydell
2012-12-31 18:09 [Qemu-devel] [PATCH v4 0/2] soft-float-fixes for target-s390x Richard Henderson
2012-12-31 18:09 ` [Qemu-devel] [PATCH 2/2] softfloat: Implement uint64_to_float128 Richard Henderson
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).