OSDN Git Service

* config/cris/cris.c (cris_notice_update_cc): Check first
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Nov 2001 00:17:49 +0000 (00:17 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Nov 2001 00:17:49 +0000 (00:17 +0000)
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

gcc/ChangeLog
gcc/config/cris/cris.c
gcc/config/cris/cris.h

index 8370ef9..5e0e316 100644 (file)
@@ -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 "".
index 6ea1fc1..e5b634f 100644 (file)
@@ -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;
                }
            }
index 40f01a6..e5cd2d1 100644 (file)
@@ -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; [...+...]?  */                     \