aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/SelectOp.vp
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-25 11:17:19 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-25 11:17:19 +0200
commit5809fa295f23952a2d8b043f6da69d61da3568de (patch)
tree1e8890f40a837786d824d1a8cd401c16aee93832 /mppa_k1c/SelectOp.vp
parentbb185aa85ddf32feed61d7888c1b199fffdd821f (diff)
downloadcompcert-kvx-5809fa295f23952a2d8b043f6da69d61da3568de.tar.gz
compcert-kvx-5809fa295f23952a2d8b043f6da69d61da3568de.zip
progress
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r--mppa_k1c/SelectOp.vp10
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)