RFR: 8341893: AArch64: Micro-optimize compressed ptr decoding

Aleksey Shipilev shade at openjdk.org
Thu Oct 10 09:55:10 UTC 2024


On Thu, 10 Oct 2024 09:49:28 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> See the bug for full description. I think there is an accidental inefficiency in decoding: we don't have to shift when shift is zero, but we are tripped by `d != s` check. Other architectures seem to do this right. This fix surgically fixes the decoding. I have a variant of a more comprehensive MacroAssembler fix that could cover this shift-to-mov translation wholesale, but that fix is riskier.
>> 
>> Additional testing:
>>  - [ ] Linux AArch64 server fastdebug, `tier{1,2,3}`
>
> src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 5017:
> 
>> 5015:       lsl(d, s, CompressedOops::shift());
>> 5016:     } else if (d != s) {
>> 5017:       mov(d, s);
> 
> I think `MacroAssembler::mov` already does the `d != s` optimization, but perhaps it's clearer to do it here as well.

Yes, `mov` does the `d != s` optimization. I have no preference whether we do check here or rely on downstream check. Just peeling the `d != s` test from the original if-expression seems marginally easier to think about the patch impact.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21443#discussion_r1795091052


More information about the hotspot-dev mailing list