diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-05-22 10:33:37 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-05-22 10:33:37 +0000 |
commit | 8cdd0f848f6437b92db0a9bc0870b25d5c71a446 (patch) | |
tree | c337b5b6dd0794247e04ab0c390bae4e947b18f0 | |
parent | 8ed58b727d9af1c1ca6abd98a0c63fbe116067a5 (diff) | |
download | gcc-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.c | 12 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 13 | ||||
-rw-r--r-- | gcc/cse.c | 11 | ||||
-rw-r--r-- | gcc/expmed.c | 8 | ||||
-rw-r--r-- | gcc/xcoffout.c | 29 |
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 */ |