summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/method_compiler.cc
diff options
context:
space:
mode:
author Logan Chien <loganchien@google.com> 2012-01-13 19:26:27 +0800
committer Shih-wei Liao <sliao@google.com> 2012-02-17 20:41:15 -0800
commit6c6f12d0ed64e0f4bcbb7139eca8fe564302f385 (patch)
tree286b5d42f0a7dd84fcec73a12b7035f448d35af4 /src/compiler_llvm/method_compiler.cc
parent3354cec8828abd98ce18baaad199d7d9bc47bdd2 (diff)
Implement throw instruction.
Change-Id: Ib01aa608bfaab302bac5646f1d7b5761d17d18b5
Diffstat (limited to 'src/compiler_llvm/method_compiler.cc')
-rw-r--r--src/compiler_llvm/method_compiler.cc11
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);
}