aboutsummaryrefslogtreecommitdiff
path: root/src/ARMeilleure/Translation/TranslatedFunction.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARMeilleure/Translation/TranslatedFunction.cs')
-rw-r--r--src/ARMeilleure/Translation/TranslatedFunction.cs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/ARMeilleure/Translation/TranslatedFunction.cs b/src/ARMeilleure/Translation/TranslatedFunction.cs
new file mode 100644
index 00000000..f007883e
--- /dev/null
+++ b/src/ARMeilleure/Translation/TranslatedFunction.cs
@@ -0,0 +1,34 @@
+using ARMeilleure.Common;
+using System;
+
+namespace ARMeilleure.Translation
+{
+ class TranslatedFunction
+ {
+ 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 TranslatedFunction(GuestFunction func, IntPtr funcPointer, Counter<uint> callCounter, ulong guestSize, bool highCq)
+ {
+ _func = func;
+ FuncPointer = funcPointer;
+ CallCounter = callCounter;
+ GuestSize = guestSize;
+ HighCq = highCq;
+ }
+
+ public ulong Execute(State.ExecutionContext context)
+ {
+ return _func(context.NativeContextPtr);
+ }
+
+ public ulong Execute(WrapperFunction dispatcher, State.ExecutionContext context)
+ {
+ return dispatcher(context.NativeContextPtr, (ulong)FuncPointer);
+ }
+ }
+} \ No newline at end of file