diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-05-11 17:46:45 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-05-11 17:46:45 +0200 |
commit | a095ac045485f5693d937864f7990ab5de427f1d (patch) | |
tree | 2abc2af9bb9a96648325f6a86286d5ab1785abd9 /mppa_k1c/SelectOp.vp | |
parent | a17d3c0419ef5531142c4826d962009c9ba81fbc (diff) | |
download | compcert-kvx-a095ac045485f5693d937864f7990ab5de427f1d.tar.gz compcert-kvx-a095ac045485f5693d937864f7990ab5de427f1d.zip |
more maddx
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r-- | mppa_k1c/SelectOp.vp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/mppa_k1c/SelectOp.vp b/mppa_k1c/SelectOp.vp index 61365be2..9b4cfeb0 100644 --- a/mppa_k1c/SelectOp.vp +++ b/mppa_k1c/SelectOp.vp @@ -104,6 +104,12 @@ Definition addrstack (ofs: ptrofs) := (** ** Integer addition and pointer addition *) +Definition addimm_shlimm sh k2 e1 := + match shift1_4_of_z (Int.unsigned sh) with + | Some s14 => Eop (Oaddximm s14 k2) (e1:::Enil) + | None => Eop (Oaddimm k2) ((Eop (Oshlimm sh) (e1:::Enil)):::Enil) + end. + Nondetfunction addimm (n: int) (e: expr) := if Int.eq n Int.zero then e else match e with @@ -111,6 +117,8 @@ Nondetfunction addimm (n: int) (e: expr) := | Eop (Oaddrsymbol s m) Enil => Eop (Oaddrsymbol s (Ptrofs.add (Ptrofs.of_int n) m)) Enil | Eop (Oaddrstack m) Enil => Eop (Oaddrstack (Ptrofs.add (Ptrofs.of_int n) m)) Enil | Eop (Oaddimm m) (t ::: Enil) => Eop (Oaddimm(Int.add n m)) (t ::: Enil) + | Eop (Oshlimm sh) (t1:::Enil) => + addimm_shlimm sh n t1 | _ => Eop (Oaddimm n) (e ::: Enil) end. |