From: hp Date: Fri, 30 Nov 2001 00:17:49 +0000 (+0000) Subject: * config/cris/cris.c (cris_notice_update_cc): Check first X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=78e05be1ed05162cd4d34bb8cfa241ec4147333c;p=pf3gnuchains%2Fgcc-fork.git * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47463 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8370ef9025d..5e0e316eeb2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2001-11-30 Hans-Peter Nilsson + + * 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 * c-lex.c (init_c_lex): Canonicalize "-" filename to "". diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 6ea1fc1f26d..e5b634ffe92 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -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; } } diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index 40f01a6c40f..e5cd2d11d81 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -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; [...+...]? */ \