jit: fix BLX_reg with rn=lr
This commit is contained in:
parent
86f2be7260
commit
dd04cef47e
|
@ -187,9 +187,10 @@ void Compiler::A_Comp_BranchImm()
|
||||||
void Compiler::A_Comp_BranchXchangeReg()
|
void Compiler::A_Comp_BranchXchangeReg()
|
||||||
{
|
{
|
||||||
OpArg rn = MapReg(CurInstr.A_Reg(0));
|
OpArg rn = MapReg(CurInstr.A_Reg(0));
|
||||||
|
MOV(32, R(RSCRATCH), rn);
|
||||||
if ((CurInstr.Instr & 0xF0) == 0x30) // BLX_reg
|
if ((CurInstr.Instr & 0xF0) == 0x30) // BLX_reg
|
||||||
MOV(32, MapReg(14), Imm32(R15 - 4));
|
MOV(32, MapReg(14), Imm32(R15 - 4));
|
||||||
Comp_JumpTo(rn.GetSimpleReg());
|
Comp_JumpTo(RSCRATCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Compiler::T_Comp_BCOND()
|
void Compiler::T_Comp_BCOND()
|
||||||
|
|
|
@ -359,10 +359,7 @@ Info Decode(bool thumb, u32 num, u32 instr)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data & A_Link)
|
if (data & A_Link)
|
||||||
{
|
|
||||||
res.DstRegs |= 1 << 14;
|
res.DstRegs |= 1 << 14;
|
||||||
res.SrcRegs |= 1 << 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res.Kind == ak_LDM)
|
if (res.Kind == ak_LDM)
|
||||||
res.DstRegs |= instr & (1 << 15); // this is right
|
res.DstRegs |= instr & (1 << 15); // this is right
|
||||||
|
|
Loading…
Reference in New Issue