commit
0a8e1bd864
|
@ -287,7 +287,6 @@ private:
|
|||
// flag helper
|
||||
static void Helper_UpdateCR0(u32 value);
|
||||
static void Helper_UpdateCR1();
|
||||
static void Helper_UpdateCRx(int x, u32 value);
|
||||
|
||||
// address helper
|
||||
static u32 Helper_Get_EA(const UGeckoInstruction inst);
|
||||
|
|
|
@ -11,17 +11,12 @@
|
|||
#include "Core/PowerPC/PowerPC.h"
|
||||
|
||||
void Interpreter::Helper_UpdateCR0(u32 value)
|
||||
{
|
||||
Helper_UpdateCRx(0, value);
|
||||
}
|
||||
|
||||
void Interpreter::Helper_UpdateCRx(int idx, u32 value)
|
||||
{
|
||||
s64 sign_extended = (s64)(s32)value;
|
||||
u64 cr_val = (u64)sign_extended;
|
||||
cr_val = (cr_val & ~(1ull << 61)) | ((u64)GetXER_SO() << 61);
|
||||
|
||||
PowerPC::ppcState.cr_val[idx] = cr_val;
|
||||
PowerPC::ppcState.cr_val[0] = cr_val;
|
||||
}
|
||||
|
||||
u32 Interpreter::Helper_Carry(u32 value1, u32 value2)
|
||||
|
@ -89,7 +84,21 @@ void Interpreter::andis_rc(UGeckoInstruction inst)
|
|||
|
||||
void Interpreter::cmpi(UGeckoInstruction inst)
|
||||
{
|
||||
Helper_UpdateCRx(inst.CRFD, rGPR[inst.RA] - inst.SIMM_16);
|
||||
s32 a = rGPR[inst.RA];
|
||||
s32 b = inst.SIMM_16;
|
||||
int f;
|
||||
|
||||
if (a < b)
|
||||
f = 0x8;
|
||||
else if (a > b)
|
||||
f = 0x4;
|
||||
else
|
||||
f = 0x2; // equals
|
||||
|
||||
if (GetXER_SO())
|
||||
f |= 0x1;
|
||||
|
||||
SetCRField(inst.CRFD, f);
|
||||
}
|
||||
|
||||
void Interpreter::cmpli(UGeckoInstruction inst)
|
||||
|
|
Loading…
Reference in New Issue