diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-25 11:17:19 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-25 11:17:19 +0200 |
commit | 5809fa295f23952a2d8b043f6da69d61da3568de (patch) | |
tree | 1e8890f40a837786d824d1a8cd401c16aee93832 /mppa_k1c/SelectOp.vp | |
parent | bb185aa85ddf32feed61d7888c1b199fffdd821f (diff) | |
download | compcert-kvx-5809fa295f23952a2d8b043f6da69d61da3568de.tar.gz compcert-kvx-5809fa295f23952a2d8b043f6da69d61da3568de.zip |
progress
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r-- | mppa_k1c/SelectOp.vp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/mppa_k1c/SelectOp.vp b/mppa_k1c/SelectOp.vp index 3e36a51c..6bb5ee56 100644 --- a/mppa_k1c/SelectOp.vp +++ b/mppa_k1c/SelectOp.vp @@ -186,6 +186,14 @@ Nondetfunction shruimm (e1: expr) (n: int) := if Int.ltu (Int.add n n1) Int.iwordsize then Eop (Oshruimm (Int.add n n1)) (t1:::Enil) else Eop (Oshruimm n) (e1:::Enil) + | Eop (Oshlimm n1) (t1:::Enil) => + let stop := Z.sub Int.zwordsize (Z.add (Int.unsigned n1) Z.one) in + let start := Z.sub (Z.add (Z.add (Int.unsigned n) stop) Z.one) Int.zwordsize in + if (Z.leb start stop) + && (Z.geb start Z.zero) + && (Z.ltb stop Int.zwordsize) + then Eop (Oextfz stop start) (t1:::Enil) + else Eop (Oshruimm n) (e1:::Enil) | _ => Eop (Oshruimm n) (e1:::Enil) end. @@ -208,7 +216,7 @@ Nondetfunction shrimm (e1: expr) (n: int) := if (Z.leb start stop) && (Z.geb start Z.zero) && (Z.ltb stop Int.zwordsize) - then Eop (Oextfz stop start) (t1:::Enil) + then Eop (Oextfs stop start) (t1:::Enil) else Eop (Oshrimm n) (e1:::Enil) | _ => Eop (Oshrimm n) (e1:::Enil) |