summaryrefslogtreecommitdiff
path: root/src/gen_lib/sail_operators.lem
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-11-08 15:08:18 +0000
committerAlasdair Armstrong2017-11-08 15:08:18 +0000
commit275ded17e9d0824a932fe23607fe4f7d7b1da62f (patch)
tree140e49f6ae13ddd8fba52388a79fccf982e1f457 /src/gen_lib/sail_operators.lem
parent2def55466c941aa8d4b933ecd93a7d3eb739fce8 (diff)
parent9dc4a4bb20a53889b0aee43563d41fd7065a226a (diff)
Merge branch 'experiments' of https://bitbucket.org/Peter_Sewell/sail into experiments
Diffstat (limited to 'src/gen_lib/sail_operators.lem')
-rw-r--r--src/gen_lib/sail_operators.lem49
1 files changed, 2 insertions, 47 deletions
diff --git a/src/gen_lib/sail_operators.lem b/src/gen_lib/sail_operators.lem
index 524d7ef6..826ea98f 100644
--- a/src/gen_lib/sail_operators.lem
+++ b/src/gen_lib/sail_operators.lem
@@ -39,6 +39,7 @@ let cast_vec_bool v = bitU_to_bool (extract_only_element v)
let cast_bit_vec_basic (start, len, b) = Vector (repeat [b] len) start false
let cast_boolvec_bitvec (Vector bs start inc) =
Vector (List.map bool_to_bitU bs) start inc
+let cast_vec_bl (Vector bs start inc) = bs
let pp_bitu_vector (Vector elems start inc) =
let elems_pp = List.foldl (fun acc elem -> acc ^ showBitU elem) "" elems in
@@ -50,8 +51,6 @@ let most_significant = function
| _ -> failwith "most_significant applied to empty vector"
end
-let bitwise_not_bitlist = List.map bitwise_not_bit
-
let bitwise_not (Vector bs start is_inc) =
Vector (bitwise_not_bitlist bs) start is_inc
@@ -63,18 +62,6 @@ let bitwise_and = bitwise_binop (&&)
let bitwise_or = bitwise_binop (||)
let bitwise_xor = bitwise_binop xor
-(*let unsigned (Vector bs _ _) : integer =
- let (sum,_) =
- List.foldr
- (fun b (acc,exp) ->
- match b with
- | B1 -> (acc + integerPow 2 exp,exp + 1)
- | B0 -> (acc, exp + 1)
- | BU -> failwith "unsigned: vector has undefined bits"
- end)
- (0,0) bs in
- sum*)
-
let unsigned_big = unsigned
let signed v : integer =
@@ -136,40 +123,9 @@ let get_min_representable_in _ (n : integer) : integer =
else if n = 5 then min_5
else 0 - (integerPow 2 (natFromInteger n))
-val to_bin_aux : natural -> list bitU
-let rec to_bin_aux x =
- if x = 0 then []
- else (if x mod 2 = 1 then B1 else B0) :: to_bin_aux (x / 2)
-let to_bin n = List.reverse (to_bin_aux n)
-
-val pad_zero : list bitU -> integer -> list bitU
-let rec pad_zero bits n =
- if n <= 0 then bits else pad_zero (B0 :: bits) (n -1)
-
-
-let rec add_one_bit_ignore_overflow_aux bits = match bits with
- | [] -> []
- | B0 :: bits -> B1 :: bits
- | B1 :: bits -> B0 :: add_one_bit_ignore_overflow_aux bits
- | BU :: _ -> failwith "add_one_bit_ignore_overflow: undefined bit"
-end
-
-let add_one_bit_ignore_overflow bits =
- List.reverse (add_one_bit_ignore_overflow_aux (List.reverse bits))
-
-
let to_norm_vec is_inc ((len : integer),(n : integer)) =
let start = if is_inc then 0 else len - 1 in
- let bits = to_bin (naturalFromInteger (abs n)) in
- let len_bits = integerFromNat (List.length bits) in
- let longer = len - len_bits in
- let bits' =
- if longer < 0 then drop (natFromInteger (abs (longer))) bits
- else pad_zero bits longer in
- if n > (0 : integer)
- then Vector bits' start is_inc
- else Vector (add_one_bit_ignore_overflow (bitwise_not_bitlist bits'))
- start is_inc
+ Vector (bits_of_int (len, n)) start is_inc
let to_vec_big = to_norm_vec
@@ -451,7 +407,6 @@ let gt = compare_op (>)
let lteq = compare_op (<=)
let gteq = compare_op (>=)
-
let compare_op_vec op sign (l,r) =
let (l',r') = (to_num sign l, to_num sign r) in
compare_op op (l',r')