diff options
| author | Christopher Pulte | 2016-09-30 13:54:47 +0100 |
|---|---|---|
| committer | Christopher Pulte | 2016-09-30 13:54:47 +0100 |
| commit | 1d105202240057e8a1c5c835a2655cf8112167fe (patch) | |
| tree | 98a99c6cfac6b975af2b16299be2223a819fa527 /src | |
| parent | 77584a53c092319ac15a06c6036cfd5c770c5ab6 (diff) | |
add Robert's DIA typeclass instances
Diffstat (limited to 'src')
| -rw-r--r-- | src/lem_interp/interp_interface.lem | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/lem_interp/interp_interface.lem b/src/lem_interp/interp_interface.lem index 2e649ec1..18ec74a2 100644 --- a/src/lem_interp/interp_interface.lem +++ b/src/lem_interp/interp_interface.lem @@ -1449,7 +1449,34 @@ type dia = | DIA_concrete_address of address | DIA_register of reg_name +let diaCompare d1 d2 = match (d1, d2) with + | (DIA_none, DIA_none) -> EQ + | (DIA_concrete_address a1, DIA_concrete_address a2) -> compare a1 a2 + | (DIA_register r1, DIA_register r2) -> compare r1 r2 + | (DIA_none, _) -> LT + | (DIA_concrete_address _, _) -> LT + | (DIA_register _, _) -> LT +end + +instance (Ord dia) + let compare = diaCompare + let (<) n1 n2 = (diaCompare n1 n2) = LT + let (<=) n1 n2 = (diaCompare n1 n2) <> GT + let (>) n1 n2 = (diaCompare n1 n2) = GT + let (>=) n1 n2 = (diaCompare n1 n2) <> LT +end + +let stringFromDia = function + | DIA_none -> "DIA_none" + | DIA_concrete_address a -> "DIA_concrete_address " ^ show a + | DIA_register r -> "DIA_delayed_register " ^ show r +end + +instance (Show dia) + let show = stringFromDia +end + val instruction_analysis : context -> end_flag -> string -> (string -> (nat * nat * direction * (nat * nat))) -> maybe (list (reg_name * register_value)) -> instruction -> (list reg_name * list reg_name * list reg_name * list nia * dia * instruction_kind) |
