summaryrefslogtreecommitdiff
path: root/src/gen_lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/gen_lib')
-rw-r--r--src/gen_lib/prompt.lem34
-rw-r--r--src/gen_lib/sail_values.lem13
2 files changed, 23 insertions, 24 deletions
diff --git a/src/gen_lib/prompt.lem b/src/gen_lib/prompt.lem
index a9aa3218..e1e8658e 100644
--- a/src/gen_lib/prompt.lem
+++ b/src/gen_lib/prompt.lem
@@ -88,20 +88,18 @@ type outcome 'e 'a =
* on when mode.track_values, integer is size to read, followed by registers that were used in
* computing that size *)
(* address_lifted should go away: doesn't make sense to allow for undefined bits in addresses *)
- | Read_mem of read_kind * address_lifted * nat * maybe (list reg_name) *
- (memory_value -> outcome 'e 'a)
+ | Read_mem of read_kind * address_lifted * nat * (memory_value -> outcome 'e 'a)
(* Request to write memory, first value and dependent registers is location, second is the value
* to write *)
- | Write_mem of write_kind * address_lifted * nat * maybe (list reg_name) * memory_value *
- maybe (list reg_name) * (bool -> outcome 'e 'a)
+ | Write_mem of write_kind * address_lifted * nat * memory_value * (bool -> outcome 'e 'a)
(* Tell the system a write is imminent, at address lifted tanted by register list, of size nat *)
- | Write_ea of write_kind * address_lifted * nat * maybe (list reg_name) * outcome 'e 'a
+ | Write_ea of write_kind * address_lifted * nat * outcome 'e 'a
(* Request to write memory at last signaled address. Memory value should be 8* the size given in
* ea signal *)
- | Write_memv of memory_value * maybe (list reg_name) * (bool -> outcome 'e 'a)
+ | Write_memv of memory_value * (bool -> outcome 'e 'a)
(* Request a memory barrier *)
(* outcome 'a used to be (unit -> outcome 'a), but since the code is purely functional we don't
@@ -136,16 +134,16 @@ let return a = Done a
val (>>=) : forall 'e 'a 'b. M 'e 'a -> ('a -> M 'e 'b) -> M 'e 'b
let rec (>>=) m f = match m with
| Done a -> f a
- | Read_mem rk addr sz rs k -> Read_mem rk addr sz rs (fun v -> (k v) >>= f)
- | Write_mem wk addr sz rs v rs2 k -> Write_mem wk addr sz rs v rs2 (fun b -> (k b) >>= f)
- | Write_ea wk addr sz rs k -> Write_ea wk addr sz rs (k >>= f)
- | Write_memv v rs k -> Write_memv v rs (fun b -> (k b) >>= f)
- | Barrier bk k -> Barrier bk (k >>= f)
- | Footprint k -> Footprint (k >>= f)
- | Read_reg reg k -> Read_reg reg (fun v -> (k v) >>= f)
- | Write_reg reg v k -> Write_reg reg v (k >>= f)
- | Nondet_choice () -> Nondet_choice ()
- | Escape e -> Escape e
+ | Read_mem rk addr sz k -> Read_mem rk addr sz (fun v -> (k v) >>= f)
+ | Write_mem wk addr sz v k -> Write_mem wk addr sz v (fun b -> (k b) >>= f)
+ | Write_ea wk addr sz k -> Write_ea wk addr sz (k >>= f)
+ | Write_memv v k -> Write_memv v (fun b -> (k b) >>= f)
+ | Barrier bk k -> Barrier bk (k >>= f)
+ | Footprint k -> Footprint (k >>= f)
+ | Read_reg reg k -> Read_reg reg (fun v -> (k v) >>= f)
+ | Write_reg reg v k -> Write_reg reg v (k >>= f)
+ | Nondet_choice () -> Nondet_choice ()
+ | Escape e -> Escape e
end
val (>>) : forall 'e 'b. M 'e unit -> M 'e 'b -> M 'e 'b
@@ -181,12 +179,12 @@ let registerValueFromBitv (Vector bits start is_inc) reg =
val read_memory : forall 'e. read_kind -> integer -> integer -> M 'e (vector bit)
let read_memory rk addr sz =
let sz = natFromInteger sz in
- Read_mem rk addr sz Nothing (compose Done bitvFromBytes)
+ Read_mem rk addr sz (compose Done bitvFromBytes)
val write_memory : forall 'e. write_kind -> integer -> integer -> vector bit -> M 'e bool
let write_memory wk addr sz (Vector v _ _) =
let sz = natFromInteger sz in
- Write_mem wk addr sz Nothing (byte_chunks sz v) Nothing Done
+ Write_mem wk addr sz (byte_chunks sz v) Done
val read_reg_range : forall 'e. register -> (integer * integer) -> M 'e (vector bit)
let read_reg_range reg (i,j) =
diff --git a/src/gen_lib/sail_values.lem b/src/gen_lib/sail_values.lem
index 6de5b853..46c3a10c 100644
--- a/src/gen_lib/sail_values.lem
+++ b/src/gen_lib/sail_values.lem
@@ -454,20 +454,21 @@ let lteq_range_vec = compare_op_range_vec (<=) true
let gteq_range_vec = compare_op_range_vec (>=) true
let eq (l,r) = bool_to_bit (l = r)
+let eq_range (l,r) = bool_to_bit (l = r)
+let eq_vec (l,r) = bool_to_bit (l = r)
+let eq_bit (l,r) = bool_to_bit (l = r)
let eq_vec_range (l,r) = eq (to_num false l,r)
let eq_range_vec (l,r) = eq (l, to_num false r)
let eq_vec_vec (l,r) = eq (to_num true l, to_num true r)
-(*
-let neq (l,r) = bitwise_not_bit (eq (l,r)) *)
+
+let neq (l,r) = bitwise_not_bit (eq (l,r))
+let neq_bit (l,r) = bitwise_not_bit (eq_bit (l,r))
+let neq_range (l,r) = bitwise_not_bit (eq_range (l,r))
let neq_vec (l,r) = bitwise_not_bit (eq_vec_vec (l,r))
let neq_vec_range (l,r) = bitwise_not_bit (eq_vec_range (l,r))
let neq_range_vec (l,r) = bitwise_not_bit (eq_range_vec (l,r))
-(* temporarily *)
-val neq : forall 'a 'b. 'a * 'b -> bit
-let neq _ = O
-
val make_indexed_vector : forall 'a. list (integer * 'a) -> 'a -> integer -> integer -> vector 'a
let make_indexed_vector entries default start length =
let length = natFromInteger length in