RFR: Primitive access for interpreter/aarch64
Roman Kennke
rkennke at redhat.com
Fri May 4 14:17:53 UTC 2018
This implements the BS interface for aarch64. Some notes:
- AArch64 cannot do base+index+disp addressing. Array element addresses
are precomputed as (base+index) + disp. I changed that to base +
(index+disp) to preserve the base oop, which we need for the barriers.
- jniFastGetField uses a address dependency trick to keep the field load
and the safepoint-counter load in order. However, with access API this
doesn't work for float because it needs to load into v0, not into
intermediate r0. I insert a LoadLoad membar in float and double cases
instead, which is heavier but should be rare.
- code in macroAssembler has been reshuffled to match x86 more closely.
In particular, load_heap_oop() / store_heap_oop() now call through the
BS API, and not the other way around.
http://cr.openjdk.java.net/~rkennke/interp_primitives_aarch64/webrev.00/
Testing is unstable. Looks about as unclean as it has been before the
change (need to check if late-minute changes to 'simple aarch64 fixes'
actually made them green).
Ok?
Roman
More information about the shenandoah-dev
mailing list