RFR: 8294492: RISC-V: Use li instead of patchable movptr at non-patchable callsites

Xiaolin Zheng xlinzheng at openjdk.org
Wed Sep 28 06:37:06 UTC 2022


A cleanup which can also reduce some code size. The main purpose is to separate the current mixed movptr usages: movptr's semantics allow it to be used for fixed-length patchable addresses. In the current backend several callsites which are not patchable use movptr (6 instructions) as well, but that's unnecessary for we can use li(1~6 instructions) to substitute them.

This patch extracts the last 12-bit offset from the li(), a recursive function, to merge it into the rest "jalr/ld/sd..." that can accept a 12-bit offset as an operand, same as the movptr_with_offset before.

Originally some non-patchable callsites:

;; 0x401ab1dc40
0x000000401372b324:   lui	t0,0x201
0x000000401372b328:   addi	t0,t0,-680 # 0x0000000000200d58
0x000000401372b32c:   slli	t0,t0,0xb
0x000000401372b32e:   addi	t0,t0,1905
0x000000401372b332:   slli	t0,t0,0x6
0x000000401372b334:   jalr	t0

Now:

0x000000401b2bd9f4:   lui	t0,0x4003
0x000000401b2bd9f8:   addiw	t0,t0,-1275
0x000000401b2bd9fc:   slli	t0,t0,0xc
0x000000401b2bda00:   jalr	1080(t0) # 0x0000000004003438

Not so much, but the main purpose is to clarify the usage of movptr and li.

The first commit has gone through a hotspot tier1~tier4; the other ones are testing under a hotspot tier1.

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

Commit messages:
 - Further
 - Further cleanup
 - Change Non-patchable movptr to li, for movptr is defined implicitly for patchable usages

Changes: https://git.openjdk.org/jdk/pull/10462/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10462&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8294492
  Stats: 75 lines in 8 files changed: 29 ins; 15 del; 31 mod
  Patch: https://git.openjdk.org/jdk/pull/10462.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10462/head:pull/10462

PR: https://git.openjdk.org/jdk/pull/10462


More information about the shenandoah-dev mailing list