diff options
author | Léo Gourdin <leo.gourdin@lilo.org> | 2020-10-10 15:45:38 +0200 |
---|---|---|
committer | Léo Gourdin <leo.gourdin@lilo.org> | 2020-10-10 15:45:38 +0200 |
commit | ee15d4183aa4bbe366a98c4bd09c90932e5adb22 (patch) | |
tree | 3803e729d7b1bf3dc6f8f09386643ed81c06e9c1 /aarch64/Asmgenproof.v | |
parent | eb1f11a5be18a36783a44f6c0ddddc35b90cc90a (diff) | |
download | compcert-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.v | 14 |
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') |