summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/c/pointer_assign.expect3
-rw-r--r--test/c/pointer_assign.sail27
2 files changed, 30 insertions, 0 deletions
diff --git a/test/c/pointer_assign.expect b/test/c/pointer_assign.expect
new file mode 100644
index 00000000..6a0eaa4d
--- /dev/null
+++ b/test/c/pointer_assign.expect
@@ -0,0 +1,3 @@
+A = 0x00000000
+A = 0x00000002
+A = 0x00000004
diff --git a/test/c/pointer_assign.sail b/test/c/pointer_assign.sail
new file mode 100644
index 00000000..e2e9e9ab
--- /dev/null
+++ b/test/c/pointer_assign.sail
@@ -0,0 +1,27 @@
+default Order dec
+
+$include <vector_dec.sail>
+
+register A : bits(32)
+register B : bits(32)
+
+let AB = [ref B, ref A]
+
+let STATUS_1 = 0x0000_0002
+let STATUS_2 = 0x0000_0004
+
+val read_register = "reg_deref" : forall ('a : Type). register('a) -> 'a effect {rreg}
+
+val "or_bits" : forall 'n, 'n >= 0. (bits('n), bits('n)) -> bits('n)
+
+overload operator | = {or_bits}
+
+function main() : unit -> unit = {
+ let C = AB[0];
+ let c = read_register(C);
+ print_bits("A = ", A);
+ (*C) = c | STATUS_1;
+ print_bits("A = ", A);
+ (*(ref A)) = c | STATUS_2;
+ print_bits("A = ", A);
+} \ No newline at end of file