Core: Don't create xImpl_G1Logic instances

This commit is contained in:
TellowKrinkle
2025-08-24 20:16:24 -05:00
committed by TellowKrinkle
parent e5ba376985
commit 59125c9b12
3 changed files with 32 additions and 27 deletions
+13 -11
View File
@@ -454,11 +454,12 @@ namespace
static void rpsxLogicalOp_constv(LogicalOp op, int info, int creg, u32 vreg, int regv)
{
xImpl_G1Logic bad{};
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND : op == LogicalOp::OR ? xOR :
op == LogicalOp::XOR ? xXOR :
op == LogicalOp::NOR ? xOR :
bad;
xImpl_G1Logic* bad = nullptr;
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND
: op == LogicalOp::OR ? xOR
: op == LogicalOp::XOR ? xXOR
: op == LogicalOp::NOR ? xOR
: *bad;
s32 fixedInput, fixedOutput, identityInput;
bool hasFixed = true;
switch (op)
@@ -509,12 +510,13 @@ static void rpsxLogicalOp(LogicalOp op, int info)
{
pxAssert(!(info & PROCESS_EE_XMM));
xImpl_G1Logic bad{};
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND : op == LogicalOp::OR ? xOR :
op == LogicalOp::XOR ? xXOR :
op == LogicalOp::NOR ? xOR :
bad;
pxAssert(&xOP != &bad);
xImpl_G1Logic* bad = nullptr;
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND
: op == LogicalOp::OR ? xOR
: op == LogicalOp::XOR ? xXOR
: op == LogicalOp::NOR ? xOR
: *bad;
pxAssert(&xOP != bad);
// swap because it's commutative and Rd might be Rt
u32 rs = _Rs_, rt = _Rt_;
+13 -11
View File
@@ -412,11 +412,12 @@ static void recLogicalOp_constv(LogicalOp op, int info, int creg, u32 vreg, int
{
pxAssert(!(info & PROCESS_EE_XMM));
xImpl_G1Logic bad{};
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND : op == LogicalOp::OR ? xOR :
op == LogicalOp::XOR ? xXOR :
op == LogicalOp::NOR ? xOR :
bad;
xImpl_G1Logic* bad = nullptr;
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND
: op == LogicalOp::OR ? xOR
: op == LogicalOp::XOR ? xXOR
: op == LogicalOp::NOR ? xOR
: *bad;
s64 fixedInput, fixedOutput, identityInput;
bool hasFixed = true;
switch (op)
@@ -467,12 +468,13 @@ static void recLogicalOp(LogicalOp op, int info)
{
pxAssert(!(info & PROCESS_EE_XMM));
xImpl_G1Logic bad{};
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND : op == LogicalOp::OR ? xOR :
op == LogicalOp::XOR ? xXOR :
op == LogicalOp::NOR ? xOR :
bad;
pxAssert(&xOP != &bad);
xImpl_G1Logic* bad = nullptr;
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND
: op == LogicalOp::OR ? xOR
: op == LogicalOp::XOR ? xXOR
: op == LogicalOp::NOR ? xOR
: *bad;
pxAssert(&xOP != bad);
// swap because it's commutative and Rd might be Rt
u32 rs = _Rs_, rt = _Rt_;
+6 -5
View File
@@ -165,11 +165,12 @@ enum class LogicalOp
static void recLogicalOpI(int info, LogicalOp op)
{
xImpl_G1Logic bad{};
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND : op == LogicalOp::OR ? xOR :
op == LogicalOp::XOR ? xXOR :
bad;
pxAssert(&xOP != &bad);
xImpl_G1Logic* bad = nullptr;
const xImpl_G1Logic& xOP = op == LogicalOp::AND ? xAND
: op == LogicalOp::OR ? xOR
: op == LogicalOp::XOR ? xXOR
: *bad;
pxAssert(&xOP != bad);
if (_ImmU_ != 0)
{