catdep
include "aarch64util.cat"
let lwfs =
[Exp & M | Imp & Tag & R]; (po & same-loc); [Exp & W]
| [Exp & M]; (po & same-loc); [MMU & FAULT]
| [Imp & TTD & R]; (po & same-loc); [Exp & W | HU]
let lrs = [W]; ((po & same-loc) & ~(intervening(W,(po & same-loc)))); [R]
let rec dtrm =
[~range(lxsx)]; rf-reg
| lrs
| iico_data
| dtrm; dtrm
let basic-dep =
[Exp & R | Rreg]; dtrm?
let data = [Exp & R]; (basic-dep; [DATA]; iico_data+; [Exp & W]) & ~same-instance
let addr = [Exp & R]; (basic-dep; [ADDR]; iico_data+; [Exp & M | Imp & Tag & R | Imp & TTD & R | HU | TLBI | DC.CVAU | IC.IVAU]) & ~same-instance
let ctrl = [Exp & R]; basic-dep; [BCC]; po
let rec pick-dtrm =
dtrm
| iico_ctrl
| pick-dtrm; pick-dtrm
let pick-basic-dep =
[Exp & R | Rreg]; pick-dtrm?
let pick-addr-dep =
[Exp & R]; (pick-basic-dep; [ADDR]; iico_data+; [Exp & M | Imp & Tag & R | Imp & TTD & R | HU | TLBI | DC.CVAU | IC.IVAU]) & ~same-instance
let pick-data-dep =
[Exp & R]; (pick-basic-dep; [DATA]; (iico_data|iico_ctrl)+; [Exp & W]) & ~same-instance
let pick-ctrl-dep =
[Exp & R]; pick-basic-dep; [BCC]; po
let pick-dep =
( pick-basic-dep
| pick-addr-dep
| pick-data-dep
| pick-ctrl-dep
) & ~same-instance
include "aarch64show.cat"