summaryrefslogtreecommitdiff
path: root/src/lem_interp/interp_interface.lem
diff options
context:
space:
mode:
authorPeter Sewell2014-11-23 13:15:05 +0000
committerPeter Sewell2014-11-23 13:15:05 +0000
commit344003fe4c5eb283e1ac8e09e6f9c8d478dc89dc (patch)
treef76bce538a0b6ac253af91c359b4a6a5a18a8902 /src/lem_interp/interp_interface.lem
parent3de2cba4d5706c741a5f445cb2e33608d1043248 (diff)
wib
Diffstat (limited to 'src/lem_interp/interp_interface.lem')
-rw-r--r--src/lem_interp/interp_interface.lem14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/lem_interp/interp_interface.lem b/src/lem_interp/interp_interface.lem
index 26f5f508..02e7d2e2 100644
--- a/src/lem_interp/interp_interface.lem
+++ b/src/lem_interp/interp_interface.lem
@@ -166,6 +166,8 @@ instance (Ord reg_name)
let (>=) r1 r2 = (reg_nameCompare r1 r2) <> LT
end
+(** basic values *)
+
type bit =
| Bitc_zero
| Bitc_one
@@ -184,7 +186,7 @@ type register_value = <| rv_bits: list bit_lifted; rv_dir: direction; rv_start:
type byte_lifted = Byte_lifted of list bit_lifted (* of length 8 *)
-type instruction_field_value = list bit
+type instruction_field_value = (*SHOULD BE JUST*) list bit (*register_value *)
type byte = Byte of list bit (* of length 8 *)
@@ -200,6 +202,8 @@ type address = Address of list byte (* of length 8 *)
type opcode = Opcode of list byte (* of length 4 *)
+(** typeclass instantiations *)
+
instance (Ord register_value)
let compare = defaultCompare
let (<) = defaultLess
@@ -583,6 +587,14 @@ let address_of_register_value (rv:register_value) : maybe address =
end
end
+let address_of_memory_value (mv:memory_value) : maybe address =
+ match byte_list_of_memory_value mv with
+ | Nothing -> Nothing
+ | Just bs ->
+ if List.length bs <> 8 then Nothing else
+ Just (address_of_byte_list bs)
+ end
+
val byte_of_int : int -> byte
let byte_of_int (i:int) : byte =
failwith "TODO"