RFR: 8377554: Load card table base and other values via AOTRuntimeConstants in AOT code [v4]

Vladimir Kozlov kvn at openjdk.org
Tue Feb 24 17:01:38 UTC 2026


On Tue, 24 Feb 2026 16:33:06 GMT, Andrew Dinn <adinn at openjdk.org> wrote:

>> Generated stubs and nmethods embed some runtime-derived constants, such as the card table base, directly into code as instruction operands. AOT code generation cannot rely on these constants being valid between the assembly run and a production run and adjusting the constants at load time is not currently supported. So, instead AOT generation must employ code which loads the constants from a table whose address can be relocated at load time.
>
> Andrew Dinn has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fix header issue

src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp line 305:

> 303:     __ push(rcx);
> 304:     __ lea(rcx, ExternalAddress(grain_shift_addr));
> 305:     __ movptr(rcx, Address(rcx, 0));

Actually you should use `movl()` because you need to load (32-bit) integer value.

You can also use one`mov32()` macro instruction which checks reachable and generate these 2 instructions. But I am fine with this two.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/29884#discussion_r2848385757


More information about the hotspot-dev mailing list