[LLVMdev] vmkit on x86_64
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 1 05:28:33 PDT 2008
Hi Zsombor,
Thanks for the patch! Unfortunately I can't apply it because the llvm
API has moved from BinaryOperator::create to BinaryOperator::Create. Are
you using svn head?
Now on the x86_64 part. There has been very little work on porting vmkit
on x86_64. If you're having compilation problems, I suppose it's in the
garbage collector directory (GCMmap2). If you could make the GC code
x86_64 clean, I think that would be a major step to execute vmkit on
your box. There should be little code in the virtual machines that need
to be rewritten.
For the JavaObject class, indeed, it's assuming the lock field is
32-bit. I plan to change that in order to store monitors in a hashtable.
If you're willing to implement it, I'll be happy to help you out.
Also, I don't know what is the current status of linux/x86_64 exception
handling support in llvm, but that may be also a stopper. The
jit-generated dwarf tables were only tested on linux/x86 (I suppose
vmkit is the only project using it).
Nicolas
Zsombor wrote:
> Hello,
>
> I'm trying to compile vmkit on a x86_64 linux box with gcc-4.1.2, but
> I'm running into troubles because of various problems with casts
> between pointers and integers. Is there anybody who succeeded in this
> task? Az I see, some of the problems can be fixed with an appropriate
> typedef/macro declaration, but in VMCore/JavaObject.cpp some lowlevel
> bitmanipulation is used, to mark object references as locked - as I
> believe.
>
> BR,
> Zsombor
>
>
> p.s
> this fixes a typo in the current svn trunk
>
> $ svn diff VMCore/JavaJITOpcodes.cpp
> Index: VMCore/JavaJITOpcodes.cpp
> ===================================================================
> --- VMCore/JavaJITOpcodes.cpp (revision 52951)
> +++ VMCore/JavaJITOpcodes.cpp (working copy)
> @@ -1008,7 +1008,7 @@
> Value* val2 = popAsInt();
> Value* val1 = popAsInt();
> Value* mask = ConstantInt::get(Type::Int32Ty, 0x1F);
> - val2 = BinaryOperator::CreateAnd(val2, mask, "", currentBlock);
> + val2 = BinaryOperator::createAnd(val2, mask, "", currentBlock);
> push(BinaryOperator::createLShr(val1, val2, "", currentBlock),
> AssessorDesc::dInt);
> break;
> @@ -1017,7 +1017,7 @@
> case LUSHR : {
> Value* val2 = new ZExtInst(pop(), Type::Int64Ty, "", currentBlock);
> Value* mask = ConstantInt::get(Type::Int64Ty, 0x3F);
> - val2 = BinaryOperator::CreateAnd(val2, mask, "", currentBlock);
> + val2 = BinaryOperator::createAnd(val2, mask, "", currentBlock);
> pop(); // remove the 0 on the stack
> Value* val1 = pop();
> push(BinaryOperator::createLShr(val1, val2, "", currentBlock),
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list