RFR: 8292878: x86: Make scratch register usage explicit in assembler code

Vladimir Ivanov vlivanov at openjdk.org
Wed Aug 24 19:07:48 UTC 2022


Improve MacroAssembler API and make scratch register usages explicit at use sites.

Different parts of JVM have different assumptions about scratch registers and
implicit assumptions in MacroAssembler makes it harder to reason about the
correctness of generated code.

Most of scratch register usages relate to `AddressLiteral` on x86_64.  In such case the argument is turned into a default one (with `noreg` as a default) and implementation asserts that scratch register should be provided when the address is not guaranteed to be always reachable.

Otherwise, scratch register argument is required to be explicitly provided.

The only case left (mostly) intact is `call(AddressLiteral)`, but I switched it from `rscratch` (`r10`) to `rax`.

Testing:
- [x] hs-tier1 - hs-tier4 (w/ -XX:+-ForceUnreachable)
- [x] x86_32 build

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

Commit messages:
 - x86: Make rscratch1 usages explicit

Changes: https://git.openjdk.org/jdk/pull/10003/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10003&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8292878
  Stats: 1200 lines in 29 files changed: 224 ins; 145 del; 831 mod
  Patch: https://git.openjdk.org/jdk/pull/10003.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10003/head:pull/10003

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


More information about the hotspot-dev mailing list