diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2015-01-13 11:42:13 +0000 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2015-01-13 18:11:24 +0000 |
commit | 69c15d340e7e76821bbc5d4494d4cef383774dee (patch) | |
tree | afea69c321ffa55e0af63a83be62eedd2b378d2f /runtime/arch/arm/quick_entrypoints_cc_arm.cc | |
parent | 603104b5b5c3759b0bc2733bda2f972686a775a3 (diff) | |
download | art-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.cc | 7 |
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; |