Statistics
| Branch: | Revision:

root / fpu / softfloat.c @ feature-archipelago

History | View | Annotate | Download (261.6 kB)

# Date Author Comment
67d43538 02/20/2014 12:35 pm Peter Maydell

softfloat: Support halving the result of muladd operation

The ARMv8 instruction set includes a fused floating point
reciprocal square root step instruction which demands an
"(x * y + z) / 2" fused operation. Support this by adding
a flag to the softfloat muladd operations which requests...

38970efa 01/08/2014 09:07 pm Peter Maydell

softfloat: Fix exception flag handling for float32_to_float16()

Our float32 to float16 conversion routine was generating the correct
numerical answers, but not always setting the right set of exception
flags. Fix this, mostly by rearranging the code to more closely...

f581bf54 01/08/2014 09:07 pm Will Newton

softfloat: Add float to 16bit integer conversions.

ARMv8 requires support for converting 32 and 64bit floating point
values to signed and unsigned 16bit integers.

Signed-off-by: Will Newton <>
[PMM: updated not to incorrectly set Inexact for Invalid inputs]...

c4850f9e 01/08/2014 09:07 pm Peter Maydell

softfloat: Make the int-to-float functions take exact-width types

Currently the int-to-float functions take types which are specified
as "at least X bits wide", rather than "exactly X bits wide". This is
confusing and unhelpful since it means that the callers have to include...

fb3ea83a 01/08/2014 09:07 pm Tom Musta

softfloat: Fix float64_to_uint64

The comment preceding the float64_to_uint64 routine suggests that
the implementation is broken. And this is, indeed, the case.

This patch properly implements the conversion of a 64-bit floating
point number to an unsigned, 64 bit integer....

34e1c27b 01/08/2014 09:07 pm Peter Maydell

softfloat: Only raise Invalid when conversions to int are out of range

We implement a number of float-to-integer conversions using conversion
to an integer type with a wider range and then a check against the
narrower range we are actually converting to. If we find the result to...

3c85c37f 01/08/2014 09:07 pm Peter Maydell

softfloat: Fix factor 2 error for scalbn on denormal inputs

If the input to float*_scalbn() is denormal then it represents
a number 0.[mantissabits] * 2^(1-exponentbias) (and the actual
exponent field is all zeroes). This means that when we convert
it to our unpacked encoding the unpacked exponent must be one...

2f18bbf9 01/08/2014 09:07 pm Tom Musta

softfloat: Add float32_to_uint64()

This patch adds the float32_to_uint64() routine, which converts a
32-bit floating point number to an unsigned 64 bit number.

This contribution can be licensed under either the softfloat-2a or -2b
license.

Signed-off-by: Tom Musta <>...

0a87a310 01/08/2014 09:07 pm Tom Musta

softfloat: Fix float64_to_uint64_round_to_zero

The float64_to_uint64_round_to_zero routine is incorrect.

For example, the following test pattern:

46697351FF4AEC29 / 0x1.97351ff4aec29p+103

currently produces 8000000000000000 instead of FFFFFFFFFFFFFFFF....

5e7f654f 01/08/2014 09:07 pm Tom Musta

softfloat: Fix float64_to_uint32

The float64_to_uint32 has several flaws:

- for numbers between 2**32 and 2**64, the inexact exception flag
may get incorrectly set. In this case, only the invalid flag
should be set.
test pattern: 425F81378DC0CD1F / 0x1.f81378dc0cd1fp+38...
fd728f2f 01/08/2014 09:07 pm Tom Musta

softfloat: Fix float64_to_uint32_round_to_zero

The float64_to_uint32_round_to_zero routine is incorrect.

For example, the following test pattern:

425F81378DC0CD1F / 0x1.f81378dc0cd1fp+38

will erroneously set the inexact flag.

This patch re-implements the routine to use the float64_to_uint64_round_to_zero...

879d096b 01/08/2014 09:07 pm Peter Maydell

softfloat: Provide complete set of accessors for fp state

Tidy up the get/set accessors for the fp state to add missing ones
and make them all inline in softfloat.h rather than some inline and
some not.

Signed-off-by: Peter Maydell <>...

c4a1c5e7 01/08/2014 09:07 pm Peter Maydell

