summaryrefslogtreecommitdiff
path: root/src/gen_lib
diff options
context:
space:
mode:
authorRobert Norton2017-03-27 16:46:44 +0100
committerRobert Norton2017-03-27 17:01:55 +0100
commiteb2fdf02e244873ef5d1ac74e37f7b00931e7c2d (patch)
tree311cfcea928aeced3b910a64c0bdd3ae4c55443c /src/gen_lib
parentbc4633c84b0a3278c33d6d246a4d476683007a91 (diff)
Fix broken to_vec of negative values. Old code was a bit confused. Probably possible to rewrite using arithmetic on big_int which might be faster.
Diffstat (limited to 'src/gen_lib')
-rw-r--r--src/gen_lib/sail_values.ml16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/gen_lib/sail_values.ml b/src/gen_lib/sail_values.ml
index d6443a16..e8622a09 100644
--- a/src/gen_lib/sail_values.ml
+++ b/src/gen_lib/sail_values.ml
@@ -461,14 +461,14 @@ let rec divide_by_2_int array i n =
then begin array.(i) <- Vone; divide_by_2_int array (i-1) quo end
else divide_by_2_int array (i-1) quo
-let rec add_one_bit array co i =
+let rec add_one_bit array ci i =
if i < 0
then array
- else match array.(i),co with
- | Vzero,false -> array.(i) <- Vone; array
- | Vzero,true -> array.(i) <- Vone; add_one_bit array true (i-1)
- | Vone, false -> array.(i) <- Vzero; add_one_bit array true (i-1)
- | Vone, true -> add_one_bit array true (i-1)
+ else match array.(i),ci with
+ | Vzero,false -> add_one_bit array false (i-1)
+ | Vzero,true -> array.(i) <- Vone; add_one_bit array false (i-1)
+ | Vone, false -> array.(i) <- Vone; add_one_bit array false (i-1)
+ | Vone, true -> array.(i) <- Vzero; add_one_bit array true (i-1)
| Vundef,_ -> assert false
let to_vec_int ord len n =
@@ -483,7 +483,7 @@ let to_vec_int ord len n =
let abs_array = divide_by_2_int array (len-1) abs_n in
let v_abs = bitwise_not (Vvector(abs_array,start,ord)) in
match v_abs with
- | Vvector(array,start,ord) -> Vvector(add_one_bit array false (len-1),start,ord)
+ | Vvector(array,start,ord) -> Vvector(add_one_bit array true (len-1),start,ord)
| _ -> assert false
let to_vec_big ord len n =
@@ -499,7 +499,7 @@ let to_vec_big ord len n =
let abs_array = divide_by_2_big array (len-1) abs_n in
let v_abs = bitwise_not (Vvector(abs_array,start,ord)) in
match v_abs with
- | Vvector(array,start,ord) -> Vvector(add_one_bit array false (len-1),start,ord)
+ | Vvector(array,start,ord) -> Vvector(add_one_bit array true (len-1),start,ord)
| _ -> assert false
let to_vec_inc_int (len,n) = to_vec_int true len n