summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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];