From 4c7bebf3e691f356eaa595ee395690d740162e2f Mon Sep 17 00:00:00 2001 From: FICTURE7 Date: Mon, 7 Sep 2020 06:52:17 +0400 Subject: [PATCH] Do not emit StoreToContext before Return (#1537) * Do not emit StoreToContext before Return * Set PPTC version --- ARMeilleure/Instructions/InstEmitAluHelper.cs | 6 +++++- ARMeilleure/Instructions/InstEmitHelper.cs | 5 ++++- ARMeilleure/Translation/PTC/Ptc.cs | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ARMeilleure/Instructions/InstEmitAluHelper.cs b/ARMeilleure/Instructions/InstEmitAluHelper.cs index 12fa1bf1b..8c71d4cb0 100644 --- a/ARMeilleure/Instructions/InstEmitAluHelper.cs +++ b/ARMeilleure/Instructions/InstEmitAluHelper.cs @@ -118,9 +118,13 @@ namespace ARMeilleure.Instructions if (IsThumb(context.CurrOp)) { - context.StoreToContext(); bool isReturn = IsA32Return(context); + if (!isReturn) + { + context.StoreToContext(); + } + Operand addr = context.BitwiseOr(value, Const(1)); InstEmitFlowHelper.EmitVirtualJump(context, addr, isReturn); diff --git a/ARMeilleure/Instructions/InstEmitHelper.cs b/ARMeilleure/Instructions/InstEmitHelper.cs index a4227543f..d1bbe3f1e 100644 --- a/ARMeilleure/Instructions/InstEmitHelper.cs +++ b/ARMeilleure/Instructions/InstEmitHelper.cs @@ -56,7 +56,10 @@ namespace ARMeilleure.Instructions { if (regIndex == RegisterAlias.Aarch32Pc) { - context.StoreToContext(); + if (!IsA32Return(context)) + { + context.StoreToContext(); + } EmitBxWritePc(context, value); } diff --git a/ARMeilleure/Translation/PTC/Ptc.cs b/ARMeilleure/Translation/PTC/Ptc.cs index 8ca83583e..eebf80759 100644 --- a/ARMeilleure/Translation/PTC/Ptc.cs +++ b/ARMeilleure/Translation/PTC/Ptc.cs @@ -21,7 +21,7 @@ namespace ARMeilleure.Translation.PTC { private const string HeaderMagic = "PTChd"; - private const int InternalVersion = 1522; //! To be incremented manually for each change to the ARMeilleure project. + private const int InternalVersion = 1537; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1";