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