include "aarch64memattrs.cat"
let ca = fr | co
let PTE-MT-update =
[Normal]; ca; [Device]
| [Device]; ca; [Normal]
let PTE-SH-update =
[NSH]; ca; [ISH | OSH]
| [ISH]; ca; [OSH | NSH]
| [OSH]; ca; [NSH | ISH]
let PTE-ICH-update =
[iNC]; ca; [iWT | iWB]
| [iWT]; ca; [iWB | iNC]
| [iWB]; ca; [iNC | iWT]
let PTE-OCH-update =
[oNC]; ca; [oWT | oWB]
| [oWT]; ca; [oWB | oNC]
| [oWB]; ca; [oNC | oWT]
let PTE-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 PTE-OA-update = ([PTE]; ca; [PTE & oa-changes(PTE, ca^-1)])
let PTE-OA-update-writable = PTE-OA-update &
([PTE]; ca; [PTE & at-least-one-writable(PTE, ca^-1)])
let PTE-update-needsBBM = ([PTEV]; ca \ (ca; [PTEV]; ca); [PTEV]) &
(PTE-MT-update | PTE-SH-update | PTE-ICH-update | PTE-OCH-update | PTE-DT-update
| PTE-OA-update)
let TTDV = PTEV
let TTDINV = PTEINV
let TTD-update-needsBBM = PTE-update-needsBBM