summaryrefslogtreecommitdiff
path: root/src/lem_interp/sail_impl_base.lem
diff options
context:
space:
mode:
authorBrian Campbell2017-08-28 11:29:37 +0100
committerBrian Campbell2017-08-28 11:29:37 +0100
commitb0dbd56a224497d91bc2f1950b2f3246247b02b3 (patch)
treefdfd3009958ea22a4693b7f52fcb43af3a17a8e7 /src/lem_interp/sail_impl_base.lem
parent0025734876be60e2de6fba935cb507a6158d870a (diff)
parentbeb2279dcab654d6e7c6ff16247dd93c743a27ba (diff)
Merge branch 'experiments' of bitbucket.org:Peter_Sewell/sail into mono-experiments
# Conflicts: # src/gen_lib/sail_values.lem
Diffstat (limited to 'src/lem_interp/sail_impl_base.lem')
-rw-r--r--src/lem_interp/sail_impl_base.lem23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/lem_interp/sail_impl_base.lem b/src/lem_interp/sail_impl_base.lem
index cda6702c..ba939108 100644
--- a/src/lem_interp/sail_impl_base.lem
+++ b/src/lem_interp/sail_impl_base.lem
@@ -784,32 +784,35 @@ end
(* the address_lifted types should go away here and be replaced by address *)
type with_aux 'o = 'o * maybe ((unit -> (string * string)) * ((list (reg_name * register_value)) -> list event))
-type outcome 'a =
+type outcome_r 'a 'r =
(* Request to read memory, value is location to read, integer is size to read,
followed by registers that were used in computing that size *)
- | Read_mem of (read_kind * address_lifted * nat) * (memory_value -> with_aux (outcome 'a))
+ | Read_mem of (read_kind * address_lifted * nat) * (memory_value -> with_aux (outcome_r 'a 'r))
(* Tell the system a write is imminent, at address lifted, of size nat *)
- | Write_ea of (write_kind * address_lifted * nat) * (with_aux (outcome 'a))
+ | Write_ea of (write_kind * address_lifted * nat) * (with_aux (outcome_r 'a 'r))
(* Request the result of store-exclusive *)
- | Excl_res of (bool -> with_aux (outcome 'a))
+ | Excl_res of (bool -> with_aux (outcome_r 'a 'r))
(* Request to write memory at last signalled address. Memory value should be 8
times the size given in ea signal *)
- | Write_memv of memory_value * (bool -> with_aux (outcome 'a))
+ | Write_memv of memory_value * (bool -> with_aux (outcome_r 'a 'r))
(* Request a memory barrier *)
- | Barrier of barrier_kind * with_aux (outcome 'a)
+ | Barrier of barrier_kind * with_aux (outcome_r 'a 'r)
(* Tell the system to dynamically recalculate dependency footprint *)
- | Footprint of with_aux (outcome 'a)
+ | Footprint of with_aux (outcome_r 'a 'r)
(* Request to read register, will track dependency when mode.track_values *)
- | Read_reg of reg_name * (register_value -> with_aux (outcome 'a))
+ | Read_reg of reg_name * (register_value -> with_aux (outcome_r 'a 'r))
(* Request to write register *)
- | Write_reg of (reg_name * register_value) * with_aux (outcome 'a)
+ | Write_reg of (reg_name * register_value) * with_aux (outcome_r 'a 'r)
| Escape of maybe string
(*Result of a failed assert with possible error message to report*)
| Fail of maybe string
- | Internal of (maybe string * maybe (unit -> string)) * with_aux (outcome 'a)
+ (* Early return with value of type 'r *)
+ | Return of 'r
+ | Internal of (maybe string * maybe (unit -> string)) * with_aux (outcome_r 'a 'r)
| Done of 'a
| Error of string
+type outcome 'a = outcome_r 'a unit
type outcome_s 'a = with_aux (outcome 'a)
(* first string : output of instruction_stack_to_string
second string: output of local_variables_to_string *)