diff options
| author | 2012-01-13 19:26:27 +0800 | |
|---|---|---|
| committer | 2012-02-17 20:41:15 -0800 | |
| commit | 6c6f12d0ed64e0f4bcbb7139eca8fe564302f385 (patch) | |
| tree | 286b5d42f0a7dd84fcec73a12b7035f448d35af4 /src/compiler_llvm/method_compiler.cc | |
| parent | 3354cec8828abd98ce18baaad199d7d9bc47bdd2 (diff) | |
Implement throw instruction.
Change-Id: Ib01aa608bfaab302bac5646f1d7b5761d17d18b5
Diffstat (limited to 'src/compiler_llvm/method_compiler.cc')
| -rw-r--r-- | src/compiler_llvm/method_compiler.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc index 54e9decddb..7ddae88791 100644 --- a/src/compiler_llvm/method_compiler.cc +++ b/src/compiler_llvm/method_compiler.cc @@ -1137,8 +1137,15 @@ void MethodCompiler::EmitInsn_MoveException(uint32_t dex_pc, void MethodCompiler::EmitInsn_ThrowException(uint32_t dex_pc, Instruction const* insn) { - // UNIMPLEMENTED(WARNING); - irb_.CreateUnreachable(); + + Instruction::DecodedInstruction dec_insn(insn); + + llvm::Value* exception_addr = + EmitLoadDalvikReg(dec_insn.vA_, kObject, kAccurate); + + irb_.CreateCall(irb_.GetRuntime(ThrowException), exception_addr); + + EmitBranchExceptionLandingPad(dex_pc); } |