From 69c15d340e7e76821bbc5d4494d4cef383774dee Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Tue, 13 Jan 2015 11:42:13 +0000 Subject: Skip r1 on arm if first parameter is a long. Change-Id: I16d927ee0a0b55031ade4c92c0095fd74e18ed5b --- runtime/arch/arm/quick_entrypoints_cc_arm.cc | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'runtime/arch') 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; -- cgit v1.1