fixes for flag optimisation
This commit is contained in:
parent
b5dda7d6e2
commit
ea562d2fec
|
@ -163,6 +163,7 @@ CompiledBlock CompileBlock(ARM* cpu)
|
||||||
{
|
{
|
||||||
r15 += thumb ? 2 : 4;
|
r15 += thumb ? 2 : 4;
|
||||||
|
|
||||||
|
instrs[i].SetFlags = 0;
|
||||||
instrs[i].Instr = nextInstr[0];
|
instrs[i].Instr = nextInstr[0];
|
||||||
instrs[i].NextInstr[0] = nextInstr[0] = nextInstr[1];
|
instrs[i].NextInstr[0] = nextInstr[0] = nextInstr[1];
|
||||||
|
|
||||||
|
|
|
@ -387,7 +387,7 @@ void Compiler::Comp_RetriveFlags(bool sign, bool retriveCV, bool carryUsed)
|
||||||
AND(32, R(RCPSR), Imm32(0x3FFFFFFF & ~(carryUsed << 29) & ~((retriveCV ? 3 : 0) << 28)));
|
AND(32, R(RCPSR), Imm32(0x3FFFFFFF & ~(carryUsed << 29) & ~((retriveCV ? 3 : 0) << 28)));
|
||||||
OR(32, R(RCPSR), R(RSCRATCH));
|
OR(32, R(RCPSR), R(RSCRATCH));
|
||||||
}
|
}
|
||||||
else
|
else if (carryUsed || retriveCV)
|
||||||
{
|
{
|
||||||
SHL(32, R(RSCRATCH2), Imm8(carryOnly ? 29 : 28));
|
SHL(32, R(RSCRATCH2), Imm8(carryOnly ? 29 : 28));
|
||||||
AND(32, R(RCPSR), Imm32(0xFFFFFFFF & ~(carryUsed << 29) & ~((retriveCV ? 3 : 0) << 28)));
|
AND(32, R(RCPSR), Imm32(0xFFFFFFFF & ~(carryUsed << 29) & ~((retriveCV ? 3 : 0) << 28)));
|
||||||
|
|
|
@ -436,7 +436,7 @@ Info Decode(bool thumb, u32 num, u32 instr)
|
||||||
if ((instr >> 28) < 0xE)
|
if ((instr >> 28) < 0xE)
|
||||||
{
|
{
|
||||||
// make non conditional flag sets conditional
|
// make non conditional flag sets conditional
|
||||||
res.WriteFlags = res.WriteFlags | (res.WriteFlags << 4);
|
res.WriteFlags = (res.WriteFlags | (res.WriteFlags << 4)) & 0xF0;
|
||||||
res.ReadFlags |= FlagsReadPerCond[instr >> 29];
|
res.ReadFlags |= FlagsReadPerCond[instr >> 29];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue