From: "Alex Bennée" <alex.bennee@linaro.org>
To: KONRAD Frederic <frederic.konrad@adacore.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
philmd@redhat.com, qemu-devel@nongnu.org,
Aurelien Jarno <aurelien@aurel32.net>,
laurent@vivier.eu
Subject: Re: [PATCH 1/2] softfloat: m68k: infinity is a valid encoding
Date: Tue, 28 Apr 2020 19:43:54 +0100 [thread overview]
Message-ID: <87d07rlac5.fsf@linaro.org> (raw)
In-Reply-To: <1588094279-17913-2-git-send-email-frederic.konrad@adacore.com>
KONRAD Frederic <frederic.konrad@adacore.com> writes:
> The MC68881 say about infinities (3.2.4):
>
> "*For the extended precision format, the most significant bit of the
> mantissa (the integer bit) is a don't care."
>
> https://www.nxp.com/docs/en/reference-manual/MC68881UM.pdf
>
> The m68k extended format is implemented with the floatx80 and
> floatx80_invalid_encoding currently treats 0x7fff00000000000000000000 as
> an invalid encoding. This patch fixes floatx80_invalid_encoding so it
> accepts that the most significant bit of the mantissa can be 0.
>
> This bug can be revealed with the following code which pushes extended
> infinity on the stack as a double and then reloads it as a double. It
> should normally be converted and read back as infinity and is currently
> read back as nan:
Do you have any real HW on which you could record some .ref files for
the various multiarch float tests we have (float_convs/float_madds)?
Does this different of invalid encoding show up when you add them?
>
> .global _start
> .text
> _start:
> lea val, %a0
> lea fp, %fp
> fmovex (%a0), %fp0
> fmoved %fp0, %fp@(-8)
> fmoved %fp@(-8), %fp0
> end:
> bra end
>
> .align 0x4
> val:
> .fill 1, 4, 0x7fff0000
> .fill 1, 4, 0x00000000
> .fill 1, 4, 0x00000000
> .align 0x4
> .fill 0x100, 1, 0
> fp:
>
> -------------
>
> (gdb) tar rem :1234
> Remote debugging using :1234
> _start () at main.S:5
> 5 lea val, %a0
> (gdb) display $fp0
> 1: $fp0 = nan(0xffffffffffffffff)
> (gdb) si
> 6 lea fp, %fp
> 1: $fp0 = nan(0xffffffffffffffff)
> (gdb) si
> _start () at main.S:7
> 7 fmovex (%a0), %fp0
> 1: $fp0 = nan(0xffffffffffffffff)
> (gdb) si
> 8 fmoved %fp0, %fp@(-8)
> 1: $fp0 = inf
> (gdb) si
> 9 fmoved %fp@(-8), %fp0
> 1: $fp0 = inf
> (gdb) si
> end () at main.S:12
> 12 bra end
> 1: $fp0 = nan(0xfffffffffffff800)
> (gdb) x/1xg $fp-8
> 0x40000120 <val+260>: 0x7fffffffffffffff
>
> Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
> ---
> include/fpu/softfloat.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
> index ecb8ba0..dc80298 100644
> --- a/include/fpu/softfloat.h
> +++ b/include/fpu/softfloat.h
> @@ -688,7 +688,12 @@ static inline int floatx80_is_any_nan(floatx80 a)
> *----------------------------------------------------------------------------*/
> static inline bool floatx80_invalid_encoding(floatx80 a)
> {
> +#if defined(TARGET_M68K)
> + return (a.low & (1ULL << 63)) == 0 && (((a.high & 0x7FFF) != 0)
> + && (a.high != 0x7FFF));
> +#else
> return (a.low & (1ULL << 63)) == 0 && (a.high & 0x7FFF) != 0;
> +#endif
> }
>
> #define floatx80_zero make_floatx80(0x0000, 0x0000000000000000LL)
--
Alex Bennée
next prev parent reply other threads:[~2020-04-28 18:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-28 17:17 [PATCH 0/2] m68k fpu fixes KONRAD Frederic
2020-04-28 17:17 ` [PATCH 1/2] softfloat: m68k: infinity is a valid encoding KONRAD Frederic
2020-04-28 18:43 ` Alex Bennée [this message]
2020-04-29 8:48 ` Laurent Vivier
2020-04-29 9:26 ` Alex Bennée
2020-04-29 9:43 ` Laurent Vivier
2020-04-29 10:22 ` Alex Bennée
2020-04-29 14:27 ` Laurent Vivier
2020-04-29 20:51 ` Alex Bennée
2020-04-29 8:42 ` Laurent Vivier
2020-04-29 12:33 ` KONRAD Frederic
2020-07-13 10:01 ` Andreas Schwab
2020-06-12 8:31 ` Laurent Vivier
2020-06-15 15:59 ` Fred Konrad
2020-06-15 16:46 ` Laurent Vivier
2020-04-28 17:17 ` [PATCH 2/2] target/m68k: fix gdb for m68xxx KONRAD Frederic
2020-04-29 8:57 ` Laurent Vivier
2020-04-29 9:28 ` Alex Bennée
2020-04-29 9:38 ` Laurent Vivier
2020-04-29 12:25 ` KONRAD Frederic
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=87d07rlac5.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=aurelien@aurel32.net \
--cc=frederic.konrad@adacore.com \
--cc=laurent@vivier.eu \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--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).