mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-18 17:55:45 -04:00
PGXP: Compute PSX values on demand for CPU instructions
Generates shorter code for the recompiler.
This commit is contained in:
@ -585,7 +585,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ReadReg(inst.r.rt) << inst.r.shamt;
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SLL(inst.bits, new_value, ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SLL(inst.bits, ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -595,7 +595,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ReadReg(inst.r.rt) >> inst.r.shamt;
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SRL(inst.bits, new_value, ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SRL(inst.bits, ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -605,7 +605,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = static_cast<u32>(static_cast<s32>(ReadReg(inst.r.rt)) >> inst.r.shamt);
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SRA(inst.bits, new_value, ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SRA(inst.bits, ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -616,7 +616,7 @@ restart_instruction:
|
||||
const u32 shift_amount = ReadReg(inst.r.rs) & UINT32_C(0x1F);
|
||||
const u32 new_value = ReadReg(inst.r.rt) << shift_amount;
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SLLV(inst.bits, new_value, ReadReg(inst.r.rt), shift_amount);
|
||||
PGXP::CPU_SLLV(inst.bits, ReadReg(inst.r.rt), shift_amount);
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -627,7 +627,7 @@ restart_instruction:
|
||||
const u32 shift_amount = ReadReg(inst.r.rs) & UINT32_C(0x1F);
|
||||
const u32 new_value = ReadReg(inst.r.rt) >> shift_amount;
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SRLV(inst.bits, new_value, ReadReg(inst.r.rt), shift_amount);
|
||||
PGXP::CPU_SRLV(inst.bits, ReadReg(inst.r.rt), shift_amount);
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -638,7 +638,7 @@ restart_instruction:
|
||||
const u32 shift_amount = ReadReg(inst.r.rs) & UINT32_C(0x1F);
|
||||
const u32 new_value = static_cast<u32>(static_cast<s32>(ReadReg(inst.r.rt)) >> shift_amount);
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SRAV(inst.bits, new_value, ReadReg(inst.r.rt), shift_amount);
|
||||
PGXP::CPU_SRAV(inst.bits, ReadReg(inst.r.rt), shift_amount);
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -648,7 +648,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ReadReg(inst.r.rs) & ReadReg(inst.r.rt);
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_AND_(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_AND_(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -658,7 +658,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ReadReg(inst.r.rs) | ReadReg(inst.r.rt);
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_OR_(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_OR_(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -668,7 +668,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ReadReg(inst.r.rs) ^ ReadReg(inst.r.rt);
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_XOR_(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_XOR_(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -678,7 +678,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ~(ReadReg(inst.r.rs) | ReadReg(inst.r.rt));
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_NOR(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_NOR(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -696,7 +696,7 @@ restart_instruction:
|
||||
}
|
||||
|
||||
if constexpr (pgxp_mode == PGXPMode::CPU)
|
||||
PGXP::CPU_ADD(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_ADD(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
else if constexpr (pgxp_mode >= PGXPMode::Memory)
|
||||
{
|
||||
if (add_value == 0)
|
||||
@ -716,7 +716,7 @@ restart_instruction:
|
||||
const u32 add_value = ReadReg(inst.r.rt);
|
||||
const u32 new_value = old_value + add_value;
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_ADD(inst.bits, new_value, old_value, add_value);
|
||||
PGXP::CPU_ADD(inst.bits, old_value, add_value);
|
||||
else if constexpr (pgxp_mode >= PGXPMode::Memory)
|
||||
{
|
||||
if (add_value == 0)
|
||||
@ -742,7 +742,7 @@ restart_instruction:
|
||||
}
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SUB(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SUB(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -752,7 +752,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 new_value = ReadReg(inst.r.rs) - ReadReg(inst.r.rt);
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SUB(inst.bits, new_value, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SUB(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, new_value);
|
||||
}
|
||||
@ -762,7 +762,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 result = BoolToUInt32(static_cast<s32>(ReadReg(inst.r.rs)) < static_cast<s32>(ReadReg(inst.r.rt)));
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SLT(inst.bits, result, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SLT(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, result);
|
||||
}
|
||||
@ -772,7 +772,7 @@ restart_instruction:
|
||||
{
|
||||
const u32 result = BoolToUInt32(ReadReg(inst.r.rs) < ReadReg(inst.r.rt));
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SLTU(inst.bits, result, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
PGXP::CPU_SLTU(inst.bits, ReadReg(inst.r.rs), ReadReg(inst.r.rt));
|
||||
|
||||
WriteReg(inst.r.rd, result);
|
||||
}
|
||||
@ -948,7 +948,7 @@ restart_instruction:
|
||||
const u32 new_value = ReadReg(inst.i.rs) & inst.i.imm_zext32();
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_ANDI(inst.bits, new_value, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_ANDI(inst.bits, ReadReg(inst.i.rs));
|
||||
|
||||
WriteReg(inst.i.rt, new_value);
|
||||
}
|
||||
@ -959,7 +959,7 @@ restart_instruction:
|
||||
const u32 new_value = ReadReg(inst.i.rs) | inst.i.imm_zext32();
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_ORI(inst.bits, new_value, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_ORI(inst.bits, ReadReg(inst.i.rs));
|
||||
|
||||
WriteReg(inst.i.rt, new_value);
|
||||
}
|
||||
@ -970,7 +970,7 @@ restart_instruction:
|
||||
const u32 new_value = ReadReg(inst.i.rs) ^ inst.i.imm_zext32();
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_XORI(inst.bits, new_value, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_XORI(inst.bits, ReadReg(inst.i.rs));
|
||||
|
||||
WriteReg(inst.i.rt, new_value);
|
||||
}
|
||||
@ -988,7 +988,7 @@ restart_instruction:
|
||||
}
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_ADDI(inst.bits, new_value, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_ADDI(inst.bits, ReadReg(inst.i.rs));
|
||||
else if constexpr (pgxp_mode >= PGXPMode::Memory)
|
||||
{
|
||||
if (add_value == 0)
|
||||
@ -1009,7 +1009,7 @@ restart_instruction:
|
||||
const u32 new_value = old_value + add_value;
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_ADDI(inst.bits, new_value, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_ADDI(inst.bits, ReadReg(inst.i.rs));
|
||||
else if constexpr (pgxp_mode >= PGXPMode::Memory)
|
||||
{
|
||||
if (add_value == 0)
|
||||
@ -1028,7 +1028,7 @@ restart_instruction:
|
||||
const u32 result = BoolToUInt32(static_cast<s32>(ReadReg(inst.i.rs)) < static_cast<s32>(inst.i.imm_sext32()));
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SLTI(inst.bits, result, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_SLTI(inst.bits, ReadReg(inst.i.rs));
|
||||
|
||||
WriteReg(inst.i.rt, result);
|
||||
}
|
||||
@ -1039,7 +1039,7 @@ restart_instruction:
|
||||
const u32 result = BoolToUInt32(ReadReg(inst.i.rs) < inst.i.imm_sext32());
|
||||
|
||||
if constexpr (pgxp_mode >= PGXPMode::CPU)
|
||||
PGXP::CPU_SLTIU(inst.bits, result, ReadReg(inst.i.rs));
|
||||
PGXP::CPU_SLTIU(inst.bits, ReadReg(inst.i.rs));
|
||||
|
||||
WriteReg(inst.i.rt, result);
|
||||
}
|
||||
|
Reference in New Issue
Block a user