Commit c2a47e48 by Richard Kenner

*** empty log message ***

From-SVN: r1045
parent 3ad69266
...@@ -1406,7 +1406,7 @@ output_epilog (file, size) ...@@ -1406,7 +1406,7 @@ output_epilog (file, size)
from the function start. */ from the function start. */
if (*fname == '*') if (*fname == '*')
++fname; ++fname;
fprintf (file, "L..tbtab_"); fprintf (file, "LT..");
ASM_OUTPUT_LABEL (file, fname); ASM_OUTPUT_LABEL (file, fname);
/* The .tbtab psuedo-op can only be used for the first eight /* The .tbtab psuedo-op can only be used for the first eight
...@@ -1534,7 +1534,7 @@ output_epilog (file, size) ...@@ -1534,7 +1534,7 @@ output_epilog (file, size)
fprintf (file, "\t.long %d\n", parm_info); fprintf (file, "\t.long %d\n", parm_info);
/* Offset from start of code to tb table. */ /* Offset from start of code to tb table. */
fprintf (file, "\t.long L..tbtab_"); fprintf (file, "\t.long LT..");
RS6000_OUTPUT_BASENAME (file, fname); RS6000_OUTPUT_BASENAME (file, fname);
fprintf (file, "-."); fprintf (file, "-.");
RS6000_OUTPUT_BASENAME (file, fname); RS6000_OUTPUT_BASENAME (file, fname);
...@@ -1621,9 +1621,9 @@ output_toc (file, x, labelno) ...@@ -1621,9 +1621,9 @@ output_toc (file, x, labelno)
RS6000_OUTPUT_BASENAME (file, name); RS6000_OUTPUT_BASENAME (file, name);
if (offset < 0) if (offset < 0)
fprintf (file, "P.N.%d", - offset); fprintf (file, ".N%d", - offset);
else if (offset) else if (offset)
fprintf (file, ".P.%d", offset); fprintf (file, ".P%d", offset);
fprintf (file, "[TC],"); fprintf (file, "[TC],");
output_addr_const (file, x); output_addr_const (file, x);
...@@ -1766,7 +1766,7 @@ output_function_profiler (file, labelno) ...@@ -1766,7 +1766,7 @@ output_function_profiler (file, labelno)
/* Set up a TOC entry for the profiler label. */ /* Set up a TOC entry for the profiler label. */
toc_section (); 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); labelno, labelno, labelno);
text_section (); text_section ();
...@@ -1787,7 +1787,7 @@ output_function_profiler (file, labelno) ...@@ -1787,7 +1787,7 @@ output_function_profiler (file, labelno)
/* Load location address into r3, and call mcount. */ /* 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. */ /* Restore parameter registers. */
......
...@@ -1437,18 +1437,7 @@ toc_section () \ ...@@ -1437,18 +1437,7 @@ toc_section () \
RS6000_OUTPUT_BASENAME (FILE, NAME); \ RS6000_OUTPUT_BASENAME (FILE, NAME); \
fprintf (FILE, ":\n"); \ fprintf (FILE, ":\n"); \
if (write_symbols == XCOFF_DEBUG) \ if (write_symbols == XCOFF_DEBUG) \
{ \ xcoffout_declare_function (FILE, DECL, NAME); \
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"); \
} \
} }
/* Return non-zero if this entry is to be written into the constant pool /* Return non-zero if this entry is to be written into the constant pool
......
...@@ -6112,11 +6112,16 @@ cse_insn (insn, in_libcall_block) ...@@ -6112,11 +6112,16 @@ cse_insn (insn, in_libcall_block)
sets[i].rtl = 0; sets[i].rtl = 0;
} }
/* No further processing for this assignment if destination /* If destination is volatile, invalidate it and then do no further
is volatile. */ processing for this assignment. */
else if (do_not_record) 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)) if (sets[i].rtl != 0 && dest != SET_DEST (sets[i].rtl))
sets[i].dest_hash_code = HASH (SET_DEST (sets[i].rtl), mode); sets[i].dest_hash_code = HASH (SET_DEST (sets[i].rtl), mode);
......
...@@ -2254,6 +2254,14 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) ...@@ -2254,6 +2254,14 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
op1 = convert_to_mode (compute_mode, op1, 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) if (target == 0 || GET_MODE (target) != compute_mode)
target = gen_reg_rtx (compute_mode); target = gen_reg_rtx (compute_mode);
......
...@@ -399,6 +399,33 @@ xcoffout_end_block (file, line, n) ...@@ -399,6 +399,33 @@ xcoffout_end_block (file, line, n)
ASM_OUTPUT_LBE (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). /* Called at beginning of function body (after prologue).
Record the function's starting line number, so we can output Record the function's starting line number, so we can output
relative line numbers for the other lines. relative line numbers for the other lines.
...@@ -438,7 +465,7 @@ xcoffout_end_epilogue (file) ...@@ -438,7 +465,7 @@ xcoffout_end_epilogue (file)
char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
if (*fname == '*') if (*fname == '*')
++fname; ++fname;
fprintf (file, "L..end_"); fprintf (file, "FE..");
ASM_OUTPUT_LABEL (file, fname); ASM_OUTPUT_LABEL (file, fname);
} }
#endif /* XCOFF_DEBUGGING_INFO */ #endif /* XCOFF_DEBUGGING_INFO */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment