diff options
Diffstat (limited to 'src/lem_interp')
| -rw-r--r-- | src/lem_interp/interp_lib.lem | 17 |
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) |