softfloat: Factor out RoundAndPackFloat16 and NormalizeFloat16Subnormal

In preparation for adding conversions between float16 and float64,
factor out code currently done inline in the float16<=>float32
conversion functions into functions RoundAndPackFloat16 and...

14c9a07e 01/08/2014 09:07 pm Peter Maydell

softfloat: Add float16 <=> float64 conversion functions

Add the conversion functions float16_to_float64() and
float64_to_float16(), which will be needed for the ARM
A64 instruction set.

Signed-off-by: Peter Maydell <>
Reviewed-by: Richard Henderson <>

dc355b76 01/08/2014 09:07 pm Peter Maydell

softfloat: Refactor code handling various rounding modes

Refactor the code in various functions which calculates rounding
increments given the current rounding mode, so that instead of a
set of nested if statements we have a simple switch statement.
This will give us a clean place to add the case for the new...

f9288a76 01/08/2014 09:07 pm Peter Maydell

softfloat: Add support for ties-away rounding

IEEE754-2008 specifies a new rounding mode:

"roundTiesToAway: the floating-point number nearest to the infinitely
precise result shall be delivered; if the two nearest floating-point
numbers bracketing an unrepresentable infinitely precise result are...

e70614ea 12/10/2013 03:28 pm Will Newton

softfloat: Remove unused argument from MINMAX macro.

The nan_exp argument is not used, so remove it.

Signed-off-by: Will Newton <>
Reviewed-by: Peter Maydell <>
Message-id: ...

e17ab310 12/10/2013 03:28 pm Will Newton

softfloat: Add minNum() and maxNum() functions to softfloat.

Add floatnn_minnum() and floatnn_maxnum() functions which are equivalent
to the minNum() and maxNum() functions from IEEE 754-2008. They are
similar to min() and max() but differ in the handling of QNaN arguments....

e3d142d0 04/15/2013 05:06 pm Peter Maydell

fpu: Correct edgecase in float64_muladd

In handling float64_muladd, if we end up doing a subtraction of the
product and c, and the 128 bit result of this subtraction happens to
have its most significant bit in bit 63, we weren't handling this
correctly when attempting to normalize to put the most significant...

a6e7c184 01/26/2013 03:22 pm Richard Sandiford

softfloat: Handle float_muladd_negate_c when product is zero

Honour float_muladd_negate_c in the case where the product is zero and
c is nonzero. Previously we would fail to negate c.

Seen in (and tested against) the gfortran testsuite on MIPS.

Signed-off-by: Richard Sandiford <>...

1e397ead 01/05/2013 12:12 pm Richard Henderson

softfloat: Implement uint64_to_float128

Reviewed-by: Peter Maydell <>
Signed-off-by: Richard Henderson <>
Signed-off-by: Blue Swirl <>

17ed2293 01/05/2013 12:12 pm Richard Henderson

softfloat: Fix uint64_to_float64

The interface to normalizeRoundAndPackFloat64 requires that the
high bit be clear. Perform one shift-right-and-jam if needed.

Reviewed-by: Peter Maydell <>
Signed-off-by: Richard Henderson <>...

6b4c305c 12/19/2012 09:32 am Paolo Bonzini

fpu: move public header file to include/fpu

Signed-off-by: Paolo Bonzini <>

4be8eeac 10/01/2012 11:06 pm Peter Maydell

fpu/softfloat.c: Remove pointless shift of always-zero value

In float16_to_float32, when returning an infinity, just pass zero
as the mantissa argument to packFloat32(), rather than shifting
a value which we know must be zero.

Signed-off-by: Peter Maydell <>...

e744c06f 10/01/2012 11:06 pm Peter Maydell

fpu/softfloat.c: Return correctly signed values from uint64_to_float32

The uint64_to_float32() conversion function was incorrectly always
returning numbers with the sign bit set (ie negative numbers). Correct
this so we return positive numbers instead.

Signed-off-by: Peter Maydell <>...

94a49d86 04/28/2012 12:13 pm Andreas Färber

softfloat: Replace int16 type with int_fast16_t

Based on the following Coccinelle patch:

@
typedef int16, int_fast16_t;
@
-int16
+int_fast16_t

Avoids a workaround for AIX.

Add typedef for pre-10 Solaris.

Signed-off-by: Andreas Färber <>...

5aea4c58 04/28/2012 12:13 pm Andreas Färber

softfloat: Replace uint16 type with uint_fast16_t

Based on the following Coccinelle patch:

@
typedef uint16, uint_fast16_t;
@
-uint16
+uint_fast16_t

Fixes the build of the Cocoa frontend on Mac OS X and avoids a
workaround for AIX.

For pre-10 Solaris include osdep.h....

c9696547 04/28/2012 12:12 pm Andreas Färber

softfloat: Fix mixups of int and int16

normalizeFloat{32,64}Subnormal() expect the exponent as int16, not int.
This went unnoticed since int16 and uint16 were both typedef'ed to int.

Signed-off-by: Andreas Färber <>
Reviewed-by: Peter Maydell <>...

0eb4fc81 04/21/2012 04:26 pm Juan Quintela

softfloat: make USE_SOFTFLOAT_STRUCT_TYPES compile

This change makes it compile and return the same value than the #undef one.

Signed-off-by: Juan Quintela <>
Reviewed-by: Peter Maydell <>
Acked-by: Andreas Färber <>...

760e1416 04/07/2012 02:15 pm Peter Maydell

softfloat: roundAndPackInt{32, 64}: Don't assume int32 is 32 bits

Fix code in roundAndPackInt32 that assumed that int32 was only
32 bits, by simply using int32_t instead. Fix the parallel bug
in roundAndPackInt64 as well, although that one is only theoretical...

b3a6a2e0 04/07/2012 02:15 pm Peter Maydell

softfloat: float*_to_int32_round_to_zero: don't assume int32 is 32 bits

Code in the float64_to_int32_round_to_zero() function was assuming
that int32 would not be wider than 32 bits; this meant it might
not correctly detect the overflow case. We take the simple approach...

369be8f6 10/19/2011 07:14 pm Peter Maydell

softfloat: Implement fused multiply-add

Implement fused multiply-add as a softfloat primitive. This implements
"a+b*c" as a single step without any intermediate rounding; it is
specified in IEEE 754-2008 and implemented in a number of CPUs.

Signed-off-by: Peter Maydell <>

2ac8bd03 10/01/2011 09:19 am Peter Maydell

softfloat: Reinstate accidentally disabled target-specific NaN handling

Include config.h in softfloat.c, so that the target specific ifdefs in
softfloat-specialize.h are evaluated correctly. This was accidentally
broken in commit 789ec7ce2 when config-target.h was removed from...

9f8d2a09 09/03/2011 08:47 pm Andreas Färber

softfloat: Use uint32 consistently

Prepares for uint32 replacement.

Signed-off-by: Andreas Färber <>
Reviewed-by: Peter Maydell <>
Signed-off-by: Blue Swirl <>

38641f8f 09/03/2011 08:46 pm Andreas Färber

softfloat: Use uint16 consistently

Prepares for uint16 replacement.

Signed-off-by: Andreas Färber <>
Reviewed-by: Peter Maydell <>
Signed-off-by: Blue Swirl <>

be22a9ab 06/03/2011 05:07 pm Aurelien Jarno

softfloat: always enable floatx80 and float128 support

Now that softfloat-native is gone, there is no real point on not always
enabling floatx80 and float128 support.

Reviewed-by: Peter Maydell <>
Signed-off-by: Aurelien Jarno <>

e6afc87f 05/23/2011 11:39 pm Peter Maydell

softfloat: Add new flag for when denormal result is flushed to zero

Add a new float_flag_output_denormal which is set when the result
of a floating point operation would be denormal but is flushed to
zero because we are in flush_to_zero mode. This is necessary because...

326b9e98 04/25/2011 12:18 pm Aurelien Jarno

softfloat: fix float*_scalnb() corner cases

float*_scalnb() were not taking into account all cases. This patch fixes
some corner cases:
- NaN values in input were not properly propagated and the invalid flag
not correctly raised. Use propagateFloat*NaN() for that....

f6714d36 04/25/2011 12:18 pm Aurelien Jarno

softfloat: add floatx80_compare*() functions

