From 5809fa295f23952a2d8b043f6da69d61da3568de Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Thu, 25 Apr 2019 11:17:19 +0200 Subject: progress --- mppa_k1c/SelectOp.vp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'mppa_k1c/SelectOp.vp') 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) -- cgit