diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-28 12:51:18 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-28 12:51:18 +0200 |
commit | ac205c117a809aa40132f4184d04371e0e467b6c (patch) | |
tree | dcfaeb8ab12b5539609d58d22ef88592ed8728cf /mppa_k1c/SelectOp.vp | |
parent | 6d904a7952816b1e1c6ba5c560e938713f2093db (diff) | |
download | compcert-kvx-ac205c117a809aa40132f4184d04371e0e467b6c.tar.gz compcert-kvx-ac205c117a809aa40132f4184d04371e0e467b6c.zip |
more insf detection
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r-- | mppa_k1c/SelectOp.vp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/mppa_k1c/SelectOp.vp b/mppa_k1c/SelectOp.vp index d32a7b85..e1aaf588 100644 --- a/mppa_k1c/SelectOp.vp +++ b/mppa_k1c/SelectOp.vp @@ -350,6 +350,18 @@ Nondetfunction or (e1: expr) (e2: expr) := then Eop (Oinsf zstop zstart) (prev:::fld:::Enil) else Eop Oor (e1:::e2:::Enil) else Eop Oor (e1:::e2:::Enil) + | (Eop (Oandimm nmask) (prev:::Enil)), + (Eop (Oandimm mask) (fld:::Enil)) => + let zstart := 0 in + let zstop := int_highest_bit mask in + if is_bitfield zstop zstart + then + 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 (Oinsf zstop zstart) (prev:::fld:::Enil) + else Eop Oor (e1:::e2:::Enil) + else Eop Oor (e1:::e2:::Enil) | _, _ => Eop Oor (e1:::e2:::Enil) end. |