summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/interp.lem4
-rw-r--r--src/lem_interp/interp_inter_imp.lem2
-rw-r--r--src/lem_interp/run_interp_model.ml2
3 files changed, 4 insertions, 4 deletions
diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem
index 218f20e7..37f73a1e 100644
--- a/src/lem_interp/interp.lem
+++ b/src/lem_interp/interp.lem
@@ -366,7 +366,7 @@ let rec slice_vector v n1 n2 =
match v with
| V_vector m inc vs ->
if inc
- then V_vector 0 inc (from_n_to_n (n1 - m) (n2 - m) vs)
+ then V_vector n1 inc (from_n_to_n (n1 - m) (n2 - m) vs)
else V_vector (n1 - n2 + 1) inc (from_n_to_n (m - n1) (m - n2) vs)
| V_vector_sparse m n inc vs d ->
let (slice, still_sparse) =
@@ -374,7 +374,7 @@ let rec slice_vector v n1 n2 =
then slice_sparse_list (>) (fun i -> i + 1) vs n1 n2
else slice_sparse_list (<) (fun i -> i - 1) vs n1 n2 in
if still_sparse && inc
- then V_vector_sparse 0 (n2 - n1) inc slice d
+ then V_vector_sparse n1 (n2 - n1) inc slice d
else if inc then V_vector 0 inc (List.map snd slice)
else if still_sparse then V_vector_sparse (n1 - n2 +1) (n1 - n2) inc slice d
else V_vector (n1 - n2 +1) inc (List.map snd slice)
diff --git a/src/lem_interp/interp_inter_imp.lem b/src/lem_interp/interp_inter_imp.lem
index 68076627..049ca92d 100644
--- a/src/lem_interp/interp_inter_imp.lem
+++ b/src/lem_interp/interp_inter_imp.lem
@@ -94,7 +94,7 @@ let rec slice_value bits start stop =
Bitvector (Interp.from_n_to_n (if inc then (start - fst) else (fst - start))
(if inc then (stop - fst) else (fst - stop)) bools)
inc
- (if inc then 0 else ((stop - start) + 1))
+ (if inc then start else ((stop - start) + 1))
| Bytevector bytes ->
Bytevector (Interp.from_n_to_n start stop bytes)
| Unknown -> Unknown
diff --git a/src/lem_interp/run_interp_model.ml b/src/lem_interp/run_interp_model.ml
index 8a047a5b..fe547201 100644
--- a/src/lem_interp/run_interp_model.ml
+++ b/src/lem_interp/run_interp_model.ml
@@ -54,7 +54,7 @@ let rec slice bitvector (start,stop) =
Bitvector ((Interp.from_n_to_n (if inc then (sub_big_int start fst) else (sub_big_int fst start))
(if inc then (sub_big_int stop fst) else (sub_big_int fst stop)) bools),
inc,
- (if inc then zero_big_int else (add_big_int (sub_big_int stop start) unit_big_int)))
+ (if inc then start else (add_big_int (sub_big_int stop start) unit_big_int)))
| Bytevector bytes ->
Bytevector((Interp.from_n_to_n start stop bytes)) (*This is wrong, need to explode and re-encode, but maybe never happens?*)