From cdcd5880a27ff16fdafb82bdaab57ab361e1f546 Mon Sep 17 00:00:00 2001 From: Gabriel Kerneis Date: Wed, 12 Feb 2014 17:02:02 +0000 Subject: Fix endianess issues --- src/lem_interp/interp.lem | 6 +++++- src/lem_interp/run_interp.ml | 4 ++-- src/test/power.sail | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem index a9e87056..0d43f338 100644 --- a/src/lem_interp/interp.lem +++ b/src/lem_interp/interp.lem @@ -173,12 +173,16 @@ let litV_to_vec l = match l with | L_hex s -> let hexes = String.toCharList s in + (* XXX unimplemented *) V_vector 0 true [] | L_bin s -> let bits = String.toCharList s in let exploded_bits = List.map (fun c -> String.toString [c]) bits in let bits = List.map (fun s -> match s with | "0" -> (V_lit L_zero) | "1" -> (V_lit L_one) end) exploded_bits in - V_vector 0 true bits + (* XXX assume binary constants are written in big-endian, convert them to + * little-endian by default - we might need syntax to change both of those + * assumptions. *) + V_vector 0 true (List.reverse bits) end (* Like List_extra.nth with a natural instead of nat index - diff --git a/src/lem_interp/run_interp.ml b/src/lem_interp/run_interp.ml index beeefc7a..84ba37df 100644 --- a/src/lem_interp/run_interp.ml +++ b/src/lem_interp/run_interp.ml @@ -29,8 +29,8 @@ let rec val_to_string = function | V_list l -> let repr = String.concat "; " (List.map val_to_string l) in sprintf "list [%s]" repr - | V_vector (first_index, msb, l) -> - let order = if msb then "big-endian" else "little-endian" in + | V_vector (first_index, inc, l) -> + let order = if inc then "little-endian" else "big-endian" in let repr = String.concat "; " (List.map val_to_string l) in sprintf "vector [%s] (%s, from %s)" repr order (Big_int.string_of_big_int first_index) | V_record l -> diff --git a/src/test/power.sail b/src/test/power.sail index 571da4cd..f0b56e11 100644 --- a/src/test/power.sail +++ b/src/test/power.sail @@ -194,6 +194,6 @@ function unit main _ = { NIA := 0b0; (* should decode as Branch *) - execute(decode(0b01001000000000000000000000000000)); + execute(decode(0b00000000000000000000000000010010)); () } -- cgit v1.2.3