armemu: Unset GE flags for UADD8 if results are < 0x100

Reference manual states these must be set to zero if this case is true.
This commit is contained in:
Lioncash 2014-12-17 17:53:53 -05:00
parent e6f440ea7f
commit 41fee1c940

View File

@ -5930,11 +5930,29 @@ L_stm_s_takeabort:
b2 = ((u8)(from >> 8) + (u8)(to >> 8)); b2 = ((u8)(from >> 8) + (u8)(to >> 8));
b3 = ((u8)(from >> 16) + (u8)(to >> 16)); b3 = ((u8)(from >> 16) + (u8)(to >> 16));
b4 = ((u8)(from >> 24) + (u8)(to >> 24)); b4 = ((u8)(from >> 24) + (u8)(to >> 24));
if (b1 & 0xffffff00) state->Cpsr |= (1 << 16);
if (b2 & 0xffffff00) state->Cpsr |= (1 << 17); if (b1 & 0xffffff00)
if (b3 & 0xffffff00) state->Cpsr |= (1 << 18); state->Cpsr |= (1 << 16);
if (b4 & 0xffffff00) state->Cpsr |= (1 << 19); else
state->Cpsr &= ~(1 << 16);
if (b2 & 0xffffff00)
state->Cpsr |= (1 << 17);
else
state->Cpsr &= ~(1 << 17);
if (b3 & 0xffffff00)
state->Cpsr |= (1 << 18);
else
state->Cpsr &= ~(1 << 18);
if (b4 & 0xffffff00)
state->Cpsr |= (1 << 19);
else
state->Cpsr &= ~(1 << 19);
} }
state->Reg[rd] = (u32)(b1 | (b2 & 0xff) << 8 | (b3 & 0xff) << 16 | (b4 & 0xff) << 24); state->Reg[rd] = (u32)(b1 | (b2 & 0xff) << 8 | (b3 & 0xff) << 16 | (b4 & 0xff) << 24);
return 1; return 1;
} }