aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2021-11-13 23:01:38 +0000
committerYann Herklotz <git@yannherklotz.com>2021-11-13 23:01:38 +0000
commit1cf2d2ef251f228f2fb2c19dffc8f8dc1d60c519 (patch)
tree1810e9aeb0a52ae3d11301ca307341a75802f3fc /src
parenta3f4b9e52563616f6056a9d67344cc326490f2ff (diff)
downloadvericert-1cf2d2ef251f228f2fb2c19dffc8f8dc1d60c519.tar.gz
vericert-1cf2d2ef251f228f2fb2c19dffc8f8dc1d60c519.zip
Simplify the RTLPargen update function
Diffstat (limited to 'src')
-rw-r--r--src/hls/RTLPargen.v32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/hls/RTLPargen.v b/src/hls/RTLPargen.v
index ae4412b..58b048c 100644
--- a/src/hls/RTLPargen.v
+++ b/src/hls/RTLPargen.v
@@ -132,9 +132,19 @@ Fixpoint NEapp {A} (l m: NE.non_empty A) :=
| a ::| b => a ::| NEapp b m
end.
-Definition app_predicated {A: Type} (a b: predicated A) :=
+Definition app_predicated' {A: Type} (a b: predicated A) :=
let negation := ¬ (NEfold_left (fun a b => a ∨ (fst b)) b ⟂) in
- NEapp (NE.map (fun x => (negation ∧ (fst x), snd x)) a) b.
+ NEapp (NE.map (fun x => (negation ∧ fst x, snd x)) a) b.
+
+Definition app_predicated {A: Type} (p: option pred_op) (a b: predicated A) :=
+ match p with
+ | Some p' => NEapp (NE.map (fun x => (¬ p' ∧ fst x, snd x)) a)
+ (NE.map (fun x => (p' ∧ fst x, snd x)) b)
+ | None => b
+ end.
+
+Definition pred_ret {A: Type} (a: A) : predicated A :=
+ NE.singleton (T, a).
(*|
Update Function
@@ -156,29 +166,29 @@ Definition update (f : forest) (i : instr) : forest :=
| RBnop => f
| RBop p op rl r =>
f # (Reg r) <-
- (app_predicated
+ (app_predicated p
(f # (Reg r))
- (map_predicated (predicated_from_opt p (Eop op)) (merge (list_translation rl f))))
+ (map_predicated (pred_ret (Eop op)) (merge (list_translation rl f))))
| RBload p chunk addr rl r =>
f # (Reg r) <-
- (app_predicated
+ (app_predicated p
(f # (Reg r))
(map_predicated
- (map_predicated (predicated_from_opt p (Eload chunk addr)) (merge (list_translation rl f)))
+ (map_predicated (pred_ret (Eload chunk addr)) (merge (list_translation rl f)))
(f # Mem)))
| RBstore p chunk addr rl r =>
f # Mem <-
- (app_predicated
- (f # (Reg r))
+ (app_predicated p
+ (f # Mem)
(map_predicated
(map_predicated
- (predicated_apply2 (map_predicated (predicated_from_opt p Estore) (f # (Reg r))) chunk addr)
+ (predicated_apply2 (map_predicated (pred_ret Estore) (f # (Reg r))) chunk addr)
(merge (list_translation rl f))) (f # Mem)))
| RBsetpred p' c args p =>
f # (Pred p) <-
- (app_predicated
+ (app_predicated p'
(f # (Pred p))
- (map_predicated (predicated_from_opt p' (Esetpred c)) (merge (list_translation args f))))
+ (map_predicated (pred_ret (Esetpred c)) (merge (list_translation args f))))
end.
(*|