diff options
| author | 2012-10-23 09:48:59 -0700 | |
|---|---|---|
| committer | 2012-10-23 09:48:59 -0700 | |
| commit | ef851d3058abfc56ed544f25d387dc7ff9c32e0b (patch) | |
| tree | f5d71b2ccfdc6078a0a09d676b044f4d23f37483 /src | |
| parent | 7e762861d644c1554f42b49bc4f8668c3b3c3eaa (diff) | |
| parent | 30a3317577d84feafa859b3e39d1545a995f0b7c (diff) | |
Merge "More MIPS fixes. Many run-test tests pass." into dalvik-dev
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler/codegen/GenCommon.cc | 22 | ||||
| -rw-r--r-- | src/compiler/codegen/arm/ArmLIR.h | 4 | ||||
| -rw-r--r-- | src/compiler/codegen/mips/FP/MipsFP.cc | 8 | ||||
| -rw-r--r-- | src/compiler/codegen/mips/MipsLIR.h | 4 | ||||
| -rw-r--r-- | src/compiler/codegen/x86/X86LIR.h | 4 | ||||
| -rw-r--r-- | src/oat/runtime/mips/runtime_support_mips.S | 8 | ||||
| -rw-r--r-- | src/oat/runtime/support_proxy.cc | 4 |
7 files changed, 37 insertions, 17 deletions
diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc index 21f824dfd6..730527115e 100644 --- a/src/compiler/codegen/GenCommon.cc +++ b/src/compiler/codegen/GenCommon.cc @@ -216,18 +216,26 @@ void callRuntimeHelperRegLocationRegLocation(CompilationUnit* cUnit, int helperO int rTgt = loadHelper(cUnit, helperOffset); #endif if (arg0.wide == 0) { - loadValueDirectFixed(cUnit, arg0, rARG0); + loadValueDirectFixed(cUnit, arg0, arg0.fp ? rFARG0 : rARG0); if (arg1.wide == 0) { +#if defined(TARGET_MIPS) + loadValueDirectFixed(cUnit, arg1, arg1.fp ? rFARG2 : rARG1); +#else loadValueDirectFixed(cUnit, arg1, rARG1); +#endif } else { +#if defined(TARGET_MIPS) + loadValueDirectWideFixed(cUnit, arg1, arg1.fp ? rFARG2 : rARG1, arg1.fp ? rFARG3 : rARG2); +#else loadValueDirectWideFixed(cUnit, arg1, rARG1, rARG2); +#endif } } else { - loadValueDirectWideFixed(cUnit, arg0, rARG0, rARG1); + loadValueDirectWideFixed(cUnit, arg0, arg0.fp ? rFARG0 : rARG0, arg0.fp ? rFARG1 : rARG1); if (arg1.wide == 0) { - loadValueDirectFixed(cUnit, arg1, rARG2); + loadValueDirectFixed(cUnit, arg1, arg1.fp ? rFARG2 : rARG2); } else { - loadValueDirectWideFixed(cUnit, arg1, rARG2, rARG3); + loadValueDirectWideFixed(cUnit, arg1, arg1.fp ? rFARG2 : rARG2, arg1.fp ? rFARG3 : rARG3); } } oatClobberCalleeSave(cUnit); @@ -1400,7 +1408,7 @@ void genCheckCast(CompilationUnit* cUnit, uint32_t type_idx, RegLocation rlSrc) // InitializeTypeFromCode(idx, method) callRuntimeHelperImmReg(cUnit, ENTRYPOINT_OFFSET(pInitializeTypeFromCode), type_idx, rARG1, true); - opRegCopy(cUnit, classReg, rARG0); // Align usage with fast path + opRegCopy(cUnit, classReg, rRET0); // Align usage with fast path // Rejoin code paths LIR* hopTarget = newLIR0(cUnit, kPseudoTargetLabel); hopBranch->target = (LIR*)hopTarget; @@ -2363,9 +2371,9 @@ bool genConversionCall(CompilationUnit* cUnit, int funcOffset, */ oatFlushAllRegs(cUnit); /* Send everything to home location */ if (rlSrc.wide) { - loadValueDirectWideFixed(cUnit, rlSrc, rARG0, rARG1); + loadValueDirectWideFixed(cUnit, rlSrc, rlSrc.fp ? rFARG0 : rARG0, rlSrc.fp ? rFARG1 : rARG1); } else { - loadValueDirectFixed(cUnit, rlSrc, rARG0); + loadValueDirectFixed(cUnit, rlSrc, rlSrc.fp ? rFARG0 : rARG0); } callRuntimeHelperRegLocation(cUnit, funcOffset, rlSrc, false); if (rlDest.wide) { diff --git a/src/compiler/codegen/arm/ArmLIR.h b/src/compiler/codegen/arm/ArmLIR.h index a40df20b8e..1da567e177 100644 --- a/src/compiler/codegen/arm/ArmLIR.h +++ b/src/compiler/codegen/arm/ArmLIR.h @@ -251,6 +251,10 @@ enum NativeRegisterPool { #define rARG1 r1 #define rARG2 r2 #define rARG3 r3 +#define rFARG0 r0 +#define rFARG1 r1 +#define rFARG2 r2 +#define rFARG3 r3 #define rRET0 r0 #define rRET1 r1 #define rINVOKE_TGT rLR diff --git a/src/compiler/codegen/mips/FP/MipsFP.cc b/src/compiler/codegen/mips/FP/MipsFP.cc index 437f1ed2d8..990c71f232 100644 --- a/src/compiler/codegen/mips/FP/MipsFP.cc +++ b/src/compiler/codegen/mips/FP/MipsFP.cc @@ -197,11 +197,11 @@ static bool genCmpFP(CompilationUnit *cUnit, Instruction::Code opcode, RegLocati oatFlushAllRegs(cUnit); oatLockCallTemps(cUnit); if (wide) { - loadValueDirectWideFixed(cUnit, rlSrc1, r_FARG0, r_FARG1); - loadValueDirectWideFixed(cUnit, rlSrc2, r_FARG2, r_FARG3); + loadValueDirectWideFixed(cUnit, rlSrc1, rFARG0, rFARG1); + loadValueDirectWideFixed(cUnit, rlSrc2, rFARG2, rFARG3); } else { - loadValueDirectFixed(cUnit, rlSrc1, r_FARG0); - loadValueDirectFixed(cUnit, rlSrc2, r_FARG2); + loadValueDirectFixed(cUnit, rlSrc1, rFARG0); + loadValueDirectFixed(cUnit, rlSrc2, rFARG2); } int rTgt = loadHelper(cUnit, offset); // NOTE: not a safepoint diff --git a/src/compiler/codegen/mips/MipsLIR.h b/src/compiler/codegen/mips/MipsLIR.h index 5077c9fa40..4b7da557b3 100644 --- a/src/compiler/codegen/mips/MipsLIR.h +++ b/src/compiler/codegen/mips/MipsLIR.h @@ -301,6 +301,10 @@ enum NativeRegisterPool { #define rARG1 r_ARG1 #define rARG2 r_ARG2 #define rARG3 r_ARG3 +#define rFARG0 r_FARG0 +#define rFARG1 r_FARG1 +#define rFARG2 r_FARG2 +#define rFARG3 r_FARG3 #define rRET0 r_RESULT0 #define rRET1 r_RESULT1 #define rINVOKE_TGT r_T9 diff --git a/src/compiler/codegen/x86/X86LIR.h b/src/compiler/codegen/x86/X86LIR.h index d3e3da8d6d..8ad014ac85 100644 --- a/src/compiler/codegen/x86/X86LIR.h +++ b/src/compiler/codegen/x86/X86LIR.h @@ -238,6 +238,10 @@ enum NativeRegisterPool { #define rARG1 rCX #define rARG2 rDX #define rARG3 rBX +#define rFARG0 rAX +#define rFARG1 rCX +#define rFARG2 rDX +#define rFARG3 rBX #define rRET0 rAX #define rRET1 rDX #define rINVOKE_TGT rAX diff --git a/src/oat/runtime/mips/runtime_support_mips.S b/src/oat/runtime/mips/runtime_support_mips.S index eafd380996..349e802d26 100644 --- a/src/oat/runtime/mips/runtime_support_mips.S +++ b/src/oat/runtime/mips/runtime_support_mips.S @@ -353,11 +353,11 @@ art_throw_no_such_method_from_code: sw $t0, 16($sp) # pass $sp addiu $sp, $sp, 16 # release out args move $a0, $v0 # save target Method* - move $t0, $v1 # save $v0->code_ + move $t9, $v1 # save $v0->code_ RESTORE_REF_AND_ARGS_CALLEE_SAVE_FRAME beqz $v0, 1f nop - jr $t0 + jr $t9 nop 1: DELIVER_PENDING_EXCEPTION @@ -389,13 +389,13 @@ art_work_around_app_jni_bugs: move $a0, rSELF # pass Thread::Current jal artWorkAroundAppJniBugs # (Thread*, $sp) move $a1, $sp # pass $sp - move $t0, $v0 # save target address + move $t9, $v0 # save target address lw $a0, 12($sp) lw $a1, 16($sp) lw $a2, 20($sp) lw $a3, 24($sp) lw $ra, 28($sp) - jr $t0 # tail call into JNI routine + jr $t9 # tail call into JNI routine addiu $sp, $sp, 32 .global art_handle_fill_data_from_code diff --git a/src/oat/runtime/support_proxy.cc b/src/oat/runtime/support_proxy.cc index 3d0c1c8d72..7ece7848d6 100644 --- a/src/oat/runtime/support_proxy.cc +++ b/src/oat/runtime/support_proxy.cc @@ -30,8 +30,8 @@ #define ARG2_OFFSET_IN_WORDS 11 // offset to 3rd arg; skip callee saves, LR, Method* and out arg spills for OUT0 to OUT2 #elif defined(__mips__) #define SP_OFFSET_IN_BYTES 8 -#define FRAME_SIZE_IN_BYTES 32u -#define ARG2_OFFSET_IN_WORDS 8 // offset to 3rd arg; skip callee saves, LR, Method* and out arg spills for OUT0 to OUT2 +#define FRAME_SIZE_IN_BYTES 48u +#define ARG2_OFFSET_IN_WORDS 12 // offset to 3rd arg; skip callee saves, LR, Method* and out arg spills for OUT0 to OUT2 #elif defined(__i386__) #define SP_OFFSET_IN_BYTES 8 #define FRAME_SIZE_IN_BYTES 32u |