qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Max Filippov <jcmvbkbc@gmail.com>
Cc: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Subject: Re: [PATCH 01/21] softfloat: make NO_SIGNALING_NANS runtime property
Date: Tue, 07 Jul 2020 11:28:13 +0100	[thread overview]
Message-ID: <871rlnpqki.fsf@linaro.org> (raw)
In-Reply-To: <20200706234737.32378-2-jcmvbkbc@gmail.com>


Max Filippov <jcmvbkbc@gmail.com> writes:

> target/xtensa, the only user of NO_SIGNALING_NANS macro has FPU
> implementations with and without the corresponding property. With
> NO_SIGNALING_NANS being a macro they cannot be a part of the same QEMU
> executable.
> Replace macro with new property in float_status to allow cores with
> different FPU implementations coexist.
>
> Cc: Peter Maydell <peter.maydell@linaro.org>
> Cc: "Alex Bennée" <alex.bennee@linaro.org>
> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
> ---
>  fpu/softfloat-specialize.inc.c  | 228 ++++++++++++++++----------------
>  include/fpu/softfloat-helpers.h |   5 +
>  include/fpu/softfloat-types.h   |   1 +
>  3 files changed, 117 insertions(+), 117 deletions(-)
>
> diff --git a/fpu/softfloat-specialize.inc.c b/fpu/softfloat-specialize.inc.c
> index 44f5b661f831..b26bc039b0b6 100644
> --- a/fpu/softfloat-specialize.inc.c
> +++ b/fpu/softfloat-specialize.inc.c
> @@ -79,13 +79,6 @@ this code that are retained.
>   * version 2 or later. See the COPYING file in the top-level directory.
>   */
>  
> -/* Define for architectures which deviate from IEEE in not supporting
> - * signaling NaNs (so all NaNs are treated as quiet).
> - */
> -#if defined(TARGET_XTENSA)
> -#define NO_SIGNALING_NANS 1
> -#endif
> -
>  /* Define how the architecture discriminates signaling NaNs.
>   * This done with the most significant bit of the fraction.
>   * In IEEE 754-1985 this was implementation defined, but in IEEE 754-2008
> @@ -111,12 +104,12 @@ static inline bool snan_bit_is_one(float_status *status)
>  
>  static bool parts_is_snan_frac(uint64_t frac, float_status *status)
>  {
> -#ifdef NO_SIGNALING_NANS
> -    return false;
> -#else
> -    bool msb = extract64(frac, DECOMPOSED_BINARY_POINT - 1, 1);
> -    return msb == snan_bit_is_one(status);
> -#endif
> +    if (status->no_signaling_nans) {
> +        return false;

I have no objection in principle but seeing as we go to the trouble of
allowing snan_bit_is_one() to constant fold away I think it would be
worth doing the same with a no_signalling_nans(status). We can then
avoid an admittedly well predicted test for the non XTENSA case.

> +    } else {
> +        bool msb = extract64(frac, DECOMPOSED_BINARY_POINT - 1, 1);
> +        return msb == snan_bit_is_one(status);
> +    }
>  }
>  
>  /*----------------------------------------------------------------------------
> @@ -170,9 +163,10 @@ static FloatParts parts_default_nan(float_status *status)
>  
>  static FloatParts parts_silence_nan(FloatParts a, float_status *status)
>  {
> -#ifdef NO_SIGNALING_NANS
> -    g_assert_not_reached();

We could then keep the assert:

  g_assert(!no_signaling_nan(status))

<snip>
>      return status->tininess_before_rounding;
> diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h
> index 7680193ebc1c..10bd208e559f 100644
> --- a/include/fpu/softfloat-types.h
> +++ b/include/fpu/softfloat-types.h
> @@ -167,6 +167,7 @@ typedef struct float_status {
>      bool default_nan_mode;
>      /* not always used -- see snan_bit_is_one() in
>      softfloat-specialize.h */

and then expand this comment:

    /* the flags bellow are not used on all specializations and may
     * constant fold away (see snan_bit_is_one()/no_signalling_nans() in
     * softfloat-specialize.h)
     */

