BPF
"BPF Memory model based on LKMM"
let RMW = [R & W] & [SC]
let SRMW = (SC * SC) & amo
let po_amo_fetch = ([M];po;RMW) | (RMW;po;[M]) | ([M];po;[domain(SRMW)]) | ([range(SRMW)];po;[M])
show po_amo_fetch
as atomicfetch
let addr_dep = [R];addr;[M]
let data_dep = [R];data;[W]
let ctrl_dep = [R];ctrl;[W]
show addr_dep
as addr
show data_dep
as data
show ctrl_dep
as ctrl
let ppo =
po_amo_fetch
| addr_dep
| data_dep
| ctrl_dep
| [M];(addr|data);[W];rfi;[R]
| [M];addr;[M];po;[W]
| rmw
include "cos-opt.cat"
let com = co | rf | fr
acyclic com | po-loc
as Coherence
let hb = (ppo | rfe)+
acyclic hb
let A-cumul = rfe;po_amo_fetch
let prop = (po_amo_fetch | A-cumul);hb*
acyclic prop | co
irreflexive fre;prop
empty rmw & (fre;coe)
as Atomic
acyclic po_amo_fetch | com