catdep
include "aarch64util.cat"
let lrrs =
[Wreg]; (po & same-gpr & ~(intervening(Wreg,(po & same-gpr)))); [Rreg]
let lmws =
[Exp & M | Imp & Tag & R]; (po & same-loc); [Exp & W]
| [Imp & TTD & R]; (po & same-loc); [Exp & W | HU]
let lmrs = [W]; ((po & same-loc) & ~(intervening(W,(po & same-loc)))); [R]
let rec dtrm =
[~range(lxsx)]; lrrs
| lmrs
| iico_data
| dtrm; dtrm
let data = [Exp & R]; dtrm & po; [Rreg]; iico_data & ii_data; [Exp & W]
let addr = [Exp & R]; dtrm & po; [Rreg]; iico_data & ii_addr; [Exp & M | Imp & Tag & R | Imp & TTD & R | HU | TLBI | DC.CVAU | IC.IVAU]
let ctrl = [Exp & R]; dtrm & po; [Rreg]; iico_data; [BCC]; po
let rec pick-dtrm =
dtrm
| iico_ctrl
| pick-dtrm; pick-dtrm
let pick-basic-dep =
[Exp & R]; pick-dtrm
let pick-addr-dep =
[Exp & R]; pick-dtrm & po; [Rreg]; iico_data & ii_addr; [Exp & M | Imp & Tag & R | Imp & TTD & R | HU | TLBI | DC.CVAU | IC.IVAU]
let pick-data-dep =
[Exp & R]; pick-dtrm & po; [Rreg]; (iico_data | (iico_data; iico_ctrl)) & ii_data; [Exp & W]
let pick-ctrl-dep =
[Exp & R]; pick-dtrm & po; [Rreg]; iico_data; [BCC]; po
let pick-dep =
( pick-basic-dep
| pick-addr-dep
| pick-data-dep
| pick-ctrl-dep
) & ~same-instance
include "aarch64show.cat"