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
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);
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);
/* 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 ();
/* 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. */
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
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);
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);
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.
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 */