All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Alrae <leon.alrae@imgtec.com>
To: Aleksandar Markovic <aleksandar.markovic@rt-rk.com>
Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, qemu-ppc@nongnu.org,
	maciej.rozycki@imgtec.com, proljc@gmail.com,
	kbastian@mail.uni-paderborn.de, mark.cave-ayland@ilande.co.uk,
	agraf@suse.de, blauwirbel@gmail.com, jcmvbkbc@gmail.com,
	pbonzini@redhat.com, edgar.iglesias@gmail.com,
	gxt@mprc.pku.edu.cn, rth@twiddle.net, peter.maydell@linaro.org,
	aurelien@aurel32.net, petar.jovanovic@imgtec.com,
	miodrag.dinic@imgtec.com, aleksandar.markovic@imgtec.com
Subject: Re: [Qemu-devel] [PATCH v9 01/10] softfloat: Implement run-time-configurable meaning of signaling NaN bit
Date: Tue, 14 Jun 2016 15:07:45 +0100	[thread overview]
Message-ID: <20160614140745.GA13260@hhmipssw201.hh.imgtec.org> (raw)
In-Reply-To: <1465552668-30084-2-git-send-email-aleksandar.markovic@rt-rk.com>

On Fri, Jun 10, 2016 at 11:57:28AM +0200, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
> 
> This patch modifies SoftFloat library so that it can be configured in
> run-time in relation to the meaning of signaling NaN bit, while, at the
> same time, strictly preserving its behavior on all existing platforms.
> 
> Background:
> 
> In floating-point calculations, there is a need for denoting undefined or
> unrepresentable values. This is achieved by defining certain floating-point
> numerical values to be NaNs (which stands for "not a number"). For additional
> reasons, virtually all modern floating-point unit implementations use two
> kinds of NaNs: quiet and signaling. The binary representations of these two
> kinds of NaNs, as a rule, differ only in one bit (that bit is, traditionally,
> the first bit of mantissa).
> 
> Up to 2008, standards for floating-point did not specify all details about
> binary representation of NaNs. More specifically, the meaning of the bit
> that is used for distinguishing between signaling and quiet NaNs was not
> strictly prescribed. (IEEE 754-2008 was the first floating-point standard
> that defined that meaning clearly, see [1], p. 35) As a result, different
> platforms took different approaches, and that presented considerable
> challenge for multi-platform emulators like QEMU.
> 
> Mips platform represents the most complex case among QEMU-supported
> platforms regarding signaling NaN bit. Up to the Release 6 of Mips
> architecture, "1" in signaling NaN bit denoted signaling NaN, which is
> opposite to IEEE 754-2008 standard. From Release 6 on, Mips architecture
> adopted IEEE standard prescription, and "0" denotes signaling NaN. On top of
> that, Mips architecture for SIMD (also known as MSA, or vector instructions)
> also specifies signaling bit in accordance to IEEE standard. MSA unit can be
> implemented with both pre-Release 6 and Release 6 main processor units.
> 
> QEMU uses SoftFloat library to implement various floating-point-related
> instructions on all platforms. The current QEMU implementation allows for
> defining meaning of signaling NaN bit during build time, and is implemented
> via preprocessor macro called SNAN_BIT_IS_ONE.
> 
> On the other hand, the change in this patch enables SoftFloat library to be
> configured in run-time. This configuration is meant to occur during CPU
> initialization, at the moment when it is definitely known what desired
> behavior for particular CPU (or any additional FPUs) is.
> 
> The change is implemented so that it is consistent with existing
> implementation of similar cases. This means that structure float_status is
> used for passing the information about desired signaling NaN bit on each
> invocation of SoftFloat functions. The additional field in float_status is
> called snan_bit_is_one, which supersedes macro SNAN_BIT_IS_ONE.
> 
> IMPORTANT:
> 
> This change is not meant to create any change in emulator behavior or
> functionality on any platform. It just provides the means for SoftFloat
> library to be used in a more flexible way - in other words, it will just
> prepare SoftFloat library for usage related to Mips platform and its
> specifics regarding signaling bit meaning, which is done in some of
> subsequent patches from this series.
> 
> Further break down of changes:
> 
>   1) Added field snan_bit_is_one to the structure float_status, and
>      correspondent setter function set_snan_bit_is_one().
> 
>   2) Constants <float16|float32|float64|floatx80|float128>_default_nan
>      (used both internally and externally) converted to functions
>      <float16|float32|float64|floatx80|float128>_default_nan(float_status*).
>      This is necessary since they are dependent on signaling bit meaning.
>      At the same time, for the sake of code cleanup and simplicity, constants
>      <floatx80|float128>_default_nan_<low|high> (used only internally within
>      SoftFloat library) are removed, as not needed.
> 
>   3) Added a float_status* argument to SoftFloat library functions
>      XXX_is_quiet_nan(XXX a_), XXX_is_signaling_nan(XXX a_),
>      XXX_maybe_silence_nan(XXX a_). This argument must be present in
>      order to enable correct invocation of new version of functions
>      XXX_default_nan(). (XXX is <float16|float32|float64|floatx80|float128>
>      here)
> 
>   4) Updated code for all platforms to reflect changes in SoftFloat library.
>      This change is twofolds: it includes modifications of SoftFloat library
>      functions invocations, and an addition of invocation of function
>      set_snan_bit_is_one() during CPU initialization, with arguments that
>      are appropriate for each particular platform. It was established that
>      all platforms zero their main CPU data structures, so snan_bit_is_one(0)
>      in appropriate places is not added, as it is not needed.
> 
> [1] "IEEE Standard for Floating-Point Arithmetic",
>     IEEE Computer Society, August 29, 2008.
> 
> Tested-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> (TriCore part)
> Signed-off-by: Thomas Schwinge <thomas@codesourcery.com>
> Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
> Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
> ---
>  fpu/softfloat-specialize.h    | 535 ++++++++++++++++++++----------------------
>  fpu/softfloat.c               | 172 ++++++--------
>  include/fpu/softfloat.h       |  45 ++--
>  target-arm/helper-a64.c       |  14 +-
>  target-arm/helper.c           |  40 ++--
>  target-m68k/helper.c          |   6 +-
>  target-microblaze/op_helper.c |   6 +-
>  target-mips/cpu.h             |   5 +
>  target-mips/helper.h          |   4 +-
>  target-mips/msa_helper.c      |  88 +++----
>  target-mips/op_helper.c       |  17 +-
>  target-mips/translate.c       |   5 +-
>  target-mips/translate_init.c  |   2 +
>  target-ppc/fpu_helper.c       | 120 +++++-----
>  target-s390x/fpu_helper.c     |  28 ++-
>  target-s390x/helper.h         |   6 +-
>  target-s390x/translate.c      |   6 +-
>  target-sh4/cpu.c              |   1 +
>  target-unicore32/cpu.c        |   2 +
>  19 files changed, 547 insertions(+), 555 deletions(-)

