From dee9a6ed36782796469df4b2816b22e17a28996c Mon Sep 17 00:00:00 2001 From: David Guillen Fandos Date: Thu, 4 Nov 2021 20:09:05 +0100 Subject: [PATCH] [MIPS] Fix swap implementation No game seems to use this :P --- mips/mips_emit.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mips/mips_emit.h b/mips/mips_emit.h index 4c15711..adec66b 100644 --- a/mips/mips_emit.h +++ b/mips/mips_emit.h @@ -1567,7 +1567,7 @@ u32 execute_store_cpsr_body(u32 _cpsr, u32 store_mask, u32 address) -((word_bit_count(reg_list)) * 4)) \ -// This isn't really a correct implementation, may have to fix later. +// ARM: rn *must* be different from rm and rd. rm *can* be the same as rd. #define arm_swap(type) \ { \ @@ -1575,11 +1575,10 @@ u32 execute_store_cpsr_body(u32 _cpsr, u32 store_mask, u32 address) cycle_count += 3; \ mips_emit_jal(mips_absolute_offset(execute_load_##type)); \ generate_load_reg(reg_a0, rn); \ - generate_mov(reg_a2, reg_rv); \ generate_load_reg(reg_a0, rn); \ - mips_emit_jal(mips_absolute_offset(execute_store_##type)); \ generate_load_reg(reg_a1, rm); \ - generate_store_reg(reg_a2, rd); \ + mips_emit_jal(mips_absolute_offset(execute_store_##type)); \ + generate_store_reg(reg_rv, rd); \ } \ #define thumb_generate_op_load_yes(_rs) \