diff options
| author | Shaked Flur | 2015-07-24 11:56:08 +0100 |
|---|---|---|
| committer | Shaked Flur | 2015-07-24 11:56:08 +0100 |
| commit | 28c16a5e86c08bd010dbfafccf412921d175610a (patch) | |
| tree | 7e9e1b222918a2a9a32bbd6cc553fb2af30a2b17 | |
| parent | 291eef6e74dcabc0add7f63a30213fd4ed5acbae (diff) | |
added signed_integer
| -rw-r--r-- | src/lem_interp/interp_interface.lem | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lem_interp/interp_interface.lem b/src/lem_interp/interp_interface.lem index 3c79ed5e..b60a4dbb 100644 --- a/src/lem_interp/interp_interface.lem +++ b/src/lem_interp/interp_interface.lem @@ -1079,6 +1079,21 @@ val address_of_integer : integer -> address let address_of_integer (i:integer):address = Address (byte_list_of_integer 8 i) i +(* to and from signed-integer *) + +val signed_integer_of_bit_list : list bit -> integer +let signed_integer_of_bit_list b = + match b with + | [] -> failwith "empty bit list" + | Bitc_zero :: b' -> + integerFromBoolList (false,(List.reverse (List.map bit_to_bool b))) + | Bitc_one :: b' -> + let b'_val = integerFromBoolList (false,(List.reverse (List.map bit_to_bool b'))) in + (* integerFromBoolList takes a list with LSB first, so we reverse it *) + let msb_val = integerPow 2 ((List.length b) - 1) in + b'_val - msb_val + end + (* regarding a list of int as a list of bytes in memory, MSB lowest-address first, convert to an integer *) val integer_address_of_int_list : list int -> integer |
