mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-14 11:29:51 +08:00
cris.c (cris_notice_update_cc): Check first destination also against overlap with cc_status.value2 and second...
* config/cris/cris.c (cris_notice_update_cc): Check first destination also against overlap with cc_status.value2 and second destination against overlap with cc_status.value1. For overlaps, clear overlapped value, don't just CC_STATUS_INIT. * config/cris/cris.h (EXTRA_CONSTRAINT_T): Fix spacing and FIXME. (LINK_SPEC): Remove whitespace at end of line. From-SVN: r47463
This commit is contained in:
parent
c65fd410e9
commit
d3295e2542
@ -1,3 +1,13 @@
|
||||
2001-11-30 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* config/cris/cris.c (cris_notice_update_cc): Check first
|
||||
destination also against overlap with cc_status.value2 and second
|
||||
destination against overlap with cc_status.value1. For overlaps,
|
||||
clear overlapped value, don't just CC_STATUS_INIT.
|
||||
|
||||
* config/cris/cris.h (EXTRA_CONSTRAINT_T): Fix spacing and FIXME.
|
||||
(LINK_SPEC): Remove whitespace at end of line.
|
||||
|
||||
2001-11-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* c-lex.c (init_c_lex): Canonicalize "-" filename to "".
|
||||
|
@ -1953,17 +1953,34 @@ cris_notice_update_cc (exp, insn)
|
||||
{
|
||||
/* For "move.S rz,[rx=ry+o]" and "clear.S [rx=ry+o]",
|
||||
say flags are not changed, except for overlap. */
|
||||
if ((cc_status.value1
|
||||
&& cris_reg_overlap_mentioned_p (XEXP
|
||||
(XVECEXP
|
||||
(exp, 0, 0), 0),
|
||||
cc_status.value1))
|
||||
|| (cc_status.value2
|
||||
&& cris_reg_overlap_mentioned_p (XEXP
|
||||
(XVECEXP
|
||||
(exp, 0, 1), 0),
|
||||
cc_status.value2)))
|
||||
CC_STATUS_INIT;
|
||||
if (cc_status.value1
|
||||
&& cris_reg_overlap_mentioned_p (XEXP
|
||||
(XVECEXP
|
||||
(exp, 0, 0), 0),
|
||||
cc_status.value1))
|
||||
cc_status.value1 = 0;
|
||||
|
||||
if (cc_status.value1
|
||||
&& cris_reg_overlap_mentioned_p (XEXP
|
||||
(XVECEXP
|
||||
(exp, 0, 1), 0),
|
||||
cc_status.value1))
|
||||
cc_status.value1 = 0;
|
||||
|
||||
if (cc_status.value2
|
||||
&& cris_reg_overlap_mentioned_p (XEXP
|
||||
(XVECEXP
|
||||
(exp, 0, 0), 0),
|
||||
cc_status.value2))
|
||||
cc_status.value2 = 0;
|
||||
|
||||
if (cc_status.value2
|
||||
&& cris_reg_overlap_mentioned_p (XEXP
|
||||
(XVECEXP
|
||||
(exp, 0, 1), 0),
|
||||
cc_status.value2))
|
||||
cc_status.value2 = 0;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ extern const char *cris_elinux_stacksize_str;
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
"%{v:--verbose}\
|
||||
%(link_subtarget)"
|
||||
%(link_subtarget)"
|
||||
|
||||
/* For the cris-*-elf subtarget. */
|
||||
#define CRIS_LINK_SUBTARGET_SPEC \
|
||||
@ -775,16 +775,13 @@ enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES};
|
||||
|| CONSTANT_INDEX_P (X) \
|
||||
)
|
||||
|
||||
/* FIXME: Bug below: We can't have XEXP (X, 0)) both be MEM and a
|
||||
CONSTANT_P. Parens don't match indentation. */
|
||||
|
||||
#define EXTRA_CONSTRAINT_T(X) \
|
||||
( \
|
||||
/* Three-address-operands. All are indirect-memory: */ \
|
||||
/* Memory three-address operand. All are indirect-memory: */ \
|
||||
GET_CODE (X) == MEM \
|
||||
&& ((GET_CODE (XEXP (X, 0)) == MEM \
|
||||
/* Double indirect: [[reg]] or [[reg+]]? */ \
|
||||
&& (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \
|
||||
/* Double indirect: [[reg]] or [[reg+]]? */ \
|
||||
&& (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \
|
||||
/* Just an explicite indirect reference: [const]? */ \
|
||||
|| CONSTANT_P (XEXP (X, 0)) \
|
||||
/* Something that is indexed; [...+...]? */ \
|
||||
|
Loading…
Reference in New Issue
Block a user