summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/interp_lib.lem17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index b514642c..9df2d3c1 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -7,6 +7,23 @@ open import List
open import Word
open import Bool
+
+let add_carry_out i1 i2 result =
+ if (i1 < 0 && i2 < 0)
+ then if result >= 0 then true else false
+ else (if i1 > 0 && i2 > 0)
+ then if result <= 0 then true else false
+ else if i1 < 0
+ then if (abs i1) > i2 && result > 0 then true else false
+ else if i2 < 0
+ then if (abs i2) > i1 && result < 0 then true else false
+ else false
+
+let mult_carry_out i1 i2 result =
+ if (i1 < 0 && i2 < 0) || (i1 > 0 && i2 > 0)
+ then if result <= 0 then true else false
+ else if result > 0 then true else false
+
let hardware_mod (a: integer) (b:integer) : integer =
if a < 0 && b < 0
then (abs a) mod (abs b)