From bff379daa7865f61e1527420b290ea4f32efe063 Mon Sep 17 00:00:00 2001 From: rth Date: Tue, 28 Jun 2011 22:25:59 +0000 Subject: [PATCH] arm: Clean out dead code from thumb_pushpop. Renaming to thumb_pop at the same time. The important part of this is removing the text-based dwarf2out calls. * config/arm/arm.c (thumb_pop): Rename from thumb_pushpop. Delete all code and arguments that handled pushes. Update all callers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@175606 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 ++++ gcc/config/arm/arm.c | 81 +++++++++------------------------------------------- 2 files changed, 18 insertions(+), 68 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fafbae50af1..a56e5904fe1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2011-06-28 Richard Henderson + * config/arm/arm.c (thumb_pop): Rename from thumb_pushpop. Delete + all code and arguments that handled pushes. Update all callers. + +2011-06-28 Richard Henderson + * config/arm/arm.c (arm_output_function_prologue): Don't call thumb1_output_function_prologue. (arm_expand_prologue): Avoid dead store. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index be036594a8c..4c6041ab553 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -20188,16 +20188,9 @@ thumb1_emit_multi_reg_push (unsigned long mask, unsigned long real_regs) } /* Emit code to push or pop registers to or from the stack. F is the - assembly file. MASK is the registers to push or pop. PUSH is - nonzero if we should push, and zero if we should pop. For debugging - output, if pushing, adjust CFA_OFFSET by the amount of space added - to the stack. REAL_REGS should have the same number of bits set as - MASK, and will be used instead (in the same order) to describe which - registers were saved - this is used to mark the save slots when we - push high registers after moving them to low registers. */ + assembly file. MASK is the registers to pop. */ static void -thumb_pushpop (FILE *f, unsigned long mask, int push, int *cfa_offset, - unsigned long real_regs) +thumb_pop (FILE *f, unsigned long mask) { int regno; int lo_mask = mask & 0xFF; @@ -20205,7 +20198,7 @@ thumb_pushpop (FILE *f, unsigned long mask, int push, int *cfa_offset, gcc_assert (mask); - if (lo_mask == 0 && !push && (mask & (1 << PC_REGNUM))) + if (lo_mask == 0 && (mask & (1 << PC_REGNUM))) { /* Special case. Do not generate a POP PC statement here, do it in thumb_exit() */ @@ -20213,22 +20206,7 @@ thumb_pushpop (FILE *f, unsigned long mask, int push, int *cfa_offset, return; } - if (push && arm_except_unwind_info (&global_options) == UI_TARGET) - { - fprintf (f, "\t.save\t{"); - for (regno = 0; regno < 15; regno++) - { - if (real_regs & (1 << regno)) - { - if (real_regs & ((1 << regno) -1)) - fprintf (f, ", "); - asm_fprintf (f, "%r", regno); - } - } - fprintf (f, "}\n"); - } - - fprintf (f, "\t%s\t{", push ? "push" : "pop"); + fprintf (f, "\tpop\t{"); /* Look at the low registers first. */ for (regno = 0; regno <= LAST_LO_REGNUM; regno++, lo_mask >>= 1) @@ -20244,17 +20222,7 @@ thumb_pushpop (FILE *f, unsigned long mask, int push, int *cfa_offset, } } - if (push && (mask & (1 << LR_REGNUM))) - { - /* Catch pushing the LR. */ - if (mask & 0xFF) - fprintf (f, ", "); - - asm_fprintf (f, "%r", LR_REGNUM); - - pushed_words++; - } - else if (!push && (mask & (1 << PC_REGNUM))) + if (mask & (1 << PC_REGNUM)) { /* Catch popping the PC. */ if (TARGET_INTERWORK || TARGET_BACKTRACE @@ -20278,23 +20246,6 @@ thumb_pushpop (FILE *f, unsigned long mask, int push, int *cfa_offset, } fprintf (f, "}\n"); - - if (push && pushed_words && dwarf2out_do_frame ()) - { - char *l = dwarf2out_cfi_label (false); - int pushed_mask = real_regs; - - *cfa_offset += pushed_words * 4; - dwarf2out_def_cfa (l, SP_REGNUM, *cfa_offset); - - pushed_words = 0; - pushed_mask = real_regs; - for (regno = 0; regno <= 14; regno++, pushed_mask >>= 1) - { - if (pushed_mask & 1) - dwarf2out_reg_save (l, regno, 4 * pushed_words++ - *cfa_offset); - } - } } /* Generate code to return from a thumb function. @@ -20440,8 +20391,7 @@ thumb_exit (FILE *f, int reg_containing_return_addr) } /* Pop as many registers as we can. */ - thumb_pushpop (f, regs_available_for_popping, FALSE, NULL, - regs_available_for_popping); + thumb_pop (f, regs_available_for_popping); /* Process the registers we popped. */ if (reg_containing_return_addr == -1) @@ -20522,8 +20472,7 @@ thumb_exit (FILE *f, int reg_containing_return_addr) int popped_into; int move_to; - thumb_pushpop (f, regs_available_for_popping, FALSE, NULL, - regs_available_for_popping); + thumb_pop (f, regs_available_for_popping); /* We have popped either FP or SP. Move whichever one it is into the correct register. */ @@ -20543,8 +20492,7 @@ thumb_exit (FILE *f, int reg_containing_return_addr) { int popped_into; - thumb_pushpop (f, regs_available_for_popping, FALSE, NULL, - regs_available_for_popping); + thumb_pop (f, regs_available_for_popping); popped_into = number_of_first_bit_set (regs_available_for_popping); @@ -20876,7 +20824,7 @@ thumb_unexpanded_epilogue (void) mask &= (2 << regno) - 1; /* A noop if regno == 8 */ /* Pop the values into the low register(s). */ - thumb_pushpop (asm_out_file, mask, 0, NULL, mask); + thumb_pop (asm_out_file, mask); /* Move the value(s) into the high registers. */ for (regno = 0; regno <= LAST_LO_REGNUM; regno++) @@ -20908,12 +20856,11 @@ thumb_unexpanded_epilogue (void) structure was created which includes an adjusted stack pointer, so just pop everything. */ if (live_regs_mask) - thumb_pushpop (asm_out_file, live_regs_mask, FALSE, NULL, - live_regs_mask); + thumb_pop (asm_out_file, live_regs_mask); /* We have either just popped the return address into the PC or it is was kept in LR for the entire function. - Note that thumb_pushpop has already called thumb_exit if the + Note that thumb_pop has already called thumb_exit if the PC was in the list. */ if (!had_to_push_lr) thumb_exit (asm_out_file, LR_REGNUM); @@ -20922,8 +20869,7 @@ thumb_unexpanded_epilogue (void) { /* Pop everything but the return address. */ if (live_regs_mask) - thumb_pushpop (asm_out_file, live_regs_mask, FALSE, NULL, - live_regs_mask); + thumb_pop (asm_out_file, live_regs_mask); if (had_to_push_lr) { @@ -20935,8 +20881,7 @@ thumb_unexpanded_epilogue (void) } /* Get the return address into a temporary register. */ - thumb_pushpop (asm_out_file, 1 << LAST_ARG_REGNUM, 0, NULL, - 1 << LAST_ARG_REGNUM); + thumb_pop (asm_out_file, 1 << LAST_ARG_REGNUM); if (size > 12) { -- 2.11.0