- 
    Type:
Enhancement
 - 
    Resolution: Rejected
 - 
    Priority:
  P4                     
     - 
    Affects Version/s: 22
 - 
    Component/s: hotspot
 
- 
        aarch64
 - 
        linux
 
                    In function `MacroAssembler::cmpxchgw`  and `MacroAssembler::cmpxchgptr`, when turn on `UseLSE`,  there is a `dmb`  
instruction generated after `casal` instruction.
The `casal` means a CAS operate with both load-acquire and store-release semantics.
It looks like the subsequent dmb is redundant.
The code is bellow:
```
if (UseLSE) {
mov(tmp, oldv);
casal(Assembler::xword, oldv, newv, addr);
cmp(tmp, oldv);
br(Assembler::EQ, succeed);
membar(AnyAny);
}
```
instruction generated after `casal` instruction.
The `casal` means a CAS operate with both load-acquire and store-release semantics.
It looks like the subsequent dmb is redundant.
The code is bellow:
```
if (UseLSE) {
mov(tmp, oldv);
casal(Assembler::xword, oldv, newv, addr);
cmp(tmp, oldv);
br(Assembler::EQ, succeed);
membar(AnyAny);
}
```
- links to
 - 
                    
        
        Review
        openjdk/jdk/15856