add code for edge case in DSRLV for cbfd
This commit is contained in:
parent
d96ceefe60
commit
53b86e559c
Source/Project64/N64 System/Recompiler
|
@ -2138,10 +2138,25 @@ void CRecompilerOps::SPECIAL_DSRLV (void) {
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//if (Shift < 0x20) {
|
if (m_Opcode.rd == m_Opcode.rt)
|
||||||
//} else {
|
{
|
||||||
//}
|
CRecompilerOps::UnknownOpcode();
|
||||||
CRecompilerOps::UnknownOpcode();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map_TempReg(x86_ECX,-1,FALSE);
|
||||||
|
MoveConstToX86reg(Shift, x86_ECX);
|
||||||
|
Map_GPR_64bit(m_Opcode.rd,m_Opcode.rt);
|
||||||
|
if ((Shift & 0x20) == 0x20)
|
||||||
|
{
|
||||||
|
MoveX86RegToX86Reg(GetMipsRegMapHi(m_Opcode.rd),GetMipsRegMapLo(m_Opcode.rd));
|
||||||
|
XorX86RegToX86Reg(GetMipsRegMapHi(m_Opcode.rd),GetMipsRegMapHi(m_Opcode.rd));
|
||||||
|
AndConstToX86Reg(x86_ECX,0x1F);
|
||||||
|
ShiftRightUnsign(GetMipsRegMapLo(m_Opcode.rd));
|
||||||
|
} else {
|
||||||
|
ShiftRightDouble(GetMipsRegMapLo(m_Opcode.rd),GetMipsRegMapHi(m_Opcode.rd));
|
||||||
|
ShiftRightUnsign(GetMipsRegMapHi(m_Opcode.rd));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Map_TempReg(x86_ECX,m_Opcode.rs,FALSE);
|
Map_TempReg(x86_ECX,m_Opcode.rs,FALSE);
|
||||||
AndConstToX86Reg(x86_ECX,0x3F);
|
AndConstToX86Reg(x86_ECX,0x3F);
|
||||||
|
|
Loading…
Reference in New Issue