summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/run_interp_model.ml11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lem_interp/run_interp_model.ml b/src/lem_interp/run_interp_model.ml
index de628116..ff5dea0b 100644
--- a/src/lem_interp/run_interp_model.ml
+++ b/src/lem_interp/run_interp_model.ml
@@ -54,7 +54,16 @@ module Mem = struct
(memory_value_to_string !default_endian [v])
end
-let slice register_vector (start,stop) = slice_reg_value register_vector start stop
+let slice register_vector (start,stop) =
+ if register_vector.rv_dir = D_increasing
+ then slice_reg_value register_vector start stop
+ else
+ (*Interface turns start and stop into forms for
+ increasing because ppcmem only speaks increasing, so here we turn it back *)
+ let startd = register_vector.rv_start_internal- start in
+ let stopd = startd - stop in
+ (*let _ = Printf.eprintf "slice decreasing with %i, %i, %i\n" startd stopd register_vector.rv_start in*)
+ slice_reg_value {register_vector with rv_start=register_vector.rv_start_internal} startd stopd
let big_num_unit = of_int 1