"AArch64, follow documentation"
include "cos.cat"
acyclic po-loc | rf | fr | co
as uniproc
let dd = addr | data
let rdw = po-loc & (fre;rfe)
let detour = po-loc & (coe ; rfe)
let addrpo = addr;po
let com = fr | co | rf
empty rmw & (fre;coe)
as atomic
include "aarch64fences.cat"
let ci0 = ctrlisb | detour
let ii0 = dd | rfi | rdw
let cc0 = dd | ctrl | addrpo
let ic0 =
0
include "ppo.cat"
let acq = (A * M) & po
let rel = (M * L) & po
let ppo = ppo | acq
let strongf = dmb.sy & (M * M)
| dsb.sy & (M * M)
| dmb.st & (W * W)
| dsb.st & (W * W)
| dmb.ld & (R * M)
| dsb.ld & (R * M)
let weakf = rel
let fence = strongf | weakf
let hb = (R * M) & fence | rfe | ppo
acyclic hb
as thin_air
let hbstar = hb*
let comstar = (fr|rf|co)*
let observe-write = rfe|coe
let observe-read = fre
let observe-access = observe-write|observe-read
let prop_base = observe-access?;fence;hbstar
let prop = prop_base & (W * W)
| (comstar; prop_base*; strongf; hbstar)
let observer =
observe-write; ppo; (fre|coe)
| observe-access; fence ; (fre|coe)
| observe-access;(L * A) & po;fre
irreflexive prop+;observer
as observation
let prop_al = (L * A) & (rf | po)
| (A * L) & fr
let xx = (W * W) & (X * X) & po
acyclic co | prop | xx | prop_al;hbstar
as propagation