From d3295e2542fa696d591b4ffb6576fb4a57827f53 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Fri, 30 Nov 2001 00:17:49 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/cris/cris.c | 39 ++++++++++++++++++++++++++++----------- gcc/config/cris/cris.h | 11 ++++------- 3 files changed, 42 insertions(+), 18 deletions(-) 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; [...+...]? */ \ -- 2.30.2