mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 18:40:36 +00:00
Merge pull request #109 from Bigpet/master
Missed carry flag corrections and the rotate fixes
This commit is contained in:
commit
f0129382b9
@ -46,8 +46,8 @@ u64 rotl64(const u64 x, const u8 n) { return (x << n) | (x >> (64 - n)); }
|
|||||||
u64 rotr64(const u64 x, const u8 n) { return (x >> n) | (x << (64 - n)); }
|
u64 rotr64(const u64 x, const u8 n) { return (x >> n) | (x << (64 - n)); }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define rotl32 _rotl
|
#define rotl32(x, n) _rotl64((u64)(u32)x | ((u64)(u32)x << 32), n)
|
||||||
#define rotr32 _rotr
|
#define rotr32(x, n) _rotr64((u64)(u32)x | ((u64)(u32)x << 32), n)
|
||||||
#define rotl64 _rotl64
|
#define rotl64 _rotl64
|
||||||
#define rotr64 _rotr64
|
#define rotr64 _rotr64
|
||||||
|
|
||||||
@ -2177,7 +2177,7 @@ private:
|
|||||||
}
|
}
|
||||||
void RLWIMI(u32 ra, u32 rs, u32 sh, u32 mb, u32 me, bool rc)
|
void RLWIMI(u32 ra, u32 rs, u32 sh, u32 mb, u32 me, bool rc)
|
||||||
{
|
{
|
||||||
const u32 mask = rotate_mask[32 + mb][32 + me];
|
const u64 mask = rotate_mask[32 + mb][32 + me];
|
||||||
CPU.GPR[ra] = (CPU.GPR[ra] & ~mask) | (rotl32(CPU.GPR[rs], sh) & mask);
|
CPU.GPR[ra] = (CPU.GPR[ra] & ~mask) | (rotl32(CPU.GPR[rs], sh) & mask);
|
||||||
if(rc) CPU.UpdateCR0<s32>(CPU.GPR[ra]);
|
if(rc) CPU.UpdateCR0<s32>(CPU.GPR[ra]);
|
||||||
}
|
}
|
||||||
@ -2738,7 +2738,7 @@ private:
|
|||||||
{
|
{
|
||||||
const u64 RA = CPU.GPR[ra];
|
const u64 RA = CPU.GPR[ra];
|
||||||
CPU.GPR[rd] = ~RA + CPU.XER.CA;
|
CPU.GPR[rd] = ~RA + CPU.XER.CA;
|
||||||
CPU.XER.CA = (0x8000000000000000 & RA) && (0x8000000000000000 & CPU.GPR[rd]);//RA <= 0ull;
|
CPU.XER.CA = (~RA + CPU.XER.CA > ~0x0) | ((RA == 0) & CPU.XER.CA);
|
||||||
if (oe) ConLog.Warning("subfzeo");
|
if (oe) ConLog.Warning("subfzeo");
|
||||||
if (rc) CPU.UpdateCR0<s64>(CPU.GPR[rd]);
|
if (rc) CPU.UpdateCR0<s64>(CPU.GPR[rd]);
|
||||||
}
|
}
|
||||||
@ -2771,7 +2771,7 @@ private:
|
|||||||
{
|
{
|
||||||
const u64 RA = CPU.GPR[ra];
|
const u64 RA = CPU.GPR[ra];
|
||||||
CPU.GPR[rd] = ~RA + CPU.XER.CA + 0xFFFFFFFFFFFFFFFF;
|
CPU.GPR[rd] = ~RA + CPU.XER.CA + 0xFFFFFFFFFFFFFFFF;
|
||||||
CPU.XER.CA = !(0x8000000000000000 & RA) && !(0x8000000000000000 & CPU.GPR[rd]);
|
CPU.XER.CA = (~RA + CPU.XER.CA > ~0xFFFFFFFFFFFFFFFF) | ((RA == 0) & CPU.XER.CA);
|
||||||
if (oe) ConLog.Warning("subfmeo");
|
if (oe) ConLog.Warning("subfmeo");
|
||||||
if (rc) CPU.UpdateCR0<s64>(CPU.GPR[rd]);
|
if (rc) CPU.UpdateCR0<s64>(CPU.GPR[rd]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user