Hi Egor,

Thanks for your reply. Please, find my answers inlined.

Egor Pasko wrote:
On the 0x222 day of Apache Harmony Alex Astapchuk wrote:
Hi all,

Among other things listed on the JIT Dev tasks, there is a need for
calling convention (CC) fix-up for IA-32 [1].

Current problems are:

1. The calling convention(s) used are stack-based - this adds a memory
access overhead on calls.
2. The convention currently used for managed code neither allow to pass
float-point values on XMM registers, nor it provides callee-saved XMM
registers.
3. FPU stack is used to return float/double values


Both 2) and 3) affect register allocation for float point values in a
bad manner.
Fixing even the 1) looks promising for hot vm helpers like monitor
enter/exit and resolve_interface_vtable.

So, I'm going to implement register-based calling convention for IA-32.

The current proposal is:
     - make it possible to switch between existing and new conventions
        for investigation and tuning purposes
     - implement 2 calling conventions:
        1. well known standard fastcall (fisrt 2 params on ECX+EDX, the
        rest is on stack)
        2. DRLVM-specific convention: which involves ECX, EDX (and may
        be EAX) for integer/parameters passing and also use XMMs for
        float-point parameters and produce callee-save XMMs.
        
The #1 may be used to call internal C-based helpers. It may also be used
to call VM helpers where XMM callee save regs may add unnecessary
overhead on the helper itself. The example I can think of is
resolve_interface helper - preserving XMMs there looks overkill.

Alex, is there some mechanism to annotate helpers' with calling
conventions that you would prefer? Or are you going to hardcode

Agh... Good question. And I don't have the right answer now.

I'm going to make the switch between old and new conventions controllable from the command line, but that's almost all I can do in current environment.

The heplers infos like signatures and calling conventions used
is quite-long-head-ache history.

What I'm going to implement is quite orthogonal to how the info may be passed between VM and JIT. I'm only going to support the possibility of calling convention usage.

The helpers infos may be related with Mikhail's work with helpers inlining.
I recall some discussions about Java-based annotations that may be used to describe helpers (not only for inlining, but in general), including convention used, the library/module location, etc.


#2 will help to speed-up managed code both call-intensive and (I hope)
FP-intesive - together with register allocator tuning.

I would REALLY love to see it implemented!! It is a long-awaited
performance feature. FP performance of DRLVM is poor if compared to
HotSpot, and the most probable reason for that is problem-2 above.
A microbenchmark would be great to have. I would be also happy to see
"the whole design proposal" here in the mailing list. Is it possible?

Sure, I'll do the micro benchmark.

I don't have a design proposal - since I'm not going to change design.
I'm only extend existing functionality a bit.
Mostly the requirement's I'm going to meet are described in my answer to Rana - there are things that will be tunable there.


--
Thanks,
  Alex


Any comments are welcome.


[1]
http://wiki.apache.org/harmony/JIT_Development_Tasks#head-bffdfbc80108641ca9a8bc29ea871c67fb3b82b9


--
Thanks,
   Alex





Reply via email to