diff options
Diffstat (limited to 'src/compiler_llvm/method_compiler.h')
-rw-r--r-- | src/compiler_llvm/method_compiler.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/compiler_llvm/method_compiler.h b/src/compiler_llvm/method_compiler.h index 0ec4858..dd10bc8 100644 --- a/src/compiler_llvm/method_compiler.h +++ b/src/compiler_llvm/method_compiler.h @@ -86,6 +86,7 @@ class MethodCompiler { UniquePtr<DalvikReg> retval_reg_; llvm::BasicBlock* basic_block_reg_alloca_; + llvm::BasicBlock* basic_block_shadow_frame_alloca_; llvm::BasicBlock* basic_block_reg_zero_init_; llvm::BasicBlock* basic_block_reg_arg_init_; std::vector<llvm::BasicBlock*> basic_blocks_; @@ -94,6 +95,8 @@ class MethodCompiler { llvm::BasicBlock* basic_block_unwind_; llvm::BasicBlock* basic_block_unreachable_; + llvm::AllocaInst* shadow_frame_; + public: MethodCompiler(InstructionSet insn_set, @@ -129,6 +132,7 @@ class MethodCompiler { void CreateFunction(); void EmitPrologue(); void EmitPrologueLastBranch(); + void EmitPrologueAllocShadowFrame(); void EmitPrologueAssignArgRegister(); void EmitInstructions(); void EmitInstruction(uint32_t dex_pc, Instruction const* insn); @@ -266,6 +270,12 @@ class MethodCompiler { #undef GEN_INSN_ARGS + // Shadow frame helper function + void EmitPopShadowFrame(); + void EmitUpdateLineNum(int32_t line_number); + void EmitUpdateLineNumFromDexPC(uint32_t dex_pc); + + // Dex cache code generation helper function llvm::Value* EmitLoadDexCacheAddr(MemberOffset dex_cache_offset); |