…
AArch64 STRx+2SWPptex+db+TLBI
TTHM=HA HD
{
pte_x=(db:0,dbm:1);
0:X2=x; 1:X2=x;
1:X4=pte_x;
1:X6=(oa:phy_x,db:0,dbm:1);
}
P0 | P1 ;
MOV W1,#1 | SWP X6,X0,[X4] ; (* clear db atomically *)
L0: | DSB ISH ;
STR W1,[X2] | LSR X9,X2,#12 ;
| TLBI VAAE1IS,X9 ;
| DSB ISH ;
| SWP X6,X1,[X4] ;
exists (1:X0=(oa:PA(x), dbm:1) /\ 1:X1=(oa:PA(x), dbm:1) /\ [PTE(x)]=(oa:PA(x), dbm:1, db:0) /\ [x]=1 /\ ~fault(P0:L0,x)) \/ (1:X0=(oa:PA(x), dbm:1) /\ 1:X1=(oa:PA(x), dbm:1, db:0) /\ [PTE(x)]=(oa:PA(x), dbm:1) /\ [x]=1 /\ ~fault(P0:L0,x)) \/ (1:X0=(oa:PA(x), dbm:1, db:0) /\ 1:X1=(oa:PA(x), dbm:1) /\ [PTE(x)]=(oa:PA(x), dbm:1) /\ [x]=1 /\ ~fault(P0:L0,x))