From: "Alex Bennée" <alex.bennee@linaro.org>
To: Laurent Vivier <laurent@vivier.eu>
Cc: Peter Maydell <peter.maydell@linaro.org>,
KONRAD Frederic <frederic.konrad@adacore.com>,
philmd@redhat.com, qemu-devel@nongnu.org,
Aurelien Jarno <aurelien@aurel32.net>
Subject: Re: [PATCH 1/2] softfloat: m68k: infinity is a valid encoding
Date: Wed, 29 Apr 2020 21:51:05 +0100 [thread overview]
Message-ID: <87pnbqj9s6.fsf@linaro.org> (raw)
In-Reply-To: <1a78341c-b481-c9f2-f8fd-f50ab3bf197f@vivier.eu>
Laurent Vivier <laurent@vivier.eu> writes:
> Le 29/04/2020 à 11:26, Alex Bennée a écrit :
>>
>> Laurent Vivier <laurent@vivier.eu> writes:
>>
>>> Le 28/04/2020 à 20:43, Alex Bennée a écrit :
>>>>
>>>> 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?
>>>
>>> On my side, in the past when I started to implement m68k FPU, I used
>>> TestFloat and SoftFloat I have ported to m68k and I compare the result
>>> in QEMU and in a Quadra 800.
>>
>> Surely TestFloat and SoftFloat is all emulation though?
>>
>> Anyway if you have a Quadra 800 running Linux could you generate some
>> .ref files for the float_convs and float_madds test cases. The binaries
>> are static so you should just be able to copy them and run.
>>
>>
>
> Here are the files I have generated on Q800.
So running those with:
run-float_convs: QEMU_OPTS += -cpu m68040
run-float_madds: QEMU_OPTS += -cpu m68040
We see the m68k float needs a fair bit of work from the get go:
Reference qemu-m68k -cou m68040
### Rounding to nearest ### Rounding to nearest
> from single: f32(-nan:0xffbfffff)
> to double: f64(-nan:0x00fff7ffffe0000000) (OK)
> to int32: 2147483647 (OK)
> to int64: 9223372034707292159 (OK)
> to uint32: 2147483647 (OK)
> to uint64: 9223372034707292159 (OK)
from single: f32(-nan:0xffffffff) from single: f32(-nan:0xffffffff)
to double: f64(-nan:0x00ffffffffe0000000) (OK) to double: f64(-nan:0x00ffffffffe0000000) (OK)
to int32: 2147483392 (INVALID) | to int32: 2147483647 (OK)
to int64: 9223370939490631424 (INVALID) | to int64: 9223372034707292159 (OK)
to uint32: 2147483392 (INVALID) | to uint32: 2147483647 (OK)
to uint64: 9223370939490631424 (INVALID) | to uint64: 9223372034707292159 (OK)
from single: f32(-nan:0xffffffff) | from single: f32(nan:0x7fffffff)
to double: f64(-nan:0x00ffffffffe0000000) (OK) | to double: f64(nan:0x007fffffffe0000000) (OK)
to int32: 2147483392 (INVALID) | to int32: 2147483647 (OK)
to int64: 9223370939490631424 (INVALID) | to int64: 9223372034707292159 (OK)
to uint32: 2147483392 (INVALID) | to uint32: 2147483647 (OK)
to uint64: 9223370939490631424 (INVALID) | to uint64: 9223372034707292159 (OK)
from single: f32(-inf:0xff800000) <
to double: f64(-inf:0x00fff0000000000000) (OK) <
to int32: -2147483648 (INVALID) <
to int64: 1 (INVALID) <
to uint32: -2147483648 (INVALID) <
to uint64: -9223372034707292160 (INVALID) <
from single: f32(-0x1.fffffe00000000000000p+127:0xff7fffff) from single: f32(-0x1.fffffe00000000000000p+127:0xff7fffff)
to double: f64(-0x1.fffffe00000000000000p+127:0x00c7efffffe to double: f64(-0x1.fffffe00000000000000p+127:0x00c7efffffe
to int32: -2147483648 (INVALID) | to int32: -2147483648 (OK)
to int64: 1 (INVALID) | to int64: 1 (OK)
to uint32: -2147483648 (INVALID) | to uint32: -2147483648 (OK)
to uint64: -9223372034707292160 (INVALID) | to uint64: -9223372034707292160 (OK)
snipped a bunch more.
--
Alex Bennée
next prev parent reply other threads:[~2020-04-29 20:53 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
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 [this message]
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=87pnbqj9s6.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 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.