[vmkit-commits] [vmkit] r86540 - in /vmkit/trunk: include/jnjvm/JavaCompiler.h lib/JnJVM/Compiler/JavaJIT.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Nov 9 05:43:48 PST 2009
Author: geoffray
Date: Mon Nov 9 07:43:48 2009
New Revision: 86540
URL: http://llvm.org/viewvc/llvm-project?rev=86540&view=rev
Log:
Handle the JikesRVM's Inline and NoInline annotations
on code.
Modified:
vmkit/trunk/include/jnjvm/JavaCompiler.h
vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
Modified: vmkit/trunk/include/jnjvm/JavaCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JavaCompiler.h?rev=86540&r1=86539&r2=86540&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JavaCompiler.h (original)
+++ vmkit/trunk/include/jnjvm/JavaCompiler.h Mon Nov 9 07:43:48 2009
@@ -17,6 +17,10 @@
#include "mvm/GC/GC.h"
+namespace mvm {
+ class UTF8;
+}
+
namespace jnjvm {
class Class;
@@ -88,6 +92,9 @@
virtual void* loadMethod(void* handle, const char* symbol) {
return dlsym(handle, symbol);
}
+
+ static const mvm::UTF8* InlinePragma;
+ static const mvm::UTF8* NoInlinePragma;
};
}
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=86540&r1=86539&r2=86540&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Mon Nov 9 07:43:48 2009
@@ -934,6 +934,7 @@
UTF8Buffer(compilingMethod->name).cString());
abort();
}
+
Reader reader(codeAtt, &(compilingClass->bytes));
uint16 maxStack = reader.readU2();
@@ -1250,6 +1251,25 @@
if (codeLen < 5 && !callsStackWalker && !TheCompiler->isStaticCompiling())
compilingMethod->canBeInlined = true;
#endif
+
+ Attribut* annotationsAtt =
+ compilingMethod->lookupAttribut(Attribut::annotationsAttribut);
+
+ if (annotationsAtt) {
+ Reader reader(annotationsAtt, &(compilingClass->bytes));
+ AnnotationReader AR(reader, compilingClass);
+ uint16 numAnnotations = reader.readU2();
+ for (uint16 i = 0; i < numAnnotations; ++i) {
+ AR.readAnnotation();
+ const UTF8* name =
+ compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex);
+ if (name->equals(TheCompiler->InlinePragma)) {
+ llvmFunction->addFnAttr(Attribute::AlwaysInline);
+ } else if (name->equals(TheCompiler->NoInlinePragma)) {
+ llvmFunction->addFnAttr(Attribute::NoInline);
+ }
+ }
+ }
return llvmFunction;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=86540&r1=86539&r2=86540&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Nov 9 07:43:48 2009
@@ -55,6 +55,10 @@
typedef void (*static_init_t)(JnjvmClassLoader*);
+const UTF8* JavaCompiler::InlinePragma = 0;
+const UTF8* JavaCompiler::NoInlinePragma = 0;
+
+
JnjvmBootstrapLoader::JnjvmBootstrapLoader(mvm::BumpPtrAllocator& Alloc,
JavaCompiler* Comp,
bool dlLoad) :
@@ -198,13 +202,20 @@
// array classes.
analyseClasspathEnv(bootClasspathEnv);
+ Attribut::annotationsAttribut =
+ asciizConstructUTF8("RuntimeVisibleAnnotations");
Attribut::codeAttribut = asciizConstructUTF8("Code");
Attribut::exceptionsAttribut = asciizConstructUTF8("Exceptions");
Attribut::constantAttribut = asciizConstructUTF8("ConstantValue");
Attribut::lineNumberTableAttribut = asciizConstructUTF8("LineNumberTable");
Attribut::innerClassesAttribut = asciizConstructUTF8("InnerClasses");
Attribut::sourceFileAttribut = asciizConstructUTF8("SourceFile");
-
+
+ JavaCompiler::InlinePragma =
+ asciizConstructUTF8("Lorg/vmmagic/pragma/Inline;");
+ JavaCompiler::NoInlinePragma =
+ asciizConstructUTF8("Lorg/vmmagic/pragma/NoInline;");
+
initName = asciizConstructUTF8("<init>");
initExceptionSig = asciizConstructUTF8("(Ljava/lang/String;)V");
clinitName = asciizConstructUTF8("<clinit>");
More information about the vmkit-commits
mailing list