summaryrefslogtreecommitdiffstats
path: root/vm/interp/Jit.h
diff options
context:
space:
mode:
Diffstat (limited to 'vm/interp/Jit.h')
-rw-r--r--vm/interp/Jit.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/vm/interp/Jit.h b/vm/interp/Jit.h
new file mode 100644
index 000000000..2b2cb8e26
--- /dev/null
+++ b/vm/interp/Jit.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * Jit control
+ */
+#ifndef _DALVIK_INTERP_JIT
+#define _DALVIK_INTERP_JIT
+
+#include "InterpDefs.h"
+
+#define JIT_PROF_SIZE 512
+/*
+ * JitTable hash function.
+ */
+static inline u4 dvmJitHash( const u2* p ) {
+ /*
+ * TODO - Might make sense to keep "maxTableEntries - 1" as its own
+ * variable for speed reasons.
+ */
+ return ((((u4)p>>12)^(u4)p)>>1) & (gDvmJit.maxTableEntries-1);
+}
+
+/*
+ * Entries in the JIT's address lookup hash table.
+ * with assembly hash function in mterp.
+ * TODO: rework this structure now that the profile counts have
+ * moved into their own table.
+ */
+typedef struct JitEntry {
+ u2 unused; /* was execution count */
+ u2 chain; /* Index of next in chain */
+ const u2* dPC; /* Dalvik code address */
+ void* codeAddress; /* Code address of native translation */
+} JitEntry;
+
+int dvmJitStartup(void);
+void dvmJitShutdown(void);
+int dvmCheckJit(const u2* pc, Thread* self, InterpState* interpState);
+void* dvmJitGetCodeAddr(const u2* dPC);
+void dvmJitSetCodeAddr(const u2* dPC, void *nPC);
+bool dvmJitCheckTraceRequest(Thread* self, InterpState* interpState);
+void* dvmJitChain(void* tgtAddr, u4* branchAddr);
+void dvmJitStopTranslationRequests();
+void dvmJitStats();
+
+#endif /*_DALVIK_INTERP_JIT*/