diff options
author | buzbee <buzbee@google.com> | 2011-05-25 16:00:22 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-05-25 16:00:22 -0700 |
commit | e1c94cd59e250f69b973e369db316808a7e7cf77 (patch) | |
tree | 947bc5735de5ad6b3529617d1f2f561996f0d5a5 /vm/compiler/codegen | |
parent | 43e796a261bec308b44e9e5a627820845812202c (diff) | |
parent | cf4a20cf0cbc53f03a5b16c7152bbb29907f7108 (diff) | |
download | android_dalvik-e1c94cd59e250f69b973e369db316808a7e7cf77.tar.gz android_dalvik-e1c94cd59e250f69b973e369db316808a7e7cf77.tar.bz2 android_dalvik-e1c94cd59e250f69b973e369db316808a7e7cf77.zip |
am cf4a20cf: Interpreter/Debugger fix #4479968
* commit 'cf4a20cf0cbc53f03a5b16c7152bbb29907f7108':
Interpreter/Debugger fix #4479968
Diffstat (limited to 'vm/compiler/codegen')
-rw-r--r-- | vm/compiler/codegen/CodegenFactory.cpp | 15 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/CodegenDriver.cpp | 2 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/Thumb/Gen.cpp | 6 |
3 files changed, 13 insertions, 10 deletions
diff --git a/vm/compiler/codegen/CodegenFactory.cpp b/vm/compiler/codegen/CodegenFactory.cpp index 61e29d7d1..f42ae746b 100644 --- a/vm/compiler/codegen/CodegenFactory.cpp +++ b/vm/compiler/codegen/CodegenFactory.cpp @@ -57,7 +57,7 @@ static void loadValueDirect(CompilationUnit *cUnit, RegLocation rlSrc, if (rlSrc.location == kLocPhysReg) { genRegCopy(cUnit, reg1, rlSrc.lowReg); } else if (rlSrc.location == kLocRetval) { - loadWordDisp(cUnit, rSELF, offsetof(Thread, retval), reg1); + loadWordDisp(cUnit, rSELF, offsetof(Thread, interpSave.retval), reg1); } else { assert(rlSrc.location == kLocDalvikFrame); loadWordDisp(cUnit, rFP, dvmCompilerS2VReg(cUnit, rlSrc.sRegLow) << 2, @@ -90,7 +90,8 @@ static void loadValueDirectWide(CompilationUnit *cUnit, RegLocation rlSrc, if (rlSrc.location == kLocPhysReg) { genRegCopyWide(cUnit, regLo, regHi, rlSrc.lowReg, rlSrc.highReg); } else if (rlSrc.location == kLocRetval) { - loadBaseDispWide(cUnit, NULL, rSELF, offsetof(Thread, retval), + loadBaseDispWide(cUnit, NULL, rSELF, + offsetof(Thread, interpSave.retval), regLo, regHi, INVALID_SREG); } else { assert(rlSrc.location == kLocDalvikFrame); @@ -124,7 +125,8 @@ static RegLocation loadValue(CompilationUnit *cUnit, RegLocation rlSrc, rlSrc.location = kLocPhysReg; dvmCompilerMarkLive(cUnit, rlSrc.lowReg, rlSrc.sRegLow); } else if (rlSrc.location == kLocRetval) { - loadWordDisp(cUnit, rSELF, offsetof(Thread, retval), rlSrc.lowReg); + loadWordDisp(cUnit, rSELF, offsetof(Thread, interpSave.retval), + rlSrc.lowReg); rlSrc.location = kLocPhysReg; dvmCompilerClobber(cUnit, rlSrc.lowReg); } @@ -164,7 +166,7 @@ static void storeValue(CompilationUnit *cUnit, RegLocation rlDest, if (rlDest.location == kLocRetval) { - storeBaseDisp(cUnit, rSELF, offsetof(Thread, retval), + storeBaseDisp(cUnit, rSELF, offsetof(Thread, interpSave.retval), rlDest.lowReg, kWord); dvmCompilerClobber(cUnit, rlDest.lowReg); } else { @@ -192,7 +194,8 @@ static RegLocation loadValueWide(CompilationUnit *cUnit, RegLocation rlSrc, dvmCompilerMarkLive(cUnit, rlSrc.highReg, dvmCompilerSRegHi(rlSrc.sRegLow)); } else if (rlSrc.location == kLocRetval) { - loadBaseDispWide(cUnit, NULL, rSELF, offsetof(Thread, retval), + loadBaseDispWide(cUnit, NULL, rSELF, + offsetof(Thread, interpSave.retval), rlSrc.lowReg, rlSrc.highReg, INVALID_SREG); rlSrc.location = kLocPhysReg; dvmCompilerClobber(cUnit, rlSrc.lowReg); @@ -242,7 +245,7 @@ static void storeValueWide(CompilationUnit *cUnit, RegLocation rlDest, if (rlDest.location == kLocRetval) { - storeBaseDispWide(cUnit, rSELF, offsetof(Thread, retval), + storeBaseDispWide(cUnit, rSELF, offsetof(Thread, interpSave.retval), rlDest.lowReg, rlDest.highReg); dvmCompilerClobber(cUnit, rlDest.lowReg); dvmCompilerClobber(cUnit, rlDest.highReg); diff --git a/vm/compiler/codegen/arm/CodegenDriver.cpp b/vm/compiler/codegen/arm/CodegenDriver.cpp index 5a33ffbf8..b9429a99e 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.cpp +++ b/vm/compiler/codegen/arm/CodegenDriver.cpp @@ -3678,7 +3678,7 @@ static bool handleExecuteInlineC(CompilationUnit *cUnit, MIR *mir) dvmCompilerClobberCallRegs(cUnit); dvmCompilerClobber(cUnit, r4PC); dvmCompilerClobber(cUnit, r7); - int offset = offsetof(Thread, retval); + int offset = offsetof(Thread, interpSave.retval); opRegRegImm(cUnit, kOpAdd, r4PC, r6SELF, offset); opImm(cUnit, kOpPush, (1<<r4PC) | (1<<r7)); LOAD_FUNC_ADDR(cUnit, r4PC, fn); diff --git a/vm/compiler/codegen/arm/Thumb/Gen.cpp b/vm/compiler/codegen/arm/Thumb/Gen.cpp index 18ef76286..abc4420f7 100644 --- a/vm/compiler/codegen/arm/Thumb/Gen.cpp +++ b/vm/compiler/codegen/arm/Thumb/Gen.cpp @@ -214,7 +214,7 @@ static void genCmpLong(CompilationUnit *cUnit, MIR *mir, RegLocation rlDest, static bool genInlinedAbsFloat(CompilationUnit *cUnit, MIR *mir) { - int offset = offsetof(Thread, retval); + int offset = offsetof(Thread, interpSave.retval); RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); int reg0 = loadValue(cUnit, rlSrc, kCoreReg).lowReg; int signMask = dvmCompilerAllocTemp(cUnit); @@ -229,7 +229,7 @@ static bool genInlinedAbsFloat(CompilationUnit *cUnit, MIR *mir) static bool genInlinedAbsDouble(CompilationUnit *cUnit, MIR *mir) { - int offset = offsetof(Thread, retval); + int offset = offsetof(Thread, interpSave.retval); RegLocation rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); RegLocation regSrc = loadValueWide(cUnit, rlSrc, kCoreReg); int reglo = regSrc.lowReg; @@ -248,7 +248,7 @@ static bool genInlinedAbsDouble(CompilationUnit *cUnit, MIR *mir) /* No select in thumb, so we need to branch. Thumb2 will do better */ static bool genInlinedMinMaxInt(CompilationUnit *cUnit, MIR *mir, bool isMin) { - int offset = offsetof(Thread, retval); + int offset = offsetof(Thread, interpSave.retval); RegLocation rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 0); RegLocation rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 1); int reg0 = loadValue(cUnit, rlSrc1, kCoreReg).lowReg; |