summaryrefslogtreecommitdiff
path: root/src/smtlib.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2019-05-17 16:34:00 +0100
committerAlasdair Armstrong2019-05-17 16:34:00 +0100
commitf0b547154b3d2ce9e4bac74b0c56f20d6db76cd2 (patch)
treeb6d1053bea33a115879fe24b4c5e6add0bae566e /src/smtlib.ml
parent4a95bb1c25fe84be62f6eada024f964472736e69 (diff)
SMT: Finish adding all memory builtins from lib/regfp.sail
Diffstat (limited to 'src/smtlib.ml')
-rw-r--r--src/smtlib.ml20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/smtlib.ml b/src/smtlib.ml
index c6b86fcb..5a2fcd44 100644
--- a/src/smtlib.ml
+++ b/src/smtlib.ml
@@ -230,7 +230,10 @@ type smt_def =
| Declare_const of string * smt_typ
| Define_const of string * smt_typ * smt_exp
| Write_mem of string * smt_exp * smt_exp * smt_typ * smt_exp * smt_typ
+ | Write_mem_ea of string * smt_exp * smt_exp * smt_typ * smt_exp * smt_typ
| Read_mem of string * smt_typ * smt_exp * smt_exp * smt_typ
+ | Barrier of string * smt_exp
+ | Excl_res of string
| Declare_datatypes of string * (string * (string * smt_typ) list) list
| Declare_tuple of int
| Assert of smt_exp
@@ -251,8 +254,14 @@ let suffix_variables_def sfx = function
Define_const (name ^ sfx, ty, suffix_variables_exp sfx exp)
| Write_mem (name, wk, addr, addr_ty, data, data_ty) ->
Write_mem (name ^ sfx, suffix_variables_exp sfx wk, suffix_variables_exp sfx addr, addr_ty, suffix_variables_exp sfx data, data_ty)
+ | Write_mem_ea (name, wk, addr, addr_ty, data_size, data_size_ty) ->
+ Write_mem (name ^ sfx, suffix_variables_exp sfx wk, suffix_variables_exp sfx addr, addr_ty, suffix_variables_exp sfx data_size, data_size_ty)
| Read_mem (name, ty, rk, addr, addr_ty) ->
Read_mem (name ^ sfx, ty, suffix_variables_exp sfx rk, suffix_variables_exp sfx addr, addr_ty)
+ | Barrier (name, bk) ->
+ Barrier (name ^ sfx, bk)
+ | Excl_res name ->
+ Excl_res (name ^ sfx)
| Declare_datatypes (name, ctors) ->
Declare_datatypes (name, ctors)
| Declare_tuple n ->
@@ -351,11 +360,22 @@ let pp_smt_def =
^^ pp_sfun "define-const" [string (name ^ "_addr"); pp_smt_typ addr_ty; pp_smt_exp addr] ^^ hardline
^^ pp_sfun "declare-const" [string (name ^ "_ret"); pp_smt_typ Bool]
+ | Write_mem_ea (name, wk, addr, addr_ty, data_size, data_size_ty) ->
+ pp_sfun "define-const" [string (name ^ "_kind"); string "Zwrite_kind"; pp_smt_exp wk] ^^ hardline
+ ^^ pp_sfun "define-const" [string (name ^ "_size"); pp_smt_typ data_size_ty; pp_smt_exp data_size] ^^ hardline
+ ^^ pp_sfun "define-const" [string (name ^ "_addr"); pp_smt_typ addr_ty; pp_smt_exp addr]
+
| Read_mem (name, ty, rk, addr, addr_ty) ->
pp_sfun "define-const" [string (name ^ "_kind"); string "Zread_kind"; pp_smt_exp rk] ^^ hardline
^^ pp_sfun "define-const" [string (name ^ "_addr"); pp_smt_typ addr_ty; pp_smt_exp addr] ^^ hardline
^^ pp_sfun "declare-const" [string (name ^ "_ret"); pp_smt_typ ty]
+ | Barrier (name, bk) ->
+ pp_sfun "define-const" [string (name ^ "_kind"); string "Zbarrier_kind"; pp_smt_exp bk]
+
+ | Excl_res name ->
+ pp_sfun "declare-const" [string (name ^ "_res"); pp_smt_typ Bool]
+
| Declare_datatypes (name, ctors) ->
let pp_ctor (ctor_name, fields) =
match fields with