summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2016-11-29 19:47:30 +0000
committerCamil Staps2016-11-29 19:47:30 +0000
commit8d92709b302769474149852204e5f93e1b7cf9fe (patch)
tree2e48e0a45d4e9c2832cbafb532b2428fe8727368
parentFix 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.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/cgopt.c b/cgopt.c
index 8d25d90..1cb802a 100644
--- a/cgopt.c
+++ b/cgopt.c
@@ -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];