RFR(S)[13]: AArch64: float point register corruption in ZBarrierSetAssembler::load_at

Andrew Haley aph at redhat.com
Thu Jun 20 17:48:20 UTC 2019

On 6/20/19 5:27 PM, Stuart Monteith wrote:
>    I see that we get a tmp1 register, however I've found that is not
> something we can reliably use - whether it is set to noreg or matches
> the src/dst registers. I've found rscratch2 to be reliably untouched.
> The use of scratch registers is something that needs to get fixed up
> on AArch64.

The worst abuse of AArch64 scratch registers is definitely in the
GC barriers. The rule is simple: scratch registers are always
clobbered in assembler macros. If any code calls, say, load_at() but
expects scratch registers to be preserved, that code is broken. We
need to fix it.

So, please tell me: where is the code which is broken by load_at()
using rscratch1?

Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671

More information about the hotspot-gc-dev mailing list