summaryrefslogtreecommitdiffstats
path: root/vm/mterp/config-armv7-a-neon
diff options
context:
space:
mode:
authorbuzbee <buzbee@google.com>2011-02-24 09:38:17 -0800
committerbuzbee <buzbee@google.com>2011-02-28 18:15:55 -0800
commita7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3 (patch)
tree8557f21ec220f2447228eba68a99641a6a0f4780 /vm/mterp/config-armv7-a-neon
parent38f75eba6508abb0c7aded2c9dadb15668f645bc (diff)
downloadandroid_dalvik-a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3.tar.gz
android_dalvik-a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3.tar.bz2
android_dalvik-a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3.zip
New interpreter breakout mechanism
Introduce parallel handler entry points for mterp interpreters as a step towards fully supporting debug, profile and JIT within mterp (instead of bailing out to the portable debug interpreter). This CL contains most of the structural changes that need to happen, but does not yet enable the new switch mode. In short, within the mterp assembly interpreter register rIBASE points to an array of handlers for Dalvik opcodes. Instead of periodically checking for suspend, debug, profiling and JIT trace selection breakouts, rIBASE may simply be altered to point to the parallel breakout handlers when control needs to be rerouted. This will enable us to eliminate the separate portable debug interpreter and the entire mechanism of switching between the fast and portable interpreters. The x86 implementation required a large number of changes because of the need to dedicate a register to holding the table base. It will now use %edx (which was previously scratch). Changes include: o Support for two styles of mterp assembly code generation: computed goto and jump table (ARM uses computed goto, x86 uses jump table) o New mterp config operators to trigger generation of alternate entry points. o Alternate entries route execution through new dvmCheckInst(). That's where the checking code will go. o For x86, reserved register edx as dedicated rIBASE. o For jump-table mterps, ignore "%break" operator and allow variable-sized handlers with no "sister" region. Note that the x86-atom implementation will need substantial changes to function in this new model. Change-Id: I3a22048adb7dcfdeba4f94fbb977b26c3ab2fcb3
Diffstat (limited to 'vm/mterp/config-armv7-a-neon')
-rw-r--r--vm/mterp/config-armv7-a-neon5
1 files changed, 5 insertions, 0 deletions
diff --git a/vm/mterp/config-armv7-a-neon b/vm/mterp/config-armv7-a-neon
index e66640c65..c6ac47f34 100644
--- a/vm/mterp/config-armv7-a-neon
+++ b/vm/mterp/config-armv7-a-neon
@@ -154,6 +154,11 @@ op-start armv5te
op OP_SUB_FLOAT_2ADDR arm-vfp
op-end
+# alternate opcode entry points (used to redirect control)
+op-alt-start armv5te
+ alt OP_DISPATCH_FF armv5te
+op-alt-end
+
# "helper" code for C; include if you use any of the C stubs (this generates
# object code, so it's normally excluded)
##import c/gotoTargets.c