diff options
author | Camil Staps | 2016-09-19 16:57:05 +0000 |
---|---|---|
committer | Camil Staps | 2016-09-19 16:57:05 +0000 |
commit | 10fc5925418b111d58a7e6511d6794878968fa35 (patch) | |
tree | ab099fec0e9a373913a9b35c72a4f7942ceb70ee | |
parent | Adds thumb directives and fixes for storing the PC (diff) |
Fix PC offset when pushing to stack
-rw-r--r-- | cgthumb2was.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/cgthumb2was.c b/cgthumb2was.c index d43a5ec..a4c8630 100644 --- a/cgthumb2was.c +++ b/cgthumb2was.c @@ -1483,8 +1483,11 @@ static void w_as_jsr_instruction (struct instruction *instruction) if (instruction->instruction_arity>1) switch (instruction->instruction_parameters[1].parameter_type){ case P_INDIRECT_WITH_UPDATE: + w_as_opcode ("add"); + fprintf (assembly_file,"lr,pc,#9"); + w_as_newline_after_instruction(); w_as_opcode ("str"); - fprintf (assembly_file,"pc,[sp,#%d]!",instruction->instruction_parameters[1].parameter_offset); + fprintf (assembly_file,"lr,[sp,#%d]!",instruction->instruction_parameters[1].parameter_offset); w_as_newline_after_instruction(); } @@ -1493,9 +1496,9 @@ static void w_as_jsr_instruction (struct instruction *instruction) w_as_newline_after_instruction(); } else { if (instruction->instruction_arity>1) - w_as_opcode ("mov"); + w_as_opcode ("add"); w_as_scratch_register_comma(); - fprintf (assembly_file,"pc"); + fprintf (assembly_file,"pc,#9"); w_as_newline_after_instruction(); switch (instruction->instruction_parameters[1].parameter_type){ case P_INDIRECT_WITH_UPDATE: |