summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKathy Gray2016-01-26 14:19:48 +0000
committerKathy Gray2016-01-26 14:19:48 +0000
commitf1a06d6f60b15521db564a01bdafabb2391bfaa5 (patch)
tree633d1fefacb8c8bc5a59ffcf295970306b542f62 /src
parent6f8c99cf778ac458860e1a28516fc2468b43bbfd (diff)
Fix problem in run_with_model where we forgot that ppcmem2 treats everything as increasing, and updated ranges accordingly, and mistakenly were using the wrong range values for register slicing.
Diffstat (limited to 'src')
-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