RFR: JDK-8323497: On x64, use 32-bit immediate moves for narrow klass base if possible
Thomas Stuefe
stuefe at openjdk.org
Tue Jan 30 11:51:49 UTC 2024
On x64, we always use the long form of mov immediate to load the klass base into a register. If the klass base fits into 32 bits, we could use the short form and save four instruction bytes.
Before: mov uses 10 instruction bytes:
35 ;; decode_klass_not_null
36 0x00007f8b089e51c4: movabs $0x82000000,%r11
37 0x00007f8b089e51ce: add %r11,%r10
Now: mov uses 6 instruction bytes:
35 ;; decode_klass_not_null
36 0x00007fbe609e51c4: mov $0x82000000,%r11d
37 0x00007fbe609e51ca: add %r11,%r10
Note that this also works with CDS enabled and gives us the motivation to allocate low-address ranges unconditionally, even if the zero-based encoding is not possible.
----------
Tests: tier1 (GHA), tier 2 on x64 linux
-------------
Commit messages:
- remove obsolete comment
- use-32bit-immediate-moves-on-x64-for-klass-encoding-base
Changes: https://git.openjdk.org/jdk/pull/17340/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17340&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8323497
Stats: 18 lines in 3 files changed: 9 ins; 1 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/17340.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/17340/head:pull/17340
PR: https://git.openjdk.org/jdk/pull/17340
More information about the hotspot-dev
mailing list