From 998b44c3601a971303c9ab71303d81b95ad81b4c Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 29 Nov 2016 22:32:53 +0000 Subject: Fix some more negative offsets in frontend/frontend.icl --- cgopt.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cgopt.c b/cgopt.c index 1cb802a..0d27fe6 100644 --- a/cgopt.c +++ b/cgopt.c @@ -921,6 +921,15 @@ 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=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[1]; previous_a_stack_parameter_icode=IMOVE; @@ -934,7 +943,7 @@ void optimize_stack_access (struct basic_block *block,int *a_offset_p,int *b_off insert_decrement_a_stack_pointer (instruction,-offset); instruction->instruction_parameters[0].parameter_offset=0; if (instruction->instruction_next) - insert_decrement_a_stack_pointer (instruction->instruction_next,-offset); + insert_decrement_a_stack_pointer (instruction->instruction_next,offset); else i_lea_id_r (-offset,A_STACK_POINTER,A_STACK_POINTER); } -- cgit v1.2.3