diff options
author | Camil Staps | 2016-11-29 19:47:30 +0000 |
---|---|---|
committer | Camil Staps | 2016-11-29 19:47:30 +0000 |
commit | 8d92709b302769474149852204e5f93e1b7cf9fe (patch) | |
tree | 2e48e0a45d4e9c2832cbafb532b2428fe8727368 | |
parent | Fix warning about multi-instruction IT blocks being deprecated in ARMv8 (diff) |
Fix some negative offsets to A-stack pointer (decrease, load, increase)
-rw-r--r-- | cgopt.c | 13 |
1 files changed, 5 insertions, 8 deletions
@@ -921,12 +921,6 @@ void optimize_stack_access (struct basic_block *block,int *a_offset_p,int *b_off { # ifdef THUMB2 int offset=instruction->instruction_parameters[1].parameter_offset+=fix_a_offset; - if (offset < -255) - { - insert_decrement_a_stack_pointer (instruction,-offset); - instruction->instruction_parameters[1].parameter_offset*=-1; - instruction->instruction_parameters[1].parameter_type=P_INDIRECT_WITH_UPDATE; - } # endif previous_a_stack_parameter=&instruction->instruction_parameters[1]; previous_a_stack_parameter_icode=IMOVE; @@ -938,8 +932,11 @@ void optimize_stack_access (struct basic_block *block,int *a_offset_p,int *b_off if (offset < -255) { insert_decrement_a_stack_pointer (instruction,-offset); - instruction->instruction_parameters[0].parameter_offset*=-1; - instruction->instruction_parameters[0].parameter_type=P_INDIRECT_WITH_UPDATE; + instruction->instruction_parameters[0].parameter_offset=0; + if (instruction->instruction_next) + insert_decrement_a_stack_pointer (instruction->instruction_next,-offset); + else + i_lea_id_r (-offset,A_STACK_POINTER,A_STACK_POINTER); } # endif previous_a_stack_parameter=&instruction->instruction_parameters[0]; |