Looks good to me (plus I ran my regression tests for MIPS):

Reviewed-by: Leon Alrae <leon.alrae@imgtec.com>
Tested-by: Leon Alrae <leon.alrae@imgtec.com>

Thanks,
Leon

  reply	other threads:[~2016-06-14 14:08 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-10  9:57 [Qemu-devel] [PATCH v9 00/10] IEEE 754-2008 support for Mips Aleksandar Markovic
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 01/10] softfloat: Implement run-time-configurable meaning of signaling NaN bit Aleksandar Markovic
2016-06-14 14:07   ` Leon Alrae [this message]
2016-06-23 15:30   ` Peter Maydell
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 02/10] softfloat: Clean code format in fpu/softfloat-specialize.h Aleksandar Markovic
2016-06-23 15:31   ` Peter Maydell
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 03/10] softfloat: For Mips only, correct default NaN values Aleksandar Markovic
2016-06-23 15:36   ` Peter Maydell
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 04/10] softfloat: For Mips only, correct order in pickNaNMulAdd() Aleksandar Markovic
2016-06-23 15:38   ` Peter Maydell
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 05/10] linux-user: Update preprocessor constants for Mips-specific e_flags bits Aleksandar Markovic
2016-06-23 15:40   ` Peter Maydell
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 06/10] target-mips: Activate IEEE 754-2008 signaling NaN bit meaning for MSA Aleksandar Markovic
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 07/10] target-mips: Add abs2008 flavor of <ABS|NEG>.<S|D> Aleksandar Markovic
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 08/10] target-mips: Add nan2008 flavor of <CEIL|CVT|FLOOR|ROUND|TRUNC>.<L|W>.<S|D> Aleksandar Markovic
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 09/10] target-mips: Implement FCR31's R/W bitmask and related functionalities Aleksandar Markovic
2016-06-14 14:08   ` Leon Alrae
2016-06-10  9:57 ` [Qemu-devel] [PATCH v9 10/10] target-mips: Add FCR31's FS bit definition Aleksandar Markovic
2016-06-14 14:12   ` Leon Alrae
2016-06-21 12:41 ` [Qemu-devel] [PATCH v9 00/10] IEEE 754-2008 support for Mips Aleksandar Markovic
2016-06-23 15:46 ` Peter Maydell
2016-06-23 16:44   ` Leon Alrae

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160614140745.GA13260@hhmipssw201.hh.imgtec.org \
    --to=leon.alrae@imgtec.com \
    --cc=agraf@suse.de \
    --cc=aleksandar.markovic@imgtec.com \
    --cc=aleksandar.markovic@rt-rk.com \
    --cc=aurelien@aurel32.net \
    --cc=blauwirbel@gmail.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=gxt@mprc.pku.edu.cn \
    --cc=jcmvbkbc@gmail.com \
    --cc=kbastian@mail.uni-paderborn.de \
    --cc=maciej.rozycki@imgtec.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=miodrag.dinic@imgtec.com \
    --cc=pbonzini@redhat.com \
    --cc=petar.jovanovic@imgtec.com \
    --cc=peter.maydell@linaro.org \
    --cc=proljc@gmail.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.