summaryrefslogtreecommitdiffstats
path: root/runtime/arch/arm/quick_entrypoints_cc_arm.cc
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2015-01-13 11:42:13 +0000
committerNicolas Geoffray <ngeoffray@google.com>2015-01-13 18:11:24 +0000
commit69c15d340e7e76821bbc5d4494d4cef383774dee (patch)
treeafea69c321ffa55e0af63a83be62eedd2b378d2f /runtime/arch/arm/quick_entrypoints_cc_arm.cc
parent603104b5b5c3759b0bc2733bda2f972686a775a3 (diff)
downloadart-69c15d340e7e76821bbc5d4494d4cef383774dee.zip
art-69c15d340e7e76821bbc5d4494d4cef383774dee.tar.gz
art-69c15d340e7e76821bbc5d4494d4cef383774dee.tar.bz2
Skip r1 on arm if first parameter is a long.
Change-Id: I16d927ee0a0b55031ade4c92c0095fd74e18ed5b
Diffstat (limited to 'runtime/arch/arm/quick_entrypoints_cc_arm.cc')
-rw-r--r--runtime/arch/arm/quick_entrypoints_cc_arm.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/runtime/arch/arm/quick_entrypoints_cc_arm.cc b/runtime/arch/arm/quick_entrypoints_cc_arm.cc
index e21e6c1..a3acd7e 100644
--- a/runtime/arch/arm/quick_entrypoints_cc_arm.cc
+++ b/runtime/arch/arm/quick_entrypoints_cc_arm.cc
@@ -75,7 +75,14 @@ static void quick_invoke_reg_setup(mirror::ArtMethod* method, uint32_t* args, ui
}
break;
case 'J':
+ if (gpr_index == 1 && !kArm32QuickCodeUseSoftFloat) {
+ // Don't use r1-r2 as a register pair, move to r2-r3 instead.
+ gpr_index++;
+ }
if (gpr_index < arraysize(core_reg_args)) {
+ // Note that we don't need to do this if two registers are not available
+ // when !kArm32QuickCodeUseSoftFloat. We do it anyway to leave this
+ // code simple.
core_reg_args[gpr_index++] = args[arg_index];
}
++arg_index;