aboutsummaryrefslogtreecommitdiffstats
path: root/backend/SplitLong.vp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/SplitLong.vp')
-rw-r--r--backend/SplitLong.vp7
1 files changed, 5 insertions, 2 deletions
diff --git a/backend/SplitLong.vp b/backend/SplitLong.vp
index 60d8e4c4..cbf7fa30 100644
--- a/backend/SplitLong.vp
+++ b/backend/SplitLong.vp
@@ -112,8 +112,11 @@ Definition is_longconst_zero (e: expr) :=
Definition intoflong (e: expr) := lowlong e.
-Definition longofint (e: expr) :=
- Elet e (makelong (shrimm (Eletvar O) (Int.repr 31)) (Eletvar O)).
+Nondetfunction longofint (e: expr) :=
+ match e with
+ | Eop (Ointconst n) Enil => longconst (Int64.repr (Int.signed n))
+ | _ => Elet e (makelong (shrimm (Eletvar O) (Int.repr 31)) (Eletvar O))
+ end.
Definition longofintu (e: expr) :=
makelong (Eop (Ointconst Int.zero) Enil) e.