RFR: JDK-8200623: Primitive heap access for interpreter BarrierSetAssembler/x86
Roman Kennke
rkennke at redhat.com
Mon May 7 20:31:39 UTC 2018
JDK-8199417 added better modularization for interpreter barriers.
Shenandoah and possibly future GCs also need barriers for primitive access.
Some notes on implementation:
- float/double/long access produced some headaches for the following
reasons:
- float and double would either take XMMRegister which is not
compatible with Register
- or load-from/store-to the floating point stack (see
MacroAssembler::load/store_float/double)
- long access on x86_32 would load-into/store-from 2 registers, or
else use a trick via the floating point stack to do atomic access
None of this seemed easy/nice to do with the API. I helped myself by
accepting noreg as dst/src argument, which means the corresponding tos
(i.e. ltos, ftos, dtos) and the BSA would then access from/to
xmm0/float-stack in case of float/double or the double-reg/float-stack
in case of long/32bit, which is all that we ever need.
I'm passing MO_RELAXED to long access calls to hint that we want atomic
access or not. I hope that is ok.
Tested: hotspot/jtreg:tier1
http://cr.openjdk.java.net/~rkennke/JDK-8200623/webrev.00/
Can I please get a review?
Thanks, Roman
More information about the hotspot-dev
mailing list