From f6ab62e8ead1cb8abd0ad3987d61594ac3812116 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 19 Jan 2007 13:40:54 +0000 Subject: [PATCH] m68k.c (notice_update_cc): If an SFmode move is implemented using move.l... gcc/ * config/m68k/m68k.c (notice_update_cc): If an SFmode move is implemented using move.l, do not use its cc result for floating-point comparisons. From-SVN: r120962 --- gcc/ChangeLog | 6 ++++++ gcc/config/m68k/m68k.c | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b62eb41e43..bfe24382402 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-01-19 Richard Sandiford + + * config/m68k/m68k.c (notice_update_cc): If an SFmode move is + implemented using move.l, do not use its cc result for floating-point + comparisons. + 2007-01-19 Richard Sandiford * config/m68k/m68k.h (EXTRA_CONSTRAINT): Stop the 'T' constraint diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index caa90cd3dcf..78aae6dc0b5 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -2834,12 +2834,18 @@ notice_update_cc (rtx exp, rtx insn) if (cc_status.value2 && modified_in_p (cc_status.value2, insn)) cc_status.value2 = 0; } + /* fmoves to memory or data registers do not set the condition + codes. Normal moves _do_ set the condition codes, but not in + a way that is appropriate for comparison with 0, because -0.0 + would be treated as a negative nonzero number. Note that it + isn't appropriate to conditionalize this restiction on + HONOR_SIGNED_ZEROS because that macro merely indicates whether + we care about the difference between -0.0 and +0.0. */ else if (!FP_REG_P (SET_DEST (exp)) && SET_DEST (exp) != cc0_rtx && (FP_REG_P (SET_SRC (exp)) || GET_CODE (SET_SRC (exp)) == FIX - || GET_CODE (SET_SRC (exp)) == FLOAT_TRUNCATE - || GET_CODE (SET_SRC (exp)) == FLOAT_EXTEND)) + || FLOAT_MODE_P (GET_MODE (SET_DEST (exp))))) CC_STATUS_INIT; /* A pair of move insns doesn't produce a useful overall cc. */ else if (!FP_REG_P (SET_DEST (exp)) -- 2.30.2