>      bool snan_bit_is_one;
> +    bool no_signaling_nans;
>  } float_status;
>  
>  #endif /* SOFTFLOAT_TYPES_H */


-- 
Alex Bennée


  reply	other threads:[~2020-07-07 10:28 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-06 23:47 [PATCH 00/21] target/xtensa: implement double precision FPU Max Filippov
2020-07-06 23:47 ` [PATCH 01/21] softfloat: make NO_SIGNALING_NANS runtime property Max Filippov
2020-07-07 10:28   ` Alex Bennée [this message]
2020-07-08 17:41   ` Philippe Mathieu-Daudé
2020-07-06 23:47 ` [PATCH 02/21] softfloat: pass float_status pointer to pickNaN Max Filippov
2020-07-07 10:29   ` Alex Bennée
2020-07-06 23:47 ` [PATCH 03/21] softfloat: add xtensa specialization for pickNaNMulAdd Max Filippov
2020-07-07 10:29   ` Alex Bennée
2020-07-08 16:07   ` Richard Henderson
2020-07-08 18:11     ` Max Filippov
2020-07-06 23:47 ` [PATCH 04/21] target/xtensa: add geometry to xtensa_get_regfile_by_name Max Filippov
2020-07-06 23:47 ` [PATCH 05/21] target/xtensa: support copying registers up to 64 bits wide Max Filippov
2020-07-08 16:14   ` Richard Henderson
2020-07-08 17:14     ` Max Filippov
2020-07-06 23:47 ` [PATCH 06/21] target/xtensa: rename FPU2000 translators and helpers Max Filippov
2020-07-08 16:18   ` Richard Henderson
2020-07-06 23:47 ` [PATCH 07/21] target/xtensa: move FSR/FCR register accessors Max Filippov
2020-07-08 16:18   ` Richard Henderson
2020-07-06 23:47 ` [PATCH 08/21] target/xtensa: don't access BR regfile directly Max Filippov
2020-07-08 16:18   ` Richard Henderson
2020-07-06 23:47 ` [PATCH 09/21] target/xtensa: add DFP option, registers and opcodes Max Filippov
2020-07-08 16:25   ` Richard Henderson
2020-07-08 17:37     ` Max Filippov
2020-07-09  0:19       ` Richard Henderson
2020-07-09  5:14         ` Max Filippov
2020-07-06 23:47 ` [PATCH 10/21] target/xtensa: implement FPU division and square root Max Filippov
2020-07-06 23:47 ` [PATCH 11/21] tests/tcg/xtensa: fix test execution on ISS Max Filippov
2020-07-06 23:47 ` [PATCH 12/21] tests/tcg/xtensa: update test_fp0_arith for DFPU Max Filippov
2020-07-06 23:47 ` [PATCH 13/21] tests/tcg/xtensa: expand madd tests Max Filippov
2020-07-06 23:47 ` [PATCH 14/21] tests/tcg/xtensa: update test_fp0_conv for DFPU Max Filippov
2020-07-06 23:47 ` [PATCH 15/21] tests/tcg/xtensa: update test_fp1 " Max Filippov
2020-07-06 23:47 ` [PATCH 16/21] tests/tcg/xtensa: update test_lsc " Max Filippov
2020-07-06 23:47 ` [PATCH 17/21] tests/tcg/xtensa: add fp0 div and sqrt tests Max Filippov
2020-07-06 23:47 ` [PATCH 18/21] tests/tcg/xtensa: test double precision load/store Max Filippov
2020-07-06 23:47 ` [PATCH 19/21] tests/tcg/xtensa: add DFP0 arith tests Max Filippov
2020-07-06 23:47 ` [PATCH 20/21] target/xtensa: import DE_233L_FPU core Max Filippov
2020-07-06 23:47 ` [PATCH 21/21] target/xtensa: import DSP3400 core Max Filippov
2020-07-07 11:31 ` [PATCH 00/21] target/xtensa: implement double precision FPU Alex Bennée
2020-07-07 16:56   ` Max Filippov
2020-07-07 19:21     ` Alex Bennée
2020-07-07 23:14       ` Max Filippov
2020-07-08  8:50         ` Alex Bennée

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=871rlnpqki.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=jcmvbkbc@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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 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).