[aarch64-port-dev ] RFR: AArch64: incorrect code generation for StoreCM

Andrew Dinn adinn at redhat.com
Tue Jul 3 10:16:27 UTC 2018


Aaaargh -- minor fix applied below

On 03/07/18 11:11, Andrew Dinn wrote:
> 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
> 
ERROR:
>   dmb ish    # when -XX:-UseBarriersForVolatile
FIX:
    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