Add floatx80_compare() and floatx80_compare_quiet() functions to match
the softfloat-native ones.

Reviewed-by: Peter Maydell <>
Signed-off-by: Aurelien Jarno <>

b689362d 04/17/2011 09:32 pm Aurelien Jarno

softfloat: move float*_eq and float*_eq_quiet

I am not a big fan of code moving, but having the signaling version in
the middle of quiet versions and vice versa doesn't make the code easy
to read.

This patch is a simple code move, basically swapping locations of...

f5a64251 04/17/2011 09:32 pm Aurelien Jarno

softfloat: improve description of comparison functions

Make clear for all comparison functions which ones trigger an exception
for all NaNs, and which one only for sNaNs.

Reviewed-by: Peter Maydell <>
Signed-off-by: Aurelien Jarno <>

67b7861d 04/17/2011 09:32 pm Aurelien Jarno

softfloat: add float*_unordered_{,quiet}() functions

Add float*_unordered() functions to softfloat, matching the softfloat-native
ones. Also add float*_unordered_quiet() functions to match the others
comparison functions.

This allow target-i386/ops_sse.h to be compiled with softfloat....

211315fb 04/17/2011 09:32 pm Aurelien Jarno

softfloat: rename float*_eq() into float*_eq_quiet()

float*_eq functions have a different semantics than other comparison
functions. Fix that by first renaming float*_quiet() into float*_eq_quiet().

Note that it is purely mechanical, and the behaviour should be unchanged....

2657d0ff 04/17/2011 09:32 pm Aurelien Jarno

softfloat: rename float*_eq_signaling() into float*_eq()

float*_eq_signaling functions have a different semantics than other
comparison functions. Fix that by renaming float*_quiet_signaling() into
float*_eq().

Note that it is purely mechanical, and the behaviour should be unchanged....

274f1b04 04/03/2011 06:19 pm Peter Maydell

softfloat: Add float*_min() and float*_max() functions

