+2004-09-03 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * 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.
+
2004-09-03 Jan Hubicka <jh@suse.cz>
* tree-ssa-operands.c (fini_ssa_operands): ggc_free unused arrays.
if (! delay)
abort ();
- final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
+ final_scan_insn (delay, asm_out_file, 1, 0, 2, NULL);
PATTERN (delay) = gen_blockage ();
INSN_CODE (delay) = -1;
}
epilogue_renumber (&pat, 0);
fprintf (asm_out_file, "\treturn\t%%i7+%d\n",
sparc_skip_caller_unimp ? 12 : 8);
- final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
+ final_scan_insn (delay, asm_out_file, 1, 0, 2, NULL);
}
else
{
output_asm_insn ("sethi\t%%hi(%a0), %%g1", operands);
output_asm_insn ("jmp\t%%g1 + %%lo(%a0)", operands);
- final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
+ final_scan_insn (delay, asm_out_file, 1, 0, 2, NULL);
PATTERN (delay) = gen_blockage ();
INSN_CODE (delay) = -1;
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. */
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
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;
/* 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
#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
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);