forked from Mirror/Ryujinx
PPTC: Fix unwanted propagation of a relocatable constant in a specific case. (#1990)
* Fix unwanted propagation of a relocatable constant in a specific case. * Ptc.InternalVersion = 1990 * Nit to retrigger the Checks.
This commit is contained in:
parent
0aea1e5cb0
commit
bcbf240d2e
5 changed files with 18 additions and 6 deletions
|
@ -14,7 +14,7 @@ namespace ARMeilleure.CodeGen.Optimizations
|
|||
return;
|
||||
}
|
||||
|
||||
if (!AreAllSourcesConstantAndCFEnabled(operation))
|
||||
if (!AreAllSourcesConstant(operation))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -24,6 +24,12 @@ namespace ARMeilleure.CodeGen.Optimizations
|
|||
switch (operation.Instruction)
|
||||
{
|
||||
case Instruction.Add:
|
||||
if (operation.GetSource(0).Relocatable ||
|
||||
operation.GetSource(1).Relocatable)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (type == OperandType.I32)
|
||||
{
|
||||
EvaluateBinaryI32(operation, (x, y) => x + y);
|
||||
|
@ -252,13 +258,13 @@ namespace ARMeilleure.CodeGen.Optimizations
|
|||
}
|
||||
}
|
||||
|
||||
private static bool AreAllSourcesConstantAndCFEnabled(Operation operation)
|
||||
private static bool AreAllSourcesConstant(Operation operation)
|
||||
{
|
||||
for (int index = 0; index < operation.SourcesCount; index++)
|
||||
{
|
||||
Operand srcOp = operation.GetSource(index);
|
||||
|
||||
if (srcOp.Kind != OperandKind.Constant || srcOp.Relocatable)
|
||||
if (srcOp.Kind != OperandKind.Constant)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,12 @@ namespace ARMeilleure.CodeGen.Optimizations
|
|||
switch (operation.Instruction)
|
||||
{
|
||||
case Instruction.Add:
|
||||
if (operation.GetSource(0).Relocatable ||
|
||||
operation.GetSource(1).Relocatable)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
TryEliminateBinaryOpComutative(operation, 0);
|
||||
break;
|
||||
|
||||
|
|
|
@ -961,7 +961,7 @@ namespace ARMeilleure.CodeGen.X86
|
|||
|
||||
WriteInt32((int)imm);
|
||||
}
|
||||
else if (dest != null && dest.Kind == OperandKind.Register && info.OpRImm64 != BadOp)
|
||||
else if (dest?.Kind == OperandKind.Register && info.OpRImm64 != BadOp)
|
||||
{
|
||||
int? index = source.PtcIndex;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace ARMeilleure.Translation.PTC
|
|||
{
|
||||
private const string HeaderMagicString = "PTChd\0\0\0";
|
||||
|
||||
private const int InternalVersion = 1963; //! To be incremented manually for each change to the ARMeilleure project.
|
||||
private const uint InternalVersion = 1990; //! To be incremented manually for each change to the ARMeilleure project.
|
||||
|
||||
private const string ActualDir = "0";
|
||||
private const string BackupDir = "1";
|
||||
|
|
|
@ -1235,7 +1235,7 @@
|
|||
"enable_ptc": {
|
||||
"$id": "#/properties/enable_ptc",
|
||||
"type": "boolean",
|
||||
"title": "Enable Profiled Persistent Translation Cache",
|
||||
"title": "Enable PPTC (Profiled Persistent Translation Cache)",
|
||||
"description": "Enables or disables profiled translation cache persistency",
|
||||
"default": true,
|
||||
"examples": [
|
||||
|
|
Reference in a new issue