aboutsummaryrefslogtreecommitdiffstats
path: root/kvx/lib/RTLpathSE_theory.v
diff options
context:
space:
mode:
Diffstat (limited to 'kvx/lib/RTLpathSE_theory.v')
-rw-r--r--kvx/lib/RTLpathSE_theory.v10
1 files changed, 6 insertions, 4 deletions
diff --git a/kvx/lib/RTLpathSE_theory.v b/kvx/lib/RTLpathSE_theory.v
index 22b471fd..dd0b706e 100644
--- a/kvx/lib/RTLpathSE_theory.v
+++ b/kvx/lib/RTLpathSE_theory.v
@@ -469,6 +469,11 @@ Definition slocal_set_smem (st:sistate_local) (sm:smem) :=
Definition sist_set_local (st: sistate) (pc: node) (nxt: sistate_local): sistate :=
{| si_pc := pc; si_exits := st.(si_exits); si_local:= nxt |}.
+Definition slocal_store st chunk addr args src : sistate_local :=
+ let args := list_sval_inj (List.map (si_sreg st) args) in
+ let src := si_sreg st src in
+ let sm := Sstore (si_smem st) chunk addr args src
+ in slocal_set_smem st sm.
Definition siexec_inst (i: instruction) (st: sistate): option sistate :=
match i with
@@ -485,9 +490,7 @@ Definition siexec_inst (i: instruction) (st: sistate): option sistate :=
let next := slocal_set_sreg prev dst (Sload prev.(si_smem) trap chunk addr vargs) in
Some (sist_set_local st pc' next)
| Istore chunk addr args src pc' =>
- let prev := st.(si_local) in
- let vargs := list_sval_inj (List.map prev.(si_sreg) args) in
- let next := slocal_set_smem prev (Sstore prev.(si_smem) chunk addr vargs (prev.(si_sreg) src)) in
+ let next := slocal_store st.(si_local) chunk addr args src in
Some (sist_set_local st pc' next)
| Icond cond args ifso ifnot _ =>
let prev := st.(si_local) in
@@ -497,7 +500,6 @@ Definition siexec_inst (i: instruction) (st: sistate): option sistate :=
| _ => None (* TODO jumptable ? *)
end.
-
Lemma seval_list_sval_inj ge sp l rs0 m0 (sreg: reg -> sval) rs:
(forall r : reg, seval_sval ge sp (sreg r) rs0 m0 = Some (rs # r)) ->
seval_list_sval ge sp (list_sval_inj (map sreg l)) rs0 m0 = Some (rs ## l).