Model (* Model for ARM, ie with po-loc ommited from ppo *) (* Uniproc *) acyclic po-loc | rf | fr | co as uniproc (* Utilities *) let dd = addr | data let rdw = po-loc & (fre;rfe) let detour = po-loc & (coe ; rfe) let addrpo = addr;po #show rdw detour dd addrpo (*******) (* ppo *) (*******) (* Initial value *) let ci0 = ctrlisync | detour let ii0 = dd | rfi | rdw let cc0 = dd | ctrl | addrpo (* po-loc deleted *) let ic0 = 0 (* Fixpoint from i -> c in instructions and transitivity *) let rec ci = ci0 | (ci;ii) | (cc;ci) and ii = ii0 | ci | (ic;ci) | (ii;ii) and cc = cc0 | ci | (ci;ic) | (cc;cc) and ic = ic0 | ii | cc | (ic;cc) | (ii ; ic) (* | ci inclus dans ii et cc *) let ppo = RW(ic) | RR(ii) (**********) (* fences *) (**********) (* ARM *) let dmb.st=WW(dmb.st) let dsb.st=WW(dsb.st) show dmb dsb dmb.st dsb.st (* Common, all arm barriers are strong *) let strong = dmb|dsb|dmb.st|dsb.st let light = 0 let fence = strong|light (* happens before *) let hb = ppo | fence | rfe let GHB = hb show GHB acyclic hb as thinair (* prop *) let hbstar = hb* let propbase = (fence|(rfe;fence));hbstar show propbase let chapo = rfe|fre|coe|(fre;rfe)|(coe;rfe) let prop = WW(propbase)| (chapo? ; propbase*; strong; hbstar) #show prop acyclic co|prop as propagation irreflexive fre;prop;hbstar as causality