From f1a06d6f60b15521db564a01bdafabb2391bfaa5 Mon Sep 17 00:00:00 2001 From: Kathy Gray Date: Tue, 26 Jan 2016 14:19:48 +0000 Subject: 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. --- src/lem_interp/run_interp_model.ml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') 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 -- cgit v1.2.3