barriers

[download cat source]

(* define a hierarchy of barriers *) (* e.g. if [e1] ; dmbst ; [e2] is forbidden * then * [e1] ; dmbsy ; [e2] * and [e1] ; dsbsy ; [e2] * are forbidden too *) (* we do not model NSH so pretend it's SY *) let dsbsy = DSB.ISH | DSB.SY | DSB.NSH let dsbst = dsbsy | DSB.ST | DSB.ISHST | DSB.NSHST let dsbld = dsbsy | DSB.LD | DSB.ISHLD | DSB.NSHLD let dsbnsh = DSB.NSH let dmbsy = dsbsy | DMB.SY let dmbst = dmbsy | dsbst | DMB.ST | DSB.ST | DSB.ISHST | DSB.NSHST let dmbld = dmbsy | dsbld | DMB.LD | DSB.ISHLD | DSB.NSHLD let dmb = dmbsy | dmbst | dmbld let dsb = dsbsy | dsbst | dsbld