summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabriel Kerneis2014-04-04 11:45:43 +0100
committerGabriel Kerneis2014-04-04 11:45:43 +0100
commit7087e8973bc4ecbe6366ea23425ff46d3ebe2041 (patch)
treee21407397bc0742a43549a1f598b691ec204176b /src
parent78703f987512fbc90ccccea4b813f24fe0ccd49a (diff)
Cosmetic improvements (statistics, --quiet)
Diffstat (limited to 'src')
-rw-r--r--src/lem_interp/run_interp.ml16
-rw-r--r--src/test/run_power.ml13
2 files changed, 17 insertions, 12 deletions
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 () ;;