Commit d3295e25 by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

cris.c (cris_notice_update_cc): Check first destination also against overlap…

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
parent c65fd410
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> 2001-11-29 Jakub Jelinek <jakub@redhat.com>
* c-lex.c (init_c_lex): Canonicalize "-" filename to "". * c-lex.c (init_c_lex): Canonicalize "-" filename to "".
......
...@@ -1953,17 +1953,34 @@ cris_notice_update_cc (exp, insn) ...@@ -1953,17 +1953,34 @@ cris_notice_update_cc (exp, insn)
{ {
/* For "move.S rz,[rx=ry+o]" and "clear.S [rx=ry+o]", /* For "move.S rz,[rx=ry+o]" and "clear.S [rx=ry+o]",
say flags are not changed, except for overlap. */ say flags are not changed, except for overlap. */
if ((cc_status.value1 if (cc_status.value1
&& cris_reg_overlap_mentioned_p (XEXP && cris_reg_overlap_mentioned_p (XEXP
(XVECEXP (XVECEXP
(exp, 0, 0), 0), (exp, 0, 0), 0),
cc_status.value1)) cc_status.value1))
|| (cc_status.value2 cc_status.value1 = 0;
&& cris_reg_overlap_mentioned_p (XEXP
(XVECEXP if (cc_status.value1
(exp, 0, 1), 0), && cris_reg_overlap_mentioned_p (XEXP
cc_status.value2))) (XVECEXP
CC_STATUS_INIT; (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; return;
} }
} }
......
...@@ -204,7 +204,7 @@ extern const char *cris_elinux_stacksize_str; ...@@ -204,7 +204,7 @@ extern const char *cris_elinux_stacksize_str;
#undef LINK_SPEC #undef LINK_SPEC
#define LINK_SPEC \ #define LINK_SPEC \
"%{v:--verbose}\ "%{v:--verbose}\
%(link_subtarget)" %(link_subtarget)"
/* For the cris-*-elf subtarget. */ /* For the cris-*-elf subtarget. */
#define CRIS_LINK_SUBTARGET_SPEC \ #define CRIS_LINK_SUBTARGET_SPEC \
...@@ -775,16 +775,13 @@ enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES}; ...@@ -775,16 +775,13 @@ enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES};
|| CONSTANT_INDEX_P (X) \ || 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) \ #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 (X) == MEM \
&& ((GET_CODE (XEXP (X, 0)) == MEM \ && ((GET_CODE (XEXP (X, 0)) == MEM \
/* Double indirect: [[reg]] or [[reg+]]? */ \ /* Double indirect: [[reg]] or [[reg+]]? */ \
&& (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \ && (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \
/* Just an explicite indirect reference: [const]? */ \ /* Just an explicite indirect reference: [const]? */ \
|| CONSTANT_P (XEXP (X, 0)) \ || CONSTANT_P (XEXP (X, 0)) \
/* Something that is indexed; [...+...]? */ \ /* Something that is indexed; [...+...]? */ \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment