diff options
-rw-r--r-- | cgthumb2was.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/cgthumb2was.c b/cgthumb2was.c index 8171603..93b6191 100644 --- a/cgthumb2was.c +++ b/cgthumb2was.c @@ -1628,32 +1628,30 @@ static void w_as_jsr_instruction (struct instruction *instruction) w_as_scratch_register(); w_as_newline_after_instruction(); } else { + int scratch=instruction->instruction_parameters[0].parameter_type==P_REGISTER ? REGISTER_S1 : REGISTER_S0; if (instruction->instruction_arity>1) w_as_instruction_without_parameters (".align"); w_as_opcode ("add"); - w_as_register_comma (REGISTER_S1); + w_as_register_comma (scratch); fprintf (assembly_file,"pc,#%d", instruction->instruction_parameters[0].parameter_type==P_REGISTER ? 7 : 9); w_as_newline_after_instruction(); switch (instruction->instruction_parameters[1].parameter_type){ case P_INDIRECT_WITH_UPDATE: w_as_opcode ("str"); - w_as_register_comma (REGISTER_S1); + w_as_register_comma (scratch); fprintf (assembly_file,"[sp,#%d]!",instruction->instruction_parameters[1].parameter_offset); w_as_newline_after_instruction(); break; case P_INDIRECT: w_as_opcode ("str"); - w_as_register_comma (REGISTER_S1); + w_as_register_comma (scratch); fprintf (assembly_file,"[sp,#%d]",instruction->instruction_parameters[1].parameter_offset); w_as_newline_after_instruction(); break; } - if (instruction->instruction_parameters[0].parameter_type==P_REGISTER) - w_as_opcode ("blx"); - else - w_as_opcode ("bl"); + w_as_opcode (instruction->instruction_parameters[0].parameter_type==P_REGISTER ? "blx" : "bl"); w_as_jump_parameter (&instruction->instruction_parameters[0]); w_as_newline_after_instruction(); } |