]> gcc.gnu.org Git - gcc.git/commitdiff
*** empty log message ***
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 22 May 1992 10:33:37 +0000 (06:33 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 22 May 1992 10:33:37 +0000 (06:33 -0400)
From-SVN: r1045

gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/cse.c
gcc/expmed.c
gcc/xcoffout.c

index 2e0fb883571d6a332c4df8f514eff521c888e21b..b9d0598bfa3c14c4f47235907b71f7429f60a5dc 100644 (file)
@@ -1406,7 +1406,7 @@ output_epilog (file, size)
        from the function start.  */
     if (*fname == '*')
       ++fname;
-    fprintf (file, "L..tbtab_");
+    fprintf (file, "LT..");
     ASM_OUTPUT_LABEL (file, fname);
 
     /* The .tbtab psuedo-op can only be used for the first eight
@@ -1534,7 +1534,7 @@ output_epilog (file, size)
       fprintf (file, "\t.long %d\n", parm_info);
 
     /* Offset from start of code to tb table.  */
-    fprintf (file, "\t.long L..tbtab_");
+    fprintf (file, "\t.long LT..");
     RS6000_OUTPUT_BASENAME (file, fname);
     fprintf (file, "-.");
     RS6000_OUTPUT_BASENAME (file, fname);
@@ -1621,9 +1621,9 @@ output_toc (file, x, labelno)
   RS6000_OUTPUT_BASENAME (file, name);
 
   if (offset < 0)
-    fprintf (file, "P.N.%d", - offset);
+    fprintf (file, ".N%d", - offset);
   else if (offset)
-    fprintf (file, ".P.%d", offset);
+    fprintf (file, ".P%d", offset);
 
   fprintf (file, "[TC],");
   output_addr_const (file, x);
@@ -1766,7 +1766,7 @@ output_function_profiler (file, labelno)
 
   /* Set up a TOC entry for the profiler label.  */
   toc_section ();
-  fprintf (file, "LPTOC..%d:\n\t.tc\tLP..%d[TC], LP..%d\n",
+  fprintf (file, "LPC..%d:\n\t.tc\tLP..%d[TC],LP..%d\n",
           labelno, labelno, labelno);
   text_section ();
 
@@ -1787,7 +1787,7 @@ output_function_profiler (file, labelno)
 
   /* Load location address into r3, and call mcount.  */
 
-  fprintf (file, "\tl 3,LPTOC..%d(2)\n\tbl .mcount\n", labelno);
+  fprintf (file, "\tl 3,LPC..%d(2)\n\tbl .mcount\n", labelno);
 
   /* Restore parameter registers.  */
 
index 260c52c56443a823a5243d78691312d9b862a329..7cda5d2fb712146fbb6257e5cd2dabe428d8ece2 100644 (file)
@@ -1437,18 +1437,7 @@ toc_section ()                                           \
   RS6000_OUTPUT_BASENAME (FILE, NAME);                         \
   fprintf (FILE, ":\n");                                       \
   if (write_symbols == XCOFF_DEBUG)                            \
-    {                                                          \
-      dbxout_symbol (DECL, 0);                                 \
-      fprintf (FILE, "\t.function .");                         \
-      RS6000_OUTPUT_BASENAME (FILE, NAME);                     \
-      fprintf (FILE, ",.");                                    \
-      RS6000_OUTPUT_BASENAME (FILE, NAME);                     \
-      fprintf (FILE, ",16,044,L..end_");                       \
-      RS6000_OUTPUT_BASENAME (FILE, NAME);                     \
-      fprintf (FILE, "-.");                                    \
-      RS6000_OUTPUT_BASENAME (FILE, NAME);                     \
-      fprintf (FILE, "\n");                                    \
-    }                                                          \
+    xcoffout_declare_function (FILE, DECL, NAME);              \
 }
 
 /* Return non-zero if this entry is to be written into the constant pool
index 692eec5f4c4f0c0741654f0eb490827dd647808d..940a0bedb59cbf04f9cfa4cd258a36833658e7db 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -6112,11 +6112,16 @@ cse_insn (insn, in_libcall_block)
          sets[i].rtl = 0;
        }
 
-      /* No further processing for this assignment if destination
-        is volatile.  */
+      /* If destination is volatile, invalidate it and then do no further
+        processing for this assignment.  */
 
       else if (do_not_record)
-       sets[i].rtl = 0;
+       {
+         if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
+             || GET_CODE (dest) == MEM)
+           invalidate (dest);
+         sets[i].rtl = 0;
+       }
 
       if (sets[i].rtl != 0 && dest != SET_DEST (sets[i].rtl))
        sets[i].dest_hash_code = HASH (SET_DEST (sets[i].rtl), mode);
index 2a02aa58f6ab6fddf2023cb6e35c6884bdd32e18..07a6c272d7b5f4155aed0ba5c7c9c76654453f00 100644 (file)
@@ -2254,6 +2254,14 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
       op1 = convert_to_mode (compute_mode, op1, unsignedp);
     }
 
+  /* If we are computing the remainder and one of the operands is a volatile
+     MEM, copy it into a register.  */
+
+  if (rem_flag && GET_CODE (op0) == MEM && MEM_VOLATILE_P (op0))
+    adjusted_op0 = op0 = force_reg (compute_mode, op0), can_clobber_op0 = 1;
+  if (rem_flag && GET_CODE (op1) == MEM && MEM_VOLATILE_P (op1))
+    op1 = force_reg (compute_mode, op1);
+
   if (target == 0 || GET_MODE (target) != compute_mode)
     target = gen_reg_rtx (compute_mode);
 
index bdee41c9ec8ea2cd46b182f7dd2eb24b5e142352..6e7c50f26e2d639f56d8e3587b9918c4b95b29dd 100644 (file)
@@ -399,6 +399,33 @@ xcoffout_end_block (file, line, n)
   ASM_OUTPUT_LBE (file, line, n);
 }
 
+/* Called at beginning of function (before prologue).
+   Declare function as needed for debugging.  */
+
+void
+xcoffout_declare_function (file, decl, name)
+     FILE *file;
+     tree decl;
+     char *name;
+{
+  char *n = name;
+  int i;
+
+  for (i = 0; name[i]; ++i)
+    {
+      if (name[i] == '[')
+       {
+         n = alloca (i + 1);
+         strncpy (n, name, i);
+         n[i] = '\0';
+         break;
+       }
+    }
+
+  dbxout_symbol (decl, 0);
+  fprintf (file, "\t.function .%s,.%s,16,044,FE..%s-.%s\n", n, n, n, n);
+}
+
 /* Called at beginning of function body (after prologue).
    Record the function's starting line number, so we can output
    relative line numbers for the other lines.
@@ -438,7 +465,7 @@ xcoffout_end_epilogue (file)
   char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
   if (*fname == '*')
     ++fname;
-  fprintf (file, "L..end_");
+  fprintf (file, "FE..");
   ASM_OUTPUT_LABEL (file, fname);
 }
 #endif /* XCOFF_DEBUGGING_INFO */
This page took 0.081316 seconds and 5 git commands to generate.