aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-28 11:06:37 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-28 11:06:37 +0200
commitf0448bf49ee21ff327c98808a02824bd1536a1ee (patch)
treef9aae84268d9ecea3b25dbbe66b3969694952443
parent19908e4a6813dc54d72d142a93a77fe41eed95a2 (diff)
downloadcompcert-kvx-f0448bf49ee21ff327c98808a02824bd1536a1ee.tar.gz
compcert-kvx-f0448bf49ee21ff327c98808a02824bd1536a1ee.zip
selection for insf
-rw-r--r--mppa_k1c/SelectOp.vp2
-rw-r--r--mppa_k1c/SelectOpproof.v22
2 files changed, 21 insertions, 3 deletions
diff --git a/mppa_k1c/SelectOp.vp b/mppa_k1c/SelectOp.vp
index d0bd4f2d..bfbd36d5 100644
--- a/mppa_k1c/SelectOp.vp
+++ b/mppa_k1c/SelectOp.vp
@@ -347,7 +347,7 @@ Nondetfunction or (e1: expr) (e2: expr) :=
let mask' := Int.repr (zbitfield_mask zstop zstart) in
if and_dec (Int.eq_dec mask mask')
(Int.eq_dec nmask (Int.not mask'))
- then Eop Oor (e1:::e2:::Enil)
+ then Eop (Oinsf zstop zstart) (prev:::fld:::Enil)
else Eop Oor (e1:::e2:::Enil)
else Eop Oor (e1:::e2:::Enil)
| _, _ => Eop Oor (e1:::e2:::Enil)
diff --git a/mppa_k1c/SelectOpproof.v b/mppa_k1c/SelectOpproof.v
index 313786c8..8bfcf1b2 100644
--- a/mppa_k1c/SelectOpproof.v
+++ b/mppa_k1c/SelectOpproof.v
@@ -701,8 +701,26 @@ Proof.
rewrite Int.or_commut.
rewrite Int.or_zero.
reflexivity.
- - destruct (is_bitfield _ _).
- + destruct (and_dec _ _); apply DEFAULT.
+ - set (zstop := (int_highest_bit mask)).
+ set (zstart := (Int.unsigned start)).
+ destruct (is_bitfield _ _) eqn:Risbitfield.
+ + destruct (and_dec _ _) as [[Rmask Rnmask] | ].
+ * simpl in H6.
+ injection H6.
+ clear H6.
+ intro. subst y. subst x.
+ TrivialExists. simpl. f_equal.
+ unfold insf.
+ rewrite Risbitfield.
+ rewrite Rmask.
+ rewrite Rnmask.
+ simpl.
+ unfold bitfield_mask.
+ subst v0.
+ subst zstart.
+ rewrite Int.repr_unsigned.
+ reflexivity.
+ * apply DEFAULT.
+ apply DEFAULT.
- apply DEFAULT.
Qed.