From 7e8156920aee9c52fc1d5d0b9e0900acbbb7a0fd Mon Sep 17 00:00:00 2001 From: Kathy Gray Date: Tue, 16 Dec 2014 14:30:20 +0000 Subject: Fix bug on nat/type/order/effect variable binding Fix bug allowing function types in too many places --- src/lem_interp/interp_lib.lem | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/lem_interp') 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) -- cgit v1.2.3