summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2016-09-19 16:57:05 +0000
committerCamil Staps2016-09-19 16:57:05 +0000
commit10fc5925418b111d58a7e6511d6794878968fa35 (patch)
treeab099fec0e9a373913a9b35c72a4f7942ceb70ee
parentAdds thumb directives and fixes for storing the PC (diff)
Fix PC offset when pushing to stack
-rw-r--r--cgthumb2was.c9
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: