From bcbf240d2eab2a2794224487d87519ac31016c96 Mon Sep 17 00:00:00 2001 From: LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:15:45 +0100 Subject: [PATCH] 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. --- ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs | 12 +++++++++--- ARMeilleure/CodeGen/Optimizations/Simplification.cs | 6 ++++++ ARMeilleure/CodeGen/X86/Assembler.cs | 2 +- ARMeilleure/Translation/PTC/Ptc.cs | 2 +- Ryujinx/_schema.json | 2 +- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs b/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs index 73828140eb..412f6ea4c9 100644 --- a/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs +++ b/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs @@ -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; } diff --git a/ARMeilleure/CodeGen/Optimizations/Simplification.cs b/ARMeilleure/CodeGen/Optimizations/Simplification.cs index 7704f7989c..db32e99321 100644 --- a/ARMeilleure/CodeGen/Optimizations/Simplification.cs +++ b/ARMeilleure/CodeGen/Optimizations/Simplification.cs @@ -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; diff --git a/ARMeilleure/CodeGen/X86/Assembler.cs b/ARMeilleure/CodeGen/X86/Assembler.cs index 2484e25191..bab4c4530b 100644 --- a/ARMeilleure/CodeGen/X86/Assembler.cs +++ b/ARMeilleure/CodeGen/X86/Assembler.cs @@ -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; diff --git a/ARMeilleure/Translation/PTC/Ptc.cs b/ARMeilleure/Translation/PTC/Ptc.cs index 01d0b236c1..266bdba6f1 100644 --- a/ARMeilleure/Translation/PTC/Ptc.cs +++ b/ARMeilleure/Translation/PTC/Ptc.cs @@ -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"; diff --git a/Ryujinx/_schema.json b/Ryujinx/_schema.json index b61e9ed259..e03e4afcc5 100644 --- a/Ryujinx/_schema.json +++ b/Ryujinx/_schema.json @@ -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": [