summaryrefslogtreecommitdiff
path: root/src/rewrites.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2019-02-27 19:24:05 +0000
committerAlasdair Armstrong2019-02-27 19:44:50 +0000
commitb118c78ba85320ef2d6632bc2a6ee4f0907e5d23 (patch)
tree73f0b8cbd226b07a9ed1071772e803eed7d899a1 /src/rewrites.ml
parent87140e97e3c1b2b1713a4458f8f5e622625c0683 (diff)
Tweaks to C compilation to make it more usable for embedding into other programs
Can now set a prefix for generated C functions with -c_prefix so -c_prefix sail_ would give sail_execute_CGetPerm over zexecute_CGetPerm. We still have to use our standard name-mangling scheme to avoid possible collisions within the name. Can build C that doesn't expect the standard runtime, which leaves operations like read_memory, write_memory etc to be stubbed in by another C program including the generated Sail. Things like letbindings are still an issue because we rely on a very small runtime to initialize global letbindings and similar. -c_separate_execute splits the execute function apart in the generated C
Diffstat (limited to 'src/rewrites.ml')
-rw-r--r--src/rewrites.ml6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/rewrites.ml b/src/rewrites.ml
index f14d423c..d8cb5a5d 100644
--- a/src/rewrites.ml
+++ b/src/rewrites.ml
@@ -5170,6 +5170,11 @@ let rewrite_defs_ocaml = [
(* ("separate_numbs", rewrite_defs_separate_numbs) *)
]
+let opt_separate_execute = ref false
+
+let if_separate f env defs =
+ if !opt_separate_execute then f env defs else defs
+
let rewrite_defs_c = [
("no_effect_check", (fun _ defs -> opt_no_effects := true; defs));
@@ -5196,6 +5201,7 @@ let rewrite_defs_c = [
("simple_assignments", rewrite_simple_assignments);
("remove_vector_concat", rewrite_defs_remove_vector_concat);
("remove_bitvector_pats", rewrite_defs_remove_bitvector_pats);
+ ("split_execute", if_separate (rewrite_split_fun_constr_pats "execute"));
("exp_lift_assign", rewrite_defs_exp_lift_assign);
("merge_function_clauses", merge_funcls);
("recheck_defs", fun _ -> Optimize.recheck)