[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