summaryrefslogtreecommitdiff
path: root/cheri/cheri_prelude.sail
diff options
context:
space:
mode:
Diffstat (limited to 'cheri/cheri_prelude.sail')
-rw-r--r--cheri/cheri_prelude.sail15
1 files changed, 15 insertions, 0 deletions
diff --git a/cheri/cheri_prelude.sail b/cheri/cheri_prelude.sail
index a85bd33c..527cf2c5 100644
--- a/cheri/cheri_prelude.sail
+++ b/cheri/cheri_prelude.sail
@@ -318,8 +318,23 @@ function (bool, bit[cap_size_t * 8]) MEMr_tagged ((bit[64]) addr) =
(tag[0], mem)
}
+function (bool, bit[cap_size_t * 8]) MEMr_tagged_reserve ((bit[64]) addr) =
+{
+ let tag = (TAGr (addr)) in
+ let mem = (MEMr_reserve (addr, cap_size)) in
+ (tag[0], mem)
+}
+
function unit MEMw_tagged((bit[64]) addr, (bool) tag, (bit[cap_size_t * 8]) data) =
{
MEMw(addr, cap_size, data);
TAGw(addr, (0b0000000 : [tag]));
}
+
+function bool MEMw_tagged_conditional((bit[64]) addr, (bool) tag, (bit[cap_size_t * 8]) data) =
+{
+ success := MEMw_conditional(addr, cap_size, data);
+ if (success) then
+ TAGw(addr, (0b0000000 : [tag]));
+ success;
+}