RFR: 8365991: AArch64: Ignore BlockZeroingLowLimit when UseBlockZeroing is false [v4]
Patrick Zhang
qpzhang at openjdk.org
Tue Oct 28 08:56:06 UTC 2025
On Tue, 28 Oct 2025 08:17:15 GMT, Andrew Haley <aph at openjdk.org> wrote:
> > I would like to reiterate that I have no objection to the functions when the `-XX:+UseBlockZeroing` option is set, everything can keep as is. My point is that `BlockZeroingLowLimit` serves literally/specifically as a switch to control whether DC ZVA instructions are generated for clearing instances under a specified bytes size limitation, rather than for deciding between unrolling and callout. Therefore, it should NOT affect the code-gen results any longer when `-XX:-UseBlockZeroing` is set, should it?
>
> It does not. When `-XX:-UseBlockZeroing` is set, `BlockZeroingLowLimit` is ignored.
zero_words does not check `UseBlockZeroing`, it directly compares `cnt` and `BlockZeroingLowLimit / BytesPerWord`.
https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp#L6198C1-L6204C16
address MacroAssembler::zero_words(Register base, uint64_t cnt)
{
assert(wordSize <= BlockZeroingLowLimit,
"increase BlockZeroingLowLimit");
address result = nullptr;
if (cnt <= (uint64_t)BlockZeroingLowLimit / BytesPerWord) {
#ifndef PRODUCT
In contrast, the inner stub function does so.
https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp#L669
address generate_zero_blocks() {
Label done;
Label base_aligned;
Register base = r10, cnt = r11;
__ align(CodeEntryAlignment);
StubId stub_id = StubId::stubgen_zero_blocks_id;
StubCodeMark mark(this, stub_id);
address start = __ pc();
if (UseBlockZeroing) {
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26917#issuecomment-3455265314
More information about the hotspot-dev
mailing list