diff --git a/mips/mips_codegen.h b/mips/mips_codegen.h index 36f6e27..7fec123 100644 --- a/mips/mips_codegen.h +++ b/mips/mips_codegen.h @@ -267,12 +267,28 @@ typedef enum #define mips_emit_mtlo(rs) \ mips_emit_special(mtlo, rs, 0, 0, 0) \ +#ifdef NINTENDO64 + +// "VR4300 multiplication bug", aka mips64-gcc -mfix4300 + +#define mips_emit_mult(rs, rt) \ + mips_emit_special(mult, rs, rt, 0, 0) \ + ;mips_emit_nop(); mips_emit_nop() + +#define mips_emit_multu(rs, rt) \ + mips_emit_special(multu, rs, rt, 0, 0) \ + ;mips_emit_nop(); mips_emit_nop() + +#else + #define mips_emit_mult(rs, rt) \ mips_emit_special(mult, rs, rt, 0, 0) \ #define mips_emit_multu(rs, rt) \ mips_emit_special(multu, rs, rt, 0, 0) \ +#endif + #define mips_emit_div(rs, rt) \ mips_emit_special(div, rs, rt, 0, 0) \