On 18/06/11 20:02, Richard Henderson wrote: > I couldn't find anything terribly tricky about the conversion. > > The existing push_mult pattern would service thumb1 with just > a tweak or two to the memory predicate and the length. > > The existing emit_multi_reg_push wasn't set up to handle a > complete switch of registers for unwind info. I thought about > trying to merge them, but thought chickened out. > > I havn't cleaned out the code that is now dead in thumb_pushpop. > I'd been thinking about maybe converting epilogues completely > to rtl as well, which would allow the function to be deleted > completely, rather than incrementally. > > I'm unsure what testing should be applied. I'm currently doing > arm-elf, which does at least have a thumb1 multilib, and uses > newlib so I don't have to fiddle with setting up a full native > cross environment. What else should be done? arm-eabi? >
Testing this on arm-eabi is essential since this may affect C++ unwind table generation (I can't see any obvious problems, but you never know). > This is the only substantive bit of code left that tries to emit > dwarf2 unwind info while emitting assembly as text. So I'd like > to get rid of this as soon as possible... > > > r~ > > > d-thumb-1 > > > * config/arm/arm.c (arm_output_function_prologue): Don't call > thumb1_output_function_prologue. > (arm_expand_prologue): Avoid dead store. > (number_of_first_bit_set): Use ctz_hwi. > (thumb1_emit_multi_reg_push): New. > (thumb1_expand_prologue): Merge thumb1_output_function_prologue > to emit the entire prologue as rtl. > (thumb1_output_interwork): Split out from > thumb1_output_function_prologue. > (thumb1_output_function_prologue): Remove. > (arm_attr_length_push_multi): Handle thumb1. > * config/arm/arm.md (VUNSPEC_THUMB1_INTERWORK): New. > (prologue_thumb1_interwork): New. > (*push_multi): Allow thumb1; use push_mult_memory_operand. > * config/arm/predicates.md (push_mult_memory_operand): New. > OK if the arm-eabi tests are OK. R.