include "aarch64memattrs.cat"
let TTD-MT-update =
[Normal]; ca; [Device]
| [Device]; ca; [Normal]
let TTD-SH-update =
[NSH]; ca; [ISH | OSH]
| [ISH]; ca; [OSH | NSH]
| [OSH]; ca; [NSH | ISH]
let TTD-ICH-update =
[iNC]; ca; [iWT | iWB]
| [iWT]; ca; [iWB | iNC]
| [iWB]; ca; [iNC | iWT]
let TTD-OCH-update =
[oNC]; ca; [oWT | oWB]
| [oWT]; ca; [oWB | oNC]
| [oWB]; ca; [oNC | oWT]
let TTD-DT-update =
[Device-GRE]; ca; [Device-nGRE | Device-nGnRE | Device-nGnRnE]
| [Device-nGRE]; ca; [Device-GRE | Device-nGnRE | Device-nGnRnE]
| [Device-nGnRE]; ca; [Device-GRE | Device-nGRE | Device-nGnRnE]
| [Device-nGnRnE]; ca; [Device-GRE | Device-nGRE | Device-nGnRE]
let TTD-OA-update = [TTD & M]; ca \ same-oa((TTD & M) * (TTD & M)); [TTD & W]
let TTD-at-least-one-writable = at-least-one-writable((TTD & M) * (TTD & M))
let TTD-memory-contents-mismatch =
([TTD & M]; PTEtoPA; different-values(W * W); PTEtoPA^-1; [TTD & M]) & loc
let TLBUncacheableTTD = TTDINV | TTDAF0
let TLBCacheableTTD = TTD & M \ TLBUncacheableTTD
let TTD-update-BBM-cand =
TTD-MT-update
| TTD-SH-update
| TTD-ICH-update
| TTD-OCH-update
| TTD-DT-update
| TTD-OA-update & (TTD-at-least-one-writable | TTD-memory-contents-mismatch)
let TTD-update-needsBBM =
[TLBCacheableTTD]; TTD-update-BBM-cand; [TLBCacheableTTD]