@@ -980,9 +980,9 @@ Definition read_pte (vaddr : view) :
980
980
(** Run a RegRead outcome.
981
981
Returns the register value and the view. *)
982
982
Definition run_reg_read (reg : reg) (racc : reg_acc) :
983
- Exec.t TState.t string (reg_type reg) :=
984
- ts ← mGet ;
985
- valv ←
983
+ Exec.t ( TState.t * IIS.t) string (reg_type reg) :=
984
+ ts ← mget fst ;
985
+ '(val, view) ←
986
986
(if decide (reg ∈ relaxed_regs) then
987
987
if decide (is_Some racc)
988
988
then Exec.error_none "Register unmapped on direct read"
@@ -993,7 +993,8 @@ Definition run_reg_read (reg : reg) (racc : reg_acc) :
993
993
mchoosel valvs
994
994
else
995
995
Exec.error_none "Register unmapped; cannot read" $ TState.read_reg ts reg);
996
- mret (valv.1).
996
+ mset snd $ IIS.add view;;
997
+ mret val.
997
998
998
999
(** Run a RegWrite outcome.
999
1000
Updates the thread state using a register value *)
@@ -1015,12 +1016,13 @@ Definition run_reg_write (reg : reg) (racc : reg_acc) (val : reg_type reg) :
1015
1016
mret 0%nat
1016
1017
else mret vreg);
1017
1018
if decide (reg ∈ relaxed_regs) then
1018
- valvi ← Exec.error_none "Register unmapped on direct read" $ TState.read_sreg_direct ts reg;
1019
- let vpre := ts.(TState.vcse) ⊔ ts.(TState.vspec) ⊔ ts.(TState.vdsb) ⊔ valvi.2 in
1019
+ '(val, view) ← Exec.error_none "Register unmapped on direct read" $ TState.read_sreg_direct ts reg;
1020
+ let vpre := ts.(TState.vcse) ⊔ ts.(TState.vspec) ⊔ ts.(TState.vdsb) ⊔ view in
1020
1021
let vpost := vreg' ⊔ vpre in
1021
1022
let vmsr := ts.(TState.vmsr) ⊔ vpost in
1022
1023
mset PPState.state $ TState.add_wsreg reg val vpost;;
1023
- mset PPState.state $ TState.update TState.vmsr vmsr
1024
+ mset PPState.state $ TState.update TState.vmsr vmsr;;
1025
+ mset PPState.iis $ IIS.add vpost
1024
1026
else
1025
1027
nts ← Exec.error_none "Register unmapped; cannot write" $
1026
1028
TState.set_reg ts reg (val, vreg');
@@ -1222,7 +1224,7 @@ Section RunOutcome.
1222
1224
| RegWrite reg racc val =>
1223
1225
run_reg_write reg racc val
1224
1226
| RegRead reg racc =>
1225
- Exec.liftSt PPState.state $ (run_reg_read reg racc)
1227
+ Exec.liftSt ( PPState.state ×× PPState.iis) $ (run_reg_read reg racc)
1226
1228
| MemRead 8 0 rr =>
1227
1229
let initmem := Memory.initial_from_memMap initmem in
1228
1230
val ← run_mem_read rr initmem;
0 commit comments