This patch fixes encode_ieee_extended_motorola to generate the canonical infinity matching the bit pattern generated by the fpu (in the Motorola variant of the extended real format the integer bit is ignored on input and cleared on output, unlike the Intel variant). This fixes the ieee/copysign[12].c tests on m68k.
Andreas. * real.c (encode_ieee_extended_motorola): Clear integer bit in the infinity format. --- gcc/real.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/real.c b/gcc/real.c index 231fc96..1c2f709 100644 --- a/gcc/real.c +++ b/gcc/real.c @@ -3481,6 +3481,11 @@ encode_ieee_extended_motorola (const struct real_format *fmt, long *buf, long intermed[3]; encode_ieee_extended (fmt, intermed, r); + if (r->cl == rvc_inf) + /* For infinity clear the explicit integer bit again, so that the + format matches the canonical infinity generated by the FPU. */ + intermed[1] = 0; + /* Motorola chips are assumed always to be big-endian. Also, the padding in a Motorola extended real goes between the exponent and the mantissa. At this point the mantissa is entirely within -- 2.0.1 -- Andreas Schwab, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."