Simon,

Why recursively?

First, A() gets compiled and executed, then, as soon as execution runs
to calling B(), B() is compiled and executed.

The trick is A() is not "called" first time after it gets compiled
(from "compile-me" stub), execution jumps to an entry point of A()
leaving correct return address on the stack. All subsequent calls land
directly into A(). It is achieved through patching "call site" for A()
- the place in JITted code, where A() is called from.

Pavel.

On 3/4/08, Simon Chow <[EMAIL PROTECTED]> wrote:
> Pavel,
> Does this mean that the "compile_me" will be call recursively when callee's
> callee hasn't been compiled yet.
>
> For instance,
> void A() {
>   B();
> }
> where A and B are both not compiled.
> Does the calling of A() invoke the "compile_me" for both A() and B()?
>
> Thank!
>
>
> On 04/03/2008, Pavel Pervov <[EMAIL PROTECTED]> wrote:
> >
> > Simon,
> >
> > Each time JIT plans to call a method, it does the following:
> > 1) if method is not resolved, JIT inserts a call to resolution stub;
> > 2) if method is available, JIT asks for
> > MethodDesc::getCodeBlockAddress(0) on this method. If method is not
> > compiled yet, VM has generated special "compile_me" for this method on
> > class preparation, and its address will be returned in a call to
> > getCodeBlockAddress.
> >
> > WBR,
> >     Pavel.
> >
> >
> > On 3/4/08, Simon Chow <[EMAIL PROTECTED]> wrote:
> > > Att.
> > > If the callee is not compiled, how does JIT prepare the entry location
> > of
> > > callee?
> > >
> > > --
> > > From : [EMAIL PROTECTED] School of Fudan University
> > >
> >
> >
> >
> > --
> > Pavel Pervov,
> > Intel Enterprise Solutions Software Division
> >
>
>
>
> --
> From : [EMAIL PROTECTED] School of Fudan University
>


-- 
Pavel Pervov,
Intel Enterprise Solutions Software Division

Reply via email to