diff options
| author | 2012-03-21 20:40:33 -0700 | |
|---|---|---|
| committer | 2012-03-21 20:41:16 -0700 | |
| commit | c6f3bb87ffbb44d902c4a1f67a71bb108bd01560 (patch) | |
| tree | c423db1d6e7914e57559ab5a4325094e6f1ea5c0 /src/compiler/codegen/MethodCodegenDriver.cc | |
| parent | e5b7894351ecc5ef99442eea0700c913178c95ce (diff) | |
Further x86 progress and image creation.
Change-Id: Idafadfc55228541536f25d2c92d40d9e0510b602
Diffstat (limited to 'src/compiler/codegen/MethodCodegenDriver.cc')
| -rw-r--r-- | src/compiler/codegen/MethodCodegenDriver.cc | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc index 671eb7344c..205a65ad2c 100644 --- a/src/compiler/codegen/MethodCodegenDriver.cc +++ b/src/compiler/codegen/MethodCodegenDriver.cc @@ -186,22 +186,22 @@ bool compileDalvikInstruction(CompilationUnit* cUnit, MIR* mir, case Instruction::NOP: break; - case Instruction::MOVE_EXCEPTION: + case Instruction::MOVE_EXCEPTION: { + int exOffset = Thread::ExceptionOffset().Int32Value(); + rlResult = oatEvalLoc(cUnit, rlDest, kCoreReg, true); #if defined(TARGET_X86) - UNIMPLEMENTED(WARNING) << "Instruction::MOVE_EXCEPTION"; + newLIR2(cUnit, kX86Mov32RT, rlResult.lowReg, exOffset); + newLIR2(cUnit, kX86Mov32TI, exOffset, 0); #else - int exOffset; - int resetReg; - exOffset = Thread::ExceptionOffset().Int32Value(); - resetReg = oatAllocTemp(cUnit); - rlResult = oatEvalLoc(cUnit, rlDest, kCoreReg, true); + int resetReg = oatAllocTemp(cUnit); loadWordDisp(cUnit, rSELF, exOffset, rlResult.lowReg); loadConstant(cUnit, resetReg, 0); storeWordDisp(cUnit, rSELF, exOffset, resetReg); storeValue(cUnit, rlDest, rlResult); + oatFreeTemp(cUnit, resetReg); #endif break; - + } case Instruction::RETURN_VOID: if (!cUnit->attrs & METHOD_IS_LEAF) { genSuspendTest(cUnit, mir); |