Hi all, I've been working on making a non-architecture specific port of OpenJDK these past few months. It's interpreter-only at present, and very slow, and I'd like to use LLVM to add some kind of JIT to it. So far I'm just trying to figure out how it would all slot in. The existing code in OpenJDK is written to accomodate different JITs, so integrating peripheral stuff like garbage collection seems pretty simple, but method dispatch seems like it will be tricky. The examples I've seen require an ExecutionEngine to execute code. Is it possible to bypass this and get a function pointer? So you could use it like this: typedef void (*function_t)(methodOop method, JavaThread *thread); function_t func = [some LLVM call here]; func(method, thread); That would solve pretty much all my problems :) Cheers, Gary -- http://gbenson.net/
On 2008-04-02, at 05:55, Gary Benson wrote:> I've been working on making a non-architecture specific port of > OpenJDK these past few months. It's interpreter-only at present, > and very slow, and I'd like to use LLVM to add some kind of JIT to it. > > So far I'm just trying to figure out how it would all slot in. The > existing code in OpenJDK is written to accomodate different JITs, so > integrating peripheral stuff like garbage collection seems pretty > simple, but method dispatch seems like it will be tricky. The > examples I've seen require an ExecutionEngine to execute code. Is > it possible to bypass this and get a function pointer? So you could > use it like this: > > typedef void (*function_t)(methodOop method, JavaThread *thread); > function_t func = [some LLVM call here]; > func(method, thread); > > That would solve pretty much all my problems :)The getPointerToFunctionOrStub method that does what you want in the JIT. http://llvm.org/docs/doxygen/html/classllvm_1_1JIT.html#a6 — Gordon
Gordon Henriksen wrote:> On 2008-04-02, at 05:55, Gary Benson wrote: > > I've been working on making a non-architecture specific port of > > OpenJDK these past few months. It's interpreter-only at present, > > and very slow, and I'd like to use LLVM to add some kind of JIT to > > it. > > > > So far I'm just trying to figure out how it would all slot in. The > > existing code in OpenJDK is written to accomodate different JITs, > > so integrating peripheral stuff like garbage collection seems > > pretty simple, but method dispatch seems like it will be tricky. > > The examples I've seen require an ExecutionEngine to execute code. > > Is it possible to bypass this and get a function pointer? So you > > could use it like this: > > > > typedef void (*function_t)(methodOop method, JavaThread *thread); > > function_t func = [some LLVM call here]; > > func(method, thread); > > > > That would solve pretty much all my problems :) > > The getPointerToFunctionOrStub method that does what you want in the > JIT. > > http://llvm.org/docs/doxygen/html/classllvm_1_1JIT.html#a6Perfect, thank you! Cheers, Gary -- http://gbenson.net/