mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-11 14:11:31 +08:00
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
This commit is contained in:
parent
fe0cc77654
commit
f6ab62e8ea
@ -1,3 +1,9 @@
|
||||
2007-01-19 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* 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 <richard@codesourcery.com>
|
||||
|
||||
* config/m68k/m68k.h (EXTRA_CONSTRAINT): Stop the 'T' constraint
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user