[aarch64-port-dev ] RFR: [8u] 8209835: Aarch64: elide barriers on all volatile operations

Andrew Haley aph at redhat.com
Wed Oct 30 17:19:45 UTC 2019


On 10/29/19 10:04 AM, Yangfei (Felix) wrote:
> Currently we have C2 JIT for getAndSetLong like: 
>   33   ;; membar_release
>   34   0x0000ffffa416ae74: dmb       ish
>   35   ;; 0x40000000000
>   36   0x0000ffffa416ae78: orr       x11, xzr, #0x40000000000
>   37   0x0000ffffa416ae7c: add       x10, x1, #0x10
>   38   0x0000ffffa416ae80: prfm      pstl1strm, [x10]
>   39   0x0000ffffa416ae84: ldxr      x9, [x10]
>   40   0x0000ffffa416ae88: stxr      w8, x11, [x10]               <======== 
>   41   0x0000ffffa416ae8c: cbnz      w8, 0x0000ffffa416ae84      <======== 
>   42   0x0000ffffa416ae90: mov       x10, x9
>   43   ;; membar_acquire
>   44   0x0000ffffa416ae94: dmb       ishld           ;*invokevirtual getAndSetLong
> 
> 
> And C2 JIT for compareAndSwapLong like: 
> 433   0x0000ffffa6695088: ldaxr     x8, [x10]
> 434   0x0000ffffa669508c: cmp       x8, x3
> 435   0x0000ffffa6695090: b.ne      0x0000ffffa669509c
> 436   0x0000ffffa6695094: stlxr     w8, x4, [x10]
> 437   0x0000ffffa6695098: cbnz      w8, 0x0000ffffa6695088
> 438   0x0000ffffa669509c: cset      x0, eq          ;*invokevirtual compareAndSwapLong

I think this is actually safe whichever order these occur in. However,
we might as well generate ldaxr/stlxr everywhere.

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



More information about the aarch64-port-dev mailing list