[vmkit-commits] [vmkit] r82158 - /vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Sep 17 12:18:47 PDT 2009


Author: geoffray
Date: Thu Sep 17 14:18:46 2009
New Revision: 82158

URL: http://llvm.org/viewvc/llvm-project?rev=82158&view=rev
Log:
Tag a jsr local by placing 1 in the first bit, so that the GC
can differentiate it with a real object.


Modified:
    vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp?rev=82158&r1=82157&r2=82158&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp Thu Sep 17 14:18:46 2009
@@ -1742,9 +1742,11 @@
       
       case JSR : {
         uint32 tmp = i;
+        uint32 index = jsrIndex | 1;
+        jsrIndex += 2;
         Value* expr = ConstantExpr::getIntToPtr(
                                     ConstantInt::get(Type::getInt64Ty(*llvmContext),
-                                                     uint64_t (jsrIndex++)),
+                                                     uint64_t (index)),
                                     module->JavaObjectType);
         push(expr, false);
         branch(opcodeInfos[tmp + readS2(bytecodes, i)].newBlock,
@@ -1761,8 +1763,8 @@
         
         uint32 index = 0;
         for (std::vector<BasicBlock*>::iterator i = jsrs.begin(), 
-            e = jsrs.end(); i!= e; ++i, ++index) {
-          inst->addCase(ConstantInt::get(Type::getInt32Ty(*llvmContext), index), *i);
+            e = jsrs.end(); i!= e; ++i, index += 2) {
+          inst->addCase(ConstantInt::get(Type::getInt32Ty(*llvmContext), index | 1), *i);
         }
 
         break;





More information about the vmkit-commits mailing list