RFR: 8146709: AArch64: Incorrect use of ADRP for byte_map_base
aph at redhat.com
Mon Jan 11 16:34:48 UTC 2016
On 01/11/2016 04:23 PM, Andrew Dinn wrote:
> However, I am not clear how we arrive at the circumstance it is meant to
> fix. How do we end up with a negative byte_map_base -- is that when we
> have a zero-based heap? How do we get a circumstance where it is 'not
> [necessarily] an address'?
Imagine that we have a large heap, and it is mapped fairly high in
memory. Imagine also that our byte map is mapped low in memory.
An index into the byte map is byte_map_base[addr >> 9]. So,
byte_map_base = _byte_map - (uintptr_t(low_bound) >> 9)
There's nothing which will prevent (low_bound >> 9) from being greater
than _byte_map. I don't think it's happened, but there are warnings
about this in the source code. Think of it as future proofing.
> If we do have a negative value with a zero-based heap then
> load_byte_map_base calls mov_immediate64. Would it plant a single
> movz and single movk in this case or will it require more than one
If it ever happens, that depends on the exact value of byte_map_base.
mov_immediate64, as you know, tries very hard to do the right thing.
More information about the hotspot-dev