ns32k-protos.h: Add a prototype for ns32k_notice_update_cc.
authorKazu Hirata <kazu@cs.umass.edu>
Sun, 7 Mar 2004 04:45:05 +0000 (04:45 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Sun, 7 Mar 2004 04:45:05 +0000 (04:45 +0000)
* config/ns32k/ns32k-protos.h: Add a prototype for
ns32k_notice_update_cc.
* config/ns32k/ns32k.c (ns32k_notice_update_cc): New.
* config/ns32k/ns32k.h (NOTICE_UPDATE_CC): Call
ns32k_notice_update_cc.

From-SVN: r79053

gcc/ChangeLog
gcc/config/ns32k/ns32k-protos.h
gcc/config/ns32k/ns32k.c
gcc/config/ns32k/ns32k.h

index 2fe6cbb639576cb6e333942439b443e0171249c5..4ca0747394288184f4b904f1f7a1c35cfad3cec5 100644 (file)
@@ -1,3 +1,11 @@
+2004-03-06  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * config/ns32k/ns32k-protos.h: Add a prototype for
+       ns32k_notice_update_cc.
+       * config/ns32k/ns32k.c (ns32k_notice_update_cc): New.
+       * config/ns32k/ns32k.h (NOTICE_UPDATE_CC): Call
+       ns32k_notice_update_cc.
+
 2004-03-06  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * config/s390/s390.md ("load_multiple", "*load_multiple_di",
index b5a2328c3c69e462ee23568bc2aa756559e268fc..76ab46de01e7d713f3246b0b3ebbd93c0bac1bd3 100644 (file)
@@ -34,6 +34,7 @@ extern void print_operand_address (FILE *, rtx);
 extern const char *output_move_double (rtx *);
 extern const char *output_shift_insn (rtx *);
 extern int symbolic_reference_mentioned_p (rtx);
+extern void ns32k_notice_update_cc (rtx, rtx);
 #endif /* RTX_CODE */
 
 #ifdef TREE_CODE
index 5b633ec0233c68405f909ac531ed73c317bc340e..0bfa7dd25598ce80907e9ed10957f416514494a2 100644 (file)
@@ -1568,3 +1568,74 @@ ns32k_struct_value_rtx (tree fntype ATTRIBUTE_UNUSED,
 {
   return gen_rtx_REG (Pmode, NS32K_STRUCT_VALUE_REGNUM);
 }
+
+/* Worker function for NOTICE_UPDATE_CC.  */
+
+void
+ns32k_notice_update_cc (rtx exp, rtx insn ATTRIBUTE_UNUSED)
+{
+  if (GET_CODE (exp) == SET)
+    {
+      if (GET_CODE (SET_DEST (exp)) == CC0)
+       {
+         cc_status.flags = 0;
+         cc_status.value1 = SET_DEST (exp);
+         cc_status.value2 = SET_SRC (exp);
+       }
+      else if (GET_CODE (SET_SRC (exp)) == CALL)
+       {
+         CC_STATUS_INIT;
+       }
+      else if (GET_CODE (SET_DEST (exp)) == REG)
+       {
+         if (cc_status.value1
+             && reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value1))
+           cc_status.value1 = 0;
+         if (cc_status.value2
+             && reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value2))
+           cc_status.value2 = 0;
+       }
+      else if (GET_CODE (SET_DEST (exp)) == MEM)
+       {
+         CC_STATUS_INIT;
+       }
+    }
+  else if (GET_CODE (exp) == PARALLEL
+          && GET_CODE (XVECEXP (exp, 0, 0)) == SET)
+    {
+      if (GET_CODE (SET_DEST (XVECEXP (exp, 0, 0))) == CC0)
+       {
+         cc_status.flags = 0;
+         cc_status.value1 = SET_DEST (XVECEXP (exp, 0, 0));
+         cc_status.value2 = SET_SRC (XVECEXP (exp, 0, 0));
+       }
+      else if (GET_CODE (SET_DEST (XVECEXP (exp, 0, 0))) == REG)
+       {
+         if (cc_status.value1
+             && reg_overlap_mentioned_p (SET_DEST (XVECEXP (exp, 0, 0)),
+                                         cc_status.value1))
+           cc_status.value1 = 0;
+         if (cc_status.value2
+             && reg_overlap_mentioned_p (SET_DEST (XVECEXP (exp, 0, 0)),
+                                         cc_status.value2))
+           cc_status.value2 = 0;
+       }
+      else if (GET_CODE (SET_DEST (XVECEXP (exp, 0, 0))) == MEM)
+       {
+         CC_STATUS_INIT;
+       }
+    }
+  else if (GET_CODE (exp) == CALL)
+    {
+      /* all bets are off */
+      CC_STATUS_INIT;
+    }
+  else
+    {
+      /* nothing happens? CC_STATUS_INIT; */
+    }
+  if (cc_status.value1 && GET_CODE (cc_status.value1) == REG
+      && cc_status.value2
+      && reg_overlap_mentioned_p (cc_status.value1, cc_status.value2))
+    abort ();
+}
index a31eba61cf23628bf4081cbb11852b8eb0ef1dff..b4b1455b859273c896dc42e20755d58b4eb02890 100644 (file)
@@ -1174,51 +1174,7 @@ __transfer_from_trampoline ()            \
    Do not alter them if the instruction would not alter the cc's.  */
 
 #define NOTICE_UPDATE_CC(EXP, INSN) \
-{ if (GET_CODE (EXP) == SET)                                   \
-    { if (GET_CODE (SET_DEST (EXP)) == CC0)                    \
-       { cc_status.flags = 0;                                  \
-         cc_status.value1 = SET_DEST (EXP);                    \
-         cc_status.value2 = SET_SRC (EXP);                     \
-       }                                                       \
-      else if (GET_CODE (SET_SRC (EXP)) == CALL)               \
-       { CC_STATUS_INIT; }                                     \
-      else if (GET_CODE (SET_DEST (EXP)) == REG)               \
-       { if (cc_status.value1                                  \
-             && reg_overlap_mentioned_p (SET_DEST (EXP), cc_status.value1)) \
-           cc_status.value1 = 0;                               \
-         if (cc_status.value2                                  \
-             && reg_overlap_mentioned_p (SET_DEST (EXP), cc_status.value2)) \
-           cc_status.value2 = 0;                               \
-       }                                                       \
-      else if (GET_CODE (SET_DEST (EXP)) == MEM)               \
-       { CC_STATUS_INIT; }                                     \
-    }                                                          \
-  else if (GET_CODE (EXP) == PARALLEL                          \
-          && GET_CODE (XVECEXP (EXP, 0, 0)) == SET)            \
-    { if (GET_CODE (SET_DEST (XVECEXP (EXP, 0, 0))) == CC0)    \
-       { cc_status.flags = 0;                                  \
-         cc_status.value1 = SET_DEST (XVECEXP (EXP, 0, 0));    \
-         cc_status.value2 = SET_SRC (XVECEXP (EXP, 0, 0));     \
-       }                                                       \
-      else if (GET_CODE (SET_DEST (XVECEXP (EXP, 0, 0))) == REG) \
-       { if (cc_status.value1                                  \
-             && reg_overlap_mentioned_p (SET_DEST (XVECEXP (EXP, 0, 0)), cc_status.value1)) \
-           cc_status.value1 = 0;                               \
-         if (cc_status.value2                                  \
-             && reg_overlap_mentioned_p (SET_DEST (XVECEXP (EXP, 0, 0)), cc_status.value2)) \
-           cc_status.value2 = 0;                               \
-       }                                                       \
-      else if (GET_CODE (SET_DEST (XVECEXP (EXP, 0, 0))) == MEM) \
-       { CC_STATUS_INIT; }                                     \
-    }                                                          \
-  else if (GET_CODE (EXP) == CALL)                             \
-    { /* all bets are off */ CC_STATUS_INIT; }                 \
-  else { /* nothing happens? CC_STATUS_INIT; */}               \
-  if (cc_status.value1 && GET_CODE (cc_status.value1) == REG   \
-      && cc_status.value2                                      \
-      && reg_overlap_mentioned_p (cc_status.value1, cc_status.value2)) \
-    abort ();                  \
-}
+  ns32k_notice_update_cc ((EXP), (INSN))
 
 /* Describe the costs of the following register moves which are discouraged:
    1.) Moves between the Floating point registers and the frame pointer and stack pointer