diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-28 08:48:15 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-28 08:48:15 +0200 |
commit | e20c75e0d54c38b5fab9cb12058b9918ceff3ae4 (patch) | |
tree | 9148f293852aa7dedf0778505a7eb3feac164220 /mppa_k1c/SelectOp.vp | |
parent | 1faf4e651144cfdc40fd797d5ff9be388236d34f (diff) | |
download | compcert-kvx-e20c75e0d54c38b5fab9cb12058b9918ceff3ae4.tar.gz compcert-kvx-e20c75e0d54c38b5fab9cb12058b9918ceff3ae4.zip |
progress on bitfield detection
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r-- | mppa_k1c/SelectOp.vp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/mppa_k1c/SelectOp.vp b/mppa_k1c/SelectOp.vp index bdceced8..2987fd1d 100644 --- a/mppa_k1c/SelectOp.vp +++ b/mppa_k1c/SelectOp.vp @@ -339,7 +339,12 @@ Nondetfunction or (e1: expr) (e2: expr) := | (Eop (Oandimm nmask) (prev:::Enil)), (Eop (Oandimm mask) ((Eop (Oshlimm start) (fld:::Enil)):::Enil)) => - Eop Oor (e1:::e2:::Enil) + let zstart := Int.unsigned start in + let zstop := int_highest_bit mask in + let mask' := Int.repr (zbitfield_mask zstop zstart) in + if Int.eq_dec mask mask' + then Eop Oor (e1:::e2:::Enil) + else Eop Oor (e1:::e2:::Enil) | _, _ => Eop Oor (e1:::e2:::Enil) end. |