Add min and max operations to softfloat. This allows us to implement
propagation of NaNs and handling of negative zero correctly (unlike
the approach of having target helper routines return one of the operands...

bb98fe42 03/21/2011 10:46 pm Andreas Färber

softfloat: Drop [s]bits{8, 16, 32, 64} types in favor of [u]int{8, 16, 32, 64}_t

They are defined with the same semantics as the POSIX types,
so prefer those for consistency. Suggested by Peter Maydell.

Cc: Peter Maydell <>
Cc: Aurelien Jarno <>...

8d725fac 03/21/2011 10:46 pm Andreas Färber

softfloat: Prepend QEMU-style header with derivation notice

The SoftFloat license requires "prominent notice that the work
is derivative". Having added features like improved 16-bit support
for arm already, add such a notice to the sources.

softfloat-native.[ch] are not under the SoftFloat license...

d5138cf4 02/10/2011 09:16 pm Peter Maydell

softfloat: Fix compilation failures with USE_SOFTFLOAT_STRUCT_TYPES

Make softfloat compile with USE_SOFTFLOAT_STRUCT_TYPES defined, by
adding and using new macros const_float16(), const_float32() and
const_float64() so you can use array initializers in an array of...

f591e1be 02/10/2011 07:28 pm Peter Maydell

softfloat: Correctly handle NaNs in float16_to_float32()

Correctly handle NaNs in float16_to_float32(), by defining and
using a float16ToCommonNaN() function, as we do with the other formats.

Signed-off-by: Peter Maydell <>
Signed-off-by: Aurelien Jarno <>

600e30d2 02/10/2011 07:28 pm Peter Maydell

softfloat: Fix single-to-half precision float conversions

Fix various bugs in the single-to-half-precision conversion code: * input NaNs not correctly converted in IEEE mode
(fixed by defining and using a commonNaNToFloat16()) * wrong values returned when converting NaN/Inf into non-IEEE...

bcd4d9af 02/10/2011 07:28 pm Christophe Lyon

softfloat: Honour default_nan_mode for float-to-float conversions

Honour the default_nan_mode flag when doing conversions between
different floating point formats, as well as when returning a NaN from
a two-operand floating point function. This corrects the behaviour...

bb4d4bb3 02/10/2011 07:28 pm Peter Maydell

softfloat: Add float16 type and float16 NaN handling functions

Add a float16 type to softfloat, rather than using bits16 directly.
Also add the missing functions float16_is_quiet_nan(),
float16_is_signaling_nan() and float16_maybe_silence_nan(),
which are needed for the float16 conversion routines....

37d18660 01/06/2011 11:16 pm Peter Maydell

softfloat: Implement flushing input denormals to zero

Add support to softfloat for flushing input denormal float32 and float64
to zero. softfloat's existing 'flush_to_zero' flag only flushes denormals
to zero on output. Some CPUs need input denormals to be flushed before...

cbcef455 12/07/2010 05:37 pm Peter Maydell

softfloat: Add float/double to 16 bit integer conversion functions

The ARM architecture needs float/double to 16 bit integer conversions.
(The 32 bit versions aren't sufficient because of the requirement
to saturate at 16 bit MAXINT/MININT and to get the exception bits right.)...

8229c991 07/13/2010 07:18 pm Aurelien Jarno

softfloat: add float32_exp2()

Signed-off-by: Aurelien Jarno <>

ed086f3d 03/07/2010 03:49 pm Blue Swirl

softfloat: remove dead assignments, spotted by clang

Value stored to 'bSign' is never read.

Signed-off-by: Blue Swirl <>

60011498 11/19/2009 06:45 pm Paul Brook

ARM FP16 support

Implement the ARM VFP half precision floating point extensions.

Signed-off-by: Paul Brook <>

374dfc33 02/05/2009 03:42 pm aurel32

soft-float: add float32_log2() and float64_log2()

Signed-off-by: Aurelien Jarno <>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6518 c046a42c-6fe2-441c-8c8c-71466251a162

fe76d976 12/19/2008 04:33 pm pbrook

Implement flush-to-zero mode (denormal results are replaced with zero).

Signed-off-by: Paul Brook <>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6107 c046a42c-6fe2-441c-8c8c-71466251a162

69397542 12/19/2008 02:59 pm pbrook

Correctly normalize values and handle zero inputs to scalbn functions.

Signed-off-by: Paul Brook <>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6102 c046a42c-6fe2-441c-8c8c-71466251a162

b55266b5 09/20/2008 11:07 am blueswir1

Suppress gcc 4.x -Wpointer-sign (included in -Wall) warnings

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5275 c046a42c-6fe2-441c-8c8c-71466251a162

1f587329 11/25/2007 08:40 pm blueswir1

128-bit float support for user mode

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3740 c046a42c-6fe2-441c-8c8c-71466251a162

cd8a2533 11/21/2007 08:57 pm blueswir1

Fix more typos in softloat code (Eduardo Felipe)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3716 c046a42c-6fe2-441c-8c8c-71466251a162

a1b91bb4 11/21/2007 05:32 pm pbrook

Fix typo in softfloat code.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3714 c046a42c-6fe2-441c-8c8c-71466251a162

f090c9d4 11/18/2007 04:33 pm pbrook

Add strict checking mode for softfp code.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3688 c046a42c-6fe2-441c-8c8c-71466251a162

9ee6e8bb 11/11/2007 02:04 am pbrook

ARMv7 support.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3572 c046a42c-6fe2-441c-8c8c-71466251a162

3430b0be 03/21/2007 12:25 am j_mayer

Ooops... Typo.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2520 c046a42c-6fe2-441c-8c8c-71466251a162

75d62a58 03/21/2007 12:10 am j_mayer

Add missing softfloat helpers.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2518 c046a42c-6fe2-441c-8c8c-71466251a162

750afe93 10/28/2006 10:27 pm bellard

avoid using char when it is not necessary

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2204 c046a42c-6fe2-441c-8c8c-71466251a162

e6e5906b 10/22/2006 03:18 am pbrook

ColdFire target.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2196 c046a42c-6fe2-441c-8c8c-71466251a162

1d6bda35 03/13/2005 08:52 pm bellard

added abs, chs and compare functions

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1338 c046a42c-6fe2-441c-8c8c-71466251a162

158142c2 03/13/2005 06:54 pm bellard

soft float support

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1332 c046a42c-6fe2-441c-8c8c-71466251a162