[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