[aarch64-port-dev ] RFR: AArch64: incorrect code generation for StoreCM
Andrew Dinn
adinn at redhat.com
Tue Jul 3 10:11:31 UTC 2018
On 03/07/18 10:26, aph wrote:
> On 07/03/2018 09:57 AM, Andrew Dinn wrote:
>> The correct generated sequences should be
>>
>> str ; dmb ishst ; strb
>>
>> and
>>
>> dmb ish ; stlr; dmb ishst ; strb ; dmb ish
>
> What is the leading DMB ISH supposed to do here? The STRB can't move and
> the STLR is enough for a volatile store.
Oops, as if this is not confusing enough ... Sorry, that was explained
all wrong. Let me try again.
For a volatile store with gc config XX:+UseConcMarkSeepGC
-XX:-UseCondCardMark the back end used to generate
stlr # when -XX:-UseBarriersForVolatile
strb
and
dmb ish # when -XX:+UseBarriersForVolatile
str
dmb ishst
strb
dmb ish
for cases -XX:-UseBarriersForVolatile and -XX:+UseBarriersForVolatile,
respectively. The patch corrects the former case to
stlr # when -XX:-UseBarriersForVolatile
dmb ishst
strb
The latter case is already correct.
Similarly, for a CAS the generated code used to look like
cmpxchw_acq # when -XX:-UseBarriersForVolatile
strb
and
dmb ish # when -XX:-UseBarriersForVolatile
cmpxchw
dmb ishst
strb
dmb ish
where cmpxch_acq uses an ldar to load and store the CASed field value
and cmpxchw uses a plain ldr and str
The patch corrects the former case to
cmpxch_acq # when -XX:-UseBarriersForVolatile
dmb ishst
strb
The latter case is already correct.
Apologies for muddying already obscure waters.
regards,
Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander
More information about the hotspot-compiler-dev
mailing list