From 7087e8973bc4ecbe6366ea23425ff46d3ebe2041 Mon Sep 17 00:00:00 2001 From: Gabriel Kerneis Date: Fri, 4 Apr 2014 11:45:43 +0100 Subject: Cosmetic improvements (statistics, --quiet) --- src/lem_interp/run_interp.ml | 16 +++++++++------- src/test/run_power.ml | 13 ++++++++----- 2 files changed, 17 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/lem_interp/run_interp.ml b/src/lem_interp/run_interp.ml index 556e61c6..990930ba 100644 --- a/src/lem_interp/run_interp.ml +++ b/src/lem_interp/run_interp.ml @@ -201,6 +201,8 @@ let rec perform_action ((reg, mem) as env) = function | _ -> assert false ;; +let debug = ref true +let debugf : ('a, out_channel, unit) format -> 'a = function f -> if !debug then eprintf f else ifprintf stderr f let run ?(entry=E_aux(E_app(Id_aux((Id "main"),Unknown), [E_aux(E_lit (L_aux(L_unit,Unknown)),(Unknown,None))]),(Unknown,None))) @@ -208,20 +210,20 @@ let run ?(mem=Mem.empty) (name, test) = let rec loop env = function - | Value (v, _) -> eprintf "%s: returned %s\n" name (val_to_string v); true, env + | Value (v, _) -> debugf "%s: returned %s\n" name (val_to_string v); true, env | Action (a, s) -> - eprintf "%s: suspended on action %s\n" name (act_to_string a); - (*eprintf "%s: suspended on action %s, with stack %s\n" name (act_to_string a) (stack_to_string s);*) + debugf "%s: suspended on action %s\n" name (act_to_string a); + (*debugf "%s: suspended on action %s, with stack %s\n" name (act_to_string a) (stack_to_string s);*) let return, env' = perform_action env a in - eprintf "%s: action returned %s\n" name (val_to_string return); + debugf "%s: action returned %s\n" name (val_to_string return); loop env' (resume test s return) - | Error(l, e) -> eprintf "%s: %s: error: %s\n" name (loc_to_string l) e; false, env in - eprintf "%s: starting\n" name; + | Error(l, e) -> debugf "%s: %s: error: %s\n" name (loc_to_string l) e; false, env in + debugf "%s: starting\n" name; try Printexc.record_backtrace true; loop (reg, mem) (interp test entry) with e -> let trace = Printexc.get_backtrace () in - eprintf "%s: interpretor error %s\n%s\n" name (Printexc.to_string e) trace; + debugf "%s: interpretor error %s\n%s\n" name (Printexc.to_string e) trace; false, (reg, mem) ;; diff --git a/src/test/run_power.ml b/src/test/run_power.ml index 8ad5187e..9ac1bbaa 100644 --- a/src/test/run_power.ml +++ b/src/test/run_power.ml @@ -65,7 +65,8 @@ let init_reg () = V_vector(Big_int.big_int_of_int (64 - size), inc, v) in Id_aux(Id name, Unknown), offset (big_int_to_vec value size) in List.fold_left (fun r (k,v) -> Reg.add k v r) Reg.empty [ - init "CIA" (hex_to_big_int !startaddr) 64; + (* XXX execute main() directly until we can handle the init phase *) + init "CIA" (hex_to_big_int !mainaddr) 64; init "GPR1" Big_int.zero_big_int 64; init "GPR31" Big_int.zero_big_int 64; init "CTR" Big_int.zero_big_int 64; @@ -78,8 +79,9 @@ let args = [ ("--file", Arg.Set_string file, "filename binary code to load in memory"); ("--data", Arg.String add_section, "name,offset,size,addr add a data section"); ("--code", Arg.String add_section, "name,offset,size,addr add a code section"); - ("--startaddr", Arg.Set_string startaddr, "addr initial address"); - ("--mainaddr", Arg.Set_string mainaddr, "addr address of the main section"); + ("--startaddr", Arg.Set_string startaddr, "addr initial address (UNUSED)"); + ("--mainaddr", Arg.Set_string mainaddr, "addr address of the main section (entry point; default: 0)"); + ("--quiet", Arg.Clear Run_interp.debug, " do not display interpreter actions"); ] ;; let time_it action arg = @@ -96,7 +98,7 @@ let get_reg reg name = ;; let rec fde_loop count entry mem reg prog = - eprintf "\n**** cycle %d ****\n" count; + debugf "\n**** cycle %d ****\n" count; match Run_interp.run ~entry ~mem ~reg prog with | false, _ -> eprintf "FAILURE\n"; exit 1 | true, (reg, mem) -> @@ -126,7 +128,8 @@ let run () = (* entry point: unit -> unit cycle *) let entry = E_aux(E_app(Id_aux((Id "cycle"),Unknown), [E_aux(E_lit (L_aux(L_unit,Unknown)),(Unknown,None))]),(Unknown,None)) in - fde_loop 0 entry !mem reg (!file, Power.defs) + let t =time_it (fun () -> fde_loop 0 entry !mem reg (!file, Power.defs)) () in + eprintf "Execution time: %f seconds\n" t ;; run () ;; -- cgit v1.2.3