summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/ir_builder.h
diff options
context:
space:
mode:
author TDYa127 <tdy@google.com> 2012-04-11 05:57:28 -0700
committer Shih-wei Liao <sliao@google.com> 2012-04-11 11:01:21 -0700
commit5bb8601175bbb9cd761c715f4ba04f84d65e913b (patch)
tree441c62e467b6c7a355d9ad65ea88a923abbb409b /src/compiler_llvm/ir_builder.h
parent933abf8ce64e522b1c45b191b796bf2208a760d9 (diff)
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
Diffstat (limited to 'src/compiler_llvm/ir_builder.h')
-rw-r--r--src/compiler_llvm/ir_builder.h20
1 files changed, 20 insertions, 0 deletions
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