RFR: 8273380: ARM32: Default to {ldrexd, strexd} in StubRoutines::atomic_{load|store}_long

Dmitry Samersoff dsamersoff at openjdk.java.net
Thu Sep 23 10:46:50 UTC 2021


On Mon, 6 Sep 2021 11:28:58 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

> Current ARM32 is one of few remaining uses of `os::is_MP`, the rest is removed by JDK-8188764. There are some interesting bugs in OS/libc that might give incorrect `os::is_MP` sometimes, e.g. in containers. Instead of risking it, we can default to {ldrexd,strexd} for ARMv7 (which always have them), and leave the `os::is_MP` path for ARMv6 (for which this is the only remaining way to load the 64-bit long). 
> 
> @mychris, you might want to take a look and do light performance testing for it?
> 
> Additional testing:
>  - [x] Linux ARM32 cross-compiled build completes

src/hotspot/cpu/arm/stubGenerator_arm.cpp line 641:

> 639:       __ ldrexd(result_lo, Address(src));
> 640:       __ clrex(); // FIXME: safe to remove?
> 641:       __ bx(LR);

bx(LR) is common for all 3 branches, so it might be better to move it out

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

PR: https://git.openjdk.java.net/jdk/pull/5379


More information about the hotspot-compiler-dev mailing list