[vmkit-commits] [vmkit] r199720 - Uniformize vt access from runtime.
Gael Thomas
gael.thomas at lip6.fr
Tue Jan 21 02:42:26 PST 2014
Author: gthomas
Date: Tue Jan 21 04:42:26 2014
New Revision: 199720
URL: http://llvm.org/viewvc/llvm-project?rev=199720&view=rev
Log:
Uniformize vt access from runtime.
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/include/j3/j3meta.def
vmkit/branches/mcjit/include/j3/j3symbols.h
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=199720&r1=199719&r2=199720&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Tue Jan 21 04:42:26 2014
@@ -126,6 +126,7 @@ namespace j3 {
llvm::Value* staticObject(J3Class* cl);
llvm::Value* vt(J3ObjectType* cl, bool resolve=0);
llvm::Value* vt(llvm::Value* obj);
+ void resolveJ3ObjectType(J3ObjectType* cl);
void initialiseJ3ObjectType(J3ObjectType* cl);
void monitorEnter(llvm::Value* obj);
Modified: vmkit/branches/mcjit/include/j3/j3meta.def
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3meta.def?rev=199720&r1=199719&r2=199720&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3meta.def (original)
+++ vmkit/branches/mcjit/include/j3/j3meta.def Tue Jan 21 04:42:26 2014
@@ -1,6 +1,6 @@
_x(funcJ3TypeVT, "j3::J3Type::vt()")
-_x(funcJ3TypeVTAndResolve, "j3::J3Type::vtAndResolve()")
-_x(funcJ3TypeInitialise, "j3::J3Type::initialise()")
+_x(funcJ3ObjectTypeResolve, "j3::J3Type::resolve()")
+_x(funcJ3ObjectTypeInitialise, "j3::J3Type::initialise()")
_x(funcJ3ClassStringAt, "j3::J3Class::stringAt(unsigned short, bool)")
_x(funcJ3TypeJavaClass, "j3::J3Type::javaClass(bool, j3::J3ObjectHandle*)")
_x(funcJniEnv, "j3::J3::jniEnv()")
Modified: vmkit/branches/mcjit/include/j3/j3symbols.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3symbols.h?rev=199720&r1=199719&r2=199720&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3symbols.h (original)
+++ vmkit/branches/mcjit/include/j3/j3symbols.h Tue Jan 21 04:42:26 2014
@@ -18,10 +18,13 @@ namespace j3 {
public:
J3VTSymbol() {}
+ J3VirtualTable* vt() { return _vt; }
+
char* id() { return _id; }
- void* getSymbolAddress() { return _vt; }
+ void* getSymbolAddress() { return vt(); }
- void set(char* id, J3VirtualTable* vt) { _id = id; _vt = vt; }
+ void setId(char* id) { _id = id; }
+ void setVt(J3VirtualTable* vt) { _vt = vt; }
};
class J3StaticObjectSymbol : public vmkit::Symbol {
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=199720&r1=199719&r2=199720&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Tue Jan 21 04:42:26 2014
@@ -325,9 +325,14 @@ void J3CodeGen::monitorExit(llvm::Value*
builder.CreateBr(ok);
}
+void J3CodeGen::resolveJ3ObjectType(J3ObjectType* cl) {
+ if(!supposeClinited() && !cl->isResolved())
+ builder.CreateCall(funcJ3ObjectTypeResolve, typeDescriptor(cl, vm->typeJ3TypePtr));
+}
+
void J3CodeGen::initialiseJ3ObjectType(J3ObjectType* cl) {
if(!supposeClinited() && !cl->isInitialised())
- builder.CreateCall(funcJ3TypeInitialise, typeDescriptor(cl, vm->typeJ3TypePtr));
+ builder.CreateCall(funcJ3ObjectTypeInitialise, typeDescriptor(cl, vm->typeJ3TypePtr));
}
llvm::Value* J3CodeGen::javaClass(J3ObjectType* type, bool doPush) {
@@ -361,8 +366,9 @@ llvm::Value* J3CodeGen::vt(llvm::Value*
}
llvm::Value* J3CodeGen::vt(J3ObjectType* type, bool doResolve) {
- llvm::Value* func = !supposeClinited() && doResolve && !type->isResolved() ? funcJ3TypeVTAndResolve : funcJ3TypeVT;
- return builder.CreateCall(func, typeDescriptor(type, vm->typeJ3TypePtr));
+ if(doResolve)
+ resolveJ3ObjectType(type);
+ return builder.CreateCall(funcJ3TypeVT, typeDescriptor(type, vm->typeJ3TypePtr));
}
llvm::Value* J3CodeGen::nullCheck(llvm::Value* obj) {
More information about the vmkit-commits
mailing list