diff options
| author | Christopher Pulte | 2016-09-07 14:42:01 +0100 |
|---|---|---|
| committer | Christopher Pulte | 2016-09-07 14:42:01 +0100 |
| commit | c669e42539f4b26adc6458ed9293cc6469f87bc6 (patch) | |
| tree | c0f2ee8579c171efa922217a6bd872b729599750 /src/gen_lib/sail_values.lem | |
| parent | 808b1b30bd82d0ca1d59159d496a49db7546e152 (diff) | |
push some lem pp changes
Diffstat (limited to 'src/gen_lib/sail_values.lem')
| -rw-r--r-- | src/gen_lib/sail_values.lem | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/gen_lib/sail_values.lem b/src/gen_lib/sail_values.lem index fa2afe23..c78a6cdf 100644 --- a/src/gen_lib/sail_values.lem +++ b/src/gen_lib/sail_values.lem @@ -69,6 +69,8 @@ let unsigned (V bs _ _ as v) : integer = fst (List.foldl (fun (acc,exp) b -> (acc + (if b = I then integerPow 2 exp else 0),exp +1)) (0,0) bs) +let unsigned_big = unsigned + let signed v : integer = match most_significant v with | I -> 0 - (1 + (unsigned (bitwise_not v))) @@ -76,6 +78,8 @@ let signed v : integer = | _ -> failwith "signed applied to vector with undefined bits" end +let signed_big = signed + let to_num sign = if sign then signed else unsigned let max_64u = (integerPow 2 64) - 1 @@ -137,6 +141,8 @@ let to_vec is_inc ((len : integer),(n : integer)) = let (V bs start is_inc) = bitwise_not (V abs_bs start is_inc) in V (add_one_bit bs false (len-1)) start is_inc +let to_vec_big = to_vec + let to_vec_inc = to_vec true let to_vec_dec = to_vec false @@ -146,6 +152,13 @@ let to_vec_undef is_inc (len : integer) = let to_vec_inc_undef = to_vec_undef true let to_vec_dec_undef = to_vec_undef false +let get_dir (V _ _ ord) = ord + +let exts (len, vec) = to_vec (get_dir vec) (len,signed vec) +let extz (len, vec) = to_vec (get_dir vec) (len,unsigned vec) + +let exts_big (len, vec) = to_vec_big (get_dir vec) (len, signed_big vec) +let extz_big (len, vec) = to_vec_big (get_dir vec) (len, unsigned_big vec) let add = integerAdd let add_signed = integerAdd @@ -444,14 +457,6 @@ let neq_range_vec (l,r) = bitwise_not_bit (eq_range_vec (l,r)) (* temporarily *) val neq : forall 'a 'b. 'a * 'b -> bit let neq _ = O - - -let EXTS (v1,(V _ _ is_inc as v)) = - to_vec is_inc (v1,signed v) - -let EXTZ = EXTS - -let exts = EXTS val make_indexed_vector_reg : list (integer * register) -> maybe register -> integer -> integer -> vector register |
