From 5bb8601175bbb9cd761c715f4ba04f84d65e913b Mon Sep 17 00:00:00 2001 From: TDYa127 Date: Wed, 11 Apr 2012 05:57:28 -0700 Subject: Fix 044-proxy. Implement proxy for now, working on x86 and ARM. Already added a TODO to do the assembly code for x86 and ARM for proxy. Use LLVM .ll for multi-architecture now. Change-Id: Ibdeeee113dcf284592e9d7769d3044438cb1e453 --- src/compiler_llvm/ir_builder.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/compiler_llvm/ir_builder.h') diff --git a/src/compiler_llvm/ir_builder.h b/src/compiler_llvm/ir_builder.h index 0762a0dd89..d199b76604 100644 --- a/src/compiler_llvm/ir_builder.h +++ b/src/compiler_llvm/ir_builder.h @@ -89,6 +89,26 @@ class IRBuilder : public LLVMIRBuilder { return CreatePtrDisp(base, total_offset, ret_ty); } + llvm::Value* LoadFromObjectOffset(llvm::Value* object_addr, int32_t offset, llvm::Type* type) { + // Convert offset to llvm::value + llvm::Value* llvm_offset = getPtrEquivInt(offset); + // Calculate the value's address + llvm::Value* value_addr = CreatePtrDisp(object_addr, llvm_offset, type->getPointerTo()); + // Load + return CreateLoad(value_addr); + } + + void StoreToObjectOffset(llvm::Value* object_addr, int32_t offset, llvm::Value* new_value) { + // Convert offset to llvm::value + llvm::Value* llvm_offset = getPtrEquivInt(offset); + // Calculate the value's address + llvm::Value* value_addr = CreatePtrDisp(object_addr, + llvm_offset, + new_value->getType()->getPointerTo()); + // Store + CreateStore(new_value, value_addr); + } + //-------------------------------------------------------------------------- // Runtime Helper Function -- cgit v1.2.3-59-g8ed1b