Closed GoogleCodeExporter closed 8 years ago
The interpreter mode starts in NOT_COMPILED. The block gets recompiled
"recompile_block((int *) rdram+(((paddr-(PC->addr-blocks[PC->addr>>12]->start))
&
0x1FFFFFFF)>>2)," and the PC->ops(); now calls NOP r4300/special.c:33
RLW seems to set "dst->ops = LW;" and then recompile_standard_i_type() sets
"dst->f.i.rt = reg + ((src >> 16) & 0x1F);"... which means that dst->f.i.rt is
reg
and this means that we want to write to r0... which is of course not possible.
This
is handled in that RLW function using a check with "if (dst->f.i.rt == reg)
RNOP();".
This must also be implemented inside the pure interpreter as it will just write
into
r0... which is evil. This instruction is complete valid but must be interpreted
as
"result not written.
Original comment by sven@narfation.org
on 3 Oct 2009 at 10:06
[deleted comment]
Following functions must be checked in pure interpreter:
f.r.rd: SLL SRL SRA SLLV SRLV SRAV MFHI MFLO DSLLV DSRLV DSRAV ADD ADDU SUB
SUBU AND
OR XOR NOR SLT SLTU DADD DADDU DSUB DSUBU DSLL DSRL DSRA DSLL32 DSRL32 DSRA32
f.r.rt: MFC0 MFC1 DMFC1 CFC1
f.i.rt: ADDI ADDIU SLTI SLTIU ANDI ORI XORI LUI DADDI DADDIU LDL LDR LB LH LWL
LW LBU
LHU LWR LWU LL LD SC
Original comment by sven@narfation.org
on 3 Oct 2009 at 11:12
Attachments:
patches applied to Mupen64Plus v2.0 Hg repository
Original comment by richard...@gmail.com
on 14 Nov 2009 at 6:10
Original comment by richard...@gmail.com
on 13 Jan 2010 at 1:18
Original comment by sven@narfation.org
on 5 Jun 2011 at 9:19
Original issue reported on code.google.com by
sven@narfation.org
on 3 Oct 2009 at 9:06