summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1992-05-22 10:33:37 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1992-05-22 10:33:37 +0000
commit8cdd0f848f6437b92db0a9bc0870b25d5c71a446 (patch)
treec337b5b6dd0794247e04ab0c390bae4e947b18f0
parent8ed58b727d9af1c1ca6abd98a0c63fbe116067a5 (diff)
downloadgcc-8cdd0f848f6437b92db0a9bc0870b25d5c71a446.tar.gz
*** empty log message ***
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@1045 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/config/rs6000/rs6000.c12
-rw-r--r--gcc/config/rs6000/rs6000.h13
-rw-r--r--gcc/cse.c11
-rw-r--r--gcc/expmed.c8
-rw-r--r--gcc/xcoffout.c29
5 files changed, 51 insertions, 22 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 2e0fb883571..b9d0598bfa3 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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. */
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 260c52c5644..7cda5d2fb71 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -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
diff --git a/gcc/cse.c b/gcc/cse.c
index 692eec5f4c4..940a0bedb59 100644
--- 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);
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 2a02aa58f6a..07a6c272d7b 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -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);
diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c
index bdee41c9ec8..6e7c50f26e2 100644
--- a/gcc/xcoffout.c
+++ b/gcc/xcoffout.c
@@ -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 */