tests/mpq/t-get_d.c failure on m68k-linux
Aldy Hernandez
aldyh at redhat.com
Fri Feb 1 14:58:53 CET 2013
[reposting to the correct mailing list]
Hi folks.
[Disclaimer: I am not a 68k guru. Well, for that matter neither am I an
FP guru...:)].
Mikael reported a bug while running the GMP testsuite on GCC's bugzilla:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55939#c11
The problem here stems from the equality comparison in check_random() in
tests/mpq/t-get_d.c:
if (d != d2)
{
printf ("ERROR (check_random test %d): bad mpq_set_d...
...
...
}
As I discuss in the PR, d and d2 reside in %fp2 and %fp3. The
comparison in the FPRs happen in extended precision, but FP moves
to/from memory happen in double precision format, so some precision is
lost if floating point variables get shuffled between FPRs and memory.
This means that EQ/NE comparisons with FP values on 68k are extremely
problematic because the programmer has no way of knowing if the values
are in memory or in the FP registers. For example, the compiler may
have spilled an FPR to memory and read it back, thus losing some
precision, causing the equality to fail.
I suggest running the testcase (and possibly all of GMP) with
-ffloat-store on m68k.
This is a longstanding and known issue on architectures where the
precision of the FPRs and their representation in memory differ. See
the PR notes above, and also:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323
The original bug was reported on gmp-5.0.5 although I see that gmp-5.1.0
also has the EQ/NE comparison.
I hope this helps.
Aldy
More information about the gmp-bugs
mailing list