aboutsummaryrefslogtreecommitdiffstats
path: root/aarch64/Asmgenproof.v
diff options
context:
space:
mode:
authorLéo Gourdin <leo.gourdin@lilo.org>2020-10-10 15:45:38 +0200
committerLéo Gourdin <leo.gourdin@lilo.org>2020-10-10 15:45:38 +0200
commitee15d4183aa4bbe366a98c4bd09c90932e5adb22 (patch)
tree3803e729d7b1bf3dc6f8f09386643ed81c06e9c1 /aarch64/Asmgenproof.v
parenteb1f11a5be18a36783a44f6c0ddddc35b90cc90a (diff)
downloadcompcert-kvx-ee15d4183aa4bbe366a98c4bd09c90932e5adb22.tar.gz
compcert-kvx-ee15d4183aa4bbe366a98c4bd09c90932e5adb22.zip
Adding a lemma for load preservation
This is a test lemma, I may remove the exists predicate later.
Diffstat (limited to 'aarch64/Asmgenproof.v')
-rw-r--r--aarch64/Asmgenproof.v14
1 files changed, 14 insertions, 0 deletions
diff --git a/aarch64/Asmgenproof.v b/aarch64/Asmgenproof.v
index 530166c2..051fedb1 100644
--- a/aarch64/Asmgenproof.v
+++ b/aarch64/Asmgenproof.v
@@ -977,6 +977,20 @@ Qed.
Ltac next_stuck_cong := try (unfold Next, Stuck in *; congruence).
+Lemma load_preserved n rs1 m1 rs1' m1' rs2 m2 rd chk f a:
+ match_internal n (State rs1 m1) (State rs2 m2) ->
+ exec_load lk chk f a rd rs1 m1 = Next rs1' m1' ->
+ exists (rs2' : regset) (m2' : mem), Asm.exec_load tge chk f a rd rs2 m2 = Next rs2' m2'.
+Proof.
+ intros.
+ unfold exec_load, Asm.exec_load in *.
+ inversion H as [n0 r1 mx1 r2 mx2 EQM EQR EQPC]; subst.
+ rewrite <- (eval_addressing_preserved a rs1 rs2); auto.
+ destruct (Mem.loadv _ _ _).
+ + inversion H; auto. repeat (econstructor; eauto).
+ + next_stuck_cong.
+Qed.
+
Lemma exec_basic_simulation:
forall tf n rs1 m1 rs1' m1' rs2 m2 bi tbi
(BASIC: exec_basic lk ge bi rs1 m1 = Next rs1' m1')