aboutsummaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2004-09-03 22:23:32 +0000
committerEric Botcazou <ebotcazou@libertysurf.fr>2004-09-03 22:23:32 +0000
commit01e62b6f0e3a37c3d90bf57eb6d597b005feef50 (patch)
tree3f96cb5eb38eda11441400b36fe548ce0ee364c2 /gcc/final.c
parente36b2943264267614ae05cf4fc18d6819feaccfd (diff)
* final.c (output_in_slot): New global variable.
(final_scan_insn): Add new state '2' to the 'nopeepholes' parameter. Pass 2 as 'nopeepholes' to self for insns in a SEQUENCE. Set 'output_in_slot' before invoking output_asm_insn. (output_asm_insn): Add a space after the tab if 'output_in_slot' is set. * config/sparc/sparc.c (output_return): Pass 2 as 'nopeepholes' to final_scan_insn. (output_sibcall): Likewise. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@87056 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/final.c')
-rw-r--r--gcc/final.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/gcc/final.c b/gcc/final.c
index fe4eaa67371..e1c01483c5f 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -200,6 +200,10 @@ static int app_on;
rtx final_sequence;
+/* True if we are outputting insns in a delay slot. This is used
+ to prettify the assembly. */
+static bool output_in_slot;
+
#ifdef ASSEMBLER_DIALECT
/* Number of the assembler dialect to use, starting at 0. */
@@ -1663,8 +1667,11 @@ scan_ahead_for_unlikely_executed_note (rtx insn)
is the insn being scanned.
Value returned is the next insn to be scanned.
- NOPEEPHOLES is the flag to disallow peephole processing (currently
- used for within delayed branch sequence output).
+ NOPEEPHOLES is used to disallow peephole processing:
+ - 0: peepholes are allowed,
+ - 1: peepholes are not allowed,
+ - 2: peepholes are not allowed and we are in the
+ slot of a delayed branch.
SEEN is used to track the end of the prologue, for emitting
debug information. We force the emission of a line note after
@@ -1674,8 +1681,7 @@ scan_ahead_for_unlikely_executed_note (rtx insn)
rtx
final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
- int prescan, int nopeepholes ATTRIBUTE_UNUSED,
- int *seen)
+ int prescan, int nopeepholes, int *seen)
{
#ifdef HAVE_cc0
rtx set;
@@ -2195,7 +2201,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
/* We loop in case any instruction in a delay slot gets
split. */
do
- insn = final_scan_insn (insn, file, 0, prescan, 1, seen);
+ insn = final_scan_insn (insn, file, 0, prescan, 2, seen);
while (insn != next);
}
#ifdef DBR_OUTPUT_SEQEND
@@ -2527,7 +2533,9 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
#endif
/* Output assembler code from the template. */
+ output_in_slot = (nopeepholes > 1);
output_asm_insn (template, recog_data.operand);
+ output_in_slot = false;
/* If necessary, report the effect that the instruction has on
the unwind info. We've already done this for delay slots
@@ -2988,6 +2996,8 @@ output_asm_insn (const char *template, rtx *operands)
memset (opoutput, 0, sizeof opoutput);
p = template;
putc ('\t', asm_out_file);
+ if (output_in_slot)
+ putc (' ', asm_out_file);
#ifdef ASM_OUTPUT_OPCODE
ASM_OUTPUT_OPCODE (asm_out_file, p);