diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2023-01-23 19:37:53 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-23 22:37:53 +0000 |
| commit | a1a4771ac1de95f2410c7fb8dfaf4a5986e5ebc6 (patch) | |
| tree | b79abb40024184b18b2ff821490de4ad5e7b9683 /ARMeilleure/Translation | |
| parent | 2fd819613ffcede43562b333602d17fa79c9751d (diff) | |
Remove use of GetFunctionPointerForDelegate to get JIT cache function pointer (#4337)
* Remove use of GetFunctionPointerForDelegate to get JIT cache function pointer
* Rename FuncPtr to FuncPointer
Diffstat (limited to 'ARMeilleure/Translation')
| -rw-r--r-- | ARMeilleure/Translation/PTC/Ptc.cs | 4 | ||||
| -rw-r--r-- | ARMeilleure/Translation/TranslatedFunction.cs | 7 | ||||
| -rw-r--r-- | ARMeilleure/Translation/Translator.cs | 12 |
3 files changed, 11 insertions, 12 deletions
diff --git a/ARMeilleure/Translation/PTC/Ptc.cs b/ARMeilleure/Translation/PTC/Ptc.cs index aeb5868c..de2294b2 100644 --- a/ARMeilleure/Translation/PTC/Ptc.cs +++ b/ARMeilleure/Translation/PTC/Ptc.cs @@ -745,9 +745,9 @@ namespace ARMeilleure.Translation.PTC bool highCq) { var cFunc = new CompiledFunction(code, unwindInfo, RelocInfo.Empty); - var gFunc = cFunc.Map<GuestFunction>(); + var gFunc = cFunc.MapWithPointer<GuestFunction>(out IntPtr gFuncPointer); - return new TranslatedFunction(gFunc, callCounter, guestSize, highCq); + return new TranslatedFunction(gFunc, gFuncPointer, callCounter, guestSize, highCq); } private void UpdateInfo(InfoEntry infoEntry) diff --git a/ARMeilleure/Translation/TranslatedFunction.cs b/ARMeilleure/Translation/TranslatedFunction.cs index 04dd769c..71eec08a 100644 --- a/ARMeilleure/Translation/TranslatedFunction.cs +++ b/ARMeilleure/Translation/TranslatedFunction.cs @@ -1,6 +1,5 @@ using ARMeilleure.Common; using System; -using System.Runtime.InteropServices; namespace ARMeilleure.Translation { @@ -8,18 +7,18 @@ namespace ARMeilleure.Translation { private readonly GuestFunction _func; // Ensure that this delegate will not be garbage collected. + public IntPtr FuncPointer { get; } public Counter<uint> CallCounter { get; } public ulong GuestSize { get; } public bool HighCq { get; } - public IntPtr FuncPtr { get; } - public TranslatedFunction(GuestFunction func, Counter<uint> callCounter, ulong guestSize, bool highCq) + public TranslatedFunction(GuestFunction func, IntPtr funcPointer, Counter<uint> callCounter, ulong guestSize, bool highCq) { _func = func; + FuncPointer = funcPointer; CallCounter = callCounter; GuestSize = guestSize; HighCq = highCq; - FuncPtr = Marshal.GetFunctionPointerForDelegate(func); } public ulong Execute(State.ExecutionContext context) diff --git a/ARMeilleure/Translation/Translator.cs b/ARMeilleure/Translation/Translator.cs index cbf6baa0..0c05b2b4 100644 --- a/ARMeilleure/Translation/Translator.cs +++ b/ARMeilleure/Translation/Translator.cs @@ -211,7 +211,7 @@ namespace ARMeilleure.Translation if (oldFunc != func) { - JitCache.Unmap(func.FuncPtr); + JitCache.Unmap(func.FuncPointer); func = oldFunc; } @@ -230,7 +230,7 @@ namespace ARMeilleure.Translation { if (FunctionTable.IsValid(guestAddress) && (Optimizations.AllowLcqInFunctionTable || func.HighCq)) { - Volatile.Write(ref FunctionTable.GetValue(guestAddress), (ulong)func.FuncPtr); + Volatile.Write(ref FunctionTable.GetValue(guestAddress), (ulong)func.FuncPointer); } } @@ -292,11 +292,11 @@ namespace ARMeilleure.Translation _ptc.WriteCompiledFunction(address, funcSize, hash, highCq, compiledFunc); } - GuestFunction func = compiledFunc.Map<GuestFunction>(); + GuestFunction func = compiledFunc.MapWithPointer<GuestFunction>(out IntPtr funcPointer); Allocators.ResetAll(); - return new TranslatedFunction(func, counter, funcSize, highCq); + return new TranslatedFunction(func, funcPointer, counter, funcSize, highCq); } private void BackgroundTranslate() @@ -537,7 +537,7 @@ namespace ARMeilleure.Translation foreach (var func in functions) { - JitCache.Unmap(func.FuncPtr); + JitCache.Unmap(func.FuncPointer); func.CallCounter?.Dispose(); } @@ -546,7 +546,7 @@ namespace ARMeilleure.Translation while (_oldFuncs.TryDequeue(out var kv)) { - JitCache.Unmap(kv.Value.FuncPtr); + JitCache.Unmap(kv.Value.FuncPointer); kv.Value.CallCounter?.Dispose(); } |
