aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Translation/TranslatedFunction.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Translation/TranslatedFunction.cs')
-rw-r--r--ARMeilleure/Translation/TranslatedFunction.cs30
1 files changed, 30 insertions, 0 deletions
diff --git a/ARMeilleure/Translation/TranslatedFunction.cs b/ARMeilleure/Translation/TranslatedFunction.cs
new file mode 100644
index 00000000..06069cf8
--- /dev/null
+++ b/ARMeilleure/Translation/TranslatedFunction.cs
@@ -0,0 +1,30 @@
+using System.Threading;
+
+namespace ARMeilleure.Translation
+{
+ class TranslatedFunction
+ {
+ private const int MinCallsForRejit = 100;
+
+ private GuestFunction _func;
+
+ private bool _rejit;
+ private int _callCount;
+
+ public TranslatedFunction(GuestFunction func, bool rejit)
+ {
+ _func = func;
+ _rejit = rejit;
+ }
+
+ public ulong Execute(State.ExecutionContext context)
+ {
+ return _func(context.NativeContextPtr);
+ }
+
+ public bool ShouldRejit()
+ {
+ return _rejit && Interlocked.Increment(ref _callCount) == MinCallsForRejit;
+ }
+ }
+} \ No newline at end of file