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

Vladimir Ivanov vlivanov at openjdk.org
Thu Aug 25 18:18:07 UTC 2022


On Thu, 25 Aug 2022 17:44:17 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

>> 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
>
> Vladimir Ivanov has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - ptrs_base_addr
>  - cmpptr

Accidentally, introduced a bug by turning some `AddressLiteral`s into rvals.

Reverted relevant chanages, plus made the scratch register argument required for  `cmpptr(Address,AddressLiteral,Register)`. 

Improved `Assembler::reachable`/`Assembler::always_reachable` to properly handle lvals.

Also, applied a minor refactoring around `CompressedOops::ptrs_base_addr()`.

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

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


More information about the hotspot-dev mailing list