[vmkit-commits] [vmkit] r198486 - Hides J3LLVMSignature except from J3Signature.
Gael Thomas
gael.thomas at lip6.fr
Sat Jan 4 04:41:54 PST 2014
Author: gthomas
Date: Sat Jan 4 06:41:53 2014
New Revision: 198486
URL: http://llvm.org/viewvc/llvm-project?rev=198486&view=rev
Log:
Hides J3LLVMSignature except from J3Signature.
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/include/j3/j3method.h
vmkit/branches/mcjit/include/j3/j3signature.h
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=198486&r1=198485&r2=198486&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Sat Jan 4 06:41:53 2014
@@ -39,7 +39,7 @@ namespace j3 {
friend class J3CodeGenVar;
friend class J3ExceptionTable;
friend class J3ExceptionNode;
- friend class J3LLVMSignature;
+ friend class J3Signature;
vmkit::BumpAllocator* allocator;
llvm::Module* module;
Modified: vmkit/branches/mcjit/include/j3/j3method.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3method.h?rev=198486&r1=198485&r2=198486&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3method.h (original)
+++ vmkit/branches/mcjit/include/j3/j3method.h Sat Jan 4 06:41:53 2014
@@ -104,7 +104,7 @@ namespace j3 {
J3Value invokeVirtual(J3ObjectHandle* obj, va_list va);
void ensureCompiled(bool withCaller);
- J3LLVMSignature::function_t cxxCaller();
+ J3Signature::function_t cxxCaller();
void* fnPtr();
void* functionPointerOrStaticTrampoline();
void* functionPointerOrVirtualTrampoline();
Modified: vmkit/branches/mcjit/include/j3/j3signature.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3signature.h?rev=198486&r1=198485&r2=198486&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3signature.h (original)
+++ vmkit/branches/mcjit/include/j3/j3signature.h Sat Jan 4 06:41:53 2014
@@ -20,6 +20,10 @@ namespace j3 {
class J3CodeGen;
class J3Signature : public vmkit::PermanentObject {
+ public:
+ typedef J3Value (*function_t)(void* fn, J3Value* args);
+
+ private:
J3ClassLoader* _loader;
const vmkit::Name* _name;
J3LLVMSignature* _staticLLVMSignature;
@@ -43,25 +47,24 @@ namespace j3 {
J3Type* out() { checkInOut(); return _out; }
uint32_t nbIns() { checkInOut(); return _nbIns; }
J3Type* ins(uint32_t idx) { checkInOut(); return _ins[idx]; }
- };
-
- class J3LLVMSignature : vmkit::PermanentObject {
- friend class J3CodeGen;
- public:
- typedef J3Value (*function_t)(void* fn, J3Value* args);
+ J3Signature::function_t caller(uint32_t access);
+ void generateCallerIR(uint32_t access, J3CodeGen* codeGen, llvm::Module* module, const char* id);
+ void setCaller(uint32_t access, J3Signature::function_t caller);
+ };
+ class J3LLVMSignature : public vmkit::PermanentObject {
private:
- llvm::FunctionType* _functionType;
- function_t _caller;
-
- void generateCallerIR(J3CodeGen* vm, llvm::Module* module, const char* id);
+ llvm::FunctionType* _functionType;
+ J3Signature::function_t _caller;
+ public:
J3LLVMSignature(llvm::FunctionType* functionType);
+ void z_setCaller(J3Signature::function_t caller) { _caller = caller; }
+ J3Signature::function_t z_caller() { return _caller; }
+
llvm::FunctionType* functionType() { return _functionType; }
- public:
- function_t caller() { return _caller; }
};
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198486&r1=198485&r2=198486&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sat Jan 4 06:41:53 2014
@@ -108,14 +108,14 @@ J3CodeGen::J3CodeGen(vmkit::BumpAllocato
}
uint32_t access = method->access();
- if(withCaller && !signature->llvmSignature(access)->caller())
- signature->llvmSignature(access)->generateCallerIR(this, module, "generic-caller");
+ if(withCaller && !signature->caller(access))
+ signature->generateCallerIR(access, this, module, "generic-caller");
loader->compileModule(module);
- if(withCaller && !signature->llvmSignature(access)->caller()) {
- J3LLVMSignature::function_t caller = (J3LLVMSignature::function_t)loader->ee()->getFunctionAddress("generic-caller");
- signature->llvmSignature(access)->_caller = caller;
+ if(withCaller && !signature->caller(access)) {
+ J3Signature::function_t caller = (J3Signature::function_t)loader->ee()->getFunctionAddress("generic-caller");
+ signature->setCaller(access, caller);
}
if(withMethod) {
@@ -192,6 +192,8 @@ llvm::Value* J3CodeGen::unflatten(llvm::
}
llvm::FunctionType* J3CodeGen::llvmFunctionType(J3Method* method) {
+ // return method->functionType(method->access());
+
J3Signature* type = method->signature();
J3LLVMSignature* res = type->llvmSignature(method->access());
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=198486&r1=198485&r2=198486&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Sat Jan 4 06:41:53 2014
@@ -48,8 +48,8 @@ void* J3Method::fnPtr() {
return _fnPtr;
}
-J3LLVMSignature::function_t J3Method::cxxCaller() {
- return signature()->llvmSignature(access())->caller();
+J3Signature::function_t J3Method::cxxCaller() {
+ return signature()->caller(access());
}
void J3Method::ensureCompiled(bool withCaller) {
Modified: vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3signature.cc?rev=198486&r1=198485&r2=198486&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3signature.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3signature.cc Sat Jan 4 06:41:53 2014
@@ -68,23 +68,12 @@ void J3Signature::checkInOut() {
}
}
-void J3Signature::setLLVMSignature(uint32_t access, J3LLVMSignature* llvmSignature) {
- if(J3Cst::isStatic(access))
- _staticLLVMSignature = llvmSignature;
- else
- _virtualLLVMSignature = llvmSignature;
-}
-
-J3LLVMSignature* J3Signature::llvmSignature(uint32_t access) {
- checkFunctionType();
- return J3Cst::isStatic(access) ? _staticLLVMSignature : _virtualLLVMSignature;
-}
-
-J3LLVMSignature::J3LLVMSignature(llvm::FunctionType* functionType) {
- _functionType = functionType;
+J3Signature::function_t J3Signature::caller(uint32_t access) {
+ return llvmSignature(access)->z_caller();
}
-void J3LLVMSignature::generateCallerIR(J3CodeGen* codeGen, llvm::Module* module, const char* id) {
+void J3Signature::generateCallerIR(uint32_t access, J3CodeGen* codeGen, llvm::Module* module, const char* id) {
+ llvm::FunctionType* fType = functionType(access);
llvm::Type* uint64Ty = llvm::Type::getInt64Ty(module->getContext());
llvm::Type* callerIn[] = { llvm::Type::getInt8Ty(module->getContext())->getPointerTo(),
uint64Ty->getPointerTo() };
@@ -93,7 +82,7 @@ void J3LLVMSignature::generateCallerIR(J
llvm::IRBuilder<> builder(bb);
llvm::Function::arg_iterator cur = caller->arg_begin();
- llvm::Value* method = builder.CreateBitCast(cur++, _functionType->getPointerTo());
+ llvm::Value* method = builder.CreateBitCast(cur++, fType->getPointerTo());
llvm::Value* ins = cur;
llvm::Value* one = builder.getInt32(1);
@@ -101,7 +90,7 @@ void J3LLVMSignature::generateCallerIR(J
std::vector<llvm::Value*> params;
- for(llvm::FunctionType::param_iterator it=_functionType->param_begin(); it!=_functionType->param_end(); it++) {
+ for(llvm::FunctionType::param_iterator it=fType->param_begin(); it!=fType->param_end(); it++) {
llvm::Type* t = *it;
llvm::Value* arg;
@@ -135,7 +124,7 @@ void J3LLVMSignature::generateCallerIR(J
}
llvm::Value* res = builder.CreateCall(method, params);
- llvm::Type* ret = _functionType->getReturnType();
+ llvm::Type* ret = fType->getReturnType();
if(ret != builder.getVoidTy()) {
if(ret->isPointerTy()) {
@@ -155,6 +144,24 @@ void J3LLVMSignature::generateCallerIR(J
res = builder.getInt64(0);
builder.CreateRet(res);
+}
- //caller->dump();
+void J3Signature::setCaller(uint32_t access, J3Signature::function_t caller) {
+ llvmSignature(access)->z_setCaller(caller);
+}
+
+void J3Signature::setLLVMSignature(uint32_t access, J3LLVMSignature* llvmSignature) {
+ if(J3Cst::isStatic(access))
+ _staticLLVMSignature = llvmSignature;
+ else
+ _virtualLLVMSignature = llvmSignature;
+}
+
+J3LLVMSignature* J3Signature::llvmSignature(uint32_t access) {
+ checkFunctionType();
+ return J3Cst::isStatic(access) ? _staticLLVMSignature : _virtualLLVMSignature;
+}
+
+J3LLVMSignature::J3LLVMSignature(llvm::FunctionType* functionType) {
+ _functionType = functionType;
}
More information about the vmkit-commits
mailing list