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.


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