RFR (M) 8146410: Interpreter functions are declared and defined in the wrong files

Andrew Dinn adinn at redhat.com
Tue Jan 5 10:28:41 UTC 2016


Hi Coleen,

On 04/01/16 22:42, Coleen Phillimore wrote:

> One question for AARCH64 platform in file:
> 
> http://cr.openjdk.java.net/~coleenp/8146410/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp.udiff.html

Hmm. That's a good question.

The generic code manages relies on the MacroAssembler auxiliary
bang_stack_with_offset(int offset) called with the relevant offsets. On
AArch64, that auxiliary method does a store using a register with
register offset

    mov(rscratch2, -offset);
    str(zr, Address(sp, rscratch2));

The overriding definition that you have commented out bypasses this
auxiliary, computing the address in a scratch register then using a
register direct store

    for (int pages = start_page; pages <= n_shadow_pages ; pages++) {
      __ sub(rscratch2, sp, pages*page_size);
      __ str(zr, Address(rscratch2));

I cannot be certain but I recall we found that there was a significant
performance difference between these two variants -- which means we want
to retain the definition you have commented out. Andrew Haley (in cc)
may be able to provide more info here as I believe he added this
overriding implementation.

I guess a comment on our overriding definition would be in order should
we ascertain that this was indeed the rationale.

regards,


Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in UK and Wales under Company Registration No. 3798903
Directors: Michael Cunningham (US), Michael O'Neill (Ireland), Paul
Argiry (US)


More information about the hotspot-dev mailing list