summaryrefslogtreecommitdiff
path: root/snapshots/coq
diff options
context:
space:
mode:
Diffstat (limited to 'snapshots/coq')
-rw-r--r--snapshots/coq/README2
-rw-r--r--snapshots/coq/README.md7
-rwxr-xr-xsnapshots/coq/build12
-rw-r--r--snapshots/coq/cheri-mips/_CoqProject (renamed from snapshots/coq/mips/_CoqProject)0
-rw-r--r--snapshots/coq/cheri-mips/cheri.v12167
-rw-r--r--snapshots/coq/cheri-mips/cheri_types.v2229
-rw-r--r--snapshots/coq/cheri-mips/mips.v (renamed from snapshots/coq/mips/mips.v)4432
-rw-r--r--snapshots/coq/cheri-mips/mips_extras.v (renamed from snapshots/coq/mips/mips_extras.v)33
-rw-r--r--snapshots/coq/cheri-mips/mips_types.v1549
-rwxr-xr-xsnapshots/coq/clean5
-rw-r--r--snapshots/coq/lib/coq/Makefile2
-rw-r--r--snapshots/coq/lib/coq/Sail2_impl_base.v49
-rw-r--r--snapshots/coq/lib/coq/Sail2_instr_kinds.v74
-rw-r--r--snapshots/coq/lib/coq/Sail2_operators.v5
-rw-r--r--snapshots/coq/lib/coq/Sail2_operators_bitlists.v5
-rw-r--r--snapshots/coq/lib/coq/Sail2_operators_mwords.v127
-rw-r--r--snapshots/coq/lib/coq/Sail2_prompt.v56
-rw-r--r--snapshots/coq/lib/coq/Sail2_prompt_monad.v5
-rw-r--r--snapshots/coq/lib/coq/Sail2_real.v24
-rw-r--r--snapshots/coq/lib/coq/Sail2_state.v5
-rw-r--r--snapshots/coq/lib/coq/Sail2_state_monad.v5
-rw-r--r--snapshots/coq/lib/coq/Sail2_string.v190
-rw-r--r--snapshots/coq/lib/coq/Sail2_values.v356
-rw-r--r--snapshots/coq/mips/mips_types.v1441
-rw-r--r--snapshots/coq/riscv/riscv.v37814
-rw-r--r--snapshots/coq/riscv/riscv_extras.v145
-rw-r--r--snapshots/coq/riscv/riscv_types.v1428
27 files changed, 58791 insertions, 3376 deletions
diff --git a/snapshots/coq/README b/snapshots/coq/README
deleted file mode 100644
index bd7f12d0..00000000
--- a/snapshots/coq/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Check out a copy of https://github.com/mit-plv/bbv in the parent directory and
-build it. Then run ./build.
diff --git a/snapshots/coq/README.md b/snapshots/coq/README.md
new file mode 100644
index 00000000..8cc69d7f
--- /dev/null
+++ b/snapshots/coq/README.md
@@ -0,0 +1,7 @@
+Check out a copy of <https://github.com/mit-plv/bbv> in the parent directory and
+build it. Then run `./build`.
+
+The model was built with
+* `sail` commit `1c80d84c`
+* `sail-cheri-mips` commit `17deb9f2`
+and checked against bbv commit `8f5aece` and coq 8.8.2.
diff --git a/snapshots/coq/build b/snapshots/coq/build
index e672912e..a4afcd95 100755
--- a/snapshots/coq/build
+++ b/snapshots/coq/build
@@ -1,7 +1,7 @@
#!/bin/bash
-if [ ! -d mips ]; then
- echo Run clean from the coq directory
+if [ ! -d cheri-mips ]; then
+ echo Run build from the coq directory
exit 1
fi
@@ -13,7 +13,13 @@ fi
set -ex
cd lib/coq
make
-cd ../../mips
+cd ../../cheri-mips
coqc -R ../../bbv/theories bbv -R ../lib/coq Sail mips_extras.v
coqc -R ../../bbv/theories bbv -R ../lib/coq Sail mips_types.v
coqc -R ../../bbv/theories bbv -R ../lib/coq Sail mips.v
+coqc -R ../../bbv/theories bbv -R ../lib/coq Sail cheri_types.v
+coqc -R ../../bbv/theories bbv -R ../lib/coq Sail cheri.v
+cd ../riscv
+coqc -R ../../bbv/theories bbv -R ../lib/coq Sail riscv_extras.v
+coqc -R ../../bbv/theories bbv -R ../lib/coq Sail riscv_types.v
+coqc -R ../../bbv/theories bbv -R ../lib/coq Sail riscv.v
diff --git a/snapshots/coq/mips/_CoqProject b/snapshots/coq/cheri-mips/_CoqProject
index ad38d28d..ad38d28d 100644
--- a/snapshots/coq/mips/_CoqProject
+++ b/snapshots/coq/cheri-mips/_CoqProject
diff --git a/snapshots/coq/cheri-mips/cheri.v b/snapshots/coq/cheri-mips/cheri.v
new file mode 100644
index 00000000..3a5b0ce6
--- /dev/null
+++ b/snapshots/coq/cheri-mips/cheri.v
@@ -0,0 +1,12167 @@
+(*Generated by Sail from cheri.*)
+Require Import Sail2_instr_kinds.
+Require Import Sail2_values.
+Require Import Sail2_string.
+Require Import Sail2_real.
+Require Import Sail2_operators_mwords.
+Require Import Sail2_prompt_monad.
+Require Import Sail2_prompt.
+Require Import Sail2_state.
+Require Import cheri_types.
+Require Import mips_extras.
+Import ListNotations.
+Open Scope string.
+Open Scope bool.
+Section Content.
+
+Definition cap_size := 32.
+Hint Unfold cap_size : sail.
+Definition trace : bool := false.
+Hint Unfold trace : sail.
+Definition eq_unit (g__19 : unit) (g__20 : unit) : bool := true.
+
+Definition neq_int (x : Z) (y : Z) : bool := negb (Z.eqb x y).
+
+Definition neq_bool (x : bool) (y : bool) : bool := negb (Bool.eqb x y).
+
+Definition undefined_option {a : Type} (typ_a : a)
+: M (option a) :=
+
+ (undefined_unit tt) >>= fun u_0 : unit =>
+ let u_1 : a := typ_a in
+ (internal_pick [Some (u_1);None])
+ : M (option a).
+
+Definition is_none {a : Type} (opt : option a)
+: bool :=
+
+ match opt with | Some (_) => false | None => true end.
+
+Definition is_some {a : Type} (opt : option a)
+: bool :=
+
+ match opt with | Some (_) => true | None => false end.
+
+Definition sail_mask {v0 : Z} (len : Z) (v : mword v0) `{ArithFact (len >= 0 /\ v0 >= 0)}
+: mword len :=
+
+ if sumbool_of_bool ((Z.leb len (length_mword v))) then vector_truncate v len
+ else zero_extend v len.
+
+Definition neq_vec {n : Z} (x : mword n) (y : mword n) : bool := negb (eq_vec x y).
+
+
+
+Definition cast_unit_vec (b : bitU)
+: mword 1 :=
+
+ match b with | B0 => (vec_of_bits [B0] : mword 1) | _ => (vec_of_bits [B1] : mword 1) end.
+
+Definition __MIPS_write (addr : mword 64) (width : Z) (data : mword (8 * width))
+: M (unit) :=
+
+ (write_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr data) >>
+ returnm (tt
+ : unit).
+
+Definition __MIPS_read (addr : mword 64) (width : Z) `{ArithFact (width >= 0)}
+: M (mword (8 * width)) :=
+
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr)
+ : M (mword (8 * width)).
+
+Definition zopz0zQzQ {n0 : Z} (bs : mword n0) (n : Z) `{ArithFact (n >= 0)}
+: mword (n0 * n) :=
+
+ replicate_bits bs n.
+
+Definition undefined_exception '(tt : unit)
+: M (exception) :=
+
+ (undefined_string tt) >>= fun u_0 : string =>
+ (undefined_unit tt) >>= fun u_1 : unit =>
+ (internal_pick
+ [ISAException
+ (u_1);Error_not_implemented
+ (u_0);Error_misaligned_access
+ (u_1);Error_EBREAK
+ (u_1);Error_internal_error
+ (u_1)])
+ : M (exception).
+
+Definition mips_sign_extend {n : Z} (m__tv : Z) (v : mword n) `{ArithFact (m__tv >= n)}
+: mword m__tv :=
+
+ sign_extend v m__tv.
+
+Definition mips_zero_extend {n : Z} (m__tv : Z) (v : mword n) `{ArithFact (m__tv >= n)}
+: mword m__tv :=
+
+ zero_extend v m__tv.
+
+Axiom sign_extend : forall {n : Z} {m : Z} (_ : mword n) `{ArithFact (m >= n)}, mword m.
+
+Axiom zero_extend : forall {n : Z} {m : Z} (_ : mword n) `{ArithFact (m >= n)}, mword m.
+
+Definition zeros_implicit (n__tv : Z) '(tt : unit) `{ArithFact (n__tv >= 0)}
+: mword n__tv :=
+
+ zeros n__tv.
+Arguments zeros_implicit _ _ {_}.
+
+Definition ones_n (n : Z) `{ArithFact (n >= 0)}
+: mword n :=
+
+ autocast (replicate_bits (vec_of_bits [B1] : mword 1) n).
+
+Definition ones_implicit (n__tv : Z) '(tt : unit) `{ArithFact (n__tv >= 0)}
+: mword n__tv :=
+
+ ones_n n__tv.
+Arguments ones_implicit _ _ {_}.
+
+Definition zopz0zI_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= (0 + 1))}
+: bool :=
+
+ Z.ltb (projT1 (sint x)) (projT1 (sint y)).
+
+Definition zopz0zKzJ_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= (0 + 1))}
+: bool :=
+
+ Z.geb (projT1 (sint x)) (projT1 (sint y)).
+
+Definition zopz0zI_u {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= 0)}
+: bool :=
+
+ Z.ltb (projT1 (uint x)) (projT1 (uint y)).
+
+Definition zopz0zKzJ_u {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= 0)}
+: bool :=
+
+ Z.geb (projT1 (uint x)) (projT1 (uint y)).
+
+Definition bool_to_bits (x : bool)
+: mword 1 :=
+
+ if (x) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1).
+
+Definition bool_to_bit (x : bool) : bitU := if (x) then B1 else B0.
+
+Definition bit_to_bool (b : bitU) : bool := match b with | B1 => true | _ => false end.
+
+Definition bits_to_bool (x : mword 1) : bool := bit_to_bool (access_vec_dec x 0).
+
+Definition to_bits (l : Z) (n : Z) `{ArithFact (l >= 0)} : mword l := get_slice_int l n 0.
+
+Definition mask {m : Z} (n__tv : Z) (bs : mword m) `{ArithFact (m >= n__tv /\ n__tv >= (0 + 1))}
+: mword n__tv :=
+
+ autocast (subrange_vec_dec bs (Z.sub n__tv 1) 0).
+
+Definition undefined_CauseReg '(tt : unit)
+: M (CauseReg) :=
+
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
+ returnm (({| CauseReg_CauseReg_chunk_0 := w__0 |})
+ : CauseReg).
+
+Definition Mk_CauseReg (v : mword 32)
+: CauseReg :=
+
+ {| CauseReg_CauseReg_chunk_0 := (subrange_vec_dec v 31 0) |}.
+
+Definition _get_CauseReg_bits (v : CauseReg)
+: mword 32 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 0.
+
+Definition _set_CauseReg_bits (r_ref : register_ref regstate register_value CauseReg) (v : mword 32)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 31 0 (subrange_vec_dec v 31 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_bits (v : CauseReg) (x : mword 32)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 0 (subrange_vec_dec x 31 0)) ]}.
+
+Definition _get_CauseReg_BD (v : CauseReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 31.
+
+Definition _set_CauseReg_BD (r_ref : register_ref regstate register_value CauseReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 31 31 (subrange_vec_dec v 0 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_BD (v : CauseReg) (x : mword 1)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 31 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_CauseReg_CE (v : CauseReg)
+: mword 2 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 29 28.
+
+Definition _set_CauseReg_CE (r_ref : register_ref regstate register_value CauseReg) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 29 28 (subrange_vec_dec v 1 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_CE (v : CauseReg) (x : mword 2)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 29 28 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_CauseReg_IV (v : CauseReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 23 23.
+
+Definition _set_CauseReg_IV (r_ref : register_ref regstate register_value CauseReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 23 23 (subrange_vec_dec v 0 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_IV (v : CauseReg) (x : mword 1)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 23 23 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_CauseReg_WP (v : CauseReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 22 22.
+
+Definition _set_CauseReg_WP (r_ref : register_ref regstate register_value CauseReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 22 22 (subrange_vec_dec v 0 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_WP (v : CauseReg) (x : mword 1)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 22 22 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_CauseReg_IP (v : CauseReg)
+: mword 8 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 15 8.
+
+Definition _set_CauseReg_IP (r_ref : register_ref regstate register_value CauseReg) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 15 8 (subrange_vec_dec v 7 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_IP (v : CauseReg) (x : mword 8)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 15 8 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_CauseReg_ExcCode (v : CauseReg)
+: mword 5 :=
+
+ subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 6 2.
+
+Definition _set_CauseReg_ExcCode
+(r_ref : register_ref regstate register_value CauseReg) (v : mword 5)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CauseReg_CauseReg_chunk_0) 6 2 (subrange_vec_dec v 4 0)) ]}
+ : CauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CauseReg_ExcCode (v : CauseReg) (x : mword 5)
+: CauseReg :=
+
+ {[ v with
+ CauseReg_CauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 6 2 (subrange_vec_dec x 4 0)) ]}.
+
+Definition undefined_TLBEntryLoReg '(tt : unit)
+: M (TLBEntryLoReg) :=
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
+ returnm (({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := w__0 |})
+ : TLBEntryLoReg).
+
+Definition Mk_TLBEntryLoReg (v : mword 64)
+: TLBEntryLoReg :=
+
+ {| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_TLBEntryLoReg_bits (v : TLBEntryLoReg)
+: mword 64 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 0.
+
+Definition _set_TLBEntryLoReg_bits
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 0
+ (subrange_vec_dec v 63 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_bits (v : TLBEntryLoReg) (x : mword 64)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 0
+ (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_TLBEntryLoReg_CapS (v : TLBEntryLoReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 63.
+
+Definition _set_TLBEntryLoReg_CapS
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 63
+ (subrange_vec_dec v 0 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_CapS (v : TLBEntryLoReg) (x : mword 1)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 63
+ (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntryLoReg_CapL (v : TLBEntryLoReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 62 62.
+
+Definition _set_TLBEntryLoReg_CapL
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 62 62
+ (subrange_vec_dec v 0 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_CapL (v : TLBEntryLoReg) (x : mword 1)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 62 62
+ (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntryLoReg_PFN (v : TLBEntryLoReg)
+: mword 24 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 29 6.
+
+Definition _set_TLBEntryLoReg_PFN
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 24)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 29 6
+ (subrange_vec_dec v 23 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_PFN (v : TLBEntryLoReg) (x : mword 24)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 29 6
+ (subrange_vec_dec x 23 0)) ]}.
+
+Definition _get_TLBEntryLoReg_C (v : TLBEntryLoReg)
+: mword 3 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 5 3.
+
+Definition _set_TLBEntryLoReg_C
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 3)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 5 3
+ (subrange_vec_dec v 2 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_C (v : TLBEntryLoReg) (x : mword 3)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 5 3 (subrange_vec_dec x 2 0)) ]}.
+
+Definition _get_TLBEntryLoReg_D (v : TLBEntryLoReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 2 2.
+
+Definition _set_TLBEntryLoReg_D
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 2 2
+ (subrange_vec_dec v 0 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_D (v : TLBEntryLoReg) (x : mword 1)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntryLoReg_V (v : TLBEntryLoReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 1 1.
+
+Definition _set_TLBEntryLoReg_V
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 1 1
+ (subrange_vec_dec v 0 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_V (v : TLBEntryLoReg) (x : mword 1)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntryLoReg_G (v : TLBEntryLoReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 0 0.
+
+Definition _set_TLBEntryLoReg_G
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 0 0
+ (subrange_vec_dec v 0 0)) ]}
+ : TLBEntryLoReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryLoReg_G (v : TLBEntryLoReg) (x : mword 1)
+: TLBEntryLoReg :=
+
+ {[ v with
+ TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition undefined_TLBEntryHiReg '(tt : unit)
+: M (TLBEntryHiReg) :=
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
+ returnm (({| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := w__0 |})
+ : TLBEntryHiReg).
+
+Definition Mk_TLBEntryHiReg (v : mword 64)
+: TLBEntryHiReg :=
+
+ {| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_TLBEntryHiReg_bits (v : TLBEntryHiReg)
+: mword 64 :=
+
+ subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 0.
+
+Definition _set_TLBEntryHiReg_bits
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 0
+ (subrange_vec_dec v 63 0)) ]}
+ : TLBEntryHiReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryHiReg_bits (v : TLBEntryHiReg) (x : mword 64)
+: TLBEntryHiReg :=
+
+ {[ v with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 0
+ (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_TLBEntryHiReg_R (v : TLBEntryHiReg)
+: mword 2 :=
+
+ subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 62.
+
+Definition _set_TLBEntryHiReg_R
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 62
+ (subrange_vec_dec v 1 0)) ]}
+ : TLBEntryHiReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryHiReg_R (v : TLBEntryHiReg) (x : mword 2)
+: TLBEntryHiReg :=
+
+ {[ v with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 62
+ (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_TLBEntryHiReg_VPN2 (v : TLBEntryHiReg)
+: mword 27 :=
+
+ subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 39 13.
+
+Definition _set_TLBEntryHiReg_VPN2
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 27)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 39 13
+ (subrange_vec_dec v 26 0)) ]}
+ : TLBEntryHiReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryHiReg_VPN2 (v : TLBEntryHiReg) (x : mword 27)
+: TLBEntryHiReg :=
+
+ {[ v with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 39 13
+ (subrange_vec_dec x 26 0)) ]}.
+
+Definition _get_TLBEntryHiReg_ASID (v : TLBEntryHiReg)
+: mword 8 :=
+
+ subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 7 0.
+
+Definition _set_TLBEntryHiReg_ASID
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 7 0
+ (subrange_vec_dec v 7 0)) ]}
+ : TLBEntryHiReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntryHiReg_ASID (v : TLBEntryHiReg) (x : mword 8)
+: TLBEntryHiReg :=
+
+ {[ v with
+ TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 7 0 (subrange_vec_dec x 7 0)) ]}.
+
+Definition undefined_ContextReg '(tt : unit)
+: M (ContextReg) :=
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
+ returnm (({| ContextReg_ContextReg_chunk_0 := w__0 |})
+ : ContextReg).
+
+Definition Mk_ContextReg (v : mword 64)
+: ContextReg :=
+
+ {| ContextReg_ContextReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_ContextReg_bits (v : ContextReg)
+: mword 64 :=
+
+ subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 0.
+
+Definition _set_ContextReg_bits
+(r_ref : register_ref regstate register_value ContextReg) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ ContextReg_ContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(ContextReg_ContextReg_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : ContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_ContextReg_bits (v : ContextReg) (x : mword 64)
+: ContextReg :=
+
+ {[ v with
+ ContextReg_ContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_ContextReg_PTEBase (v : ContextReg)
+: mword 41 :=
+
+ subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 23.
+
+Definition _set_ContextReg_PTEBase
+(r_ref : register_ref regstate register_value ContextReg) (v : mword 41)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ ContextReg_ContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(ContextReg_ContextReg_chunk_0) 63 23 (subrange_vec_dec v 40 0)) ]}
+ : ContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_ContextReg_PTEBase (v : ContextReg) (x : mword 41)
+: ContextReg :=
+
+ {[ v with
+ ContextReg_ContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 23 (subrange_vec_dec x 40 0)) ]}.
+
+Definition _get_ContextReg_BadVPN2 (v : ContextReg)
+: mword 19 :=
+
+ subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 22 4.
+
+Definition _set_ContextReg_BadVPN2
+(r_ref : register_ref regstate register_value ContextReg) (v : mword 19)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ ContextReg_ContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(ContextReg_ContextReg_chunk_0) 22 4 (subrange_vec_dec v 18 0)) ]}
+ : ContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_ContextReg_BadVPN2 (v : ContextReg) (x : mword 19)
+: ContextReg :=
+
+ {[ v with
+ ContextReg_ContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 22 4 (subrange_vec_dec x 18 0)) ]}.
+
+Definition undefined_XContextReg '(tt : unit)
+: M (XContextReg) :=
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
+ returnm (({| XContextReg_XContextReg_chunk_0 := w__0 |})
+ : XContextReg).
+
+Definition Mk_XContextReg (v : mword 64)
+: XContextReg :=
+
+ {| XContextReg_XContextReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_XContextReg_bits (v : XContextReg)
+: mword 64 :=
+
+ subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 0.
+
+Definition _set_XContextReg_bits
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(XContextReg_XContextReg_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : XContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_XContextReg_bits (v : XContextReg) (x : mword 64)
+: XContextReg :=
+
+ {[ v with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_XContextReg_XPTEBase (v : XContextReg)
+: mword 31 :=
+
+ subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 33.
+
+Definition _set_XContextReg_XPTEBase
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 31)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(XContextReg_XContextReg_chunk_0) 63 33
+ (subrange_vec_dec v 30 0)) ]}
+ : XContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_XContextReg_XPTEBase (v : XContextReg) (x : mword 31)
+: XContextReg :=
+
+ {[ v with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 33 (subrange_vec_dec x 30 0)) ]}.
+
+Definition _get_XContextReg_XR (v : XContextReg)
+: mword 2 :=
+
+ subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 32 31.
+
+Definition _set_XContextReg_XR
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(XContextReg_XContextReg_chunk_0) 32 31 (subrange_vec_dec v 1 0)) ]}
+ : XContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_XContextReg_XR (v : XContextReg) (x : mword 2)
+: XContextReg :=
+
+ {[ v with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 32 31 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_XContextReg_XBadVPN2 (v : XContextReg)
+: mword 27 :=
+
+ subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 30 4.
+
+Definition _set_XContextReg_XBadVPN2
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 27)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec r.(XContextReg_XContextReg_chunk_0) 30 4 (subrange_vec_dec v 26 0)) ]}
+ : XContextReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_XContextReg_XBadVPN2 (v : XContextReg) (x : mword 27)
+: XContextReg :=
+
+ {[ v with
+ XContextReg_XContextReg_chunk_0 :=
+ (update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 30 4 (subrange_vec_dec x 26 0)) ]}.
+
+Definition TLBNumEntries := 64.
+Hint Unfold TLBNumEntries : sail.
+Definition TLBIndexMax : TLBIndexT := (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword 6).
+Hint Unfold TLBIndexMax : sail.
+Definition MAX (n : Z) `{ArithFact (n >= 0)}
+: {_retval : Z & ArithFact (_retval = (2 ^ n - 1))} :=
+
+ build_ex(Z.sub (projT1 (pow2 n)) 1).
+
+Definition MAX_U64 := projT1 (MAX 64).
+Hint Unfold MAX_U64 : sail.
+Definition MAX_VA := projT1 (MAX 40).
+Hint Unfold MAX_VA : sail.
+Definition MAX_PA := projT1 (MAX 36).
+Hint Unfold MAX_PA : sail.
+Definition undefined_TLBEntry '(tt : unit)
+: M (TLBEntry) :=
+
+ (undefined_bitvector 53) >>= fun w__0 : mword 53 =>
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 =>
+ returnm (({| TLBEntry_TLBEntry_chunk_1 := w__0;
+ TLBEntry_TLBEntry_chunk_0 := w__1 |})
+ : TLBEntry).
+
+Definition Mk_TLBEntry (v : mword 117)
+: TLBEntry :=
+
+ {| TLBEntry_TLBEntry_chunk_1 := (subrange_vec_dec v 116 64);
+ TLBEntry_TLBEntry_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_TLBEntry_bits (v : TLBEntry)
+: mword 117 :=
+
+ concat_vec (subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 0)
+ (subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 0).
+
+Definition _set_TLBEntry_bits
+(r_ref : register_ref regstate register_value TLBEntry) (v : mword 117)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_1) 52 0 (subrange_vec_dec v 116 64)) ]}
+ : TLBEntry in
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_bits (v : TLBEntry) (x : mword 117)
+: TLBEntry :=
+
+ let v :=
+ {[ v with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 0 (subrange_vec_dec x 116 64)) ]} in
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_TLBEntry_pagemask (v : TLBEntry)
+: mword 16 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 37.
+
+Definition _set_TLBEntry_pagemask
+(r_ref : register_ref regstate register_value TLBEntry) (v : mword 16)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_1) 52 37 (subrange_vec_dec v 15 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_pagemask (v : TLBEntry) (x : mword 16)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 37 (subrange_vec_dec x 15 0)) ]}.
+
+Definition _get_TLBEntry_r (v : TLBEntry)
+: mword 2 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 36 35.
+
+Definition _set_TLBEntry_r (r_ref : register_ref regstate register_value TLBEntry) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_1) 36 35 (subrange_vec_dec v 1 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_r (v : TLBEntry) (x : mword 2)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 36 35 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_TLBEntry_vpn2 (v : TLBEntry)
+: mword 27 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 34 8.
+
+Definition _set_TLBEntry_vpn2 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 27)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_1) 34 8 (subrange_vec_dec v 26 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_vpn2 (v : TLBEntry) (x : mword 27)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 34 8 (subrange_vec_dec x 26 0)) ]}.
+
+Definition _get_TLBEntry_asid (v : TLBEntry)
+: mword 8 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 7 0.
+
+Definition _set_TLBEntry_asid (r_ref : register_ref regstate register_value TLBEntry) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_1) 7 0 (subrange_vec_dec v 7 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_asid (v : TLBEntry) (x : mword 8)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_1 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 7 0 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_TLBEntry_g (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 63.
+
+Definition _set_TLBEntry_g (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 63 63 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_g (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 63 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_valid (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 62 62.
+
+Definition _set_TLBEntry_valid (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 62 62 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_valid (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 62 62 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_caps1 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 61 61.
+
+Definition _set_TLBEntry_caps1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 61 61 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_caps1 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 61 61 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_capl1 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 60 60.
+
+Definition _set_TLBEntry_capl1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 60 60 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_capl1 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 60 60 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_pfn1 (v : TLBEntry)
+: mword 24 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 59 36.
+
+Definition _set_TLBEntry_pfn1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 24)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 59 36 (subrange_vec_dec v 23 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_pfn1 (v : TLBEntry) (x : mword 24)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 59 36 (subrange_vec_dec x 23 0)) ]}.
+
+Definition _get_TLBEntry_c1 (v : TLBEntry)
+: mword 3 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 35 33.
+
+Definition _set_TLBEntry_c1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 3)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 35 33 (subrange_vec_dec v 2 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_c1 (v : TLBEntry) (x : mword 3)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 35 33 (subrange_vec_dec x 2 0)) ]}.
+
+Definition _get_TLBEntry_d1 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 32 32.
+
+Definition _set_TLBEntry_d1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 32 32 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_d1 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 32 32 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_v1 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 31 31.
+
+Definition _set_TLBEntry_v1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 31 31 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_v1 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 31 31 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_caps0 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 30 30.
+
+Definition _set_TLBEntry_caps0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 30 30 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_caps0 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 30 30 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_capl0 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 29 29.
+
+Definition _set_TLBEntry_capl0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 29 29 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_capl0 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 29 29 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_pfn0 (v : TLBEntry)
+: mword 24 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 28 5.
+
+Definition _set_TLBEntry_pfn0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 24)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 28 5 (subrange_vec_dec v 23 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_pfn0 (v : TLBEntry) (x : mword 24)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 28 5 (subrange_vec_dec x 23 0)) ]}.
+
+Definition _get_TLBEntry_c0 (v : TLBEntry)
+: mword 3 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 4 2.
+
+Definition _set_TLBEntry_c0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 3)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 4 2 (subrange_vec_dec v 2 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_c0 (v : TLBEntry) (x : mword 3)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 4 2 (subrange_vec_dec x 2 0)) ]}.
+
+Definition _get_TLBEntry_d0 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 1 1.
+
+Definition _set_TLBEntry_d0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_d0 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_TLBEntry_v0 (v : TLBEntry)
+: mword 1 :=
+
+ subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 0 0.
+
+Definition _set_TLBEntry_v0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec r.(TLBEntry_TLBEntry_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : TLBEntry in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_TLBEntry_v0 (v : TLBEntry) (x : mword 1)
+: TLBEntry :=
+
+ {[ v with
+ TLBEntry_TLBEntry_chunk_0 :=
+ (update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition TLBEntries : vec (register_ref regstate register_value TLBEntry) 64 :=
+vec_of_list_len [TLBEntry63_ref;TLBEntry62_ref;TLBEntry61_ref;TLBEntry60_ref;TLBEntry59_ref;TLBEntry58_ref;TLBEntry57_ref;TLBEntry56_ref;TLBEntry55_ref;TLBEntry54_ref;TLBEntry53_ref;TLBEntry52_ref;TLBEntry51_ref;TLBEntry50_ref;TLBEntry49_ref;TLBEntry48_ref;TLBEntry47_ref;TLBEntry46_ref;TLBEntry45_ref;TLBEntry44_ref;TLBEntry43_ref;
+ TLBEntry42_ref;TLBEntry41_ref;TLBEntry40_ref;TLBEntry39_ref;TLBEntry38_ref;TLBEntry37_ref;TLBEntry36_ref;TLBEntry35_ref;TLBEntry34_ref;TLBEntry33_ref;TLBEntry32_ref;TLBEntry31_ref;TLBEntry30_ref;TLBEntry29_ref;TLBEntry28_ref;TLBEntry27_ref;TLBEntry26_ref;TLBEntry25_ref;TLBEntry24_ref;TLBEntry23_ref;TLBEntry22_ref;
+ TLBEntry21_ref;TLBEntry20_ref;TLBEntry19_ref;TLBEntry18_ref;TLBEntry17_ref;TLBEntry16_ref;TLBEntry15_ref;TLBEntry14_ref;TLBEntry13_ref;TLBEntry12_ref;TLBEntry11_ref;TLBEntry10_ref;TLBEntry09_ref;TLBEntry08_ref;TLBEntry07_ref;TLBEntry06_ref;TLBEntry05_ref;TLBEntry04_ref;TLBEntry03_ref;TLBEntry02_ref;TLBEntry01_ref;
+ TLBEntry00_ref].
+Hint Unfold TLBEntries : sail.
+Definition undefined_StatusReg '(tt : unit)
+: M (StatusReg) :=
+
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
+ returnm (({| StatusReg_StatusReg_chunk_0 := w__0 |})
+ : StatusReg).
+
+Definition Mk_StatusReg (v : mword 32)
+: StatusReg :=
+
+ {| StatusReg_StatusReg_chunk_0 := (subrange_vec_dec v 31 0) |}.
+
+Definition _get_StatusReg_bits (v : StatusReg)
+: mword 32 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 0.
+
+Definition _set_StatusReg_bits
+(r_ref : register_ref regstate register_value StatusReg) (v : mword 32)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 31 0 (subrange_vec_dec v 31 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_bits (v : StatusReg) (x : mword 32)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 0 (subrange_vec_dec x 31 0)) ]}.
+
+Definition _get_StatusReg_CU (v : StatusReg)
+: mword 4 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 28.
+
+Definition _set_StatusReg_CU (r_ref : register_ref regstate register_value StatusReg) (v : mword 4)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 31 28 (subrange_vec_dec v 3 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_CU (v : StatusReg) (x : mword 4)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 28 (subrange_vec_dec x 3 0)) ]}.
+
+Definition _get_StatusReg_BEV (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 22 22.
+
+Definition _set_StatusReg_BEV (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 22 22 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_BEV (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 22 22 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_StatusReg_IM (v : StatusReg)
+: mword 8 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 15 8.
+
+Definition _set_StatusReg_IM (r_ref : register_ref regstate register_value StatusReg) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 15 8 (subrange_vec_dec v 7 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_IM (v : StatusReg) (x : mword 8)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 15 8 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_StatusReg_KX (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 7 7.
+
+Definition _set_StatusReg_KX (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_KX (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_StatusReg_SX (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 6 6.
+
+Definition _set_StatusReg_SX (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 6 6 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_SX (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 6 6 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_StatusReg_UX (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 5 5.
+
+Definition _set_StatusReg_UX (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_UX (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_StatusReg_KSU (v : StatusReg)
+: mword 2 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 4 3.
+
+Definition _set_StatusReg_KSU (r_ref : register_ref regstate register_value StatusReg) (v : mword 2)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 4 3 (subrange_vec_dec v 1 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_KSU (v : StatusReg) (x : mword 2)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 4 3 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_StatusReg_ERL (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 2 2.
+
+Definition _set_StatusReg_ERL (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 2 2 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_ERL (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_StatusReg_EXL (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 1 1.
+
+Definition _set_StatusReg_EXL (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_EXL (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_StatusReg_IE (v : StatusReg)
+: mword 1 :=
+
+ subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 0 0.
+
+Definition _set_StatusReg_IE (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec r.(StatusReg_StatusReg_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : StatusReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_StatusReg_IE (v : StatusReg) (x : mword 1)
+: StatusReg :=
+
+ {[ v with
+ StatusReg_StatusReg_chunk_0 :=
+ (update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition execute_branch_mips (pc : mword 64)
+: M (unit) :=
+
+ write_reg DelayedPC_ref pc >>
+ write_reg BranchPending_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1)
+ : M (unit).
+
+Definition NotWordVal (word : mword 64)
+: bool :=
+
+ neq_vec (zopz0zQzQ (cast_unit_vec (access_vec_dec word 31)) 32) (subrange_vec_dec word 63 32).
+
+Definition rGPR (idx : mword 5)
+: M (mword 64) :=
+
+ let 'i := projT1 (uint idx) in
+ (if sumbool_of_bool ((Z.eqb i 0)) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else
+ read_reg GPR_ref >>= fun w__0 : vec (bits 64) 32 =>
+ returnm ((vec_access_dec w__0 i)
+ : mword 64))
+ : M (mword 64).
+
+Definition wGPR (idx : mword 5) (v : mword 64)
+: M (unit) :=
+
+ let 'i := projT1 (uint idx) in
+ (if ((neq_int i 0)) then
+ let '_ :=
+ (if (trace) then
+ let '_ := (prerr (string_of_int i)) : unit in
+ prerr_bits " <- " v
+ else tt)
+ : unit in
+ read_reg GPR_ref >>= fun w__0 : vec (bits 64) 32 =>
+ write_reg GPR_ref (vec_update_dec w__0 i v)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition MEMr (addr : mword 64) (size : Z) `{ArithFact (size >= 0)}
+: M (mword (8 * size)) :=
+
+ (__MIPS_read addr size)
+ : M (mword (8 * size)).
+
+Definition MEMr_reserve (addr : mword 64) (size : Z) `{ArithFact (size >= 0)}
+: M (mword (8 * size)) :=
+
+ (__MIPS_read addr size)
+ : M (mword (8 * size)).
+
+Definition MEM_sync '(tt : unit) : M (unit) := (skip tt) : M (unit).
+
+Definition MEMea (addr : mword 64) (size : Z) : M (unit) := (skip tt) : M (unit).
+
+Definition MEMea_conditional (addr : mword 64) (size : Z) : M (unit) := (skip tt) : M (unit).
+
+Definition MEMval (addr : mword 64) (size : Z) (data : mword (8 * size))
+: M (unit) :=
+
+ (__MIPS_write addr size data)
+ : M (unit).
+
+Definition MEMval_conditional (addr : mword 64) (size : Z) (data : mword (8 * size))
+: M (bool) :=
+
+ (__MIPS_write addr size data) >> returnm (true : bool).
+
+Definition Exception_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 18)}
+: Exception :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Interrupt
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then TLBMod
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then TLBL
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then TLBS
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then AdEL
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then AdES
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then Sys
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then Bp
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then ResI
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then CpU
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then Ov
+ else if sumbool_of_bool ((Z.eqb p0_ 11)) then Tr
+ else if sumbool_of_bool ((Z.eqb p0_ 12)) then C2E
+ else if sumbool_of_bool ((Z.eqb p0_ 13)) then C2Trap
+ else if sumbool_of_bool ((Z.eqb p0_ 14)) then XTLBRefillL
+ else if sumbool_of_bool ((Z.eqb p0_ 15)) then XTLBRefillS
+ else if sumbool_of_bool ((Z.eqb p0_ 16)) then XTLBInvL
+ else if sumbool_of_bool ((Z.eqb p0_ 17)) then XTLBInvS
+ else MCheck.
+
+Definition num_of_Exception (arg_ : Exception)
+: {e : Z & ArithFact (0 <= e /\ e <= 18)} :=
+
+ build_ex(match arg_ with
+ | Interrupt => 0
+ | TLBMod => 1
+ | TLBL => 2
+ | TLBS => 3
+ | AdEL => 4
+ | AdES => 5
+ | Sys => 6
+ | Bp => 7
+ | ResI => 8
+ | CpU => 9
+ | Ov => 10
+ | Tr => 11
+ | C2E => 12
+ | C2Trap => 13
+ | XTLBRefillL => 14
+ | XTLBRefillS => 15
+ | XTLBInvL => 16
+ | XTLBInvS => 17
+ | MCheck => 18
+ end).
+
+Definition undefined_Exception '(tt : unit)
+: M (Exception) :=
+
+ (internal_pick
+ [Interrupt;TLBMod;TLBL;TLBS;AdEL;AdES;Sys;Bp;ResI;CpU;Ov;Tr;C2E;C2Trap;XTLBRefillL;XTLBRefillS;XTLBInvL;XTLBInvS;MCheck])
+ : M (Exception).
+
+Definition ExceptionCode (ex : Exception)
+: mword 5 :=
+
+ let x : bits 8 :=
+ match ex with
+ | Interrupt => (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)
+ | TLBMod => (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1] : mword 8)
+ | TLBL => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0] : mword 8)
+ | TLBS => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1] : mword 8)
+ | AdEL => (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0] : mword 8)
+ | AdES => (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1] : mword 8)
+ | Sys => (vec_of_bits [B0;B0;B0;B0;B1;B0;B0;B0] : mword 8)
+ | Bp => (vec_of_bits [B0;B0;B0;B0;B1;B0;B0;B1] : mword 8)
+ | ResI => (vec_of_bits [B0;B0;B0;B0;B1;B0;B1;B0] : mword 8)
+ | CpU => (vec_of_bits [B0;B0;B0;B0;B1;B0;B1;B1] : mword 8)
+ | Ov => (vec_of_bits [B0;B0;B0;B0;B1;B1;B0;B0] : mword 8)
+ | Tr => (vec_of_bits [B0;B0;B0;B0;B1;B1;B0;B1] : mword 8)
+ | C2E => (vec_of_bits [B0;B0;B0;B1;B0;B0;B1;B0] : mword 8)
+ | C2Trap => (vec_of_bits [B0;B0;B0;B1;B0;B0;B1;B0] : mword 8)
+ | XTLBRefillL => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0] : mword 8)
+ | XTLBRefillS => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1] : mword 8)
+ | XTLBInvL => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0] : mword 8)
+ | XTLBInvS => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1] : mword 8)
+ | MCheck => (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0] : mword 8)
+ end in
+ subrange_vec_dec x 4 0.
+
+Definition string_of_exception (ex : Exception)
+: string :=
+
+ match ex with
+ | Interrupt => "Interrupt"
+ | TLBMod => "TLBMod"
+ | TLBL => "TLBL"
+ | TLBS => "TLBS"
+ | AdEL => "AdEL"
+ | AdES => "AdES"
+ | Sys => "Sys"
+ | Bp => "Bp "
+ | ResI => "ResI"
+ | CpU => "CpU"
+ | Ov => "Ov"
+ | Tr => "Tr"
+ | C2E => "C2E"
+ | C2Trap => "C2Trap"
+ | XTLBRefillL => "XTLBRefillL"
+ | XTLBRefillS => "XTLBRefillS"
+ | XTLBInvL => "XTLBInvL"
+ | XTLBInvS => "XTLBInvS"
+ | MCheck => "MCheck"
+ end.
+
+Definition SignalExceptionMIPS {o : Type} (ex : Exception) (kccBase : mword 64)
+: M (o) :=
+
+ let '_ :=
+ (if (trace) then
+ let '_ := (prerr " EXCEPTION ") : unit in
+ prerr_endline (string_of_exception ex)
+ else tt)
+ : unit in
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ (if ((negb ((bits_to_bool (_get_StatusReg_EXL w__0)) : bool))) then
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
+ (if (((bit_to_bool (access_vec_dec w__1 0)) : bool)) then
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ write_reg CP0EPC_ref (sub_vec_int w__2 4) >>
+ (_set_CauseReg_BD CP0Cause_ref (vec_of_bits [B1] : mword 1))
+ : M (unit)
+ else
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : bits 64 =>
+ write_reg CP0EPC_ref w__3 >>
+ (_set_CauseReg_BD CP0Cause_ref (vec_of_bits [B0] : mword 1))
+ : M (unit))
+ : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__4 : bits 1 =>
+ (if (((bit_to_bool (access_vec_dec w__4 0)) : bool)) then
+ ((read_reg LastInstrBits_ref) : M (mword 32)) >>= fun w__5 : bits 32 =>
+ write_reg CP0BadInstrP_ref w__5
+ : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg CurrentInstrBits_ref) : M (mword 32)) >>= fun w__6 : bits 32 =>
+ write_reg CP0BadInstr_ref w__6 >>
+ read_reg CP0Status_ref >>= fun w__7 : StatusReg =>
+ let vectorOffset :=
+ if (((bits_to_bool (_get_StatusReg_EXL w__7)) : bool)) then
+ (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((orb (generic_eq ex XTLBRefillL) (generic_eq ex XTLBRefillS))) then
+ (vec_of_bits [B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq ex C2Trap)) then
+ (vec_of_bits [B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12) in
+ read_reg CP0Status_ref >>= fun w__8 : StatusReg =>
+ let vectorBase : bits 64 :=
+ if (((bits_to_bool (_get_StatusReg_BEV w__8)) : bool)) then
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1;B1;B1;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ else
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) in
+ write_reg NextPC_ref (sub_vec (add_vec vectorBase (mips_sign_extend 64 vectorOffset)) kccBase) >>
+ (_set_CauseReg_ExcCode CP0Cause_ref (ExceptionCode ex)) >>
+ (_set_StatusReg_EXL CP0Status_ref (vec_of_bits [B1] : mword 1)) >>
+ (throw (ISAException
+ (tt)))
+ : M (o).
+
+Definition undefined_Capability '(tt : unit)
+: M (Capability) :=
+
+ (undefined_bool tt) >>= fun w__0 : bool =>
+ (undefined_bitvector 8) >>= fun w__1 : mword 8 =>
+ (undefined_bitvector 24) >>= fun w__2 : mword 24 =>
+ (undefined_bitvector 16) >>= fun w__3 : mword 16 =>
+ (undefined_bitvector 3) >>= fun w__4 : mword 3 =>
+ (undefined_bool tt) >>= fun w__5 : bool =>
+ (undefined_bool tt) >>= fun w__6 : bool =>
+ (undefined_bool tt) >>= fun w__7 : bool =>
+ (undefined_bool tt) >>= fun w__8 : bool =>
+ (undefined_bool tt) >>= fun w__9 : bool =>
+ (undefined_bool tt) >>= fun w__10 : bool =>
+ (undefined_bool tt) >>= fun w__11 : bool =>
+ (undefined_bool tt) >>= fun w__12 : bool =>
+ (undefined_bool tt) >>= fun w__13 : bool =>
+ (undefined_bool tt) >>= fun w__14 : bool =>
+ (undefined_bool tt) >>= fun w__15 : bool =>
+ (undefined_bool tt) >>= fun w__16 : bool =>
+ (undefined_bool tt) >>= fun w__17 : bool =>
+ (undefined_bitvector 64) >>= fun w__18 : mword 64 =>
+ (undefined_bitvector 64) >>= fun w__19 : mword 64 =>
+ (undefined_bitvector 64) >>= fun w__20 : mword 64 =>
+ returnm (({| Capability_tag := w__0;
+ Capability_padding := w__1;
+ Capability_otype := w__2;
+ Capability_uperms := w__3;
+ Capability_perm_reserved12_14 := w__4;
+ Capability_permit_set_CID := w__5;
+ Capability_access_system_regs := w__6;
+ Capability_permit_unseal := w__7;
+ Capability_permit_ccall := w__8;
+ Capability_permit_seal := w__9;
+ Capability_permit_store_local_cap := w__10;
+ Capability_permit_store_cap := w__11;
+ Capability_permit_load_cap := w__12;
+ Capability_permit_store := w__13;
+ Capability_permit_load := w__14;
+ Capability_permit_execute := w__15;
+ Capability_global := w__16;
+ Capability_sealed := w__17;
+ Capability_address := w__18;
+ Capability_base := w__19;
+ Capability_length := w__20 |})
+ : Capability).
+
+Definition getCapBase (c : Capability)
+: {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 64 - 1))} :=
+
+ build_ex(projT1 (uint c.(Capability_base))).
+
+Definition set_next_pcc (newPCC : Capability)
+: M (unit) :=
+
+ write_reg NextPCC_ref newPCC >> write_reg DelayedPCC_ref newPCC : M (unit).
+
+Definition SignalException {o : Type} (ex : Exception)
+: M (o) :=
+
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ (if ((negb ((bits_to_bool (_get_StatusReg_EXL w__0)) : bool))) then
+ read_reg PCC_ref >>= fun w__1 : Capability => write_reg EPCC_ref w__1 : M (unit)
+ else returnm (tt : unit)) >>
+ read_reg KCC_ref >>= fun w__2 : Capability =>
+ (set_next_pcc w__2) >>
+ read_reg KCC_ref >>= fun w__3 : Capability =>
+ let 'base := projT1 (getCapBase w__3) in
+ (SignalExceptionMIPS ex (to_bits 64 base))
+ : M (o).
+
+Definition SignalExceptionBadAddr {o : Type} (ex : Exception) (badAddr : mword 64)
+: M (o) :=
+
+ write_reg CP0BadVAddr_ref badAddr >> (SignalException ex) : M (o).
+
+Definition SignalExceptionTLB {o : Type} (ex : Exception) (badAddr : mword 64)
+: M (o) :=
+
+ write_reg CP0BadVAddr_ref badAddr >>
+ (_set_ContextReg_BadVPN2 TLBContext_ref (subrange_vec_dec badAddr 31 13)) >>
+ (_set_XContextReg_XBadVPN2 TLBXContext_ref (subrange_vec_dec badAddr 39 13)) >>
+ (_set_XContextReg_XR TLBXContext_ref (subrange_vec_dec badAddr 63 62)) >>
+ (_set_TLBEntryHiReg_R TLBEntryHi_ref (subrange_vec_dec badAddr 63 62)) >>
+ (_set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (subrange_vec_dec badAddr 39 13)) >>
+ (SignalException ex)
+ : M (o).
+
+Definition MemAccessType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: MemAccessType :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Instruction
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then LoadData
+ else StoreData.
+
+Definition num_of_MemAccessType (arg_ : MemAccessType)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | Instruction => 0 | LoadData => 1 | StoreData => 2 end).
+
+Definition undefined_MemAccessType '(tt : unit)
+: M (MemAccessType) :=
+
+ (internal_pick [Instruction;LoadData;StoreData])
+ : M (MemAccessType).
+
+Definition AccessLevel_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: AccessLevel :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then User
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Supervisor
+ else Kernel.
+
+Definition num_of_AccessLevel (arg_ : AccessLevel)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | User => 0 | Supervisor => 1 | Kernel => 2 end).
+
+Definition undefined_AccessLevel '(tt : unit)
+: M (AccessLevel) :=
+
+ (internal_pick [User;Supervisor;Kernel])
+ : M (AccessLevel).
+
+Definition int_of_AccessLevel (level : AccessLevel)
+: {n : Z & ArithFact (In n [0; 1; 2])} :=
+
+ build_ex(match level with | User => 0 | Supervisor => 1 | Kernel => 2 end).
+
+Definition grantsAccess (currentLevel : AccessLevel) (requiredLevel : AccessLevel)
+: bool :=
+
+ Z.geb (projT1 (int_of_AccessLevel currentLevel)) (projT1 (int_of_AccessLevel requiredLevel)).
+
+Definition getAccessLevel '(tt : unit)
+: M (AccessLevel) :=
+
+ (or_boolM
+ (read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ returnm ((bits_to_bool (_get_StatusReg_EXL w__0))
+ : bool))
+ (read_reg CP0Status_ref >>= fun w__1 : StatusReg =>
+ returnm ((bits_to_bool (_get_StatusReg_ERL w__1))
+ : bool))) >>= fun w__2 : bool =>
+ (if (w__2) then returnm (Kernel : AccessLevel)
+ else
+ read_reg CP0Status_ref >>= fun w__3 : StatusReg =>
+ let p__18 := _get_StatusReg_KSU w__3 in
+ let b__0 := p__18 in
+ returnm ((if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then Kernel
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then Supervisor
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then User
+ else User)
+ : AccessLevel))
+ : M (AccessLevel).
+
+Definition checkCP0Access '(tt : unit)
+: M (unit) :=
+
+ (getAccessLevel tt) >>= fun accessLevel =>
+ (and_boolM (returnm ((generic_neq accessLevel Kernel) : bool))
+ (read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ returnm ((negb ((bit_to_bool (access_vec_dec (_get_StatusReg_CU w__0) 0)) : bool))
+ : bool))) >>= fun w__1 : bool =>
+ (if (w__1) then
+ (_set_CauseReg_CE CP0Cause_ref (vec_of_bits [B0;B0] : mword 2)) >>
+ (SignalException CpU)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition incrementCP0Count '(tt : unit)
+: M (unit) :=
+
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ ((read_reg TLBWired_ref) : M (mword 6)) >>= fun w__1 : TLBIndexT =>
+ (if ((eq_vec w__0 w__1)) then returnm (TLBIndexMax : TLBIndexT)
+ else
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__2 : TLBIndexT =>
+ returnm ((sub_vec_int w__2 1)
+ : mword 6)) >>= fun w__3 : mword 6 =>
+ write_reg TLBRandom_ref w__3 >>
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__4 : bits 32 =>
+ write_reg CP0Count_ref (add_vec_int w__4 1) >>
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__5 : bits 32 =>
+ ((read_reg CP0Compare_ref) : M (mword 32)) >>= fun w__6 : bits 32 =>
+ (if ((eq_vec w__5 w__6)) then
+ read_reg CP0Cause_ref >>= fun w__7 : CauseReg =>
+ (_set_CauseReg_IP CP0Cause_ref
+ (or_vec (_get_CauseReg_IP w__7) (vec_of_bits [B1;B0;B0;B0;B0;B0;B0;B0] : mword 8)))
+ : M (unit)
+ else returnm (tt : unit)) >>
+ read_reg CP0Status_ref >>= fun w__8 : StatusReg =>
+ let ims := _get_StatusReg_IM w__8 in
+ read_reg CP0Cause_ref >>= fun w__9 : CauseReg =>
+ let ips := _get_CauseReg_IP w__9 in
+ read_reg CP0Status_ref >>= fun w__10 : StatusReg =>
+ let ie := _get_StatusReg_IE w__10 in
+ read_reg CP0Status_ref >>= fun w__11 : StatusReg =>
+ let exl := _get_StatusReg_EXL w__11 in
+ read_reg CP0Status_ref >>= fun w__12 : StatusReg =>
+ let erl := _get_StatusReg_ERL w__12 in
+ (if ((andb (negb ((bits_to_bool exl) : bool))
+ (andb (negb ((bits_to_bool erl) : bool))
+ (andb ((bits_to_bool ie) : bool)
+ (neq_vec (and_vec ips ims) (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8))))))
+ then
+ (SignalException Interrupt)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition decode_failure_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: decode_failure :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then no_matching_pattern
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then unsupported_instruction
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then illegal_instruction
+ else internal_error.
+
+Definition num_of_decode_failure (arg_ : decode_failure)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with
+ | no_matching_pattern => 0
+ | unsupported_instruction => 1
+ | illegal_instruction => 2
+ | internal_error => 3
+ end).
+
+Definition undefined_decode_failure '(tt : unit)
+: M (decode_failure) :=
+
+ (internal_pick [no_matching_pattern;unsupported_instruction;illegal_instruction;internal_error])
+ : M (decode_failure).
+
+Definition Comparison_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 7)}
+: Comparison :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then EQ'
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then NE
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then GE
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then GEU
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then GT'
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then LE
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then LT'
+ else LTU.
+
+Definition num_of_Comparison (arg_ : Comparison)
+: {e : Z & ArithFact (0 <= e /\ e <= 7)} :=
+
+ build_ex(match arg_ with
+ | EQ' => 0
+ | NE => 1
+ | GE => 2
+ | GEU => 3
+ | GT' => 4
+ | LE => 5
+ | LT' => 6
+ | LTU => 7
+ end).
+
+Definition undefined_Comparison '(tt : unit)
+: M (Comparison) :=
+
+ (internal_pick [EQ';NE;GE;GEU;GT';LE;LT';LTU])
+ : M (Comparison).
+
+Definition compare (cmp : Comparison) (valA : mword 64) (valB : mword 64)
+: bool :=
+
+ match cmp with
+ | EQ' => eq_vec valA valB
+ | NE => neq_vec valA valB
+ | GE => zopz0zKzJ_s valA valB
+ | GEU => zopz0zKzJ_u valA valB
+ | GT' => zopz0zI_s valB valA
+ | LE => zopz0zKzJ_s valB valA
+ | LT' => zopz0zI_s valA valB
+ | LTU => zopz0zI_u valA valB
+ end.
+
+Definition WordType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: WordType :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then B
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then H
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then W
+ else D.
+
+Definition num_of_WordType (arg_ : WordType)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with | B => 0 | H => 1 | W => 2 | D => 3 end).
+
+Definition undefined_WordType '(tt : unit)
+: M (WordType) :=
+
+ (internal_pick [B;H;W;D])
+ : M (WordType).
+
+Definition WordTypeUnaligned_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: WordTypeUnaligned :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then WL
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then WR
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then DL
+ else DR.
+
+Definition num_of_WordTypeUnaligned (arg_ : WordTypeUnaligned)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with | WL => 0 | WR => 1 | DL => 2 | DR => 3 end).
+
+Definition undefined_WordTypeUnaligned '(tt : unit)
+: M (WordTypeUnaligned) :=
+
+ (internal_pick [WL;WR;DL;DR])
+ : M (WordTypeUnaligned).
+
+Definition wordWidthBytes (w : WordType)
+: {rangevar : Z & ArithFact (1 <= rangevar /\ rangevar <= 8)} :=
+
+ build_ex(match w with | B => 1 | H => 2 | W => 4 | D => 8 end).
+
+Definition alignment_width := 16.
+Hint Unfold alignment_width : sail.
+Definition isAddressAligned (addr : mword 64) (wordType : WordType)
+: bool :=
+
+ let 'a := projT1 (uint addr) in
+ Z.eqb (projT1 (ediv_with_eq a alignment_width))
+ (projT1 (ediv_with_eq (Z.sub (Z.add a (projT1 (wordWidthBytes wordType))) 1) alignment_width)).
+
+Definition extendLoad {sz : Z} (memResult : mword sz) (sign : bool) `{ArithFact (sz <= 64)}
+: mword 64 :=
+
+ if (sign) then mips_sign_extend 64 memResult
+ else mips_zero_extend 64 memResult.
+
+Definition MEMr_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ size <= 8)}
+: M (mword (8 * size)) :=
+
+ (if ((eq_vec addr
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))) then
+ ((read_reg UART_RVALID_ref) : M (mword 1)) >>= fun rvalid =>
+ write_reg UART_RVALID_ref (vec_of_bits [B0] : mword 1) >>
+ ((read_reg UART_RDATA_ref) : M (mword 8)) >>= fun w__0 : bits 8 =>
+ returnm ((mask (Z.mul 8 size)
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32)
+ (concat_vec w__0
+ (concat_vec rvalid
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 16))))))
+ : mword (8 * size))
+ else if ((eq_vec addr
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;
+ B0]
+ : mword 64))) then
+ returnm ((mask (Z.mul 8 size)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B1;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1]
+ : mword 64))
+ : mword (8 * size))
+ else
+ (MEMr addr size) >>= fun w__1 : mword (8 * size) =>
+ returnm ((reverse_endianness w__1)
+ : mword (8 * size)))
+ : M (mword (8 * size)).
+
+Definition MEMr_reserve_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ size <= 8)}
+: M (mword (8 * size)) :=
+
+ (MEMr_reserve addr size) >>= fun w__0 : mword (8 * size) =>
+ returnm ((reverse_endianness w__0)
+ : mword (8 * size)).
+
+Definition init_cp0_state '(tt : unit)
+: M (unit) :=
+
+ (_set_StatusReg_BEV CP0Status_ref ((cast_unit_vec B1) : mword 1))
+ : M (unit).
+
+Definition tlbEntryMatch (r : mword 2) (vpn2 : mword 27) (asid : mword 8) (entry : TLBEntry)
+: bool :=
+
+ let entryValid := _get_TLBEntry_valid entry in
+ let entryR := _get_TLBEntry_r entry in
+ let entryMask := _get_TLBEntry_pagemask entry in
+ let entryVPN := _get_TLBEntry_vpn2 entry in
+ let entryASID := _get_TLBEntry_asid entry in
+ let entryG := _get_TLBEntry_g entry in
+ let vpnMask : bits 27 := not_vec (mips_zero_extend 27 entryMask) in
+ andb ((bits_to_bool entryValid) : bool)
+ (andb (eq_vec r entryR)
+ (andb (eq_vec (and_vec vpn2 vpnMask) (and_vec entryVPN vpnMask))
+ (orb (eq_vec asid entryASID) ((bits_to_bool entryG) : bool)))).
+
+Definition tlbSearch (VAddr : mword 64)
+: M (option (mword 6)) :=
+
+ catch_early_return
+ (let r := subrange_vec_dec VAddr 63 62 in
+ let vpn2 := subrange_vec_dec VAddr 39 13 in
+ liftR (read_reg TLBEntryHi_ref) >>= fun w__0 : TLBEntryHiReg =>
+ let asid := _get_TLBEntryHiReg_ASID w__0 in
+ (foreach_ZM_up 0 63 1 tt
+ (fun idx _ unit_var =>
+ liftR ((reg_deref (vec_access_dec TLBEntries idx))) >>= fun w__1 : TLBEntry =>
+ (if ((tlbEntryMatch r vpn2 asid w__1)) then
+ (early_return ((Some
+ (to_bits 6 idx))
+ : option (mword 6)))
+ : MR (unit) _
+ else returnm (tt : unit))
+ : MR (unit) _)) >>
+ returnm (None
+ : option (mword 6))).
+
+Definition TLBTranslate2 (vAddr : mword 64) (accessType : MemAccessType)
+: M ((mword 64 * bool)) :=
+
+ (tlbSearch vAddr) >>= fun idx =>
+ (match idx with
+ | Some (idx) =>
+ let 'i := projT1 (uint idx) in
+ (reg_deref (vec_access_dec TLBEntries i)) >>= fun entry =>
+ let entryMask := _get_TLBEntry_pagemask entry in
+ let b__0 := entryMask in
+ (if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16)))
+ then
+ returnm (build_ex (12
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (14
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (16
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (18
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (20
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (22
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (24
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (26
+ : Z))
+ else if ((eq_vec b__0
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
+ then
+ returnm (build_ex (28
+ : Z))
+ else
+ (undefined_range 12 28)
+ : M ({rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})) >>= fun '(existT _ evenOddBit _ : {rangevar : Z & ArithFact (12 <=
+ rangevar /\
+ rangevar <= 28)}) =>
+ let isOdd := access_vec_dec vAddr evenOddBit in
+ let '(caps, capl, pfn, d, v) :=
+ if (((bit_to_bool isOdd) : bool)) then
+ (_get_TLBEntry_caps1 entry, _get_TLBEntry_capl1 entry, _get_TLBEntry_pfn1 entry, _get_TLBEntry_d1
+ entry, _get_TLBEntry_v1
+ entry)
+ else
+ (_get_TLBEntry_caps0 entry, _get_TLBEntry_capl0 entry, _get_TLBEntry_pfn0 entry, _get_TLBEntry_d0
+ entry, _get_TLBEntry_v0
+ entry) in
+ (if ((negb ((bits_to_bool v) : bool))) then
+ (SignalExceptionTLB (if ((generic_eq accessType StoreData)) then XTLBInvS else XTLBInvL)
+ vAddr)
+ : M ((mword 64 * bool))
+ else if ((andb (generic_eq accessType StoreData) (negb ((bits_to_bool d) : bool)))) then
+ (SignalExceptionTLB TLBMod vAddr)
+ : M ((mword 64 * bool))
+ else
+ let res : bits 64 :=
+ mips_zero_extend 64
+ (concat_vec (subrange_vec_dec pfn 23 (Z.sub evenOddBit 12))
+ (subrange_vec_dec vAddr (Z.sub evenOddBit 1) 0)) in
+ returnm (res, bits_to_bool (if ((generic_eq accessType StoreData)) then caps else capl)))
+ : M ((mword 64 * bool))
+ | None =>
+ (SignalExceptionTLB
+ (if ((generic_eq accessType StoreData)) then XTLBRefillS
+ else XTLBRefillL) vAddr)
+ : M ((mword 64 * bool))
+ end)
+ : M ((mword 64 * bool)).
+
+Definition TLBTranslateC (vAddr : mword 64) (accessType : MemAccessType)
+: M ((mword 64 * bool)) :=
+
+ (getAccessLevel tt) >>= fun currentAccessLevel =>
+ let compat32 :=
+ eq_vec (subrange_vec_dec vAddr 61 31)
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (61 - 31 + 1)) in
+ let b__0 := subrange_vec_dec vAddr 63 62 in
+ let '(requiredLevel, addr) :=
+ (if ((eq_vec b__0 (vec_of_bits [B1;B1] : mword (63 - 62 + 1)))) then
+ match (compat32, subrange_vec_dec vAddr 30 29) with
+ | (true, b__1) =>
+ if ((eq_vec b__1 (vec_of_bits [B1;B1] : mword (30 - 29 + 1)))) then
+ (Kernel, None
+ : option (bits 64))
+ else if ((eq_vec b__1 (vec_of_bits [B1;B0] : mword (30 - 29 + 1)))) then
+ (Supervisor, None
+ : option (bits 64))
+ else if ((eq_vec b__1 (vec_of_bits [B0;B1] : mword (30 - 29 + 1)))) then
+ (Kernel, Some
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (subrange_vec_dec vAddr 28 0))))
+ else if ((eq_vec b__1 (vec_of_bits [B0;B0] : mword (30 - 29 + 1)))) then
+ (Kernel, Some
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (subrange_vec_dec vAddr 28 0))))
+ else match (true, b__1) with | (g__16, g__17) => (Kernel, None : option (bits 64)) end
+ | (g__16, g__17) => (Kernel, None : option (bits 64))
+ end
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword (63 - 62 + 1)))) then
+ (Kernel, Some
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (subrange_vec_dec vAddr 58 0)))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword (63 - 62 + 1)))) then
+ (Supervisor, None
+ : option (bits 64))
+ else (User, None : option (bits 64)))
+ : (AccessLevel * option (bits 64)) in
+ (if ((negb (grantsAccess currentAccessLevel requiredLevel))) then
+ (SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL) vAddr)
+ : M ((mword 64 * bool))
+ else
+ (match addr with
+ | Some (a) => returnm (a, false)
+ | None =>
+ (if sumbool_of_bool ((andb (negb compat32)
+ (Z.gtb (projT1 (uint (subrange_vec_dec vAddr 61 0))) MAX_VA)))
+ then
+ (SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL)
+ vAddr)
+ : M ((mword 64 * bool))
+ else (TLBTranslate2 vAddr accessType) : M ((mword 64 * bool)))
+ : M ((mword 64 * bool))
+ end) >>= fun '(pa, c) =>
+ (if sumbool_of_bool ((Z.gtb (projT1 (uint pa)) MAX_PA)) then
+ (SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL) vAddr)
+ : M ((mword 64 * bool))
+ else returnm (pa, c))
+ : M ((mword 64 * bool)))
+ : M ((mword 64 * bool)).
+
+Definition TLBTranslate (vAddr : mword 64) (accessType : MemAccessType)
+: M (mword 64) :=
+
+ (TLBTranslateC vAddr accessType) >>= fun '(addr, c) => returnm (addr : mword 64).
+
+Definition CPtrCmpOp_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 7)}
+: CPtrCmpOp :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then CEQ
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then CNE
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then CLT
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then CLE
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then CLTU
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then CLEU
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then CEXEQ
+ else CNEXEQ.
+
+Definition num_of_CPtrCmpOp (arg_ : CPtrCmpOp)
+: {e : Z & ArithFact (0 <= e /\ e <= 7)} :=
+
+ build_ex(match arg_ with
+ | CEQ => 0
+ | CNE => 1
+ | CLT => 2
+ | CLE => 3
+ | CLTU => 4
+ | CLEU => 5
+ | CEXEQ => 6
+ | CNEXEQ => 7
+ end).
+
+Definition undefined_CPtrCmpOp '(tt : unit)
+: M (CPtrCmpOp) :=
+
+ (internal_pick [CEQ;CNE;CLT;CLE;CLTU;CLEU;CEXEQ;CNEXEQ])
+ : M (CPtrCmpOp).
+
+Definition ClearRegSet_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: ClearRegSet :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then GPLo
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then GPHi
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then CLo
+ else CHi.
+
+Definition num_of_ClearRegSet (arg_ : ClearRegSet)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with | GPLo => 0 | GPHi => 1 | CLo => 2 | CHi => 3 end).
+
+Definition undefined_ClearRegSet '(tt : unit)
+: M (ClearRegSet) :=
+
+ (internal_pick [GPLo;GPHi;CLo;CHi])
+ : M (ClearRegSet).
+
+Definition max_otype := projT1 (MAX 24).
+Hint Unfold max_otype : sail.
+Definition null_cap : Capability :=
+{| Capability_tag := false;
+ Capability_padding := (zeros_implicit 8 tt);
+ Capability_otype := (zeros_implicit 24 tt);
+ Capability_uperms := (zeros_implicit 16 tt);
+ Capability_perm_reserved12_14 := (zeros_implicit 3 tt);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address := (zeros_implicit 64 tt);
+ Capability_base := (zeros_implicit 64 tt);
+ Capability_length :=
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1]
+ : mword 64) |}.
+Hint Unfold null_cap : sail.
+Definition default_cap : Capability :=
+{| Capability_tag := true;
+ Capability_padding := (zeros_implicit 8 tt);
+ Capability_otype := (zeros_implicit 24 tt);
+ Capability_uperms := (ones_implicit 16 tt);
+ Capability_perm_reserved12_14 := (zeros_implicit 3 tt);
+ Capability_permit_set_CID := true;
+ Capability_access_system_regs := true;
+ Capability_permit_unseal := true;
+ Capability_permit_ccall := true;
+ Capability_permit_seal := true;
+ Capability_permit_store_local_cap := true;
+ Capability_permit_store_cap := true;
+ Capability_permit_load_cap := true;
+ Capability_permit_store := true;
+ Capability_permit_load := true;
+ Capability_permit_execute := true;
+ Capability_global := true;
+ Capability_sealed := false;
+ Capability_address := (zeros_implicit 64 tt);
+ Capability_base := (zeros_implicit 64 tt);
+ Capability_length :=
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1]
+ : mword 64) |}.
+Hint Unfold default_cap : sail.
+Definition capBitsToCapability (tag : bool) (capBits : mword 256)
+: Capability :=
+
+ {| Capability_tag := tag;
+ Capability_padding := (subrange_vec_dec capBits 255 248);
+ Capability_otype := (subrange_vec_dec capBits 247 224);
+ Capability_uperms := (subrange_vec_dec capBits 223 208);
+ Capability_perm_reserved12_14 := (subrange_vec_dec capBits 207 205);
+ Capability_permit_set_CID := ((bit_to_bool (access_vec_dec capBits 204)) : bool);
+ Capability_access_system_regs := ((bit_to_bool (access_vec_dec capBits 203)) : bool);
+ Capability_permit_unseal := ((bit_to_bool (access_vec_dec capBits 202)) : bool);
+ Capability_permit_ccall := ((bit_to_bool (access_vec_dec capBits 201)) : bool);
+ Capability_permit_seal := ((bit_to_bool (access_vec_dec capBits 200)) : bool);
+ Capability_permit_store_local_cap := ((bit_to_bool (access_vec_dec capBits 199)) : bool);
+ Capability_permit_store_cap := ((bit_to_bool (access_vec_dec capBits 198)) : bool);
+ Capability_permit_load_cap := ((bit_to_bool (access_vec_dec capBits 197)) : bool);
+ Capability_permit_store := ((bit_to_bool (access_vec_dec capBits 196)) : bool);
+ Capability_permit_load := ((bit_to_bool (access_vec_dec capBits 195)) : bool);
+ Capability_permit_execute := ((bit_to_bool (access_vec_dec capBits 194)) : bool);
+ Capability_global := ((bit_to_bool (access_vec_dec capBits 193)) : bool);
+ Capability_sealed := ((bit_to_bool (access_vec_dec capBits 192)) : bool);
+ Capability_address := (subrange_vec_dec capBits 191 128);
+ Capability_base := (subrange_vec_dec capBits 127 64);
+ Capability_length := (subrange_vec_dec capBits 63 0) |}.
+
+Definition getCapPerms (cap : Capability)
+: mword 31 :=
+
+ concat_vec cap.(Capability_uperms)
+ (concat_vec cap.(Capability_perm_reserved12_14)
+ (concat_vec (bool_to_bits cap.(Capability_permit_set_CID))
+ (concat_vec (bool_to_bits cap.(Capability_access_system_regs))
+ (concat_vec (bool_to_bits cap.(Capability_permit_unseal))
+ (concat_vec (bool_to_bits cap.(Capability_permit_ccall))
+ (concat_vec (bool_to_bits cap.(Capability_permit_seal))
+ (concat_vec (bool_to_bits cap.(Capability_permit_store_local_cap))
+ (concat_vec (bool_to_bits cap.(Capability_permit_store_cap))
+ (concat_vec (bool_to_bits cap.(Capability_permit_load_cap))
+ (concat_vec (bool_to_bits cap.(Capability_permit_store))
+ (concat_vec (bool_to_bits cap.(Capability_permit_load))
+ (concat_vec (bool_to_bits cap.(Capability_permit_execute))
+ (bool_to_bits cap.(Capability_global)))))))))))))).
+
+Definition capToBits (cap : Capability)
+: mword 256 :=
+
+ concat_vec cap.(Capability_padding)
+ (concat_vec cap.(Capability_otype)
+ (concat_vec (getCapPerms cap)
+ (concat_vec (bool_to_bits cap.(Capability_sealed))
+ (concat_vec cap.(Capability_address)
+ (concat_vec cap.(Capability_base) cap.(Capability_length)))))).
+
+Definition null_cap_bits : CapBits := capToBits null_cap.
+Hint Unfold null_cap_bits : sail.
+Definition capToMemBits (cap : Capability) : mword 256 := xor_vec (capToBits cap) null_cap_bits.
+
+Definition memBitsToCapability (tag : bool) (b : mword 256)
+: Capability :=
+
+ capBitsToCapability tag (xor_vec b null_cap_bits).
+
+Definition setCapPerms (cap : Capability) (perms : mword 31)
+: Capability :=
+
+ {| Capability_tag := cap.(Capability_tag);
+ Capability_padding := cap.(Capability_padding);
+ Capability_otype := cap.(Capability_otype);
+ Capability_uperms := (subrange_vec_dec perms 30 15);
+ Capability_perm_reserved12_14 := cap.(Capability_perm_reserved12_14);
+ Capability_permit_set_CID := ((bit_to_bool (access_vec_dec perms 11)) : bool);
+ Capability_access_system_regs := ((bit_to_bool (access_vec_dec perms 10)) : bool);
+ Capability_permit_unseal := ((bit_to_bool (access_vec_dec perms 9)) : bool);
+ Capability_permit_ccall := ((bit_to_bool (access_vec_dec perms 8)) : bool);
+ Capability_permit_seal := ((bit_to_bool (access_vec_dec perms 7)) : bool);
+ Capability_permit_store_local_cap := ((bit_to_bool (access_vec_dec perms 6)) : bool);
+ Capability_permit_store_cap := ((bit_to_bool (access_vec_dec perms 5)) : bool);
+ Capability_permit_load_cap := ((bit_to_bool (access_vec_dec perms 4)) : bool);
+ Capability_permit_store := ((bit_to_bool (access_vec_dec perms 3)) : bool);
+ Capability_permit_load := ((bit_to_bool (access_vec_dec perms 2)) : bool);
+ Capability_permit_execute := ((bit_to_bool (access_vec_dec perms 1)) : bool);
+ Capability_global := ((bit_to_bool (access_vec_dec perms 0)) : bool);
+ Capability_sealed := cap.(Capability_sealed);
+ Capability_address := cap.(Capability_address);
+ Capability_base := cap.(Capability_base);
+ Capability_length := cap.(Capability_length) |}.
+
+Definition sealCap (cap : Capability) (otype : mword 24)
+: (bool * Capability) :=
+
+ (true, {| Capability_tag := cap.(Capability_tag);
+ Capability_padding := cap.(Capability_padding);
+ Capability_otype := otype;
+ Capability_uperms := cap.(Capability_uperms);
+ Capability_perm_reserved12_14 := cap.(Capability_perm_reserved12_14);
+ Capability_permit_set_CID := cap.(Capability_permit_set_CID);
+ Capability_access_system_regs := cap.(Capability_access_system_regs);
+ Capability_permit_unseal := cap.(Capability_permit_unseal);
+ Capability_permit_ccall := cap.(Capability_permit_ccall);
+ Capability_permit_seal := cap.(Capability_permit_seal);
+ Capability_permit_store_local_cap := cap.(Capability_permit_store_local_cap);
+ Capability_permit_store_cap := cap.(Capability_permit_store_cap);
+ Capability_permit_load_cap := cap.(Capability_permit_load_cap);
+ Capability_permit_store := cap.(Capability_permit_store);
+ Capability_permit_load := cap.(Capability_permit_load);
+ Capability_permit_execute := cap.(Capability_permit_execute);
+ Capability_global := cap.(Capability_global);
+ Capability_sealed := true;
+ Capability_address := cap.(Capability_address);
+ Capability_base := cap.(Capability_base);
+ Capability_length := cap.(Capability_length) |}).
+
+Definition getCapTop (c : Capability)
+: {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 65))} :=
+
+ build_ex(Z.add (projT1 (uint c.(Capability_base))) (projT1 (uint c.(Capability_length)))).
+
+Definition getCapBounds (c : Capability)
+:
+({rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 64 - 1))} * {rangevar : Z & ArithFact (0 <=
+ rangevar /\
+ rangevar <= (2 ^ 65))}) :=
+
+ (build_ex (projT1 (getCapBase c)), build_ex (projT1 (getCapTop c))).
+
+Definition getCapOffset (c : Capability)
+: {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 64 - 1))} :=
+
+ build_ex(projT1 (emod_with_eq
+ (Z.sub (projT1 (uint c.(Capability_address)))
+ (projT1 (uint c.(Capability_base)))) (projT1 (pow2 64)))).
+
+Definition getCapLength (c : Capability)
+: {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 65))} :=
+
+ build_ex(projT1 (uint c.(Capability_length))).
+
+Definition getCapCursor (c : Capability)
+: {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 64 - 1))} :=
+
+ build_ex(projT1 (uint c.(Capability_address))).
+
+Definition setCapOffset (c : Capability) (offset : mword 64)
+: (bool * Capability) :=
+
+ (true, {[ c with Capability_address := (add_vec c.(Capability_base) offset) ]}).
+
+Definition incCapOffset (c : Capability) (delta : mword 64)
+: (bool * Capability) :=
+
+ let newAddr : bits 64 := add_vec c.(Capability_address) delta in
+ (true, {[ c with Capability_address := newAddr ]}).
+
+Definition setCapBounds (cap : Capability) (base : mword 64) (top : mword 65)
+: (bool * Capability) :=
+
+ let length : bits 65 := sub_vec top (concat_vec (vec_of_bits [B0] : mword 1) base) in
+ (true, {| Capability_tag := cap.(Capability_tag);
+ Capability_padding := cap.(Capability_padding);
+ Capability_otype := cap.(Capability_otype);
+ Capability_uperms := cap.(Capability_uperms);
+ Capability_perm_reserved12_14 := cap.(Capability_perm_reserved12_14);
+ Capability_permit_set_CID := cap.(Capability_permit_set_CID);
+ Capability_access_system_regs := cap.(Capability_access_system_regs);
+ Capability_permit_unseal := cap.(Capability_permit_unseal);
+ Capability_permit_ccall := cap.(Capability_permit_ccall);
+ Capability_permit_seal := cap.(Capability_permit_seal);
+ Capability_permit_store_local_cap := cap.(Capability_permit_store_local_cap);
+ Capability_permit_store_cap := cap.(Capability_permit_store_cap);
+ Capability_permit_load_cap := cap.(Capability_permit_load_cap);
+ Capability_permit_store := cap.(Capability_permit_store);
+ Capability_permit_load := cap.(Capability_permit_load);
+ Capability_permit_execute := cap.(Capability_permit_execute);
+ Capability_global := cap.(Capability_global);
+ Capability_sealed := cap.(Capability_sealed);
+ Capability_address := base;
+ Capability_base := base;
+ Capability_length := (subrange_vec_dec length 63 0) |}).
+
+Definition int_to_cap (address : mword 64)
+: Capability :=
+
+ {[ null_cap with Capability_address := address ]}.
+
+Definition CapRegs : vec (register_ref regstate register_value Capability) 32 :=
+vec_of_list_len [C31_ref;C30_ref;C29_ref;C28_ref;C27_ref;C26_ref;C25_ref;C24_ref;C23_ref;C22_ref;C21_ref;C20_ref;C19_ref;C18_ref;C17_ref;C16_ref;C15_ref;C14_ref;C13_ref;C12_ref;C11_ref;
+ C10_ref;C09_ref;C08_ref;C07_ref;C06_ref;C05_ref;C04_ref;C03_ref;C02_ref;C01_ref;DDC_ref].
+Hint Unfold CapRegs : sail.
+Definition have_cp2 := true.
+Hint Unfold have_cp2 : sail.
+Definition readCapReg (n : mword 5)
+: M (Capability) :=
+
+ (if ((eq_vec n (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))) then returnm (null_cap : Capability)
+ else
+ let 'i := projT1 (uint n) in
+ (reg_deref (vec_access_dec CapRegs i))
+ : M (Capability))
+ : M (Capability).
+
+Definition readCapRegDDC (n : mword 5)
+: M (Capability) :=
+
+ let 'i := projT1 (uint n) in
+ (reg_deref (vec_access_dec CapRegs i))
+ : M (Capability).
+
+Definition capToString (cap : Capability) (fixlen : bool)
+: M (string) :=
+
+ (skip tt) >>
+ let 'len := projT1 (getCapLength cap) in
+ let len_str :=
+ if (fixlen) then string_of_bits (to_bits 64 (projT1 (min_atom len (projT1 (MAX 64)))))
+ else string_of_bits (to_bits 68 len) in
+ let otype24 : bits 24 :=
+ if sumbool_of_bool ((Z.eqb (projT1 (sint cap.(Capability_otype))) (-1))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24)
+ else mips_zero_extend 24 cap.(Capability_otype) in
+ returnm ((String.append " t:"
+ (String.append (if (cap.(Capability_tag)) then "1" else "0")
+ (String.append " s:"
+ (String.append (if (cap.(Capability_sealed)) then "1" else "0")
+ (String.append " perms:"
+ (String.append
+ (string_of_bits
+ (concat_vec (vec_of_bits [B0] : mword 1) (getCapPerms cap)))
+ (String.append " type:"
+ (String.append (string_of_bits otype24)
+ (String.append " offset:"
+ (String.append
+ (string_of_bits (to_bits 64 (projT1 (getCapOffset cap))))
+ (String.append " base:"
+ (String.append
+ (string_of_bits
+ (to_bits 64 (projT1 (getCapBase cap))))
+ (String.append " length:" len_str)))))))))))))
+ : string).
+
+Definition writeCapReg (n : mword 5) (cap : Capability)
+: M (unit) :=
+
+ (if ((eq_vec n (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))) then returnm (tt : unit)
+ else
+ let 'i := projT1 (uint n) in
+ (if (trace) then
+ let '_ := (prerr (string_of_int i)) : unit in
+ let '_ := (prerr " <- ") : unit in
+ (capToString cap false) >>= fun w__0 : string =>
+ let '_ := (prerr_endline w__0) : unit in
+ let cap2 := capBitsToCapability cap.(Capability_tag) (capToBits cap) in
+ (if ((generic_neq cap cap2)) then
+ let '_ := (prerr_endline "Wrote non-normal cap:") : unit in
+ (capToString cap false) >>= fun w__1 : string =>
+ let '_ := (prerr_endline w__1) : unit in
+ (capToString cap2 false) >>= fun w__2 : string =>
+ let '_ := (prerr_endline w__2) : unit in
+ (assert_exp false "wrote non-normal capability")
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit)
+ else (skip tt) : M (unit)) >>
+ write_reg (vec_access_dec CapRegs i) cap
+ : M (unit))
+ : M (unit).
+
+Definition CapEx_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 23)}
+: CapEx :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then CapEx_None
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then CapEx_LengthViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then CapEx_TagViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then CapEx_SealViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then CapEx_TypeViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then CapEx_CallTrap
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then CapEx_ReturnTrap
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then CapEx_TSSUnderFlow
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then CapEx_UserDefViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then CapEx_TLBNoStoreCap
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then CapEx_InexactBounds
+ else if sumbool_of_bool ((Z.eqb p0_ 11)) then CapEx_GlobalViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 12)) then CapEx_PermitExecuteViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 13)) then CapEx_PermitLoadViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 14)) then CapEx_PermitStoreViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 15)) then CapEx_PermitLoadCapViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 16)) then CapEx_PermitStoreCapViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 17)) then CapEx_PermitStoreLocalCapViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 18)) then CapEx_PermitSealViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 19)) then CapEx_AccessSystemRegsViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 20)) then CapEx_PermitCCallViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 21)) then CapEx_AccessCCallIDCViolation
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then CapEx_PermitUnsealViolation
+ else CapEx_PermitSetCIDViolation.
+
+Definition num_of_CapEx (arg_ : CapEx)
+: {e : Z & ArithFact (0 <= e /\ e <= 23)} :=
+
+ build_ex(match arg_ with
+ | CapEx_None => 0
+ | CapEx_LengthViolation => 1
+ | CapEx_TagViolation => 2
+ | CapEx_SealViolation => 3
+ | CapEx_TypeViolation => 4
+ | CapEx_CallTrap => 5
+ | CapEx_ReturnTrap => 6
+ | CapEx_TSSUnderFlow => 7
+ | CapEx_UserDefViolation => 8
+ | CapEx_TLBNoStoreCap => 9
+ | CapEx_InexactBounds => 10
+ | CapEx_GlobalViolation => 11
+ | CapEx_PermitExecuteViolation => 12
+ | CapEx_PermitLoadViolation => 13
+ | CapEx_PermitStoreViolation => 14
+ | CapEx_PermitLoadCapViolation => 15
+ | CapEx_PermitStoreCapViolation => 16
+ | CapEx_PermitStoreLocalCapViolation => 17
+ | CapEx_PermitSealViolation => 18
+ | CapEx_AccessSystemRegsViolation => 19
+ | CapEx_PermitCCallViolation => 20
+ | CapEx_AccessCCallIDCViolation => 21
+ | CapEx_PermitUnsealViolation => 22
+ | CapEx_PermitSetCIDViolation => 23
+ end).
+
+Definition undefined_CapEx '(tt : unit)
+: M (CapEx) :=
+
+ (internal_pick
+ [CapEx_None;CapEx_LengthViolation;CapEx_TagViolation;CapEx_SealViolation;CapEx_TypeViolation;CapEx_CallTrap;CapEx_ReturnTrap;CapEx_TSSUnderFlow;CapEx_UserDefViolation;CapEx_TLBNoStoreCap;CapEx_InexactBounds;CapEx_GlobalViolation;CapEx_PermitExecuteViolation;CapEx_PermitLoadViolation;CapEx_PermitStoreViolation;CapEx_PermitLoadCapViolation;CapEx_PermitStoreCapViolation;CapEx_PermitStoreLocalCapViolation;CapEx_PermitSealViolation;CapEx_AccessSystemRegsViolation;CapEx_PermitCCallViolation;CapEx_AccessCCallIDCViolation;CapEx_PermitUnsealViolation;CapEx_PermitSetCIDViolation])
+ : M (CapEx).
+
+Definition CapExCode (ex : CapEx)
+: mword 8 :=
+
+ match ex with
+ | CapEx_None => (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)
+ | CapEx_LengthViolation => (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1] : mword 8)
+ | CapEx_TagViolation => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0] : mword 8)
+ | CapEx_SealViolation => (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1] : mword 8)
+ | CapEx_TypeViolation => (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0] : mword 8)
+ | CapEx_CallTrap => (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1] : mword 8)
+ | CapEx_ReturnTrap => (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B0] : mword 8)
+ | CapEx_TSSUnderFlow => (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B1] : mword 8)
+ | CapEx_UserDefViolation => (vec_of_bits [B0;B0;B0;B0;B1;B0;B0;B0] : mword 8)
+ | CapEx_TLBNoStoreCap => (vec_of_bits [B0;B0;B0;B0;B1;B0;B0;B1] : mword 8)
+ | CapEx_InexactBounds => (vec_of_bits [B0;B0;B0;B0;B1;B0;B1;B0] : mword 8)
+ | CapEx_GlobalViolation => (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0] : mword 8)
+ | CapEx_PermitExecuteViolation => (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B1] : mword 8)
+ | CapEx_PermitLoadViolation => (vec_of_bits [B0;B0;B0;B1;B0;B0;B1;B0] : mword 8)
+ | CapEx_PermitStoreViolation => (vec_of_bits [B0;B0;B0;B1;B0;B0;B1;B1] : mword 8)
+ | CapEx_PermitLoadCapViolation => (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0] : mword 8)
+ | CapEx_PermitStoreCapViolation => (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B1] : mword 8)
+ | CapEx_PermitStoreLocalCapViolation => (vec_of_bits [B0;B0;B0;B1;B0;B1;B1;B0] : mword 8)
+ | CapEx_PermitSealViolation => (vec_of_bits [B0;B0;B0;B1;B0;B1;B1;B1] : mword 8)
+ | CapEx_AccessSystemRegsViolation => (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0] : mword 8)
+ | CapEx_PermitCCallViolation => (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B1] : mword 8)
+ | CapEx_AccessCCallIDCViolation => (vec_of_bits [B0;B0;B0;B1;B1;B0;B1;B0] : mword 8)
+ | CapEx_PermitUnsealViolation => (vec_of_bits [B0;B0;B0;B1;B1;B0;B1;B1] : mword 8)
+ | CapEx_PermitSetCIDViolation => (vec_of_bits [B0;B0;B0;B1;B1;B1;B0;B0] : mword 8)
+ end.
+
+Definition string_of_capex (ex : CapEx)
+: string :=
+
+ match ex with
+ | CapEx_None => "None"
+ | CapEx_LengthViolation => "LengthViolation"
+ | CapEx_TagViolation => "TagViolation"
+ | CapEx_SealViolation => "SealViolation"
+ | CapEx_TypeViolation => "TypeViolation"
+ | CapEx_CallTrap => "CallTrap"
+ | CapEx_ReturnTrap => "ReturnTrap"
+ | CapEx_TSSUnderFlow => "TSSUnderFlow"
+ | CapEx_UserDefViolation => "UserDefViolation"
+ | CapEx_TLBNoStoreCap => "TLBNoStoreCap"
+ | CapEx_InexactBounds => "InexactBounds"
+ | CapEx_GlobalViolation => "GlobalViolation"
+ | CapEx_PermitExecuteViolation => "PermitExecuteViolation"
+ | CapEx_PermitLoadViolation => "PermitLoadViolation"
+ | CapEx_PermitStoreViolation => "PermitStoreViolation"
+ | CapEx_PermitLoadCapViolation => "PermitLoadCapViolation"
+ | CapEx_PermitStoreCapViolation => "PermitStoreCapViolation"
+ | CapEx_PermitStoreLocalCapViolation => "PermitStoreLocalCapViolation"
+ | CapEx_PermitSealViolation => "PermitSealViolation"
+ | CapEx_AccessSystemRegsViolation => "AccessSystemRegsViolation"
+ | CapEx_PermitCCallViolation => "PermitCCallViolation"
+ | CapEx_AccessCCallIDCViolation => "AccessCCallIDCViolation"
+ | CapEx_PermitUnsealViolation => "PermitUnsealViolation"
+ | CapEx_PermitSetCIDViolation => "PermitSetCIDViolation"
+ end.
+
+Definition undefined_CapCauseReg '(tt : unit)
+: M (CapCauseReg) :=
+
+ (undefined_bitvector 16) >>= fun w__0 : mword 16 =>
+ returnm (({| CapCauseReg_CapCauseReg_chunk_0 := w__0 |})
+ : CapCauseReg).
+
+Definition Mk_CapCauseReg (v : mword 16)
+: CapCauseReg :=
+
+ {| CapCauseReg_CapCauseReg_chunk_0 := (subrange_vec_dec v 15 0) |}.
+
+Definition _get_CapCauseReg_bits (v : CapCauseReg)
+: mword 16 :=
+
+ subrange_vec_dec v.(CapCauseReg_CapCauseReg_chunk_0) 15 0.
+
+Definition _set_CapCauseReg_bits
+(r_ref : register_ref regstate register_value CapCauseReg) (v : mword 16)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CapCauseReg_CapCauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CapCauseReg_CapCauseReg_chunk_0) 15 0 (subrange_vec_dec v 15 0)) ]}
+ : CapCauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CapCauseReg_bits (v : CapCauseReg) (x : mword 16)
+: CapCauseReg :=
+
+ {[ v with
+ CapCauseReg_CapCauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CapCauseReg_CapCauseReg_chunk_0) 15 0 (subrange_vec_dec x 15 0)) ]}.
+
+Definition _get_CapCauseReg_ExcCode (v : CapCauseReg)
+: mword 8 :=
+
+ subrange_vec_dec v.(CapCauseReg_CapCauseReg_chunk_0) 15 8.
+
+Definition _set_CapCauseReg_ExcCode
+(r_ref : register_ref regstate register_value CapCauseReg) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CapCauseReg_CapCauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CapCauseReg_CapCauseReg_chunk_0) 15 8 (subrange_vec_dec v 7 0)) ]}
+ : CapCauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CapCauseReg_ExcCode (v : CapCauseReg) (x : mword 8)
+: CapCauseReg :=
+
+ {[ v with
+ CapCauseReg_CapCauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CapCauseReg_CapCauseReg_chunk_0) 15 8 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_CapCauseReg_RegNum (v : CapCauseReg)
+: mword 8 :=
+
+ subrange_vec_dec v.(CapCauseReg_CapCauseReg_chunk_0) 7 0.
+
+Definition _set_CapCauseReg_RegNum
+(r_ref : register_ref regstate register_value CapCauseReg) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ CapCauseReg_CapCauseReg_chunk_0 :=
+ (update_subrange_vec_dec r.(CapCauseReg_CapCauseReg_chunk_0) 7 0 (subrange_vec_dec v 7 0)) ]}
+ : CapCauseReg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_CapCauseReg_RegNum (v : CapCauseReg) (x : mword 8)
+: CapCauseReg :=
+
+ {[ v with
+ CapCauseReg_CapCauseReg_chunk_0 :=
+ (update_subrange_vec_dec v.(CapCauseReg_CapCauseReg_chunk_0) 7 0 (subrange_vec_dec x 7 0)) ]}.
+
+Definition execute_branch_pcc (newPCC : Capability)
+: M (unit) :=
+
+ write_reg DelayedPC_ref (to_bits 64 (projT1 (getCapOffset newPCC))) >>
+ write_reg DelayedPCC_ref newPCC >>
+ write_reg BranchPending_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1)
+ : M (unit).
+
+Definition ERETHook '(tt : unit)
+: M (unit) :=
+
+ read_reg EPCC_ref >>= fun w__0 : Capability => (set_next_pcc w__0) : M (unit).
+
+Definition raise_c2_exception8 {o : Type} (capEx : CapEx) (regnum : mword 8)
+: M (o) :=
+
+ let '_ :=
+ (if (trace) then
+ let '_ := (prerr " C2Ex ") : unit in
+ let '_ := (prerr (string_of_capex capEx)) : unit in
+ let '_ := (prerr " reg: ") : unit in
+ prerr_endline (string_of_bits regnum)
+ else tt)
+ : unit in
+ (_set_CapCauseReg_ExcCode CapCause_ref (CapExCode capEx)) >>
+ (_set_CapCauseReg_RegNum CapCause_ref regnum) >>
+ let mipsEx :=
+ if ((orb (generic_eq capEx CapEx_CallTrap) (generic_eq capEx CapEx_ReturnTrap))) then C2Trap
+ else C2E in
+ (SignalException mipsEx)
+ : M (o).
+
+Definition raise_c2_exception {o : Type} (capEx : CapEx) (regnum : mword 5)
+: M (o) :=
+
+ let reg8 := concat_vec (vec_of_bits [B0;B0;B0] : mword 3) regnum in
+ (raise_c2_exception8 capEx reg8)
+ : M (o).
+
+Definition raise_c2_exception_noreg {o : Type} (capEx : CapEx)
+: M (o) :=
+
+ (raise_c2_exception8 capEx (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1] : mword 8))
+ : M (o).
+
+Definition pcc_access_system_regs '(tt : unit)
+: M (bool) :=
+
+ read_reg PCC_ref >>= fun w__0 : Capability =>
+ returnm (w__0.(Capability_access_system_regs)
+ : bool).
+
+Definition MEMr_tagged (addr : mword 64)
+: M ((bool * mword (32 * 8))) :=
+
+ assert_exp' (Z.eqb (projT1 (emod_with_eq (projT1 (uint addr)) cap_size)) 0) "file ""cheri_prelude_common.sail"", line 357, character 40 to line 357, character 40: ((unsigned(addr) % cap_size) == 0)" >>= fun _ =>
+ (read_tag_bool addr) >>= fun tag =>
+ (MEMr addr cap_size) >>= fun data => returnm (tag, reverse_endianness data).
+
+Definition MEMr_tagged_reserve (addr : mword 64)
+: M ((bool * mword (32 * 8))) :=
+
+ assert_exp' (Z.eqb (projT1 (emod_with_eq (projT1 (uint addr)) cap_size)) 0) "file ""cheri_prelude_common.sail"", line 370, character 40 to line 370, character 40: ((unsigned(addr) % cap_size) == 0)" >>= fun _ =>
+ (read_tag_bool addr) >>= fun tag =>
+ (MEMr_reserve addr cap_size) >>= fun data => returnm (tag, reverse_endianness data).
+
+Definition MEMw_tagged (addr : mword 64) (tag : bool) (data : mword (32 * 8))
+: M (unit) :=
+
+ assert_exp' (Z.eqb (projT1 (emod_with_eq (projT1 (uint addr)) cap_size)) 0) "file ""cheri_prelude_common.sail"", line 383, character 40 to line 383, character 40: ((unsigned(addr) % cap_size) == 0)" >>= fun _ =>
+ (MEMea addr cap_size) >>
+ (MEMval addr cap_size (reverse_endianness data)) >> (write_tag_bool addr tag) : M (unit).
+
+Definition MEMw_tagged_conditional (addr : mword 64) (tag : bool) (data : mword (32 * 8))
+: M (bool) :=
+
+ assert_exp' (Z.eqb (projT1 (emod_with_eq (projT1 (uint addr)) cap_size)) 0) "file ""cheri_prelude_common.sail"", line 396, character 40 to line 396, character 40: ((unsigned(addr) % cap_size) == 0)" >>= fun _ =>
+ (MEMea_conditional addr cap_size) >>
+ (MEMval_conditional addr cap_size (reverse_endianness data)) >>= fun success =>
+ (if (success) then (write_tag_bool addr tag) : M (unit)
+ else returnm (tt : unit)) >>
+ returnm (success
+ : bool).
+
+Definition cap_addr_mask := to_bits 64 (Z.sub (projT1 (pow2 64)) cap_size).
+Hint Unfold cap_addr_mask : sail.
+Definition MEMw_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size))
+`{ArithFact (size >= 1)}
+: M (unit) :=
+
+ let ledata := reverse_endianness data in
+ (if ((eq_vec addr
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))) then
+ write_reg UART_WDATA_ref (subrange_vec_dec ledata 7 0) >>
+ write_reg UART_WRITTEN_ref (vec_of_bits [B1] : mword 1)
+ : M (unit)
+ else
+ assert_exp' (eq_vec (and_vec addr cap_addr_mask)
+ (and_vec (add_vec addr (to_bits 64 (Z.sub size 1))) cap_addr_mask)) "file ""cheri_prelude_common.sail"", line 420, character 86 to line 420, character 86: ((addr & cap_addr_mask) == ((addr + to_bits(64, (size - 1))) & cap_addr_mask))" >>= fun _ =>
+ (MEMea addr size) >>
+ (MEMval addr size ledata) >> (write_tag_bool (and_vec addr cap_addr_mask) false) : M (unit))
+ : M (unit).
+
+Definition MEMw_conditional_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size))
+`{ArithFact (size >= 1)}
+: M (bool) :=
+
+ assert_exp' (eq_vec (and_vec addr cap_addr_mask)
+ (and_vec (add_vec addr (to_bits 64 (Z.sub size 1))) cap_addr_mask)) "file ""cheri_prelude_common.sail"", line 434, character 86 to line 434, character 86: ((addr & cap_addr_mask) == ((addr + to_bits(64, (size - 1))) & cap_addr_mask))" >>= fun _ =>
+ (MEMea_conditional addr size) >>
+ (MEMval_conditional addr size (reverse_endianness data)) >>= fun success =>
+ (if (success) then (write_tag_bool (and_vec addr cap_addr_mask) false) : M (unit)
+ else returnm (tt : unit)) >>
+ returnm (success
+ : bool).
+
+Definition checkDDCPerms (ddc : Capability) (accessType : MemAccessType)
+: M (unit) :=
+
+ (if ((negb ddc.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (unit)
+ else if (ddc.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (unit)
+ else returnm (tt : unit)) >>
+ (match accessType with
+ | Instruction =>
+ (assert_exp false "file ""cheri_prelude_common.sail"", line 451, character 35 to line 451, character 35: false")
+ : M (unit)
+ | LoadData =>
+ (if ((negb ddc.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit)
+ | StoreData =>
+ (if ((negb ddc.(Capability_permit_store))) then
+ (raise_c2_exception CapEx_PermitStoreViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit)
+ end)
+ : M (unit).
+
+Definition addrWrapper (addr : mword 64) (accessType : MemAccessType) (width : WordType)
+: M (mword 64) :=
+
+ read_reg DDC_ref >>= fun ddc =>
+ (checkDDCPerms ddc accessType) >>
+ let 'cursor := projT1 (getCapCursor ddc) in
+ let 'vAddr := projT1 (emod_with_eq (Z.add cursor (projT1 (uint addr))) (projT1 (pow2 64))) in
+ let 'size := projT1 (wordWidthBytes width) in
+ let '(existT _ base _, existT _ top _) := getCapBounds ddc in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr size) top)) then
+ (raise_c2_exception CapEx_LengthViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (mword 64)
+ else if sumbool_of_bool ((Z.ltb vAddr base)) then
+ (raise_c2_exception CapEx_LengthViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (mword 64)
+ else returnm ((to_bits 64 vAddr) : mword 64))
+ : M (mword 64).
+
+Definition addrWrapperUnaligned
+(addr : mword 64) (accessType : MemAccessType) (width : WordTypeUnaligned)
+: M (mword 64) :=
+
+ read_reg DDC_ref >>= fun ddc =>
+ (checkDDCPerms ddc accessType) >>
+ let 'cursor := projT1 (getCapCursor ddc) in
+ let 'vAddr := projT1 (emod_with_eq (Z.add cursor (projT1 (uint addr))) (projT1 (pow2 64))) in
+ let 'woffset := projT1 (emod_with_eq vAddr 4) in
+ let 'doffset := projT1 (emod_with_eq vAddr 8) in
+ let '(waddr, size) :=
+ (match width with
+ | WL => (vAddr, Z.sub 4 woffset)
+ | WR => (Z.sub vAddr woffset, Z.add woffset 1)
+ | DL => (vAddr, Z.sub 8 doffset)
+ | DR => (Z.sub vAddr doffset, Z.add doffset 1)
+ end)
+ : (Z * Z) in
+ let '(existT _ base _, existT _ top _) := getCapBounds ddc in
+ (if sumbool_of_bool ((Z.gtb (Z.add waddr size) top)) then
+ (raise_c2_exception CapEx_LengthViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (mword 64)
+ else if sumbool_of_bool ((Z.ltb waddr base)) then
+ (raise_c2_exception CapEx_LengthViolation (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ : M (mword 64)
+ else returnm ((to_bits 64 vAddr) : mword 64))
+ : M (mword 64).
+
+Definition execute_branch (pc : mword 64)
+: M (unit) :=
+
+ read_reg PCC_ref >>= fun w__0 : Capability =>
+ let 'len := projT1 (getCapLength w__0) in
+ (if sumbool_of_bool ((Z.gtb (Z.add (projT1 (uint pc)) 4) len)) then
+ (raise_c2_exception_noreg CapEx_LengthViolation)
+ : M (unit)
+ else returnm (tt : unit)) >>
+ (execute_branch_mips pc)
+ : M (unit).
+
+Definition TranslatePC (vAddr : mword 64)
+: M (mword 64) :=
+
+ (incrementCP0Count tt) >>
+ read_reg PCC_ref >>= fun pcc =>
+ let '(existT _ base _, existT _ top _) := getCapBounds pcc in
+ let 'absPC := Z.add base (projT1 (uint vAddr)) in
+ (if ((neq_int (projT1 (emod_with_eq absPC 4)) 0)) then
+ (SignalExceptionBadAddr AdEL (to_bits 64 absPC))
+ : M (mword 64)
+ else if ((negb pcc.(Capability_tag))) then
+ (raise_c2_exception_noreg CapEx_TagViolation)
+ : M (mword 64)
+ else if (pcc.(Capability_sealed)) then
+ (raise_c2_exception_noreg CapEx_SealViolation)
+ : M (mword 64)
+ else if ((negb pcc.(Capability_permit_execute))) then
+ (raise_c2_exception_noreg CapEx_PermitExecuteViolation)
+ : M (mword 64)
+ else if sumbool_of_bool ((Z.gtb (Z.add absPC 4) top)) then
+ (raise_c2_exception_noreg CapEx_LengthViolation)
+ : M (mword 64)
+ else (TLBTranslate (to_bits 64 absPC) Instruction) : M (mword 64))
+ : M (mword 64).
+
+Definition checkCP2usable '(tt : unit)
+: M (unit) :=
+
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ (if ((negb ((bit_to_bool (access_vec_dec (_get_StatusReg_CU w__0) 2)) : bool))) then
+ (_set_CauseReg_CE CP0Cause_ref (vec_of_bits [B1;B0] : mword 2)) >>
+ (SignalException CpU)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition init_cp2_state '(tt : unit)
+: M (unit) :=
+
+ write_reg PCC_ref default_cap >>
+ write_reg NextPCC_ref default_cap >>
+ write_reg DelayedPCC_ref default_cap >>
+ write_reg DDC_ref default_cap >>
+ write_reg KCC_ref default_cap >>
+ write_reg EPCC_ref default_cap >>
+ write_reg KDC_ref null_cap >>
+ write_reg KR1C_ref null_cap >>
+ write_reg KR2C_ref null_cap >>
+ write_reg CTLSP_ref null_cap >>
+ write_reg CTLSU_ref null_cap >>
+ (foreach_ZM_up 1 31 1 tt
+ (fun i _ unit_var =>
+ let idx := to_bits 5 i in
+ (writeCapReg idx null_cap)
+ : M (unit)))
+ : M (unit).
+
+Definition cp2_next_pc '(tt : unit)
+: M (unit) :=
+
+ read_reg NextPCC_ref >>= fun w__0 : Capability =>
+ write_reg PCC_ref w__0 >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
+ (if (((bits_to_bool w__1) : bool)) then
+ read_reg DelayedPCC_ref >>= fun w__2 : Capability => write_reg NextPCC_ref w__2 : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition readEPCC '(tt : unit)
+: M (Capability) :=
+
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ (if ((Bool.eqb ((bits_to_bool (_get_StatusReg_ERL w__0)) : bool) ((bit_to_bool B1) : bool)))
+ then
+ ((read_reg CP0ErrorEPC_ref) : M (mword 64))
+ : M (bits 64)
+ else ((read_reg CP0EPC_ref) : M (mword 64)) : M (bits 64)) >>= fun epccOffset =>
+ read_reg EPCC_ref >>= fun epcc =>
+ let '(success, epcc2) := setCapOffset epcc epccOffset in
+ returnm ((if (success) then epcc2
+ else
+ int_to_cap
+ (add_vec_int (to_bits 64 (projT1 (getCapBase epcc))) (projT1 (uint epccOffset))))
+ : Capability).
+
+Definition dump_cp2_state '(tt : unit)
+: M (unit) :=
+
+ read_reg PCC_ref >>= fun w__0 : Capability =>
+ (capToString w__0 true) >>= fun w__1 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP PCC" w__1)) : unit in
+ (foreach_ZM_up 0 31 1 tt
+ (fun i _ unit_var =>
+ (readCapReg (to_bits 5 i)) >>= fun w__2 : Capability =>
+ (capToString w__2 true) >>= fun w__3 : string =>
+ returnm (let '_ :=
+ (print_endline (String.append "DEBUG CAP REG " (String.append (string_of_int i) w__3)))
+ : unit in
+ tt))) >>
+ read_reg DDC_ref >>= fun w__4 : Capability =>
+ (capToString w__4 true) >>= fun w__5 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 00" w__5)) : unit in
+ read_reg CTLSU_ref >>= fun w__6 : Capability =>
+ (capToString w__6 true) >>= fun w__7 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 01" w__7)) : unit in
+ read_reg CTLSP_ref >>= fun w__8 : Capability =>
+ (capToString w__8 true) >>= fun w__9 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 08" w__9)) : unit in
+ read_reg KR1C_ref >>= fun w__10 : Capability =>
+ (capToString w__10 true) >>= fun w__11 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 22" w__11)) : unit in
+ read_reg KR2C_ref >>= fun w__12 : Capability =>
+ (capToString w__12 true) >>= fun w__13 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 23" w__13)) : unit in
+ read_reg KCC_ref >>= fun w__14 : Capability =>
+ (capToString w__14 true) >>= fun w__15 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 29" w__15)) : unit in
+ read_reg KDC_ref >>= fun w__16 : Capability =>
+ (capToString w__16 true) >>= fun w__17 : string =>
+ let '_ := (print_endline (String.append "DEBUG CAP HWREG 30" w__17)) : unit in
+ (readEPCC tt) >>= fun w__18 : Capability =>
+ (capToString w__18 true) >>= fun w__19 : string =>
+ returnm ((print_endline (String.append "DEBUG CAP HWREG 31" w__19))
+ : unit).
+
+Definition TLBWriteEntry (idx : mword 6)
+: M (unit) :=
+
+ ((read_reg TLBPageMask_ref) : M (mword 16)) >>= fun pagemask =>
+ let b__0 := pagemask in
+ (if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16)))
+ then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else if ((eq_vec b__0
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16))) then
+ returnm (tt
+ : unit)
+ else (SignalException MCheck) : M (unit)) >>
+ let 'i := projT1 (uint idx) in
+ let entry := vec_access_dec TLBEntries i in
+ (_set_TLBEntry_pagemask entry pagemask) >>
+ read_reg TLBEntryHi_ref >>= fun w__0 : TLBEntryHiReg =>
+ (_set_TLBEntry_r entry (_get_TLBEntryHiReg_R w__0)) >>
+ read_reg TLBEntryHi_ref >>= fun w__1 : TLBEntryHiReg =>
+ (_set_TLBEntry_vpn2 entry (_get_TLBEntryHiReg_VPN2 w__1)) >>
+ read_reg TLBEntryHi_ref >>= fun w__2 : TLBEntryHiReg =>
+ (_set_TLBEntry_asid entry (_get_TLBEntryHiReg_ASID w__2)) >>
+ (and_boolM
+ (read_reg TLBEntryLo0_ref >>= fun w__3 : TLBEntryLoReg =>
+ returnm ((bits_to_bool (_get_TLBEntryLoReg_G w__3))
+ : bool))
+ (read_reg TLBEntryLo1_ref >>= fun w__4 : TLBEntryLoReg =>
+ returnm ((bits_to_bool (_get_TLBEntryLoReg_G w__4))
+ : bool))) >>= fun w__5 : bool =>
+ (_set_TLBEntry_g entry ((bool_to_bits w__5) : mword 1)) >>
+ (_set_TLBEntry_valid entry ((cast_unit_vec B1) : mword 1)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__6 : TLBEntryLoReg =>
+ (_set_TLBEntry_caps0 entry (_get_TLBEntryLoReg_CapS w__6)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__7 : TLBEntryLoReg =>
+ (_set_TLBEntry_capl0 entry (_get_TLBEntryLoReg_CapL w__7)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__8 : TLBEntryLoReg =>
+ (_set_TLBEntry_pfn0 entry (_get_TLBEntryLoReg_PFN w__8)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__9 : TLBEntryLoReg =>
+ (_set_TLBEntry_c0 entry (_get_TLBEntryLoReg_C w__9)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__10 : TLBEntryLoReg =>
+ (_set_TLBEntry_d0 entry (_get_TLBEntryLoReg_D w__10)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__11 : TLBEntryLoReg =>
+ (_set_TLBEntry_v0 entry (_get_TLBEntryLoReg_V w__11)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__12 : TLBEntryLoReg =>
+ (_set_TLBEntry_caps1 entry (_get_TLBEntryLoReg_CapS w__12)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__13 : TLBEntryLoReg =>
+ (_set_TLBEntry_capl1 entry (_get_TLBEntryLoReg_CapL w__13)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__14 : TLBEntryLoReg =>
+ (_set_TLBEntry_pfn1 entry (_get_TLBEntryLoReg_PFN w__14)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__15 : TLBEntryLoReg =>
+ (_set_TLBEntry_c1 entry (_get_TLBEntryLoReg_C w__15)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__16 : TLBEntryLoReg =>
+ (_set_TLBEntry_d1 entry (_get_TLBEntryLoReg_D w__16)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__17 : TLBEntryLoReg =>
+ (_set_TLBEntry_v1 entry (_get_TLBEntryLoReg_V w__17))
+ : M (unit).
+
+Definition decode (v__0 : mword 32)
+: option ast :=
+
+ if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (DADDIU
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DADDU
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (DADDI
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DADD
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (ADD
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ADDI
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (ADDU
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ADDIU
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSUBU
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSUB
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SUB
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SUBU
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B0;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (AND
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ANDI
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B0;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (OR
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ORI
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (NOR
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (XOR
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B1;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (XORI
+ ((rs, rt, imm)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (LUI
+ ((rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSLL
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSLL32
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B0;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSLLV
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSRA
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSRA32
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSRAV
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSRL
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B1;B1;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSRL32
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DSRLV
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let sa : regno := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SLL
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SLLV
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let sa : regno := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SRA
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SRAV
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let sa : regno := subrange_vec_dec v__0 10 6 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SRL
+ ((rt, rd, sa)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SRLV
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SLT
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (SLTI
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SLTU
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (SLTIU
+ ((rs, rt, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MOVN
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MOVZ
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 16 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MFHI
+ (rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 16 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MFLO
+ (rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B1]
+ : mword (20 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MTHI
+ (rs))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B1;B1]
+ : mword (20 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MTLO
+ (rs))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MUL
+ ((rs, rt, rd)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MULT
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B1]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MULTU
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DMULT
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B1]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DMULTU
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MADD
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MADDU
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MSUB
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MSUBU
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DIV
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DIVU
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DDIV
+ ((rs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DDIVU
+ ((rs, rt)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword (31 - 26 + 1)))) then
+ let offset : bits 26 := subrange_vec_dec v__0 25 0 in
+ Some
+ (J
+ (offset))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword (31 - 26 + 1)))) then
+ let offset : bits 26 := subrange_vec_dec v__0 25 0 in
+ Some
+ (JAL
+ (offset))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__0 20 11)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (20 - 11 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword (5 - 0 + 1)))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (JR
+ (rs))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword (5 - 0 + 1)))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (JALR
+ ((rs, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BEQ
+ ((rs, rt, imm, false, false)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BEQ
+ ((rs, rt, imm, false, true)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BEQ
+ ((rs, rt, imm, true, false)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BEQ
+ ((rs, rt, imm, true, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, LT', false, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, LT', true, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B1;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, LT', false, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B1;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, LT', true, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B1] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, GE, false, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B0;B1] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, GE, true, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B1;B1] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, GE, false, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B1;B1] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, GE, true, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, GT', false, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, GT', false, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, LE, false, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BCMPZ
+ ((rs, imm, LE, false, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ Some
+ (SYSCALL
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword (5 - 0 + 1))))) then
+ Some
+ (BREAK
+ (tt))
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0]
+ : mword 32))) then
+ Some
+ (WAIT
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, GE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, GEU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, LT')))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, LTU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, EQ')))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B1;B1;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, NE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B1;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (TRAPIMM
+ ((rs, imm, EQ')))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B1;B1;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (TRAPIMM
+ ((rs, imm, NE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B0;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (TRAPIMM
+ ((rs, imm, GE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B0;B1] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (TRAPIMM
+ ((rs, imm, GEU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B1;B0] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (TRAPIMM
+ ((rs, imm, LT')))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B1;B1] : mword (20 - 16 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (TRAPIMM
+ ((rs, imm, LTU)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((B, true, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((B, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((H, true, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((H, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((W, true, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((W, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B1;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((D, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((W, true, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((D, false, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((B, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((H, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((W, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((D, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((W, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((D, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LWL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LWR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SWL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SWR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LDL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B1;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LDR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B0;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SDL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let offset : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SDR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B1;B1] : mword (31 - 26 + 1)))) then
+ let op : regno := subrange_vec_dec v__0 20 16 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (CACHE
+ ((base, op, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 11)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 11 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ Some
+ (SYNC
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 3)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MFC0
+ ((rt, rd, sel, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 3)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MFC0
+ ((rt, rd, sel, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ Some
+ (HCF
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B1;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ Some
+ (HCF
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 3)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MTC0
+ ((rt, rd, sel, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 3)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (MTC0
+ ((rt, rd, sel, true)))
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0]
+ : mword 32))) then
+ Some
+ ((TLBWI
+ (tt))
+ : ast)
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0]
+ : mword 32))) then
+ Some
+ ((TLBWR
+ (tt))
+ : ast)
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1]
+ : mword 32))) then
+ Some
+ ((TLBR
+ (tt))
+ : ast)
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0]
+ : mword 32))) then
+ Some
+ ((TLBP
+ (tt))
+ : ast)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (RDHWR
+ ((rt, rd)))
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0]
+ : mword 32))) then
+ Some
+ (ERET
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetPerm
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetType
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetBase
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetLen
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetTag
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetSealed
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CGetCause
+ (rd))
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32))) then
+ Some
+ (CReturn
+ (tt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B0;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetOffset
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 11)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 11 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ Some
+ (CSetCause
+ (rt))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CAndPerm
+ ((cd, cb, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CToPtr
+ ((rd, cb, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CEQ)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CNE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CLT)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CLE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CLTU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B0;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CLEU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B1;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CEXEQ)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, ct, CNEXEQ)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B0;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CIncOffset
+ ((cd, cb, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B0;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CSetOffset
+ ((cd, cb, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CSetBounds
+ ((cd, cb, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword (10 - 0 + 1))))) then
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CClearTag
+ ((cd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CFromPtr
+ ((cd, cb, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B0;B1;B1] : mword (31 - 21 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__0 15 11)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (15 - 11 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1)))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CCheckPerm
+ ((cs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B0;B1;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword (10 - 0 + 1))))) then
+ let cs : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CCheckType
+ ((cs, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B1;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSeal
+ ((cd, cs, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B1;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CUnseal
+ ((cd, cs, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B1;B1] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CJALR
+ ((cd, cb, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 16 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CJALR
+ (((vec_of_bits [B0;B0;B0;B0;B0] : mword 5), cb, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CGetCause
+ (rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSetCause
+ (rs))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CGetPCC
+ (cd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CJALR
+ (((vec_of_bits [B0;B0;B0;B0;B0] : mword 5), cb, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CGetCID
+ (rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B1;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSetCID
+ (cb))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B0;B0;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let cs : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CCheckPerm
+ ((cs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B0;B0;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let cs : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CCheckType
+ ((cs, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CClearTag
+ ((cd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B0;B1;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CMOVX
+ ((cd, cs, (vec_of_bits [B0;B0;B0;B0;B0] : mword 5), false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CJALR
+ ((cd, cb, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B1;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadTags
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetPerm
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetType
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetBase
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetLen
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetTag
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B1;B0;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetSealed
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CGetOffset
+ ((rd, cb)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CGetPCCSetOffset
+ ((cd, rs)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B1;B0;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let sel : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CReadHwr
+ ((cd, sel)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let sel : regno := subrange_vec_dec v__0 15 11 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CWriteHwr
+ ((cb, sel)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let sel : regno := subrange_vec_dec v__0 15 11 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CGetAddr
+ ((cb, sel)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSeal
+ ((cd, cs, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CUnseal
+ ((cd, cs, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CAndPerm
+ ((cd, cs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSetOffset
+ ((cd, cs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSetBounds
+ ((cd, cs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSetBoundsExact
+ ((cd, cs, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CIncOffset
+ ((cd, cb, rt)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CBuildCap
+ ((cd, cb, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B1;B1;B0] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CCopyType
+ ((cd, cb, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CCSeal
+ ((cd, cs, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CToPtr
+ ((rd, cb, ct)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 10 6 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CFromPtr
+ ((cd, cb, rs)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CSub
+ ((rt, cb, cs)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CMOVX
+ ((cd, cs, rs, false)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 15 11 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CMOVX
+ ((cd, cs, rs, true)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CEQ)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B1;B0;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CNE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CLT)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CLE)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CLTU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CLEU)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B1;B1;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CEXEQ)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B0;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cs : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CPtrCmp
+ ((rd, cb, cs, CNEXEQ)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let ct : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CTestSubset
+ ((rd, cb, ct)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B0;B0;B1] : mword (31 - 21 + 1)))) then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CBX
+ ((cd, imm, true)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B0;B1;B0] : mword (31 - 21 + 1)))) then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CBX
+ ((cd, imm, false)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B1] : mword (31 - 21 + 1)))) then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CBZ
+ ((cd, imm, false)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B1;B0] : mword (31 - 21 + 1)))) then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CBZ
+ ((cd, imm, true)))
+ else if ((eq_vec v__0
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
+ : mword 32))) then
+ Some
+ (CReturn
+ (tt))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B1] : mword (31 - 21 + 1)))) then
+ let selector : bits 11 := subrange_vec_dec v__0 10 0 in
+ let cs : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CCall
+ ((cs, cb, selector)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword (31 - 16 + 1))))
+ then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ClearRegs
+ ((GPLo, imm)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B1;B0;B0;B0;B0;B1] : mword (31 - 16 + 1))))
+ then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ClearRegs
+ ((GPHi, imm)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B1;B0;B0;B0;B1;B0] : mword (31 - 16 + 1))))
+ then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ClearRegs
+ ((CLo, imm)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 16)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B1;B1;B1;B1;B0;B0;B0;B1;B1] : mword (31 - 16 + 1))))
+ then
+ let imm : bits 16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (ClearRegs
+ ((CHi, imm)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B1;B1] : mword (31 - 21 + 1)))) then
+ let imm : bits 11 := subrange_vec_dec v__0 10 0 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CIncOffsetImmediate
+ ((cd, cb, imm)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B1;B0;B0] : mword (31 - 21 + 1)))) then
+ let imm : bits 11 := subrange_vec_dec v__0 10 0 in
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CSetBoundsImmediate
+ ((cd, cb, imm)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, false, B)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, true, B)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, false, H)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, true, H)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, false, W)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, true, W)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rd : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLoad
+ ((rd, cb, rt, offset, false, D)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, false, B)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, true, B)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, false, H)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, true, H)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, false, W)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, true, W)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLoadLinked
+ ((rd, cb, false, D)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CStore
+ ((rs, cb, rt, offset, B)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CStore
+ ((rs, cb, rt, offset, H)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CStore
+ ((rs, cb, rt, offset, W)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 2 0) (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))))
+ then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ let offset : bits 8 := subrange_vec_dec v__0 10 3 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CStore
+ ((rs, cb, rt, offset, D)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CStoreConditional
+ ((rs, cb, rd, B)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CStoreConditional
+ ((rs, cb, rd, H)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CStoreConditional
+ ((rs, cb, rd, W)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let rs : regno := subrange_vec_dec v__0 20 16 in
+ let rd : regno := subrange_vec_dec v__0 10 6 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CStoreConditional
+ ((rs, cb, rd, D)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B1;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let offset : bits 11 := subrange_vec_dec v__0 10 0 in
+ let cs : regno := subrange_vec_dec v__0 25 21 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CSC
+ ((cs, cb, rt, offset)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let rd : regno := subrange_vec_dec v__0 10 6 in
+ let cs : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CSCC
+ ((cs, cb, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B1;B1;B0] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 15 11 in
+ let offset : bits 11 := subrange_vec_dec v__0 10 0 in
+ let cd : regno := subrange_vec_dec v__0 25 21 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLC
+ ((cd, cb, rt, offset)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B1;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 10 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
+ let cd : regno := subrange_vec_dec v__0 20 16 in
+ let cb : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (CLLC
+ ((cd, cb)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let offset : bits 16 := subrange_vec_dec v__0 15 0 in
+ let cd : regno := subrange_vec_dec v__0 25 21 in
+ let cb : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (CLCBI
+ ((cd, cb, offset)))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 21)
+ (vec_of_bits [B0;B1;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 15 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0]
+ : mword (15 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
+ Some
+ (C2Dump
+ (rt))
+ else Some (RI (tt)).
+
+Definition execute_XORI (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (xor_vec w__0 (mips_zero_extend 64 imm)))
+ : M (unit).
+
+Definition execute_XOR (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (xor_vec w__0 w__1)) : M (unit).
+
+Definition execute_WAIT '(tt : unit)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ write_reg NextPC_ref w__1
+ : M (unit).
+
+Definition execute_TRAPREG (rs : mword 5) (rt : mword 5) (cmp : Comparison)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rs_val =>
+ (rGPR rt) >>= fun rt_val =>
+ let condition := compare cmp rs_val rt_val in
+ (if (condition) then (SignalException Tr) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_TRAPIMM (rs : mword 5) (imm : mword 16) (cmp : Comparison)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rs_val =>
+ let imm_val : bits 64 := mips_sign_extend 64 imm in
+ let condition := compare cmp rs_val imm_val in
+ (if (condition) then (SignalException Tr) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_TLBWR '(tt : unit)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ (TLBWriteEntry w__0)
+ : M (unit).
+
+Definition execute_TLBWI '(tt : unit)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ ((read_reg TLBIndex_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ (TLBWriteEntry w__0)
+ : M (unit).
+
+Definition execute_TLBR '(tt : unit)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ ((read_reg TLBIndex_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ let 'i := projT1 (uint w__0) in
+ (reg_deref (vec_access_dec TLBEntries i)) >>= fun entry =>
+ write_reg TLBPageMask_ref (_get_TLBEntry_pagemask entry) >>
+ (_set_TLBEntryHiReg_R TLBEntryHi_ref (_get_TLBEntry_r entry)) >>
+ (_set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (_get_TLBEntry_vpn2 entry)) >>
+ (_set_TLBEntryHiReg_ASID TLBEntryHi_ref (_get_TLBEntry_asid entry)) >>
+ (_set_TLBEntryLoReg_CapS TLBEntryLo0_ref (_get_TLBEntry_caps0 entry)) >>
+ (_set_TLBEntryLoReg_CapL TLBEntryLo0_ref (_get_TLBEntry_capl0 entry)) >>
+ (_set_TLBEntryLoReg_PFN TLBEntryLo0_ref (_get_TLBEntry_pfn0 entry)) >>
+ (_set_TLBEntryLoReg_C TLBEntryLo0_ref (_get_TLBEntry_c0 entry)) >>
+ (_set_TLBEntryLoReg_D TLBEntryLo0_ref (_get_TLBEntry_d0 entry)) >>
+ (_set_TLBEntryLoReg_V TLBEntryLo0_ref (_get_TLBEntry_v0 entry)) >>
+ (_set_TLBEntryLoReg_G TLBEntryLo0_ref (_get_TLBEntry_g entry)) >>
+ (_set_TLBEntryLoReg_CapS TLBEntryLo1_ref (_get_TLBEntry_caps1 entry)) >>
+ (_set_TLBEntryLoReg_CapL TLBEntryLo1_ref (_get_TLBEntry_capl1 entry)) >>
+ (_set_TLBEntryLoReg_PFN TLBEntryLo1_ref (_get_TLBEntry_pfn1 entry)) >>
+ (_set_TLBEntryLoReg_C TLBEntryLo1_ref (_get_TLBEntry_c1 entry)) >>
+ (_set_TLBEntryLoReg_D TLBEntryLo1_ref (_get_TLBEntry_d1 entry)) >>
+ (_set_TLBEntryLoReg_V TLBEntryLo1_ref (_get_TLBEntry_v1 entry)) >>
+ (_set_TLBEntryLoReg_G TLBEntryLo1_ref (_get_TLBEntry_g entry))
+ : M (unit).
+
+Definition execute_TLBP '(tt : unit)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ read_reg TLBEntryHi_ref >>= fun w__0 : TLBEntryHiReg =>
+ (tlbSearch (_get_TLBEntryHiReg_bits w__0)) >>= fun result =>
+ (match result with
+ | Some (idx) =>
+ write_reg TLBProbe_ref (vec_of_bits [B0] : mword 1) >>
+ write_reg TLBIndex_ref idx
+ : M (unit)
+ | None =>
+ write_reg TLBProbe_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg TLBIndex_ref (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6)
+ : M (unit)
+ end)
+ : M (unit).
+
+Definition execute_Store
+(width : WordType) (conditional : bool) (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapper (add_vec (mips_sign_extend 64 offset) w__0) StoreData width) >>= fun vAddr : bits 64 =>
+ (rGPR rt) >>= fun rt_val =>
+ (if ((negb (isAddressAligned vAddr width))) then (SignalExceptionBadAddr AdES vAddr) : M (unit)
+ else
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (if (conditional) then
+ ((read_reg CP0LLBit_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
+ (if (((bit_to_bool (access_vec_dec w__1 0)) : bool)) then
+ (match width with
+ | W => (MEMw_conditional_wrapper pAddr 4 (subrange_vec_dec rt_val 31 0)) : M (bool)
+ | D => (MEMw_conditional_wrapper pAddr 8 rt_val) : M (bool)
+ | _ => (throw (Error_internal_error (tt))) : M (bool)
+ end)
+ : M (bool)
+ else returnm (false : bool)) >>= fun success : bool =>
+ (wGPR rt (mips_zero_extend 64 (bool_to_bits success)))
+ : M (unit)
+ else
+ (match width with
+ | B => (MEMw_wrapper pAddr 1 (subrange_vec_dec rt_val 7 0)) : M (unit)
+ | H => (MEMw_wrapper pAddr 2 (subrange_vec_dec rt_val 15 0)) : M (unit)
+ | W => (MEMw_wrapper pAddr 4 (subrange_vec_dec rt_val 31 0)) : M (unit)
+ | D => (MEMw_wrapper pAddr 8 rt_val) : M (unit)
+ end)
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SYSCALL '(tt : unit) : M (unit) := (SignalException Sys) : M (unit).
+
+Definition execute_SYNC '(tt : unit) : M (unit) := (MEM_sync tt) : M (unit).
+
+Definition execute_SWR (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData WR) >>= fun vAddr =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ let wordAddr := concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2) in
+ (rGPR rt) >>= fun reg_val =>
+ let b__12 := subrange_vec_dec vAddr 1 0 in
+ (if ((eq_vec b__12 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 1 (subrange_vec_dec reg_val 7 0))
+ : M (unit)
+ else if ((eq_vec b__12 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 2 (subrange_vec_dec reg_val 15 0))
+ : M (unit)
+ else if ((eq_vec b__12 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 3 (subrange_vec_dec reg_val 23 0))
+ : M (unit)
+ else (MEMw_wrapper wordAddr 4 (subrange_vec_dec reg_val 31 0)) : M (unit))
+ : M (unit).
+
+Definition execute_SWL (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData WL) >>= fun vAddr =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (rGPR rt) >>= fun reg_val =>
+ let b__8 := subrange_vec_dec vAddr 1 0 in
+ (if ((eq_vec b__8 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 4 (subrange_vec_dec reg_val 31 0))
+ : M (unit)
+ else if ((eq_vec b__8 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 3 (subrange_vec_dec reg_val 31 8))
+ : M (unit)
+ else if ((eq_vec b__8 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 2 (subrange_vec_dec reg_val 31 16))
+ : M (unit)
+ else (MEMw_wrapper pAddr 1 (subrange_vec_dec reg_val 31 24)) : M (unit))
+ : M (unit).
+
+Definition execute_SUBU (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun opA =>
+ (rGPR rt) >>= fun opB =>
+ (if ((orb (NotWordVal opA) (NotWordVal opB))) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
+ else
+ (wGPR rd
+ (mips_sign_extend 64 (sub_vec (subrange_vec_dec opA 31 0) (subrange_vec_dec opB 31 0))))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SUB (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun opA =>
+ (rGPR rt) >>= fun opB =>
+ (if ((orb (NotWordVal opA) (NotWordVal opB))) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
+ else
+ let temp33 : bits 33 :=
+ sub_vec (mips_sign_extend 33 (subrange_vec_dec opA 31 0))
+ (mips_sign_extend 33 (subrange_vec_dec opB 31 0)) in
+ (if ((neq_bool ((bit_to_bool (access_vec_dec temp33 32)) : bool)
+ ((bit_to_bool (access_vec_dec temp33 31))
+ : bool))) then
+ (SignalException Ov)
+ : M (unit)
+ else (wGPR rd (mips_sign_extend 64 (subrange_vec_dec temp33 31 0))) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SRLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let sa := subrange_vec_dec w__0 4 0 in
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
+ else
+ let rt32 := subrange_vec_dec temp 31 0 in
+ (shift_bits_right rt32 sa) >>= fun w__2 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__2))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SRL (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
+ else
+ let rt32 := subrange_vec_dec temp 31 0 in
+ (shift_bits_right rt32 sa) >>= fun w__1 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__1))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SRAV (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let sa := subrange_vec_dec w__0 4 0 in
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
+ else
+ let rt32 := subrange_vec_dec temp 31 0 in
+ (shift_bits_right_arith rt32 sa) >>= fun w__2 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__2))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SRA (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
+ else
+ let rt32 := subrange_vec_dec temp 31 0 in
+ (shift_bits_right_arith rt32 sa) >>= fun w__1 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__1))
+ : M (unit))
+ : M (unit).
+
+Definition execute_SLTU (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rs_val =>
+ (rGPR rt) >>= fun rt_val =>
+ (wGPR rd
+ (mips_zero_extend 64
+ (if ((zopz0zI_u rs_val rt_val)) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1))))
+ : M (unit).
+
+Definition execute_SLTIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rs_val =>
+ let immext : bits 64 := mips_sign_extend 64 imm in
+ (wGPR rt
+ (mips_zero_extend 64
+ (if ((zopz0zI_u rs_val immext)) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1))))
+ : M (unit).
+
+Definition execute_SLTI (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ let 'imm_val := projT1 (sint imm) in
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let 'rs_val := projT1 (sint w__0) in
+ (wGPR rt
+ (mips_zero_extend 64
+ (if sumbool_of_bool ((Z.ltb rs_val imm_val)) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1))))
+ : M (unit).
+
+Definition execute_SLT (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ (wGPR rd
+ (mips_zero_extend 64
+ (if ((zopz0zI_s w__0 w__1)) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1))))
+ : M (unit).
+
+Definition execute_SLLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let sa := subrange_vec_dec w__0 4 0 in
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let rt32 := subrange_vec_dec w__1 31 0 in
+ (shift_bits_left rt32 sa) >>= fun w__2 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__2))
+ : M (unit).
+
+Definition execute_SLL (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let rt32 := subrange_vec_dec w__0 31 0 in
+ (shift_bits_left rt32 sa) >>= fun w__1 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__1))
+ : M (unit).
+
+Definition execute_SDR (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData DR) >>= fun vAddr =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (rGPR rt) >>= fun reg_val =>
+ let wordAddr := concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3) in
+ let b__40 := subrange_vec_dec vAddr 2 0 in
+ (if ((eq_vec b__40 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 1 (subrange_vec_dec reg_val 7 0))
+ : M (unit)
+ else if ((eq_vec b__40 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 2 (subrange_vec_dec reg_val 15 0))
+ : M (unit)
+ else if ((eq_vec b__40 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 3 (subrange_vec_dec reg_val 23 0))
+ : M (unit)
+ else if ((eq_vec b__40 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 4 (subrange_vec_dec reg_val 31 0))
+ : M (unit)
+ else if ((eq_vec b__40 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 5 (subrange_vec_dec reg_val 39 0))
+ : M (unit)
+ else if ((eq_vec b__40 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 6 (subrange_vec_dec reg_val 47 0))
+ : M (unit)
+ else if ((eq_vec b__40 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper wordAddr 7 (subrange_vec_dec reg_val 55 0))
+ : M (unit)
+ else (MEMw_wrapper wordAddr 8 (subrange_vec_dec reg_val 63 0)) : M (unit))
+ : M (unit).
+
+Definition execute_SDL (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData DL) >>= fun vAddr =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (rGPR rt) >>= fun reg_val =>
+ let b__32 := subrange_vec_dec vAddr 2 0 in
+ (if ((eq_vec b__32 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 8 (subrange_vec_dec reg_val 63 0))
+ : M (unit)
+ else if ((eq_vec b__32 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 7 (subrange_vec_dec reg_val 63 8))
+ : M (unit)
+ else if ((eq_vec b__32 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 6 (subrange_vec_dec reg_val 63 16))
+ : M (unit)
+ else if ((eq_vec b__32 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 5 (subrange_vec_dec reg_val 63 24))
+ : M (unit)
+ else if ((eq_vec b__32 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 4 (subrange_vec_dec reg_val 63 32))
+ : M (unit)
+ else if ((eq_vec b__32 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 3 (subrange_vec_dec reg_val 63 40))
+ : M (unit)
+ else if ((eq_vec b__32 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
+ (MEMw_wrapper pAddr 2 (subrange_vec_dec reg_val 63 48))
+ : M (unit)
+ else (MEMw_wrapper pAddr 1 (subrange_vec_dec reg_val 63 56)) : M (unit))
+ : M (unit).
+
+Definition execute_RI '(tt : unit) : M (unit) := (skip tt) >> (SignalException ResI) : M (unit).
+
+Definition execute_RDHWR (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (getAccessLevel tt) >>= fun accessLevel =>
+ let haveAccessLevel : bool := generic_eq accessLevel Kernel in
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ let haveCU0 : bool := eq_bit B1 (access_vec_dec (_get_StatusReg_CU w__0) 0) in
+ let 'rdi := projT1 (uint rd) in
+ ((read_reg CP0HWREna_ref) : M (mword 32)) >>= fun w__1 : bits 32 =>
+ let haveHWREna : bool := eq_bit B1 (access_vec_dec w__1 rdi) in
+ (if ((negb (orb haveAccessLevel (orb haveCU0 haveHWREna)))) then
+ (SignalException ResI)
+ : M (unit)
+ else returnm (tt : unit)) >>
+ let b__150 := rd in
+ (if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))) then
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__2 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__2)
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B1] : mword 1))
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B1;B1;B1;B0;B1] : mword 5))) then
+ ((read_reg CP0UserLocal_ref) : M (mword 64))
+ : M (bits 64)
+ else (SignalException ResI) : M (mword 64)) >>= fun temp : bits 64 =>
+ (wGPR rt temp)
+ : M (unit).
+
+Definition execute_ORI (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (or_vec w__0 (mips_zero_extend 64 imm)))
+ : M (unit).
+
+Definition execute_OR (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (or_vec w__0 w__1)) : M (unit).
+
+Definition execute_NOR (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (not_vec (or_vec w__0 w__1))) : M (unit).
+
+Definition execute_MULTU (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun result : bits 64 =>
+ write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
+ write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
+ : M (unit).
+
+Definition execute_MULT (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun result : bits 64 =>
+ write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
+ write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
+ : M (unit).
+
+Definition execute_MUL (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ let result : bits 64 :=
+ mips_sign_extend 64 (mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0)) in
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else returnm ((mips_sign_extend 64 (subrange_vec_dec result 31 0)) : mword 64)) >>= fun w__1 : mword 64 =>
+ (wGPR rd w__1)
+ : M (unit).
+
+Definition execute_MTLO (rs : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 => write_reg LO_ref w__0 : M (unit).
+
+Definition execute_MTHI (rs : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 => write_reg HI_ref w__0 : M (unit).
+
+Definition execute_MTC0 (rt : mword 5) (rd : mword 5) (sel : mword 3) (double : bool)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ (rGPR rt) >>= fun reg_val =>
+ (match (rd, sel) with
+ | (b__112, b__113) =>
+ (if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg TLBIndex_ref (mask 6 reg_val)
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm (tt
+ : unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_TLBEntryLoReg_bits TLBEntryLo0_ref reg_val)
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_TLBEntryLoReg_bits TLBEntryLo1_ref reg_val)
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_ContextReg_PTEBase TLBContext_ref (subrange_vec_dec reg_val 63 23))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ write_reg CP0UserLocal_ref reg_val
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg TLBPageMask_ref (subrange_vec_dec reg_val 28 13)
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg TLBWired_ref (mask 6 reg_val) >> write_reg TLBRandom_ref TLBIndexMax : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B1;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg
+ CP0HWREna_ref
+ (concat_vec (subrange_vec_dec reg_val 31 29)
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0]
+ : mword 25) (subrange_vec_dec reg_val 3 0)))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm (tt
+ : unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg CP0Count_ref (subrange_vec_dec reg_val 31 0)
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_TLBEntryHiReg_R TLBEntryHi_ref (subrange_vec_dec reg_val 63 62)) >>
+ (_set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (subrange_vec_dec reg_val 39 13)) >>
+ (_set_TLBEntryHiReg_ASID TLBEntryHi_ref (subrange_vec_dec reg_val 7 0))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg CP0Compare_ref (subrange_vec_dec reg_val 31 0) >>
+ read_reg CP0Cause_ref >>= fun w__0 : CauseReg =>
+ (_set_CauseReg_IP CP0Cause_ref
+ (and_vec (_get_CauseReg_IP w__0) (vec_of_bits [B0;B1;B1;B1;B1;B1;B1;B1] : mword 8)))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_StatusReg_CU CP0Status_ref
+ (and_vec (subrange_vec_dec reg_val 31 28)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (bool_to_bits have_cp2) (vec_of_bits [B0;B1] : mword 2))))) >>
+ (_set_StatusReg_BEV CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 22)) : mword 1)) >>
+ (_set_StatusReg_IM CP0Status_ref (subrange_vec_dec reg_val 15 8)) >>
+ (_set_StatusReg_KX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 7)) : mword 1)) >>
+ (_set_StatusReg_SX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 6)) : mword 1)) >>
+ (_set_StatusReg_UX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 5)) : mword 1)) >>
+ (_set_StatusReg_KSU CP0Status_ref (subrange_vec_dec reg_val 4 3)) >>
+ (_set_StatusReg_ERL CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 2)) : mword 1)) >>
+ (_set_StatusReg_EXL CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 1)) : mword 1)) >>
+ (_set_StatusReg_IE CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 0)) : mword 1))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B1;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_CauseReg_IV CP0Cause_ref ((cast_unit_vec (access_vec_dec reg_val 23)) : mword 1)) >>
+ read_reg CP0Cause_ref >>= fun w__1 : CauseReg =>
+ let ip := _get_CauseReg_IP w__1 in
+ (_set_CauseReg_IP CP0Cause_ref
+ (concat_vec (subrange_vec_dec ip 7 2) (subrange_vec_dec reg_val 9 8)))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg CP0EPC_ref reg_val
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg CP0ConfigK0_ref (subrange_vec_dec reg_val 2 0)
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B1;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_XContextReg_XPTEBase TLBXContext_ref (subrange_vec_dec reg_val 63 33))
+ : M (unit)
+ else if ((andb (eq_vec b__112 (vec_of_bits [B1;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ write_reg CP0ErrorEPC_ref reg_val
+ : M (unit)
+ else (SignalException ResI) : M (unit))
+ : M (unit)
+ end)
+ : M (unit).
+
+Definition execute_MSUBU (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ let result :=
+ sub_vec (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) mul_result in
+ write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
+ write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
+ : M (unit).
+
+Definition execute_MSUB (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ let result :=
+ sub_vec (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) mul_result in
+ write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
+ write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
+ : M (unit).
+
+Definition execute_MOVZ (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (if ((eq_vec w__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))) then
+ (rGPR rs) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_MOVN (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (if ((neq_vec w__0
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))) then
+ (rGPR rs) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_MFLO (rd : mword 5)
+: M (unit) :=
+
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__0 : bits 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_MFHI (rd : mword 5)
+: M (unit) :=
+
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__0 : bits 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_MFC0 (rt : mword 5) (rd : mword 5) (sel : mword 3) (double : bool)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ (match (rd, sel) with
+ | (b__48, b__49) =>
+ (if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBIndex_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ let idx : bits 31 := mips_zero_extend 31 w__0 in
+ ((read_reg TLBProbe_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
+ returnm ((concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32) (concat_vec w__1 idx))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__2 : TLBIndexT =>
+ returnm ((mips_zero_extend 64 w__2)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBEntryLo0_ref >>= fun w__3 : TLBEntryLoReg =>
+ returnm ((_get_TLBEntryLoReg_bits w__3)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBEntryLo1_ref >>= fun w__4 : TLBEntryLoReg =>
+ returnm ((_get_TLBEntryLoReg_bits w__4)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBContext_ref >>= fun w__5 : ContextReg =>
+ returnm ((_get_ContextReg_bits w__5)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ ((read_reg CP0UserLocal_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBPageMask_ref) : M (mword 16)) >>= fun w__7 : bits 16 =>
+ returnm ((mips_zero_extend 64
+ (concat_vec w__7
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBWired_ref) : M (mword 6)) >>= fun w__8 : TLBIndexT =>
+ returnm ((mips_zero_extend 64 w__8)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0HWREna_ref) : M (mword 32)) >>= fun w__9 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__9)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0BadVAddr_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B1] : mword 3)))) then
+ ((read_reg CP0BadInstr_ref) : M (mword 32)) >>= fun w__11 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__11)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ ((read_reg CP0BadInstrP_ref) : M (mword 32)) >>= fun w__12 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__12)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__13 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__13)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBEntryHi_ref >>= fun w__14 : TLBEntryHiReg =>
+ returnm ((_get_TLBEntryHiReg_bits w__14)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0Compare_ref) : M (mword 32)) >>= fun w__15 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__15)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg CP0Status_ref >>= fun w__16 : StatusReg =>
+ returnm ((mips_zero_extend 64 (_get_StatusReg_bits w__16))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg CP0Cause_ref >>= fun w__17 : CauseReg =>
+ returnm ((mips_zero_extend 64 (_get_CauseReg_bits w__17))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0EPC_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B1;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B1;B1] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0ConfigK0_ref) : M (mword 3)) >>= fun w__19 : bits 3 =>
+ returnm ((mips_zero_extend 64
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 15)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B1;B0] : mword 2)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4) w__19))))))))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B1] : mword 3)))) then
+ returnm ((mips_zero_extend 64
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec TLBIndexMax
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (bool_to_bits have_cp2)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec
+ (vec_of_bits [B0] : mword 1)
+ (vec_of_bits [B0] : mword 1))))))))))))))))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (vec_of_bits [B0;B0;B0;B0] : mword 4))))))))))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B1] : mword 3)))) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B0;B1] : mword 3)))) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B1;B0] : mword 3)))) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0LLAddr_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBXContext_ref >>= fun w__21 : XContextReg =>
+ returnm ((_get_XContextReg_bits w__21)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0ErrorEPC_ref) : M (mword 64))
+ : M (bits 64)
+ else (SignalException ResI) : M (mword 64))
+ : M (mword 64)
+ end) >>= fun result : bits 64 =>
+ (wGPR rt (if (double) then result else mips_sign_extend 64 (subrange_vec_dec result 31 0)))
+ : M (unit).
+
+Definition execute_MADDU (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ let result :=
+ add_vec mul_result (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) in
+ write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
+ write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
+ : M (unit).
+
+Definition execute_MADD (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ let result :=
+ add_vec mul_result (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) in
+ write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
+ write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
+ : M (unit).
+
+Definition execute_Load
+(width : WordType) (sign : bool) (linked : bool) (base : mword 5) (rt : mword 5) (offset : mword 16)
+
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapper (add_vec (mips_sign_extend 64 offset) w__0) LoadData width) >>= fun vAddr : bits 64 =>
+ (if ((negb (isAddressAligned vAddr width))) then (SignalExceptionBadAddr AdEL vAddr) : M (unit)
+ else
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (if (linked) then
+ write_reg CP0LLBit_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg CP0LLAddr_ref pAddr >>
+ (match width with
+ | W =>
+ (MEMr_reserve_wrapper pAddr 4) >>= fun w__1 : mword (8 * 4) =>
+ returnm ((extendLoad w__1 sign)
+ : mword 64)
+ | D =>
+ (MEMr_reserve_wrapper pAddr 8) >>= fun w__2 : mword (8 * 8) =>
+ returnm ((extendLoad w__2 sign)
+ : mword 64)
+ | _ => (throw (Error_internal_error (tt))) : M (mword 64)
+ end)
+ : M (mword 64)
+ else
+ (match width with
+ | B =>
+ (MEMr_wrapper pAddr 1) >>= fun w__5 : mword (8 * 1) =>
+ returnm ((extendLoad w__5 sign)
+ : mword 64)
+ | H =>
+ (MEMr_wrapper pAddr 2) >>= fun w__6 : mword (8 * 2) =>
+ returnm ((extendLoad w__6 sign)
+ : mword 64)
+ | W =>
+ (MEMr_wrapper pAddr 4) >>= fun w__7 : mword (8 * 4) =>
+ returnm ((extendLoad w__7 sign)
+ : mword 64)
+ | D =>
+ (MEMr_wrapper pAddr 8) >>= fun w__8 : mword (8 * 8) =>
+ returnm ((extendLoad w__8 sign)
+ : mword 64)
+ end)
+ : M (mword 64)) >>= fun memResult : bits 64 =>
+ (wGPR rt memResult)
+ : M (unit))
+ : M (unit).
+
+Definition execute_LWR (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData WR) >>= fun vAddr =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2)) 4) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
+ let b__4 := subrange_vec_dec vAddr 1 0 in
+ let result : bits 32 :=
+ if ((eq_vec b__4 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 31 8) (subrange_vec_dec mem_val 31 24)
+ else if ((eq_vec b__4 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 31 16) (subrange_vec_dec mem_val 31 16)
+ else if ((eq_vec b__4 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 31 24) (subrange_vec_dec mem_val 31 8)
+ else mem_val in
+ (wGPR rt (mips_sign_extend 64 result))
+ : M (unit).
+
+Definition execute_LWL (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData WL) >>= fun vAddr =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2)) 4) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
+ let b__0 := subrange_vec_dec vAddr 1 0 in
+ let result : bits 32 :=
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then mem_val
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 23 0) (subrange_vec_dec reg_val 7 0)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 15 0) (subrange_vec_dec reg_val 15 0)
+ else concat_vec (subrange_vec_dec mem_val 7 0) (subrange_vec_dec reg_val 23 0) in
+ (wGPR rt (mips_sign_extend 64 result))
+ : M (unit).
+
+Definition execute_LUI (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (wGPR rt
+ (mips_sign_extend 64
+ (concat_vec imm (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))))
+ : M (unit).
+
+Definition execute_LDR (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData DR) >>= fun vAddr =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3)) 8) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
+ let b__24 := subrange_vec_dec vAddr 2 0 in
+ (wGPR rt
+ (if ((eq_vec b__24 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 8) (subrange_vec_dec mem_val 63 56)
+ else if ((eq_vec b__24 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 16) (subrange_vec_dec mem_val 63 48)
+ else if ((eq_vec b__24 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 24) (subrange_vec_dec mem_val 63 40)
+ else if ((eq_vec b__24 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 32) (subrange_vec_dec mem_val 63 32)
+ else if ((eq_vec b__24 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 40) (subrange_vec_dec mem_val 63 24)
+ else if ((eq_vec b__24 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 48) (subrange_vec_dec mem_val 63 16)
+ else if ((eq_vec b__24 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec reg_val 63 56) (subrange_vec_dec mem_val 63 8)
+ else mem_val))
+ : M (unit).
+
+Definition execute_LDL (base : mword 5) (rt : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
+ (addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData DL) >>= fun vAddr =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3)) 8) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
+ let b__16 := subrange_vec_dec vAddr 2 0 in
+ (wGPR rt
+ (if ((eq_vec b__16 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then mem_val
+ else if ((eq_vec b__16 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 55 0) (subrange_vec_dec reg_val 7 0)
+ else if ((eq_vec b__16 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 47 0) (subrange_vec_dec reg_val 15 0)
+ else if ((eq_vec b__16 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 39 0) (subrange_vec_dec reg_val 23 0)
+ else if ((eq_vec b__16 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 31 0) (subrange_vec_dec reg_val 31 0)
+ else if ((eq_vec b__16 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 23 0) (subrange_vec_dec reg_val 39 0)
+ else if ((eq_vec b__16 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
+ concat_vec (subrange_vec_dec mem_val 15 0) (subrange_vec_dec reg_val 47 0)
+ else concat_vec (subrange_vec_dec mem_val 7 0) (subrange_vec_dec reg_val 55 0)))
+ : M (unit).
+
+Definition execute_JR (rs : mword 5)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (rGPR rs) >>= fun w__1 : mword 64 => (execute_branch w__1) : M (unit).
+
+Definition execute_JALR (rs : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (rGPR rs) >>= fun w__1 : mword 64 =>
+ (execute_branch w__1) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ (wGPR rd (add_vec_int w__2 8))
+ : M (unit).
+
+Definition execute_JAL (offset : mword 26)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ (execute_branch
+ (concat_vec (subrange_vec_dec (add_vec_int w__1 4) 63 28)
+ (concat_vec offset (vec_of_bits [B0;B0] : mword 2)))) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ (wGPR (vec_of_bits [B1;B1;B1;B1;B1] : mword 5) (add_vec_int w__2 8))
+ : M (unit).
+
+Definition execute_J (offset : mword 26)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ (execute_branch
+ (concat_vec (subrange_vec_dec (add_vec_int w__1 4) 63 28)
+ (concat_vec offset (vec_of_bits [B0;B0] : mword 2))))
+ : M (unit).
+
+Definition execute_HCF '(tt : unit) : unit := tt.
+
+Definition execute_ERET '(tt : unit)
+: M (unit) :=
+
+ (checkCP0Access tt) >>
+ (ERETHook tt) >>
+ write_reg CP0LLBit_ref (vec_of_bits [B0] : mword 1) >>
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ (if ((Bool.eqb ((bits_to_bool (_get_StatusReg_ERL w__0)) : bool) ((bit_to_bool B1) : bool)))
+ then
+ ((read_reg CP0ErrorEPC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ write_reg NextPC_ref w__1 >>
+ (_set_StatusReg_ERL CP0Status_ref (vec_of_bits [B0] : mword 1))
+ : M (unit)
+ else
+ ((read_reg CP0EPC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ write_reg NextPC_ref w__2 >>
+ (_set_StatusReg_EXL CP0Status_ref (vec_of_bits [B0] : mword 1))
+ : M (unit))
+ : M (unit).
+
+Definition execute_DSUBU (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (sub_vec w__0 w__1)) : M (unit).
+
+Definition execute_DSUB (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let temp65 : bits 65 := sub_vec (mips_sign_extend 65 w__0) (mips_sign_extend 65 w__1) in
+ (if ((neq_bool ((bit_to_bool (access_vec_dec temp65 64)) : bool)
+ ((bit_to_bool (access_vec_dec temp65 63))
+ : bool))) then
+ (SignalException Ov)
+ : M (unit)
+ else (wGPR rd (subrange_vec_dec temp65 63 0)) : M (unit))
+ : M (unit).
+
+Definition execute_DSRLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let sa := subrange_vec_dec w__0 5 0 in
+ (shift_bits_right temp sa) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit).
+
+Definition execute_DSRL32 (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ let sa32 := concat_vec (vec_of_bits [B1] : mword 1) sa in
+ (shift_bits_right temp sa32) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_DSRL (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (shift_bits_right temp sa) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_DSRAV (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let sa := subrange_vec_dec w__0 5 0 in
+ (shift_bits_right_arith temp sa) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit).
+
+Definition execute_DSRA32 (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ let sa32 := concat_vec (vec_of_bits [B1] : mword 1) sa in
+ (shift_bits_right_arith temp sa32) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_DSRA (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun temp =>
+ (shift_bits_right_arith temp sa) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_DSLLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (rGPR rs) >>= fun w__1 : mword 64 =>
+ (shift_bits_left w__0 (subrange_vec_dec w__1 5 0)) >>= fun w__2 : mword 64 =>
+ (wGPR rd w__2)
+ : M (unit).
+
+Definition execute_DSLL32 (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (shift_bits_left w__0 (concat_vec (vec_of_bits [B1] : mword 1) sa)) >>= fun w__1 : mword 64 =>
+ (wGPR rd w__1)
+ : M (unit).
+
+Definition execute_DSLL (rt : mword 5) (rd : mword 5) (sa : mword 5)
+: M (unit) :=
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (shift_bits_left w__0 sa) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit).
+
+Definition execute_DMULTU (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let result := mult_vec w__0 w__1 in
+ write_reg HI_ref (subrange_vec_dec result 127 64) >>
+ write_reg LO_ref (subrange_vec_dec result 63 0)
+ : M (unit).
+
+Definition execute_DMULT (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let result := mults_vec w__0 w__1 in
+ write_reg HI_ref (subrange_vec_dec result 127 64) >>
+ write_reg LO_ref (subrange_vec_dec result 63 0)
+ : M (unit).
+
+Definition execute_DIVU (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal)
+ (orb (NotWordVal rtVal)
+ (eq_vec rtVal
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))))) then
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
+ (undefined_bitvector 32) >>= fun w__1 : mword 32 => returnm (w__0 : bits 32, w__1 : bits 32)
+ else
+ let 'si := projT1 (uint (subrange_vec_dec rsVal 31 0)) in
+ let 'ti := projT1 (uint (subrange_vec_dec rtVal 31 0)) in
+ let qi := Z.quot si ti in
+ let ri := Z.rem si ti in
+ returnm (to_bits 32 qi, to_bits 32 ri)) >>= fun '(q, r) =>
+ write_reg HI_ref (mips_sign_extend 64 r) >> write_reg LO_ref (mips_sign_extend 64 q) : M (unit).
+
+Definition execute_DIV (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal)
+ (orb (NotWordVal rtVal)
+ (eq_vec rtVal
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))))) then
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
+ (undefined_bitvector 32) >>= fun w__1 : mword 32 => returnm (w__0 : bits 32, w__1 : bits 32)
+ else
+ let 'si := projT1 (sint (subrange_vec_dec rsVal 31 0)) in
+ let 'ti := projT1 (sint (subrange_vec_dec rtVal 31 0)) in
+ let qi := Z.quot si ti in
+ let ri := Z.sub si (Z.mul ti qi) in
+ returnm (to_bits 32 qi, to_bits 32 ri)) >>= fun '(q, r) =>
+ write_reg HI_ref (mips_sign_extend 64 r) >> write_reg LO_ref (mips_sign_extend 64 q) : M (unit).
+
+Definition execute_DDIVU (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let 'rsVal := projT1 (uint w__0) in
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let 'rtVal := projT1 (uint w__1) in
+ (if sumbool_of_bool ((Z.eqb rtVal 0)) then
+ (undefined_bitvector 64) >>= fun w__2 : mword 64 =>
+ (undefined_bitvector 64) >>= fun w__3 : mword 64 => returnm (w__2 : bits 64, w__3 : bits 64)
+ else
+ let qi := Z.quot rsVal rtVal in
+ let ri := Z.rem rsVal rtVal in
+ returnm (to_bits 64 qi, to_bits 64 ri)) >>= fun '(q, r) =>
+ write_reg LO_ref q >> write_reg HI_ref r : M (unit).
+
+Definition execute_DDIV (rs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let 'rsVal := projT1 (sint w__0) in
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let 'rtVal := projT1 (sint w__1) in
+ (if sumbool_of_bool ((Z.eqb rtVal 0)) then
+ (undefined_bitvector 64) >>= fun w__2 : mword 64 =>
+ (undefined_bitvector 64) >>= fun w__3 : mword 64 => returnm (w__2 : bits 64, w__3 : bits 64)
+ else
+ let qi := Z.quot rsVal rtVal in
+ let ri := Z.sub rsVal (Z.mul qi rtVal) in
+ returnm (to_bits 64 qi, to_bits 64 ri)) >>= fun '(q, r) =>
+ write_reg LO_ref q >> write_reg HI_ref r : M (unit).
+
+Definition execute_DADDU (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (add_vec w__0 w__1)) : M (unit).
+
+Definition execute_DADDIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (add_vec w__0 (mips_sign_extend 64 imm)))
+ : M (unit).
+
+Definition execute_DADDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let sum65 : bits 65 := add_vec (mips_sign_extend 65 w__0) (mips_sign_extend 65 imm) in
+ (if ((neq_bool ((bit_to_bool (access_vec_dec sum65 64)) : bool)
+ ((bit_to_bool (access_vec_dec sum65 63))
+ : bool))) then
+ (SignalException Ov)
+ : M (unit)
+ else (wGPR rt (subrange_vec_dec sum65 63 0)) : M (unit))
+ : M (unit).
+
+Definition execute_DADD (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let sum65 : bits 65 := add_vec (mips_sign_extend 65 w__0) (mips_sign_extend 65 w__1) in
+ (if ((neq_bool ((bit_to_bool (access_vec_dec sum65 64)) : bool)
+ ((bit_to_bool (access_vec_dec sum65 63))
+ : bool))) then
+ (SignalException Ov)
+ : M (unit)
+ else (wGPR rd (subrange_vec_dec sum65 63 0)) : M (unit))
+ : M (unit).
+
+Definition execute_ClearRegs (regset : ClearRegSet) (m : mword 16)
+: M (unit) :=
+
+ (if ((orb (generic_eq regset CLo) (generic_eq regset CHi))) then (checkCP2usable tt) : M (unit)
+ else returnm (tt : unit)) >>
+ (foreach_ZM_up 0 15 1 tt
+ (fun i _ unit_var =>
+ (if (((bit_to_bool (access_vec_dec m i)) : bool)) then
+ (match regset with
+ | GPLo => (wGPR (to_bits 5 i) (zeros_implicit 64 tt)) : M (unit)
+ | GPHi => (wGPR (to_bits 5 (Z.add i 16)) (zeros_implicit 64 tt)) : M (unit)
+ | CLo =>
+ (if sumbool_of_bool ((Z.eqb i 0)) then write_reg DDC_ref null_cap : M (unit)
+ else (writeCapReg (to_bits 5 i) null_cap) : M (unit))
+ : M (unit)
+ | CHi => (writeCapReg (to_bits 5 (Z.add i 16)) null_cap) : M (unit)
+ end)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit)))
+ : M (unit).
+
+Definition execute_CWriteHwr (cb : mword 5) (sel : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ let 'p0_ := projT1 (uint sel) in
+ (if sumbool_of_bool ((Z.eqb p0_ 0)) then returnm (false, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then returnm (false, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then returnm (false, true)
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then returnm (true, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 23)) then returnm (true, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 29)) then returnm (true, true)
+ else if sumbool_of_bool ((Z.eqb p0_ 30)) then returnm (true, true)
+ else if sumbool_of_bool ((Z.eqb p0_ 31)) then returnm (true, true)
+ else (SignalException ResI) : M ((bool * bool))) >>= fun '(needSup, needAccessSys) =>
+ (and_boolM (returnm (needAccessSys : bool))
+ ((pcc_access_system_regs tt) >>= fun w__8 : bool => returnm ((negb w__8) : bool))) >>= fun w__9 : bool =>
+ (if (w__9) then (raise_c2_exception CapEx_AccessSystemRegsViolation sel) : M (unit)
+ else
+ (and_boolM (returnm (needSup : bool))
+ ((getAccessLevel tt) >>= fun w__10 : AccessLevel =>
+ returnm ((negb (grantsAccess w__10 Supervisor))
+ : bool))) >>= fun w__11 : bool =>
+ (if (w__11) then (raise_c2_exception CapEx_AccessSystemRegsViolation sel) : M (unit)
+ else
+ (readCapReg cb) >>= fun capVal =>
+ let 'p0_ := projT1 (uint sel) in
+ (if sumbool_of_bool ((Z.eqb p0_ 0)) then write_reg DDC_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then write_reg CTLSU_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then write_reg CTLSP_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then write_reg KR1C_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 23)) then write_reg KR2C_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 29)) then write_reg KCC_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 30)) then write_reg KDC_ref capVal : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 31)) then
+ write_reg EPCC_ref capVal >>
+ read_reg CP0Status_ref >>= fun w__12 : StatusReg =>
+ (if (((bits_to_bool (_get_StatusReg_ERL w__12)) : bool)) then
+ write_reg CP0ErrorEPC_ref (to_bits 64 (projT1 (getCapOffset capVal)))
+ : M (unit)
+ else write_reg CP0EPC_ref (to_bits 64 (projT1 (getCapOffset capVal))) : M (unit))
+ : M (unit)
+ else (assert_exp false "CWriteHwr: should be unreachable code") : M (unit))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CUnseal (cd : mword 5) (cs : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let 'ct_cursor := projT1 (getCapCursor ct_val) in
+ (if ((negb cs_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cs) : M (unit)
+ else if ((negb ct_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation ct)
+ : M (unit)
+ else if ((negb cs_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cs)
+ : M (unit)
+ else if (ct_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation ct)
+ : M (unit)
+ else if ((neq_int ct_cursor (projT1 (uint cs_val.(Capability_otype))))) then
+ (raise_c2_exception CapEx_TypeViolation ct)
+ : M (unit)
+ else if ((negb ct_val.(Capability_permit_unseal))) then
+ (raise_c2_exception CapEx_PermitUnsealViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb ct_cursor (projT1 (getCapBase ct_val)))) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb ct_cursor (projT1 (getCapTop ct_val)))) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else
+ (writeCapReg cd
+ {| Capability_tag := cs_val.(Capability_tag);
+ Capability_padding := cs_val.(Capability_padding);
+ Capability_otype := (zeros_implicit 24 tt);
+ Capability_uperms := cs_val.(Capability_uperms);
+ Capability_perm_reserved12_14 := cs_val.(Capability_perm_reserved12_14);
+ Capability_permit_set_CID := cs_val.(Capability_permit_set_CID);
+ Capability_access_system_regs := cs_val.(Capability_access_system_regs);
+ Capability_permit_unseal := cs_val.(Capability_permit_unseal);
+ Capability_permit_ccall := cs_val.(Capability_permit_ccall);
+ Capability_permit_seal := cs_val.(Capability_permit_seal);
+ Capability_permit_store_local_cap := cs_val.(Capability_permit_store_local_cap);
+ Capability_permit_store_cap := cs_val.(Capability_permit_store_cap);
+ Capability_permit_load_cap := cs_val.(Capability_permit_load_cap);
+ Capability_permit_store := cs_val.(Capability_permit_store);
+ Capability_permit_load := cs_val.(Capability_permit_load);
+ Capability_permit_execute := cs_val.(Capability_permit_execute);
+ Capability_global := (andb cs_val.(Capability_global) ct_val.(Capability_global));
+ Capability_sealed := false;
+ Capability_address := cs_val.(Capability_address);
+ Capability_base := cs_val.(Capability_base);
+ Capability_length := cs_val.(Capability_length) |})
+ : M (unit))
+ : M (unit).
+
+Definition execute_CToPtr (rd : mword 5) (cb : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC ct) >>= fun ct_val =>
+ (readCapReg cb) >>= fun cb_val =>
+ (if ((negb ct_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation ct) : M (unit)
+ else if ((andb cb_val.(Capability_tag) cb_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else
+ let 'ctBase := projT1 (getCapBase ct_val) in
+ (wGPR rd
+ (if ((negb cb_val.(Capability_tag))) then zeros_implicit 64 tt
+ else to_bits 64 (Z.sub (projT1 (getCapCursor cb_val)) ctBase)))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CTestSubset (rd : mword 5) (cb : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let 'ct_top := projT1 (getCapTop ct_val) in
+ let 'ct_base := projT1 (getCapBase ct_val) in
+ let ct_perms := getCapPerms ct_val in
+ let 'cb_top := projT1 (getCapTop cb_val) in
+ let 'cb_base := projT1 (getCapBase cb_val) in
+ let cb_perms := getCapPerms cb_val in
+ let result :=
+ if ((neq_bool cb_val.(Capability_tag) ct_val.(Capability_tag))) then
+ (vec_of_bits [B0] : mword 1)
+ else if sumbool_of_bool ((Z.ltb ct_base cb_base)) then (vec_of_bits [B0] : mword 1)
+ else if sumbool_of_bool ((Z.gtb ct_top cb_top)) then (vec_of_bits [B0] : mword 1)
+ else if ((neq_vec (and_vec ct_perms cb_perms) ct_perms)) then (vec_of_bits [B0] : mword 1)
+ else (vec_of_bits [B1] : mword 1) in
+ (wGPR rd (mips_zero_extend 64 result))
+ : M (unit).
+
+Definition execute_CSub (rd : mword 5) (cb : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg ct) >>= fun ct_val =>
+ (readCapReg cb) >>= fun cb_val =>
+ (wGPR rd (to_bits 64 (Z.sub (projT1 (getCapCursor cb_val)) (projT1 (getCapCursor ct_val)))))
+ : M (unit).
+
+Definition execute_CStoreConditional (rs : mword 5) (cb : mword 5) (rd : mword 5) (width : WordType)
+
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_store))) then
+ (raise_c2_exception CapEx_PermitStoreViolation cb)
+ : M (unit)
+ else
+ let 'size := projT1 (wordWidthBytes width) in
+ let 'vAddr := projT1 (getCapCursor cb_val) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((negb (isAddressAligned vAddr64 width))) then
+ (SignalExceptionBadAddr AdES vAddr64)
+ : M (unit)
+ else
+ (TLBTranslate vAddr64 StoreData) >>= fun pAddr =>
+ (rGPR rs) >>= fun rs_val =>
+ ((read_reg CP0LLBit_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bit_to_bool (access_vec_dec w__0 0)) : bool)) then
+ (match width with
+ | B => (MEMw_conditional_wrapper pAddr 1 (subrange_vec_dec rs_val 7 0)) : M (bool)
+ | H => (MEMw_conditional_wrapper pAddr 2 (subrange_vec_dec rs_val 15 0)) : M (bool)
+ | W => (MEMw_conditional_wrapper pAddr 4 (subrange_vec_dec rs_val 31 0)) : M (bool)
+ | D => (MEMw_conditional_wrapper pAddr 8 rs_val) : M (bool)
+ end)
+ : M (bool)
+ else returnm (false : bool)) >>= fun success : bool =>
+ (wGPR rd (mips_zero_extend 64 (bool_to_bits success)))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CStore
+(rs : mword 5) (cb : mword 5) (rt : mword 5) (offset : mword 8) (width : WordType)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_store))) then
+ (raise_c2_exception CapEx_PermitStoreViolation cb)
+ : M (unit)
+ else
+ let 'size := projT1 (wordWidthBytes width) in
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let 'vAddr :=
+ projT1 (emod_with_eq
+ (Z.add (Z.add cursor (projT1 (uint w__0))) (Z.mul size (projT1 (sint offset))))
+ (projT1 (pow2 64))) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((negb (isAddressAligned vAddr64 width))) then
+ (SignalExceptionBadAddr AdES vAddr64)
+ : M (unit)
+ else
+ (TLBTranslate vAddr64 StoreData) >>= fun pAddr =>
+ (rGPR rs) >>= fun rs_val =>
+ (match width with
+ | B => (MEMw_wrapper pAddr 1 (subrange_vec_dec rs_val 7 0)) : M (unit)
+ | H => (MEMw_wrapper pAddr 2 (subrange_vec_dec rs_val 15 0)) : M (unit)
+ | W => (MEMw_wrapper pAddr 4 (subrange_vec_dec rs_val 31 0)) : M (unit)
+ | D => (MEMw_wrapper pAddr 8 rs_val) : M (unit)
+ end)
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSetOffset (cd : mword 5) (cb : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (rGPR rt) >>= fun rt_val =>
+ (if ((andb cb_val.(Capability_tag) cb_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else
+ let '(success, newCap) := setCapOffset cb_val rt_val in
+ (if (success) then (writeCapReg cd newCap) : M (unit)
+ else
+ (writeCapReg cd (int_to_cap (add_vec (to_bits 64 (projT1 (getCapBase cb_val))) rt_val)))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSetCause (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (pcc_access_system_regs tt) >>= fun w__0 : bool =>
+ (if ((negb w__0)) then (raise_c2_exception_noreg CapEx_AccessSystemRegsViolation) : M (unit)
+ else
+ (rGPR rt) >>= fun rt_val =>
+ (_set_CapCauseReg_ExcCode CapCause_ref (subrange_vec_dec rt_val 15 8)) >>
+ (_set_CapCauseReg_RegNum CapCause_ref (subrange_vec_dec rt_val 7 0))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSetCID (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_set_CID))) then
+ (raise_c2_exception CapEx_PermitSetCIDViolation cb)
+ : M (unit)
+ else
+ let 'addr := projT1 (getCapCursor cb_val) in
+ (if sumbool_of_bool ((Z.ltb addr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb addr (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else write_reg CID_ref (to_bits 64 addr) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSetBoundsImmediate (cd : mword 5) (cb : mword 5) (imm : mword 11)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ let 'immU := projT1 (uint imm) in
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ let 'base := projT1 (getCapBase cb_val) in
+ let 'top := projT1 (getCapTop cb_val) in
+ let newTop := Z.add cursor immU in
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb cursor base)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb newTop top)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else
+ let '(_, newCap) := setCapBounds cb_val (to_bits 64 cursor) (to_bits 65 newTop) in
+ (writeCapReg cd newCap)
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSetBoundsExact (cd : mword 5) (cb : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let 'rt_val := projT1 (uint w__0) in
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ let 'base := projT1 (getCapBase cb_val) in
+ let 'top := projT1 (getCapTop cb_val) in
+ let newTop := Z.add cursor rt_val in
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb cursor base)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb newTop top)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else
+ let '(exact, newCap) := setCapBounds cb_val (to_bits 64 cursor) (to_bits 65 newTop) in
+ (if ((negb exact)) then (raise_c2_exception CapEx_InexactBounds cb) : M (unit)
+ else (writeCapReg cd newCap) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSetBounds (cd : mword 5) (cb : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let 'rt_val := projT1 (uint w__0) in
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ let 'base := projT1 (getCapBase cb_val) in
+ let 'top := projT1 (getCapTop cb_val) in
+ let newTop := Z.add cursor rt_val in
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb cursor base)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb newTop top)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else
+ let '(_, newCap) := setCapBounds cb_val (to_bits 64 cursor) (to_bits 65 newTop) in
+ (writeCapReg cd newCap)
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSeal (cd : mword 5) (cs : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let 'ct_cursor := projT1 (getCapCursor ct_val) in
+ let 'ct_top := projT1 (getCapTop ct_val) in
+ let 'ct_base := projT1 (getCapBase ct_val) in
+ (if ((negb cs_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cs) : M (unit)
+ else if ((negb ct_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation ct)
+ : M (unit)
+ else if (cs_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cs)
+ : M (unit)
+ else if (ct_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation ct)
+ : M (unit)
+ else if ((negb ct_val.(Capability_permit_seal))) then
+ (raise_c2_exception CapEx_PermitSealViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb ct_cursor ct_base)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb ct_cursor ct_top)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb ct_cursor max_otype)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else
+ let '(success, newCap) := sealCap cs_val (to_bits 24 ct_cursor) in
+ (if ((negb success)) then (raise_c2_exception CapEx_InexactBounds cs) : M (unit)
+ else (writeCapReg cd newCap) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSCC (cs : mword 5) (cb : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_store))) then
+ (raise_c2_exception CapEx_PermitStoreViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_store_cap))) then
+ (raise_c2_exception CapEx_PermitStoreCapViolation cb)
+ : M (unit)
+ else if ((andb (negb cb_val.(Capability_permit_store_local_cap))
+ (andb cs_val.(Capability_tag) (negb cs_val.(Capability_global))))) then
+ (raise_c2_exception CapEx_PermitStoreLocalCapViolation cb)
+ : M (unit)
+ else
+ let 'vAddr := projT1 (getCapCursor cb_val) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr cap_size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((neq_int (projT1 (emod_with_eq vAddr cap_size)) 0)) then
+ (SignalExceptionBadAddr AdES vAddr64)
+ : M (unit)
+ else
+ (TLBTranslateC vAddr64 StoreData) >>= fun '(pAddr, noStoreCap) =>
+ (if ((andb cs_val.(Capability_tag) noStoreCap)) then
+ (raise_c2_exception CapEx_TLBNoStoreCap cs)
+ : M (unit)
+ else
+ ((read_reg CP0LLBit_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bit_to_bool (access_vec_dec w__0 0)) : bool)) then
+ (MEMw_tagged_conditional pAddr cs_val.(Capability_tag) (capToMemBits cs_val))
+ : M (bool)
+ else returnm (false : bool)) >>= fun success =>
+ (wGPR rd (mips_zero_extend 64 (bool_to_bits success)))
+ : M (unit))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CSC (cs : mword 5) (cb : mword 5) (rt : mword 5) (offset : mword 11)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_store))) then
+ (raise_c2_exception CapEx_PermitStoreViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_store_cap))) then
+ (raise_c2_exception CapEx_PermitStoreCapViolation cb)
+ : M (unit)
+ else if ((andb (negb cb_val.(Capability_permit_store_local_cap))
+ (andb cs_val.(Capability_tag) (negb cs_val.(Capability_global))))) then
+ (raise_c2_exception CapEx_PermitStoreLocalCapViolation cb)
+ : M (unit)
+ else
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let 'vAddr :=
+ projT1 (emod_with_eq
+ (Z.add (Z.add cursor (projT1 (uint w__0))) (Z.mul 16 (projT1 (sint offset))))
+ (projT1 (pow2 64))) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr cap_size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((neq_int (projT1 (emod_with_eq vAddr cap_size)) 0)) then
+ (SignalExceptionBadAddr AdES vAddr64)
+ : M (unit)
+ else
+ (TLBTranslateC vAddr64 StoreData) >>= fun '(pAddr, noStoreCap) =>
+ (if ((andb cs_val.(Capability_tag) noStoreCap)) then
+ (raise_c2_exception CapEx_TLBNoStoreCap cs)
+ : M (unit)
+ else (MEMw_tagged pAddr cs_val.(Capability_tag) (capToMemBits cs_val)) : M (unit))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CReturn '(tt : unit)
+: M (unit) :=
+
+ (checkCP2usable tt) >> (raise_c2_exception_noreg CapEx_ReturnTrap) : M (unit).
+
+Definition execute_CReadHwr (cd : mword 5) (sel : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ let 'p0_ := projT1 (uint sel) in
+ (if sumbool_of_bool ((Z.eqb p0_ 0)) then returnm (false, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then returnm (false, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then returnm (false, true)
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then returnm (true, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 23)) then returnm (true, false)
+ else if sumbool_of_bool ((Z.eqb p0_ 29)) then returnm (true, true)
+ else if sumbool_of_bool ((Z.eqb p0_ 30)) then returnm (true, true)
+ else if sumbool_of_bool ((Z.eqb p0_ 31)) then returnm (true, true)
+ else (SignalException ResI) : M ((bool * bool))) >>= fun '(needSup, needAccessSys) =>
+ (and_boolM (returnm (needAccessSys : bool))
+ ((pcc_access_system_regs tt) >>= fun w__8 : bool => returnm ((negb w__8) : bool))) >>= fun w__9 : bool =>
+ (if (w__9) then (raise_c2_exception CapEx_AccessSystemRegsViolation sel) : M (unit)
+ else
+ (and_boolM (returnm (needSup : bool))
+ ((getAccessLevel tt) >>= fun w__10 : AccessLevel =>
+ returnm ((negb (grantsAccess w__10 Supervisor))
+ : bool))) >>= fun w__11 : bool =>
+ (if (w__11) then (raise_c2_exception CapEx_AccessSystemRegsViolation sel) : M (unit)
+ else
+ let 'p0_ := projT1 (uint sel) in
+ (if sumbool_of_bool ((Z.eqb p0_ 0)) then read_reg DDC_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then read_reg CTLSU_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then read_reg CTLSP_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then read_reg KR1C_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 23)) then read_reg KR2C_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 29)) then read_reg KCC_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 30)) then read_reg KDC_ref : M (Capability)
+ else if sumbool_of_bool ((Z.eqb p0_ 31)) then (readEPCC tt) : M (Capability)
+ else
+ assert_exp' false "CReadHwr: should be unreachable code" >>= fun _ =>
+ (undefined_Capability tt)
+ : M (Capability)) >>= fun capVal : Capability =>
+ (writeCapReg cd capVal)
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CPtrCmp (rd : mword 5) (cb : mword 5) (ct : mword 5) (op : CPtrCmpOp)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let equal := false in
+ let ltu := false in
+ let lts := false in
+ let '(equal, lts, ltu) :=
+ (if ((neq_bool cb_val.(Capability_tag) ct_val.(Capability_tag))) then
+ let '(lts, ltu) :=
+ (if ((negb cb_val.(Capability_tag))) then
+ let ltu : bool := true in
+ let lts : bool := true in
+ (lts, ltu)
+ else (lts, ltu))
+ : (bool * bool) in
+ (equal, lts, ltu)
+ else
+ let 'cursor1 := projT1 (getCapCursor cb_val) in
+ let 'cursor2 := projT1 (getCapCursor ct_val) in
+ let equal : bool := Z.eqb cursor1 cursor2 in
+ let ltu : bool := Z.ltb cursor1 cursor2 in
+ let lts : bool := zopz0zI_s (to_bits 64 cursor1) (to_bits 64 cursor2) in
+ (equal, lts, ltu))
+ : (bool * bool * bool) in
+ let cmp : bool :=
+ match op with
+ | CEQ => equal
+ | CNE => negb equal
+ | CLT => lts
+ | CLE => orb lts equal
+ | CLTU => ltu
+ | CLEU => orb ltu equal
+ | CEXEQ => generic_eq cb_val ct_val
+ | CNEXEQ => generic_neq cb_val ct_val
+ end in
+ (wGPR rd (mips_zero_extend 64 (bool_to_bits cmp)))
+ : M (unit).
+
+Definition execute_CMOVX (cd : mword 5) (cb : mword 5) (rt : mword 5) (ismovn : bool)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (if (((bits_to_bool
+ (xor_vec (bool_to_bits (eq_vec w__0 (zeros_implicit 64 tt)))
+ ((bool_to_bits ismovn)
+ : mword 1)))
+ : bool)) then
+ (readCapReg cb) >>= fun w__1 : Capability => (writeCapReg cd w__1) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_CLoadTags (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load_cap))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else
+ let 'vAddr := projT1 (getCapCursor cb_val) in
+ let vAddr64 := to_bits 64 (projT1 (getCapCursor cb_val)) in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr (Z.mul 8 cap_size)) (projT1 (getCapTop cb_val))))
+ then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((negb
+ (eq_vec (subrange_vec_dec vAddr64 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ (SignalExceptionBadAddr AdEL vAddr64)
+ : M (unit)
+ else
+ (TLBTranslate vAddr64 LoadData) >>= fun pAddr =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 0 cap_size))) >>= fun tag0 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 1 cap_size))) >>= fun tag1 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 2 cap_size))) >>= fun tag2 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 3 cap_size))) >>= fun tag3 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 4 cap_size))) >>= fun tag4 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 5 cap_size))) >>= fun tag5 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 6 cap_size))) >>= fun tag6 =>
+ (read_tag_bool (add_vec_int pAddr (Z.mul 7 cap_size))) >>= fun tag7 =>
+ (wGPR rd
+ (mips_zero_extend 64
+ (concat_vec (bool_to_bits tag7)
+ (concat_vec (bool_to_bits tag6)
+ (concat_vec (bool_to_bits tag5)
+ (concat_vec (bool_to_bits tag4)
+ (concat_vec (bool_to_bits tag3)
+ (concat_vec (bool_to_bits tag2)
+ (concat_vec (bool_to_bits tag1) (bool_to_bits tag0))))))))))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CLoadLinked (rd : mword 5) (cb : mword 5) (signext : bool) (width : WordType)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else
+ let 'size := projT1 (wordWidthBytes width) in
+ let 'vAddr := projT1 (getCapCursor cb_val) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((negb (isAddressAligned vAddr64 width))) then
+ (SignalExceptionBadAddr AdEL vAddr64)
+ : M (unit)
+ else
+ (TLBTranslate vAddr64 LoadData) >>= fun pAddr =>
+ (MEMr_reserve_wrapper pAddr size) >>= fun w__0 : mword (8 * size) =>
+ let memResult : bits 64 := extendLoad w__0 signext in
+ write_reg CP0LLBit_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg CP0LLAddr_ref pAddr >> (wGPR rd memResult) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CLoad
+(rd : mword 5) (cb : mword 5) (rt : mword 5) (offset : mword 8) (signext : bool) (width : WordType)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else
+ let 'size := projT1 (wordWidthBytes width) in
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let 'vAddr :=
+ projT1 (emod_with_eq
+ (Z.add (Z.add cursor (projT1 (uint w__0))) (Z.mul size (projT1 (sint offset))))
+ (projT1 (pow2 64))) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((negb (isAddressAligned vAddr64 width))) then
+ (SignalExceptionBadAddr AdEL vAddr64)
+ : M (unit)
+ else
+ (TLBTranslate vAddr64 LoadData) >>= fun pAddr =>
+ (MEMr_wrapper pAddr size) >>= fun w__1 : mword (8 * size) =>
+ let memResult : bits 64 := extendLoad w__1 signext in
+ (wGPR rd memResult)
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CLLC (cd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else
+ let 'vAddr := projT1 (getCapCursor cb_val) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr cap_size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((neq_int (projT1 (emod_with_eq vAddr cap_size)) 0)) then
+ (SignalExceptionBadAddr AdEL vAddr64)
+ : M (unit)
+ else
+ (TLBTranslateC vAddr64 LoadData) >>= fun '(pAddr, suppressTag) =>
+ (MEMr_tagged_reserve pAddr) >>= fun '(tag, mem) =>
+ let cap :=
+ memBitsToCapability
+ (andb tag (andb cb_val.(Capability_permit_load_cap) (negb suppressTag))) mem in
+ (writeCapReg cd cap) >>
+ write_reg CP0LLBit_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg CP0LLAddr_ref pAddr
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CLCBI (cd : mword 5) (cb : mword 5) (offset : mword 16)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ let 'vAddr :=
+ projT1 (emod_with_eq (Z.add cursor (Z.mul 16 (projT1 (sint offset)))) (projT1 (pow2 64))) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr cap_size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((neq_int (projT1 (emod_with_eq vAddr cap_size)) 0)) then
+ (SignalExceptionBadAddr AdEL vAddr64)
+ : M (unit)
+ else
+ (TLBTranslateC vAddr64 LoadData) >>= fun '(pAddr, suppressTag) =>
+ (MEMr_tagged pAddr) >>= fun '(tag, mem) =>
+ let cap :=
+ memBitsToCapability
+ (andb tag (andb cb_val.(Capability_permit_load_cap) (negb suppressTag))) mem in
+ (writeCapReg cd cap)
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CLC (cd : mword 5) (cb : mword 5) (rt : mword 5) (offset : mword 11)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_load))) then
+ (raise_c2_exception CapEx_PermitLoadViolation cb)
+ : M (unit)
+ else
+ let 'cursor := projT1 (getCapCursor cb_val) in
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ let 'vAddr :=
+ projT1 (emod_with_eq
+ (Z.add (Z.add cursor (projT1 (uint w__0))) (Z.mul 16 (projT1 (sint offset))))
+ (projT1 (pow2 64))) in
+ let vAddr64 := to_bits 64 vAddr in
+ (if sumbool_of_bool ((Z.gtb (Z.add vAddr cap_size) (projT1 (getCapTop cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb vAddr (projT1 (getCapBase cb_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((neq_int (projT1 (emod_with_eq vAddr cap_size)) 0)) then
+ (SignalExceptionBadAddr AdEL vAddr64)
+ : M (unit)
+ else
+ (TLBTranslateC vAddr64 LoadData) >>= fun '(pAddr, suppressTag) =>
+ (MEMr_tagged pAddr) >>= fun '(tag, mem) =>
+ let cap :=
+ memBitsToCapability
+ (andb tag (andb cb_val.(Capability_permit_load_cap) (negb suppressTag))) mem in
+ (writeCapReg cd cap)
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CJALR (cd : mword 5) (cb : mword 5) (link : bool)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (readCapReg cb) >>= fun cb_val =>
+ let 'cb_ptr := projT1 (getCapCursor cb_val) in
+ let 'cb_top := projT1 (getCapTop cb_val) in
+ let 'cb_base := projT1 (getCapBase cb_val) in
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_execute))) then
+ (raise_c2_exception CapEx_PermitExecuteViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb cb_ptr cb_base)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb (Z.add cb_ptr 4) cb_top)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if ((neq_int (projT1 (emod_with_eq cb_ptr 4)) 0)) then (SignalException AdEL) : M (unit)
+ else
+ (if (link) then
+ read_reg PCC_ref >>= fun w__1 : Capability =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ let '(success, linkCap) := setCapOffset w__1 (add_vec_int w__2 8) in
+ assert_exp' success "Link cap should always be representable." >>= fun _ =>
+ (writeCapReg cd linkCap)
+ : M (unit)
+ else returnm (tt : unit)) >>
+ (execute_branch_pcc cb_val)
+ : M (unit)) >>
+ write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1)
+ : M (unit).
+
+Definition execute_CIncOffsetImmediate (cd : mword 5) (cb : mword 5) (imm : mword 11)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ let imm64 : bits 64 := mips_sign_extend 64 imm in
+ (if ((andb cb_val.(Capability_tag) cb_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else
+ let '(success, newCap) := incCapOffset cb_val imm64 in
+ (if (success) then (writeCapReg cd newCap) : M (unit)
+ else
+ (writeCapReg cd (int_to_cap (add_vec (to_bits 64 (projT1 (getCapBase cb_val))) imm64)))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CIncOffset (cd : mword 5) (cb : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (rGPR rt) >>= fun rt_val =>
+ (if ((andb cb_val.(Capability_tag)
+ (andb cb_val.(Capability_sealed)
+ (neq_vec rt_val
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else
+ let '(success, newCap) := incCapOffset cb_val rt_val in
+ (if (success) then (writeCapReg cd newCap) : M (unit)
+ else
+ (writeCapReg cd (int_to_cap (add_vec (to_bits 64 (projT1 (getCapBase cb_val))) rt_val)))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CGetType (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ (wGPR rd
+ (if (capVal.(Capability_sealed)) then mips_zero_extend 64 capVal.(Capability_otype)
+ else
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1]
+ : mword 64)))
+ : M (unit).
+
+Definition execute_CGetTag (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ (wGPR rd (mips_zero_extend 64 (bool_to_bits capVal.(Capability_tag))))
+ : M (unit).
+
+Definition execute_CGetSealed (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ (wGPR rd (mips_zero_extend 64 (bool_to_bits capVal.(Capability_sealed))))
+ : M (unit).
+
+Definition execute_CGetPerm (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ (wGPR rd (mips_zero_extend 64 (getCapPerms capVal)))
+ : M (unit).
+
+Definition execute_CGetPCCSetOffset (cd : mword 5) (rs : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (rGPR rs) >>= fun rs_val =>
+ read_reg PCC_ref >>= fun w__0 : Capability =>
+ let '(success, newPCC) := setCapOffset w__0 rs_val in
+ (if (success) then (writeCapReg cd newPCC) : M (unit)
+ else (writeCapReg cd (int_to_cap rs_val)) : M (unit))
+ : M (unit).
+
+Definition execute_CGetPCC (cd : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ read_reg PCC_ref >>= fun w__0 : Capability =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ let '(success, pcc) := setCapOffset w__0 w__1 in
+ assert_exp' success "PCC with offset PC should always be representable" >>= fun _ =>
+ (writeCapReg cd pcc)
+ : M (unit).
+
+Definition execute_CGetOffset (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ (wGPR rd (to_bits 64 (projT1 (getCapOffset capVal))))
+ : M (unit).
+
+Definition execute_CGetLen (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ let 'len65 := projT1 (getCapLength capVal) in
+ (wGPR rd (to_bits 64 (if sumbool_of_bool ((Z.gtb len65 MAX_U64)) then MAX_U64 else len65)))
+ : M (unit).
+
+Definition execute_CGetCause (rd : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (pcc_access_system_regs tt) >>= fun w__0 : bool =>
+ (if ((negb w__0)) then (raise_c2_exception_noreg CapEx_AccessSystemRegsViolation) : M (unit)
+ else
+ read_reg CapCause_ref >>= fun w__1 : CapCauseReg =>
+ (wGPR rd (mips_zero_extend 64 (_get_CapCauseReg_bits w__1)))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CGetCID (rd : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ ((read_reg CID_ref) : M (mword 64)) >>= fun w__0 : bits 64 => (wGPR rd w__0) : M (unit).
+
+Definition execute_CGetBase (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal => (wGPR rd (to_bits 64 (projT1 (getCapBase capVal)))) : M (unit).
+
+Definition execute_CGetAddr (rd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun capVal =>
+ (wGPR rd (to_bits 64 (projT1 (getCapCursor capVal))))
+ : M (unit).
+
+Definition execute_CFromPtr (cd : mword 5) (cb : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (rGPR rt) >>= fun rt_val =>
+ (if ((eq_vec rt_val
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64))) then
+ (writeCapReg cd null_cap)
+ : M (unit)
+ else if ((negb cb_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation cb)
+ : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else
+ let '(success, newCap) := setCapOffset cb_val rt_val in
+ (if (success) then (writeCapReg cd newCap) : M (unit)
+ else
+ (writeCapReg cd (int_to_cap (add_vec (to_bits 64 (projT1 (getCapBase cb_val))) rt_val)))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CCopyType (cd : mword 5) (cb : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let 'cb_base := projT1 (getCapBase cb_val) in
+ let 'cb_top := projT1 (getCapTop cb_val) in
+ let 'ct_otype := projT1 (uint ct_val.(Capability_otype)) in
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if (ct_val.(Capability_sealed)) then
+ (if sumbool_of_bool ((Z.ltb ct_otype cb_base)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb ct_otype cb_top)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else
+ let '(success, cap) := setCapOffset cb_val (to_bits 64 (Z.sub ct_otype cb_base)) in
+ assert_exp' success "CopyType: offset is in bounds so should be representable" >>= fun _ =>
+ (writeCapReg cd cap)
+ : M (unit))
+ : M (unit)
+ else
+ (writeCapReg cd
+ (int_to_cap
+ (vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1]
+ : mword 64)))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CClearTag (cd : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (writeCapReg cd {[ cb_val with Capability_tag := false ]})
+ : M (unit).
+
+Definition execute_CCheckType (cs : mword 5) (cb : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapReg cb) >>= fun cb_val =>
+ (if ((negb cs_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cs) : M (unit)
+ else if ((negb cb_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation cb)
+ : M (unit)
+ else if ((negb cs_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cs)
+ : M (unit)
+ else if ((negb cb_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((neq_vec cs_val.(Capability_otype) cb_val.(Capability_otype))) then
+ (raise_c2_exception CapEx_TypeViolation cs)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_CCheckTag (cs : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (if ((negb cs_val.(Capability_tag))) then (raise_c2_exception CapEx_TypeViolation cs) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_CCheckPerm (cs : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ let cs_perms : bits 64 := mips_zero_extend 64 (getCapPerms cs_val) in
+ (rGPR rt) >>= fun rt_perms =>
+ (if ((negb cs_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cs) : M (unit)
+ else if ((neq_vec (and_vec cs_perms rt_perms) rt_perms)) then
+ (raise_c2_exception CapEx_UserDefViolation cs)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_CCall (cs : mword 5) (cb : mword 5) (b__155 : mword 11)
+: M (unit) :=
+
+ (if ((eq_vec b__155 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))) then
+ (checkCP2usable tt) >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapReg cb) >>= fun cb_val =>
+ let 'cs_cursor := projT1 (getCapCursor cs_val) in
+ (if ((negb cs_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation cs)
+ : M (unit)
+ else if ((negb cb_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation cb)
+ : M (unit)
+ else if ((negb cs_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cs)
+ : M (unit)
+ else if ((negb cb_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((neq_vec cs_val.(Capability_otype) cb_val.(Capability_otype))) then
+ (raise_c2_exception CapEx_TypeViolation cs)
+ : M (unit)
+ else if ((negb cs_val.(Capability_permit_execute))) then
+ (raise_c2_exception CapEx_PermitExecuteViolation cs)
+ : M (unit)
+ else if (cb_val.(Capability_permit_execute)) then
+ (raise_c2_exception CapEx_PermitExecuteViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb cs_cursor (projT1 (getCapBase cs_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cs)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb cs_cursor (projT1 (getCapTop cs_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cs)
+ : M (unit)
+ else (raise_c2_exception CapEx_CallTrap cs) : M (unit))
+ : M (unit)
+ else
+ (checkCP2usable tt) >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
+ (if (((bits_to_bool w__1) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapReg cb) >>= fun cb_val =>
+ let 'cs_cursor := projT1 (getCapCursor cs_val) in
+ (if ((negb cs_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation cs)
+ : M (unit)
+ else if ((negb cb_val.(Capability_tag))) then
+ (raise_c2_exception CapEx_TagViolation cb)
+ : M (unit)
+ else if ((negb cs_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cs)
+ : M (unit)
+ else if ((negb cb_val.(Capability_sealed))) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if ((neq_vec cs_val.(Capability_otype) cb_val.(Capability_otype))) then
+ (raise_c2_exception CapEx_TypeViolation cs)
+ : M (unit)
+ else if ((negb cs_val.(Capability_permit_ccall))) then
+ (raise_c2_exception CapEx_PermitCCallViolation cs)
+ : M (unit)
+ else if ((negb cb_val.(Capability_permit_ccall))) then
+ (raise_c2_exception CapEx_PermitCCallViolation cb)
+ : M (unit)
+ else if ((negb cs_val.(Capability_permit_execute))) then
+ (raise_c2_exception CapEx_PermitExecuteViolation cs)
+ : M (unit)
+ else if (cb_val.(Capability_permit_execute)) then
+ (raise_c2_exception CapEx_PermitExecuteViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb cs_cursor (projT1 (getCapBase cs_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cs)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb cs_cursor (projT1 (getCapTop cs_val)))) then
+ (raise_c2_exception CapEx_LengthViolation cs)
+ : M (unit)
+ else
+ (set_next_pcc
+ {| Capability_tag := cs_val.(Capability_tag);
+ Capability_padding := cs_val.(Capability_padding);
+ Capability_otype := (zeros_implicit 24 tt);
+ Capability_uperms := cs_val.(Capability_uperms);
+ Capability_perm_reserved12_14 := cs_val.(Capability_perm_reserved12_14);
+ Capability_permit_set_CID := cs_val.(Capability_permit_set_CID);
+ Capability_access_system_regs := cs_val.(Capability_access_system_regs);
+ Capability_permit_unseal := cs_val.(Capability_permit_unseal);
+ Capability_permit_ccall := cs_val.(Capability_permit_ccall);
+ Capability_permit_seal := cs_val.(Capability_permit_seal);
+ Capability_permit_store_local_cap := cs_val.(Capability_permit_store_local_cap);
+ Capability_permit_store_cap := cs_val.(Capability_permit_store_cap);
+ Capability_permit_load_cap := cs_val.(Capability_permit_load_cap);
+ Capability_permit_store := cs_val.(Capability_permit_store);
+ Capability_permit_load := cs_val.(Capability_permit_load);
+ Capability_permit_execute := cs_val.(Capability_permit_execute);
+ Capability_global := cs_val.(Capability_global);
+ Capability_sealed := false;
+ Capability_address := cs_val.(Capability_address);
+ Capability_base := cs_val.(Capability_base);
+ Capability_length := cs_val.(Capability_length) |}) >>
+ write_reg
+ C26_ref
+ {| Capability_tag := cb_val.(Capability_tag);
+ Capability_padding := cb_val.(Capability_padding);
+ Capability_otype := (zeros_implicit 24 tt);
+ Capability_uperms := cb_val.(Capability_uperms);
+ Capability_perm_reserved12_14 := cb_val.(Capability_perm_reserved12_14);
+ Capability_permit_set_CID := cb_val.(Capability_permit_set_CID);
+ Capability_access_system_regs := cb_val.(Capability_access_system_regs);
+ Capability_permit_unseal := cb_val.(Capability_permit_unseal);
+ Capability_permit_ccall := cb_val.(Capability_permit_ccall);
+ Capability_permit_seal := cb_val.(Capability_permit_seal);
+ Capability_permit_store_local_cap := cb_val.(Capability_permit_store_local_cap);
+ Capability_permit_store_cap := cb_val.(Capability_permit_store_cap);
+ Capability_permit_load_cap := cb_val.(Capability_permit_load_cap);
+ Capability_permit_store := cb_val.(Capability_permit_store);
+ Capability_permit_load := cb_val.(Capability_permit_load);
+ Capability_permit_execute := cb_val.(Capability_permit_execute);
+ Capability_global := cb_val.(Capability_global);
+ Capability_sealed := false;
+ Capability_address := cb_val.(Capability_address);
+ Capability_base := cb_val.(Capability_base);
+ Capability_length := cb_val.(Capability_length) |} >>
+ write_reg NextPC_ref (to_bits 64 (projT1 (getCapOffset cs_val)))
+ : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CCSeal (cd : mword 5) (cs : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cs) >>= fun cs_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let 'ct_cursor := projT1 (getCapCursor ct_val) in
+ let 'ct_top := projT1 (getCapTop ct_val) in
+ let 'ct_base := projT1 (getCapBase ct_val) in
+ (if ((negb cs_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cs) : M (unit)
+ else if sumbool_of_bool ((orb (negb ct_val.(Capability_tag))
+ (Z.eqb (projT1 (getCapCursor ct_val)) MAX_U64))) then
+ (writeCapReg cd cs_val)
+ : M (unit)
+ else if (cs_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cs)
+ : M (unit)
+ else if (ct_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation ct)
+ : M (unit)
+ else if ((negb ct_val.(Capability_permit_seal))) then
+ (raise_c2_exception CapEx_PermitSealViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb ct_cursor ct_base)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.geb ct_cursor ct_top)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb ct_cursor max_otype)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else
+ let '(success, newCap) := sealCap cs_val (to_bits 24 ct_cursor) in
+ (if ((negb success)) then (raise_c2_exception CapEx_InexactBounds cs) : M (unit)
+ else (writeCapReg cd newCap) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_CBuildCap (cd : mword 5) (cb : mword 5) (ct : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapRegDDC cb) >>= fun cb_val =>
+ (readCapReg ct) >>= fun ct_val =>
+ let 'cb_base := projT1 (getCapBase cb_val) in
+ let 'ct_base := projT1 (getCapBase ct_val) in
+ let 'cb_top := projT1 (getCapTop cb_val) in
+ let 'ct_top := projT1 (getCapTop ct_val) in
+ let cb_perms := getCapPerms cb_val in
+ let ct_perms := getCapPerms ct_val in
+ let 'ct_offset := projT1 (getCapOffset ct_val) in
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.ltb ct_base cb_base)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb ct_top cb_top)) then
+ (raise_c2_exception CapEx_LengthViolation cb)
+ : M (unit)
+ else if sumbool_of_bool ((Z.gtb ct_base ct_top)) then
+ (raise_c2_exception CapEx_LengthViolation ct)
+ : M (unit)
+ else if ((neq_vec (and_vec ct_perms cb_perms) ct_perms)) then
+ (raise_c2_exception CapEx_UserDefViolation cb)
+ : M (unit)
+ else
+ let '(exact, cd1) := setCapBounds cb_val (to_bits 64 ct_base) (to_bits 65 ct_top) in
+ let '(representable, cd2) := setCapOffset cd1 (to_bits 64 ct_offset) in
+ let cd3 := setCapPerms cd2 ct_perms in
+ assert_exp' exact "CBuildCap: setCapBounds was not exact" >>= fun _ =>
+ assert_exp' representable "CBuildCap: offset was not representable" >>= fun _ =>
+ (writeCapReg cd cd3)
+ : M (unit))
+ : M (unit).
+
+Definition execute_CBZ (cb : mword 5) (imm : mword 16) (notzero : bool)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (if (((bits_to_bool
+ (xor_vec (bool_to_bits (generic_eq cb_val null_cap)) ((bool_to_bits notzero) : mword 1)))
+ : bool)) then
+ let offset : bits 64 :=
+ add_vec_int (mips_sign_extend 64 (concat_vec imm (vec_of_bits [B0;B0] : mword 2))) 4 in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ (execute_branch (add_vec w__1 offset))
+ : M (unit)
+ else returnm (tt : unit)) >>
+ write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1)
+ : M (unit).
+
+Definition execute_CBX (cb : mword 5) (imm : mword 16) (notset : bool)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (if (((bits_to_bool
+ (xor_vec (bool_to_bits cb_val.(Capability_tag)) ((bool_to_bits notset) : mword 1)))
+ : bool)) then
+ let offset : bits 64 :=
+ add_vec_int (mips_sign_extend 64 (concat_vec imm (vec_of_bits [B0;B0] : mword 2))) 4 in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ (execute_branch (add_vec w__1 offset))
+ : M (unit)
+ else returnm (tt : unit)) >>
+ write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1)
+ : M (unit).
+
+Definition execute_CAndPerm (cd : mword 5) (cb : mword 5) (rt : mword 5)
+: M (unit) :=
+
+ (checkCP2usable tt) >>
+ (readCapReg cb) >>= fun cb_val =>
+ (rGPR rt) >>= fun rt_val =>
+ (if ((negb cb_val.(Capability_tag))) then (raise_c2_exception CapEx_TagViolation cb) : M (unit)
+ else if (cb_val.(Capability_sealed)) then
+ (raise_c2_exception CapEx_SealViolation cb)
+ : M (unit)
+ else
+ let perms := getCapPerms cb_val in
+ let newCap := setCapPerms cb_val (and_vec perms (subrange_vec_dec rt_val 30 0)) in
+ (writeCapReg cd newCap)
+ : M (unit))
+ : M (unit).
+
+Definition execute_CACHE (base : mword 5) (op : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (checkCP0Access tt)
+ : M (unit).
+
+Definition execute_C2Dump (rt : mword 5) : unit := tt.
+
+Definition execute_BREAK '(tt : unit) : M (unit) := (SignalException Bp) : M (unit).
+
+Definition execute_BEQ (rs : mword 5) (rd : mword 5) (imm : mword 16) (ne : bool) (likely : bool)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (rGPR rs) >>= fun w__1 : mword 64 =>
+ (rGPR rd) >>= fun w__2 : mword 64 =>
+ (if (((bits_to_bool (xor_vec (bool_to_bits (eq_vec w__1 w__2)) ((bool_to_bits ne) : mword 1)))
+ : bool)) then
+ let offset : bits 64 :=
+ add_vec_int (mips_sign_extend 64 (concat_vec imm (vec_of_bits [B0;B0] : mword 2))) 4 in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : bits 64 =>
+ (execute_branch (add_vec w__3 offset))
+ : M (unit)
+ else if (likely) then
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__4 : bits 64 =>
+ write_reg NextPC_ref (add_vec_int w__4 8)
+ : M (unit)
+ else write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1) : M (unit))
+ : M (unit).
+
+Definition execute_BCMPZ
+(rs : mword 5) (imm : mword 16) (cmp : Comparison) (link : bool) (likely : bool)
+: M (unit) :=
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ let linkVal := add_vec_int w__1 8 in
+ (rGPR rs) >>= fun regVal =>
+ let condition := compare cmp regVal (mips_zero_extend 64 (vec_of_bits [B0] : mword 1)) in
+ (if (condition) then
+ let offset : bits 64 :=
+ add_vec_int (mips_sign_extend 64 (concat_vec imm (vec_of_bits [B0;B0] : mword 2))) 4 in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ (execute_branch (add_vec w__2 offset))
+ : M (unit)
+ else if (likely) then
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : bits 64 =>
+ write_reg NextPC_ref (add_vec_int w__3 8)
+ : M (unit)
+ else write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1) : M (unit)) >>
+ (if (link) then (wGPR (vec_of_bits [B1;B1;B1;B1;B1] : mword 5) linkVal) : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition execute_ANDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (and_vec w__0 (mips_zero_extend 64 imm)))
+ : M (unit).
+
+Definition execute_AND (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (and_vec w__0 w__1)) : M (unit).
+
+Definition execute_ADDU (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun opA =>
+ (rGPR rt) >>= fun opB =>
+ (if ((orb (NotWordVal opA) (NotWordVal opB))) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
+ else
+ (wGPR rd
+ (mips_sign_extend 64 (add_vec (subrange_vec_dec opA 31 0) (subrange_vec_dec opB 31 0))))
+ : M (unit))
+ : M (unit).
+
+Definition execute_ADDIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun opA =>
+ (if ((NotWordVal opA)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rt w__0) : M (unit)
+ else
+ (wGPR rt (mips_sign_extend 64 (add_vec (subrange_vec_dec opA 31 0) (mips_sign_extend 32 imm))))
+ : M (unit))
+ : M (unit).
+
+Definition execute_ADDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
+: M (unit) :=
+
+ (rGPR rs) >>= fun opA =>
+ (if ((NotWordVal opA)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rt w__0) : M (unit)
+ else
+ let sum33 : bits 33 :=
+ add_vec (mips_sign_extend 33 (subrange_vec_dec opA 31 0)) (mips_sign_extend 33 imm) in
+ (if ((neq_bool ((bit_to_bool (access_vec_dec sum33 32)) : bool)
+ ((bit_to_bool (access_vec_dec sum33 31))
+ : bool))) then
+ (SignalException Ov)
+ : M (unit)
+ else (wGPR rt (mips_sign_extend 64 (subrange_vec_dec sum33 31 0))) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute_ADD (rs : mword 5) (rt : mword 5) (rd : mword 5)
+: M (unit) :=
+
+ (rGPR rs) >>= fun opA : bits 64 =>
+ (rGPR rt) >>= fun opB : bits 64 =>
+ (if ((orb (NotWordVal opA) (NotWordVal opB))) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
+ else
+ let sum33 : bits 33 :=
+ add_vec (mips_sign_extend 33 (subrange_vec_dec opA 31 0))
+ (mips_sign_extend 33 (subrange_vec_dec opB 31 0)) in
+ (if ((neq_bool ((bit_to_bool (access_vec_dec sum33 32)) : bool)
+ ((bit_to_bool (access_vec_dec sum33 31))
+ : bool))) then
+ (SignalException Ov)
+ : M (unit)
+ else (wGPR rd (mips_sign_extend 64 (subrange_vec_dec sum33 31 0))) : M (unit))
+ : M (unit))
+ : M (unit).
+
+Definition execute (merge_var : ast)
+: M (unit) :=
+
+ (match merge_var with
+ | DADDIU (rs,rt,imm) => (execute_DADDIU rs rt imm) : M (unit)
+ | DADDU (rs,rt,rd) => (execute_DADDU rs rt rd) : M (unit)
+ | DADDI (rs,rt,imm) => (execute_DADDI rs rt imm) : M (unit)
+ | DADD (rs,rt,rd) => (execute_DADD rs rt rd) : M (unit)
+ | ADD (rs,rt,rd) => (execute_ADD rs rt rd) : M (unit)
+ | ADDI (rs,rt,imm) => (execute_ADDI rs rt imm) : M (unit)
+ | ADDU (rs,rt,rd) => (execute_ADDU rs rt rd) : M (unit)
+ | ADDIU (rs,rt,imm) => (execute_ADDIU rs rt imm) : M (unit)
+ | DSUBU (rs,rt,rd) => (execute_DSUBU rs rt rd) : M (unit)
+ | DSUB (rs,rt,rd) => (execute_DSUB rs rt rd) : M (unit)
+ | SUB (rs,rt,rd) => (execute_SUB rs rt rd) : M (unit)
+ | SUBU (rs,rt,rd) => (execute_SUBU rs rt rd) : M (unit)
+ | AND (rs,rt,rd) => (execute_AND rs rt rd) : M (unit)
+ | ANDI (rs,rt,imm) => (execute_ANDI rs rt imm) : M (unit)
+ | OR (rs,rt,rd) => (execute_OR rs rt rd) : M (unit)
+ | ORI (rs,rt,imm) => (execute_ORI rs rt imm) : M (unit)
+ | NOR (rs,rt,rd) => (execute_NOR rs rt rd) : M (unit)
+ | XOR (rs,rt,rd) => (execute_XOR rs rt rd) : M (unit)
+ | XORI (rs,rt,imm) => (execute_XORI rs rt imm) : M (unit)
+ | LUI (rt,imm) => (execute_LUI rt imm) : M (unit)
+ | DSLL (rt,rd,sa) => (execute_DSLL rt rd sa) : M (unit)
+ | DSLL32 (rt,rd,sa) => (execute_DSLL32 rt rd sa) : M (unit)
+ | DSLLV (rs,rt,rd) => (execute_DSLLV rs rt rd) : M (unit)
+ | DSRA (rt,rd,sa) => (execute_DSRA rt rd sa) : M (unit)
+ | DSRA32 (rt,rd,sa) => (execute_DSRA32 rt rd sa) : M (unit)
+ | DSRAV (rs,rt,rd) => (execute_DSRAV rs rt rd) : M (unit)
+ | DSRL (rt,rd,sa) => (execute_DSRL rt rd sa) : M (unit)
+ | DSRL32 (rt,rd,sa) => (execute_DSRL32 rt rd sa) : M (unit)
+ | DSRLV (rs,rt,rd) => (execute_DSRLV rs rt rd) : M (unit)
+ | SLL (rt,rd,sa) => (execute_SLL rt rd sa) : M (unit)
+ | SLLV (rs,rt,rd) => (execute_SLLV rs rt rd) : M (unit)
+ | SRA (rt,rd,sa) => (execute_SRA rt rd sa) : M (unit)
+ | SRAV (rs,rt,rd) => (execute_SRAV rs rt rd) : M (unit)
+ | SRL (rt,rd,sa) => (execute_SRL rt rd sa) : M (unit)
+ | SRLV (rs,rt,rd) => (execute_SRLV rs rt rd) : M (unit)
+ | SLT (rs,rt,rd) => (execute_SLT rs rt rd) : M (unit)
+ | SLTI (rs,rt,imm) => (execute_SLTI rs rt imm) : M (unit)
+ | SLTU (rs,rt,rd) => (execute_SLTU rs rt rd) : M (unit)
+ | SLTIU (rs,rt,imm) => (execute_SLTIU rs rt imm) : M (unit)
+ | MOVN (rs,rt,rd) => (execute_MOVN rs rt rd) : M (unit)
+ | MOVZ (rs,rt,rd) => (execute_MOVZ rs rt rd) : M (unit)
+ | MFHI (rd) => (execute_MFHI rd) : M (unit)
+ | MFLO (rd) => (execute_MFLO rd) : M (unit)
+ | MTHI (rs) => (execute_MTHI rs) : M (unit)
+ | MTLO (rs) => (execute_MTLO rs) : M (unit)
+ | MUL (rs,rt,rd) => (execute_MUL rs rt rd) : M (unit)
+ | MULT (rs,rt) => (execute_MULT rs rt) : M (unit)
+ | MULTU (rs,rt) => (execute_MULTU rs rt) : M (unit)
+ | DMULT (rs,rt) => (execute_DMULT rs rt) : M (unit)
+ | DMULTU (rs,rt) => (execute_DMULTU rs rt) : M (unit)
+ | MADD (rs,rt) => (execute_MADD rs rt) : M (unit)
+ | MADDU (rs,rt) => (execute_MADDU rs rt) : M (unit)
+ | MSUB (rs,rt) => (execute_MSUB rs rt) : M (unit)
+ | MSUBU (rs,rt) => (execute_MSUBU rs rt) : M (unit)
+ | DIV (rs,rt) => (execute_DIV rs rt) : M (unit)
+ | DIVU (rs,rt) => (execute_DIVU rs rt) : M (unit)
+ | DDIV (rs,rt) => (execute_DDIV rs rt) : M (unit)
+ | DDIVU (rs,rt) => (execute_DDIVU rs rt) : M (unit)
+ | J (offset) => (execute_J offset) : M (unit)
+ | JAL (offset) => (execute_JAL offset) : M (unit)
+ | JR (rs) => (execute_JR rs) : M (unit)
+ | JALR (rs,rd) => (execute_JALR rs rd) : M (unit)
+ | BEQ (rs,rd,imm,ne,likely) => (execute_BEQ rs rd imm ne likely) : M (unit)
+ | BCMPZ (rs,imm,cmp,link,likely) => (execute_BCMPZ rs imm cmp link likely) : M (unit)
+ | SYSCALL (arg0) => (execute_SYSCALL arg0) : M (unit)
+ | BREAK (arg0) => (execute_BREAK arg0) : M (unit)
+ | WAIT (arg0) => (execute_WAIT arg0) : M (unit)
+ | TRAPREG (rs,rt,cmp) => (execute_TRAPREG rs rt cmp) : M (unit)
+ | TRAPIMM (rs,imm,cmp) => (execute_TRAPIMM rs imm cmp) : M (unit)
+ | Load (width,sign,linked,base,rt,offset) =>
+ (execute_Load width sign linked base rt offset) : M (unit)
+ | Store (width,conditional,base,rt,offset) =>
+ (execute_Store width conditional base rt offset) : M (unit)
+ | LWL (base,rt,offset) => (execute_LWL base rt offset) : M (unit)
+ | LWR (base,rt,offset) => (execute_LWR base rt offset) : M (unit)
+ | SWL (base,rt,offset) => (execute_SWL base rt offset) : M (unit)
+ | SWR (base,rt,offset) => (execute_SWR base rt offset) : M (unit)
+ | LDL (base,rt,offset) => (execute_LDL base rt offset) : M (unit)
+ | LDR (base,rt,offset) => (execute_LDR base rt offset) : M (unit)
+ | SDL (base,rt,offset) => (execute_SDL base rt offset) : M (unit)
+ | SDR (base,rt,offset) => (execute_SDR base rt offset) : M (unit)
+ | CACHE (base,op,imm) => (execute_CACHE base op imm) : M (unit)
+ | SYNC (arg0) => (execute_SYNC arg0) : M (unit)
+ | MFC0 (rt,rd,sel,double) => (execute_MFC0 rt rd sel double) : M (unit)
+ | HCF (arg0) => returnm ((execute_HCF arg0) : unit)
+ | MTC0 (rt,rd,sel,double) => (execute_MTC0 rt rd sel double) : M (unit)
+ | TLBWI (arg0) => (execute_TLBWI arg0) : M (unit)
+ | TLBWR (arg0) => (execute_TLBWR arg0) : M (unit)
+ | TLBR (arg0) => (execute_TLBR arg0) : M (unit)
+ | TLBP (arg0) => (execute_TLBP arg0) : M (unit)
+ | RDHWR (rt,rd) => (execute_RDHWR rt rd) : M (unit)
+ | ERET (arg0) => (execute_ERET arg0) : M (unit)
+ | CGetPerm (rd,cb) => (execute_CGetPerm rd cb) : M (unit)
+ | CGetType (rd,cb) => (execute_CGetType rd cb) : M (unit)
+ | CGetBase (rd,cb) => (execute_CGetBase rd cb) : M (unit)
+ | CGetOffset (rd,cb) => (execute_CGetOffset rd cb) : M (unit)
+ | CGetLen (rd,cb) => (execute_CGetLen rd cb) : M (unit)
+ | CGetTag (rd,cb) => (execute_CGetTag rd cb) : M (unit)
+ | CGetSealed (rd,cb) => (execute_CGetSealed rd cb) : M (unit)
+ | CGetAddr (rd,cb) => (execute_CGetAddr rd cb) : M (unit)
+ | CGetPCC (cd) => (execute_CGetPCC cd) : M (unit)
+ | CGetPCCSetOffset (cd,rs) => (execute_CGetPCCSetOffset cd rs) : M (unit)
+ | CGetCause (rd) => (execute_CGetCause rd) : M (unit)
+ | CSetCause (rt) => (execute_CSetCause rt) : M (unit)
+ | CGetCID (rd) => (execute_CGetCID rd) : M (unit)
+ | CSetCID (cb) => (execute_CSetCID cb) : M (unit)
+ | CReadHwr (cd,sel) => (execute_CReadHwr cd sel) : M (unit)
+ | CWriteHwr (cb,sel) => (execute_CWriteHwr cb sel) : M (unit)
+ | CAndPerm (cd,cb,rt) => (execute_CAndPerm cd cb rt) : M (unit)
+ | CToPtr (rd,cb,ct) => (execute_CToPtr rd cb ct) : M (unit)
+ | CSub (rd,cb,ct) => (execute_CSub rd cb ct) : M (unit)
+ | CPtrCmp (rd,cb,ct,op) => (execute_CPtrCmp rd cb ct op) : M (unit)
+ | CIncOffset (cd,cb,rt) => (execute_CIncOffset cd cb rt) : M (unit)
+ | CIncOffsetImmediate (cd,cb,imm) => (execute_CIncOffsetImmediate cd cb imm) : M (unit)
+ | CSetOffset (cd,cb,rt) => (execute_CSetOffset cd cb rt) : M (unit)
+ | CSetBounds (cd,cb,rt) => (execute_CSetBounds cd cb rt) : M (unit)
+ | CSetBoundsImmediate (cd,cb,imm) => (execute_CSetBoundsImmediate cd cb imm) : M (unit)
+ | CSetBoundsExact (cd,cb,rt) => (execute_CSetBoundsExact cd cb rt) : M (unit)
+ | CClearTag (cd,cb) => (execute_CClearTag cd cb) : M (unit)
+ | CMOVX (cd,cb,rt,ismovn) => (execute_CMOVX cd cb rt ismovn) : M (unit)
+ | ClearRegs (regset,m) => (execute_ClearRegs regset m) : M (unit)
+ | CFromPtr (cd,cb,rt) => (execute_CFromPtr cd cb rt) : M (unit)
+ | CBuildCap (cd,cb,ct) => (execute_CBuildCap cd cb ct) : M (unit)
+ | CCopyType (cd,cb,ct) => (execute_CCopyType cd cb ct) : M (unit)
+ | CCheckPerm (cs,rt) => (execute_CCheckPerm cs rt) : M (unit)
+ | CCheckType (cs,cb) => (execute_CCheckType cs cb) : M (unit)
+ | CCheckTag (cs) => (execute_CCheckTag cs) : M (unit)
+ | CTestSubset (rd,cb,ct) => (execute_CTestSubset rd cb ct) : M (unit)
+ | CSeal (cd,cs,ct) => (execute_CSeal cd cs ct) : M (unit)
+ | CCSeal (cd,cs,ct) => (execute_CCSeal cd cs ct) : M (unit)
+ | CUnseal (cd,cs,ct) => (execute_CUnseal cd cs ct) : M (unit)
+ | CCall (cs,cb,b__155) => (execute_CCall cs cb b__155) : M (unit)
+ | CReturn (arg0) => (execute_CReturn arg0) : M (unit)
+ | CBX (cb,imm,notset) => (execute_CBX cb imm notset) : M (unit)
+ | CBZ (cb,imm,notzero) => (execute_CBZ cb imm notzero) : M (unit)
+ | CJALR (cd,cb,link) => (execute_CJALR cd cb link) : M (unit)
+ | CLoad (rd,cb,rt,offset,signext,width) =>
+ (execute_CLoad rd cb rt offset signext width) : M (unit)
+ | CLoadLinked (rd,cb,signext,width) => (execute_CLoadLinked rd cb signext width) : M (unit)
+ | CLoadTags (rd,cb) => (execute_CLoadTags rd cb) : M (unit)
+ | CStore (rs,cb,rt,offset,width) => (execute_CStore rs cb rt offset width) : M (unit)
+ | CStoreConditional (rs,cb,rd,width) => (execute_CStoreConditional rs cb rd width) : M (unit)
+ | CSC (cs,cb,rt,offset) => (execute_CSC cs cb rt offset) : M (unit)
+ | CSCC (cs,cb,rd) => (execute_CSCC cs cb rd) : M (unit)
+ | CLC (cd,cb,rt,offset) => (execute_CLC cd cb rt offset) : M (unit)
+ | CLCBI (cd,cb,offset) => (execute_CLCBI cd cb offset) : M (unit)
+ | CLLC (cd,cb) => (execute_CLLC cd cb) : M (unit)
+ | C2Dump (rt) => returnm ((execute_C2Dump rt) : unit)
+ | RI (arg0) => (execute_RI arg0) : M (unit)
+ end)
+ : M (unit).
+
+Definition supported_instructions (instr : ast) : option ast := Some (instr).
+
+Definition initialize_registers '(tt : unit)
+: M (unit) :=
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
+ write_reg PC_ref w__0 >>
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 =>
+ write_reg NextPC_ref w__1 >>
+ (undefined_bitvector 1) >>= fun w__2 : mword 1 =>
+ write_reg TLBProbe_ref w__2 >>
+ (undefined_bitvector 6) >>= fun w__3 : mword 6 =>
+ write_reg TLBIndex_ref w__3 >>
+ (undefined_bitvector 6) >>= fun w__4 : mword 6 =>
+ write_reg TLBRandom_ref w__4 >>
+ (undefined_TLBEntryLoReg tt) >>= fun w__5 : TLBEntryLoReg =>
+ write_reg TLBEntryLo0_ref w__5 >>
+ (undefined_TLBEntryLoReg tt) >>= fun w__6 : TLBEntryLoReg =>
+ write_reg TLBEntryLo1_ref w__6 >>
+ (undefined_ContextReg tt) >>= fun w__7 : ContextReg =>
+ write_reg TLBContext_ref w__7 >>
+ (undefined_bitvector 16) >>= fun w__8 : mword 16 =>
+ write_reg TLBPageMask_ref w__8 >>
+ (undefined_bitvector 6) >>= fun w__9 : mword 6 =>
+ write_reg TLBWired_ref w__9 >>
+ (undefined_TLBEntryHiReg tt) >>= fun w__10 : TLBEntryHiReg =>
+ write_reg TLBEntryHi_ref w__10 >>
+ (undefined_XContextReg tt) >>= fun w__11 : XContextReg =>
+ write_reg TLBXContext_ref w__11 >>
+ (undefined_TLBEntry tt) >>= fun w__12 : TLBEntry =>
+ write_reg TLBEntry00_ref w__12 >>
+ (undefined_TLBEntry tt) >>= fun w__13 : TLBEntry =>
+ write_reg TLBEntry01_ref w__13 >>
+ (undefined_TLBEntry tt) >>= fun w__14 : TLBEntry =>
+ write_reg TLBEntry02_ref w__14 >>
+ (undefined_TLBEntry tt) >>= fun w__15 : TLBEntry =>
+ write_reg TLBEntry03_ref w__15 >>
+ (undefined_TLBEntry tt) >>= fun w__16 : TLBEntry =>
+ write_reg TLBEntry04_ref w__16 >>
+ (undefined_TLBEntry tt) >>= fun w__17 : TLBEntry =>
+ write_reg TLBEntry05_ref w__17 >>
+ (undefined_TLBEntry tt) >>= fun w__18 : TLBEntry =>
+ write_reg TLBEntry06_ref w__18 >>
+ (undefined_TLBEntry tt) >>= fun w__19 : TLBEntry =>
+ write_reg TLBEntry07_ref w__19 >>
+ (undefined_TLBEntry tt) >>= fun w__20 : TLBEntry =>
+ write_reg TLBEntry08_ref w__20 >>
+ (undefined_TLBEntry tt) >>= fun w__21 : TLBEntry =>
+ write_reg TLBEntry09_ref w__21 >>
+ (undefined_TLBEntry tt) >>= fun w__22 : TLBEntry =>
+ write_reg TLBEntry10_ref w__22 >>
+ (undefined_TLBEntry tt) >>= fun w__23 : TLBEntry =>
+ write_reg TLBEntry11_ref w__23 >>
+ (undefined_TLBEntry tt) >>= fun w__24 : TLBEntry =>
+ write_reg TLBEntry12_ref w__24 >>
+ (undefined_TLBEntry tt) >>= fun w__25 : TLBEntry =>
+ write_reg TLBEntry13_ref w__25 >>
+ (undefined_TLBEntry tt) >>= fun w__26 : TLBEntry =>
+ write_reg TLBEntry14_ref w__26 >>
+ (undefined_TLBEntry tt) >>= fun w__27 : TLBEntry =>
+ write_reg TLBEntry15_ref w__27 >>
+ (undefined_TLBEntry tt) >>= fun w__28 : TLBEntry =>
+ write_reg TLBEntry16_ref w__28 >>
+ (undefined_TLBEntry tt) >>= fun w__29 : TLBEntry =>
+ write_reg TLBEntry17_ref w__29 >>
+ (undefined_TLBEntry tt) >>= fun w__30 : TLBEntry =>
+ write_reg TLBEntry18_ref w__30 >>
+ (undefined_TLBEntry tt) >>= fun w__31 : TLBEntry =>
+ write_reg TLBEntry19_ref w__31 >>
+ (undefined_TLBEntry tt) >>= fun w__32 : TLBEntry =>
+ write_reg TLBEntry20_ref w__32 >>
+ (undefined_TLBEntry tt) >>= fun w__33 : TLBEntry =>
+ write_reg TLBEntry21_ref w__33 >>
+ (undefined_TLBEntry tt) >>= fun w__34 : TLBEntry =>
+ write_reg TLBEntry22_ref w__34 >>
+ (undefined_TLBEntry tt) >>= fun w__35 : TLBEntry =>
+ write_reg TLBEntry23_ref w__35 >>
+ (undefined_TLBEntry tt) >>= fun w__36 : TLBEntry =>
+ write_reg TLBEntry24_ref w__36 >>
+ (undefined_TLBEntry tt) >>= fun w__37 : TLBEntry =>
+ write_reg TLBEntry25_ref w__37 >>
+ (undefined_TLBEntry tt) >>= fun w__38 : TLBEntry =>
+ write_reg TLBEntry26_ref w__38 >>
+ (undefined_TLBEntry tt) >>= fun w__39 : TLBEntry =>
+ write_reg TLBEntry27_ref w__39 >>
+ (undefined_TLBEntry tt) >>= fun w__40 : TLBEntry =>
+ write_reg TLBEntry28_ref w__40 >>
+ (undefined_TLBEntry tt) >>= fun w__41 : TLBEntry =>
+ write_reg TLBEntry29_ref w__41 >>
+ (undefined_TLBEntry tt) >>= fun w__42 : TLBEntry =>
+ write_reg TLBEntry30_ref w__42 >>
+ (undefined_TLBEntry tt) >>= fun w__43 : TLBEntry =>
+ write_reg TLBEntry31_ref w__43 >>
+ (undefined_TLBEntry tt) >>= fun w__44 : TLBEntry =>
+ write_reg TLBEntry32_ref w__44 >>
+ (undefined_TLBEntry tt) >>= fun w__45 : TLBEntry =>
+ write_reg TLBEntry33_ref w__45 >>
+ (undefined_TLBEntry tt) >>= fun w__46 : TLBEntry =>
+ write_reg TLBEntry34_ref w__46 >>
+ (undefined_TLBEntry tt) >>= fun w__47 : TLBEntry =>
+ write_reg TLBEntry35_ref w__47 >>
+ (undefined_TLBEntry tt) >>= fun w__48 : TLBEntry =>
+ write_reg TLBEntry36_ref w__48 >>
+ (undefined_TLBEntry tt) >>= fun w__49 : TLBEntry =>
+ write_reg TLBEntry37_ref w__49 >>
+ (undefined_TLBEntry tt) >>= fun w__50 : TLBEntry =>
+ write_reg TLBEntry38_ref w__50 >>
+ (undefined_TLBEntry tt) >>= fun w__51 : TLBEntry =>
+ write_reg TLBEntry39_ref w__51 >>
+ (undefined_TLBEntry tt) >>= fun w__52 : TLBEntry =>
+ write_reg TLBEntry40_ref w__52 >>
+ (undefined_TLBEntry tt) >>= fun w__53 : TLBEntry =>
+ write_reg TLBEntry41_ref w__53 >>
+ (undefined_TLBEntry tt) >>= fun w__54 : TLBEntry =>
+ write_reg TLBEntry42_ref w__54 >>
+ (undefined_TLBEntry tt) >>= fun w__55 : TLBEntry =>
+ write_reg TLBEntry43_ref w__55 >>
+ (undefined_TLBEntry tt) >>= fun w__56 : TLBEntry =>
+ write_reg TLBEntry44_ref w__56 >>
+ (undefined_TLBEntry tt) >>= fun w__57 : TLBEntry =>
+ write_reg TLBEntry45_ref w__57 >>
+ (undefined_TLBEntry tt) >>= fun w__58 : TLBEntry =>
+ write_reg TLBEntry46_ref w__58 >>
+ (undefined_TLBEntry tt) >>= fun w__59 : TLBEntry =>
+ write_reg TLBEntry47_ref w__59 >>
+ (undefined_TLBEntry tt) >>= fun w__60 : TLBEntry =>
+ write_reg TLBEntry48_ref w__60 >>
+ (undefined_TLBEntry tt) >>= fun w__61 : TLBEntry =>
+ write_reg TLBEntry49_ref w__61 >>
+ (undefined_TLBEntry tt) >>= fun w__62 : TLBEntry =>
+ write_reg TLBEntry50_ref w__62 >>
+ (undefined_TLBEntry tt) >>= fun w__63 : TLBEntry =>
+ write_reg TLBEntry51_ref w__63 >>
+ (undefined_TLBEntry tt) >>= fun w__64 : TLBEntry =>
+ write_reg TLBEntry52_ref w__64 >>
+ (undefined_TLBEntry tt) >>= fun w__65 : TLBEntry =>
+ write_reg TLBEntry53_ref w__65 >>
+ (undefined_TLBEntry tt) >>= fun w__66 : TLBEntry =>
+ write_reg TLBEntry54_ref w__66 >>
+ (undefined_TLBEntry tt) >>= fun w__67 : TLBEntry =>
+ write_reg TLBEntry55_ref w__67 >>
+ (undefined_TLBEntry tt) >>= fun w__68 : TLBEntry =>
+ write_reg TLBEntry56_ref w__68 >>
+ (undefined_TLBEntry tt) >>= fun w__69 : TLBEntry =>
+ write_reg TLBEntry57_ref w__69 >>
+ (undefined_TLBEntry tt) >>= fun w__70 : TLBEntry =>
+ write_reg TLBEntry58_ref w__70 >>
+ (undefined_TLBEntry tt) >>= fun w__71 : TLBEntry =>
+ write_reg TLBEntry59_ref w__71 >>
+ (undefined_TLBEntry tt) >>= fun w__72 : TLBEntry =>
+ write_reg TLBEntry60_ref w__72 >>
+ (undefined_TLBEntry tt) >>= fun w__73 : TLBEntry =>
+ write_reg TLBEntry61_ref w__73 >>
+ (undefined_TLBEntry tt) >>= fun w__74 : TLBEntry =>
+ write_reg TLBEntry62_ref w__74 >>
+ (undefined_TLBEntry tt) >>= fun w__75 : TLBEntry =>
+ write_reg TLBEntry63_ref w__75 >>
+ (undefined_bitvector 32) >>= fun w__76 : mword 32 =>
+ write_reg CP0Compare_ref w__76 >>
+ (undefined_CauseReg tt) >>= fun w__77 : CauseReg =>
+ write_reg CP0Cause_ref w__77 >>
+ (undefined_bitvector 64) >>= fun w__78 : mword 64 =>
+ write_reg CP0EPC_ref w__78 >>
+ (undefined_bitvector 64) >>= fun w__79 : mword 64 =>
+ write_reg CP0ErrorEPC_ref w__79 >>
+ (undefined_bitvector 1) >>= fun w__80 : mword 1 =>
+ write_reg CP0LLBit_ref w__80 >>
+ (undefined_bitvector 64) >>= fun w__81 : mword 64 =>
+ write_reg CP0LLAddr_ref w__81 >>
+ (undefined_bitvector 64) >>= fun w__82 : mword 64 =>
+ write_reg CP0BadVAddr_ref w__82 >>
+ (undefined_bitvector 32) >>= fun w__83 : mword 32 =>
+ write_reg CurrentInstrBits_ref w__83 >>
+ (undefined_bitvector 32) >>= fun w__84 : mword 32 =>
+ write_reg LastInstrBits_ref w__84 >>
+ (undefined_bitvector 32) >>= fun w__85 : mword 32 =>
+ write_reg CP0BadInstr_ref w__85 >>
+ (undefined_bitvector 32) >>= fun w__86 : mword 32 =>
+ write_reg CP0BadInstrP_ref w__86 >>
+ (undefined_bitvector 32) >>= fun w__87 : mword 32 =>
+ write_reg CP0Count_ref w__87 >>
+ (undefined_bitvector 32) >>= fun w__88 : mword 32 =>
+ write_reg CP0HWREna_ref w__88 >>
+ (undefined_bitvector 64) >>= fun w__89 : mword 64 =>
+ write_reg CP0UserLocal_ref w__89 >>
+ (undefined_bitvector 3) >>= fun w__90 : mword 3 =>
+ write_reg CP0ConfigK0_ref w__90 >>
+ (undefined_StatusReg tt) >>= fun w__91 : StatusReg =>
+ write_reg CP0Status_ref w__91 >>
+ (undefined_bitvector 1) >>= fun w__92 : mword 1 =>
+ write_reg NextInBranchDelay_ref w__92 >>
+ (undefined_bitvector 1) >>= fun w__93 : mword 1 =>
+ write_reg InBranchDelay_ref w__93 >>
+ (undefined_bitvector 1) >>= fun w__94 : mword 1 =>
+ write_reg BranchPending_ref w__94 >>
+ (undefined_bitvector 64) >>= fun w__95 : mword 64 =>
+ write_reg DelayedPC_ref w__95 >>
+ (undefined_bitvector 64) >>= fun w__96 : mword 64 =>
+ write_reg HI_ref w__96 >>
+ (undefined_bitvector 64) >>= fun w__97 : mword 64 =>
+ write_reg LO_ref w__97 >>
+ (undefined_bitvector 64) >>= fun w__98 : mword 64 =>
+ (undefined_vector 32 w__98) >>= fun w__99 : vec (mword 64) 32 =>
+ write_reg GPR_ref w__99 >>
+ (undefined_bitvector 8) >>= fun w__100 : mword 8 =>
+ write_reg UART_WDATA_ref w__100 >>
+ (undefined_bitvector 1) >>= fun w__101 : mword 1 =>
+ write_reg UART_WRITTEN_ref w__101 >>
+ (undefined_bitvector 8) >>= fun w__102 : mword 8 =>
+ write_reg UART_RDATA_ref w__102 >>
+ (undefined_bitvector 1) >>= fun w__103 : mword 1 =>
+ write_reg UART_RVALID_ref w__103 >>
+ (undefined_Capability tt) >>= fun w__104 : Capability =>
+ write_reg PCC_ref w__104 >>
+ (undefined_Capability tt) >>= fun w__105 : Capability =>
+ write_reg NextPCC_ref w__105 >>
+ (undefined_Capability tt) >>= fun w__106 : Capability =>
+ write_reg DelayedPCC_ref w__106 >>
+ (undefined_Capability tt) >>= fun w__107 : Capability =>
+ write_reg DDC_ref w__107 >>
+ (undefined_Capability tt) >>= fun w__108 : Capability =>
+ write_reg C01_ref w__108 >>
+ (undefined_Capability tt) >>= fun w__109 : Capability =>
+ write_reg C02_ref w__109 >>
+ (undefined_Capability tt) >>= fun w__110 : Capability =>
+ write_reg C03_ref w__110 >>
+ (undefined_Capability tt) >>= fun w__111 : Capability =>
+ write_reg C04_ref w__111 >>
+ (undefined_Capability tt) >>= fun w__112 : Capability =>
+ write_reg C05_ref w__112 >>
+ (undefined_Capability tt) >>= fun w__113 : Capability =>
+ write_reg C06_ref w__113 >>
+ (undefined_Capability tt) >>= fun w__114 : Capability =>
+ write_reg C07_ref w__114 >>
+ (undefined_Capability tt) >>= fun w__115 : Capability =>
+ write_reg C08_ref w__115 >>
+ (undefined_Capability tt) >>= fun w__116 : Capability =>
+ write_reg C09_ref w__116 >>
+ (undefined_Capability tt) >>= fun w__117 : Capability =>
+ write_reg C10_ref w__117 >>
+ (undefined_Capability tt) >>= fun w__118 : Capability =>
+ write_reg C11_ref w__118 >>
+ (undefined_Capability tt) >>= fun w__119 : Capability =>
+ write_reg C12_ref w__119 >>
+ (undefined_Capability tt) >>= fun w__120 : Capability =>
+ write_reg C13_ref w__120 >>
+ (undefined_Capability tt) >>= fun w__121 : Capability =>
+ write_reg C14_ref w__121 >>
+ (undefined_Capability tt) >>= fun w__122 : Capability =>
+ write_reg C15_ref w__122 >>
+ (undefined_Capability tt) >>= fun w__123 : Capability =>
+ write_reg C16_ref w__123 >>
+ (undefined_Capability tt) >>= fun w__124 : Capability =>
+ write_reg C17_ref w__124 >>
+ (undefined_Capability tt) >>= fun w__125 : Capability =>
+ write_reg C18_ref w__125 >>
+ (undefined_Capability tt) >>= fun w__126 : Capability =>
+ write_reg C19_ref w__126 >>
+ (undefined_Capability tt) >>= fun w__127 : Capability =>
+ write_reg C20_ref w__127 >>
+ (undefined_Capability tt) >>= fun w__128 : Capability =>
+ write_reg C21_ref w__128 >>
+ (undefined_Capability tt) >>= fun w__129 : Capability =>
+ write_reg C22_ref w__129 >>
+ (undefined_Capability tt) >>= fun w__130 : Capability =>
+ write_reg C23_ref w__130 >>
+ (undefined_Capability tt) >>= fun w__131 : Capability =>
+ write_reg C24_ref w__131 >>
+ (undefined_Capability tt) >>= fun w__132 : Capability =>
+ write_reg C25_ref w__132 >>
+ (undefined_Capability tt) >>= fun w__133 : Capability =>
+ write_reg C26_ref w__133 >>
+ (undefined_Capability tt) >>= fun w__134 : Capability =>
+ write_reg C27_ref w__134 >>
+ (undefined_Capability tt) >>= fun w__135 : Capability =>
+ write_reg C28_ref w__135 >>
+ (undefined_Capability tt) >>= fun w__136 : Capability =>
+ write_reg C29_ref w__136 >>
+ (undefined_Capability tt) >>= fun w__137 : Capability =>
+ write_reg C30_ref w__137 >>
+ (undefined_Capability tt) >>= fun w__138 : Capability =>
+ write_reg C31_ref w__138 >>
+ (undefined_Capability tt) >>= fun w__139 : Capability =>
+ write_reg CTLSU_ref w__139 >>
+ (undefined_Capability tt) >>= fun w__140 : Capability =>
+ write_reg CTLSP_ref w__140 >>
+ (undefined_Capability tt) >>= fun w__141 : Capability =>
+ write_reg KR1C_ref w__141 >>
+ (undefined_Capability tt) >>= fun w__142 : Capability =>
+ write_reg KR2C_ref w__142 >>
+ (undefined_Capability tt) >>= fun w__143 : Capability =>
+ write_reg KCC_ref w__143 >>
+ (undefined_Capability tt) >>= fun w__144 : Capability =>
+ write_reg KDC_ref w__144 >>
+ (undefined_Capability tt) >>= fun w__145 : Capability =>
+ write_reg EPCC_ref w__145 >>
+ (undefined_CapCauseReg tt) >>= fun w__146 : CapCauseReg =>
+ write_reg CapCause_ref w__146 >>
+ (undefined_bitvector 64) >>= fun w__147 : mword 64 => write_reg CID_ref w__147 : M (unit).
+
+Definition initial_regstate : regstate :=
+{| CID :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ CapCause :=
+ ({| CapCauseReg_CapCauseReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16) |});
+ EPCC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ KDC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ KCC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ KR2C :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ KR1C :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ CTLSP :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ CTLSU :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C31 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C30 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C29 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C28 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C27 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C26 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C25 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C24 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C23 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C22 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C21 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C20 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C19 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C18 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C17 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C16 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C15 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C14 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C13 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C12 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C11 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C10 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C09 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C08 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C07 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C06 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C05 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C04 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C03 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C02 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ C01 :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ DDC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ DelayedPCC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ NextPCC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ PCC :=
+ ({| Capability_tag := false;
+ Capability_padding := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ Capability_otype :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 24);
+ Capability_uperms :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ Capability_perm_reserved12_14 := (vec_of_bits [B0;B0;B0] : mword 3);
+ Capability_permit_set_CID := false;
+ Capability_access_system_regs := false;
+ Capability_permit_unseal := false;
+ Capability_permit_ccall := false;
+ Capability_permit_seal := false;
+ Capability_permit_store_local_cap := false;
+ Capability_permit_store_cap := false;
+ Capability_permit_load_cap := false;
+ Capability_permit_store := false;
+ Capability_permit_load := false;
+ Capability_permit_execute := false;
+ Capability_global := false;
+ Capability_sealed := false;
+ Capability_address :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_base :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Capability_length :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ UART_RVALID := (vec_of_bits [B0] : mword 1);
+ UART_RDATA := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ UART_WRITTEN := (vec_of_bits [B0] : mword 1);
+ UART_WDATA := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8);
+ GPR :=
+ (vec_of_list_len [(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)]);
+ LO :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ HI :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ DelayedPC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ BranchPending := (vec_of_bits [B0] : mword 1);
+ InBranchDelay := (vec_of_bits [B0] : mword 1);
+ NextInBranchDelay := (vec_of_bits [B0] : mword 1);
+ CP0Status :=
+ ({| StatusReg_StatusReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32) |});
+ CP0ConfigK0 := (vec_of_bits [B0;B0;B0] : mword 3);
+ CP0UserLocal :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ CP0HWREna :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CP0Count :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CP0BadInstrP :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CP0BadInstr :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ LastInstrBits :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CurrentInstrBits :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CP0BadVAddr :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ CP0LLAddr :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ CP0LLBit := (vec_of_bits [B0] : mword 1);
+ CP0ErrorEPC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ CP0EPC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ CP0Cause :=
+ ({| CauseReg_CauseReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32) |});
+ CP0Compare :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ TLBEntry63 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry62 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry61 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry60 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry59 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry58 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry57 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry56 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry55 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry54 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry53 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry52 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry51 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry50 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry49 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry48 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry47 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry46 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry45 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry44 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry43 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry42 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry41 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry40 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry39 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry38 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry37 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry36 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry35 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry34 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry33 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry32 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry31 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry30 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry29 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry28 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry27 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry26 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry25 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry24 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry23 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry22 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry21 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry20 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry19 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry18 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry17 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry16 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry15 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry14 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry13 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry12 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry11 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry10 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry09 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry08 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry07 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry06 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry05 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry04 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry03 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry02 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry01 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntry00 :=
+ ({| TLBEntry_TLBEntry_chunk_1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 53);
+ TLBEntry_TLBEntry_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBXContext :=
+ ({| XContextReg_XContextReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntryHi :=
+ ({| TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBWired := (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6);
+ TLBPageMask := (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16);
+ TLBContext :=
+ ({| ContextReg_ContextReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntryLo1 :=
+ ({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBEntryLo0 :=
+ ({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ TLBRandom := (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6);
+ TLBIndex := (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6);
+ TLBProbe := (vec_of_bits [B0] : mword 1);
+ NextPC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ PC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |}.
+Hint Unfold initial_regstate : sail.
+
+End Content.
diff --git a/snapshots/coq/cheri-mips/cheri_types.v b/snapshots/coq/cheri-mips/cheri_types.v
new file mode 100644
index 00000000..07e4bc80
--- /dev/null
+++ b/snapshots/coq/cheri-mips/cheri_types.v
@@ -0,0 +1,2229 @@
+(*Generated by Sail from cheri.*)
+Require Import Sail2_instr_kinds.
+Require Import Sail2_values.
+Require Import Sail2_string.
+Require Import Sail2_real.
+Require Import Sail2_operators_mwords.
+Require Import Sail2_prompt_monad.
+Require Import Sail2_prompt.
+Require Import Sail2_state.
+
+
+Definition bits (n : Z) : Type := mword n.
+
+Inductive exception :=
+ ISAException : unit -> exception
+ | Error_not_implemented : string -> exception
+ | Error_misaligned_access : unit -> exception
+ | Error_EBREAK : unit -> exception
+ | Error_internal_error : unit -> exception.
+Arguments exception : clear implicits.
+
+
+
+Record CauseReg := { CauseReg_CauseReg_chunk_0 : mword 32; }.
+Notation "{[ r 'with' 'CauseReg_CauseReg_chunk_0' := e ]}" := ({| CauseReg_CauseReg_chunk_0 := e |}).
+
+Record CapCauseReg := { CapCauseReg_CapCauseReg_chunk_0 : mword 16; }.
+Notation "{[ r 'with' 'CapCauseReg_CapCauseReg_chunk_0' := e ]}" := ({| CapCauseReg_CapCauseReg_chunk_0 := e |}).
+
+Record TLBEntryLoReg := { TLBEntryLoReg_TLBEntryLoReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'TLBEntryLoReg_TLBEntryLoReg_chunk_0' := e ]}" := ({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := e |}).
+
+Record TLBEntryHiReg := { TLBEntryHiReg_TLBEntryHiReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'TLBEntryHiReg_TLBEntryHiReg_chunk_0' := e ]}" := ({| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := e |}).
+
+Record ContextReg := { ContextReg_ContextReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'ContextReg_ContextReg_chunk_0' := e ]}" := ({| ContextReg_ContextReg_chunk_0 := e |}).
+
+Record XContextReg := { XContextReg_XContextReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'XContextReg_XContextReg_chunk_0' := e ]}" := ({| XContextReg_XContextReg_chunk_0 := e |}).
+
+Definition TLBIndexT : Type := bits 6.
+
+Record TLBEntry := { TLBEntry_TLBEntry_chunk_1 : mword 53; TLBEntry_TLBEntry_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'TLBEntry_TLBEntry_chunk_1' := e ]}" := ({| TLBEntry_TLBEntry_chunk_1 := e; TLBEntry_TLBEntry_chunk_0 := TLBEntry_TLBEntry_chunk_0 r |}).
+Notation "{[ r 'with' 'TLBEntry_TLBEntry_chunk_0' := e ]}" := ({| TLBEntry_TLBEntry_chunk_0 := e; TLBEntry_TLBEntry_chunk_1 := TLBEntry_TLBEntry_chunk_1 r |}).
+
+Record StatusReg := { StatusReg_StatusReg_chunk_0 : mword 32; }.
+Notation "{[ r 'with' 'StatusReg_StatusReg_chunk_0' := e ]}" := ({| StatusReg_StatusReg_chunk_0 := e |}).
+
+Inductive Exception :=
+ Interrupt
+ | TLBMod
+ | TLBL
+ | TLBS
+ | AdEL
+ | AdES
+ | Sys
+ | Bp
+ | ResI
+ | CpU
+ | Ov
+ | Tr
+ | C2E
+ | C2Trap
+ | XTLBRefillL
+ | XTLBRefillS
+ | XTLBInvL
+ | XTLBInvS
+ | MCheck.
+Scheme Equality for Exception.
+Instance Decidable_eq_Exception :
+forall (x y : Exception), Decidable (x = y) :=
+Decidable_eq_from_dec Exception_eq_dec.
+
+
+Record Capability :=
+ { Capability_tag : bool;
+ Capability_padding : bits 8;
+ Capability_otype : bits 24;
+ Capability_uperms : bits 16;
+ Capability_perm_reserved12_14 : bits 3;
+ Capability_permit_set_CID : bool;
+ Capability_access_system_regs : bool;
+ Capability_permit_unseal : bool;
+ Capability_permit_ccall : bool;
+ Capability_permit_seal : bool;
+ Capability_permit_store_local_cap : bool;
+ Capability_permit_store_cap : bool;
+ Capability_permit_load_cap : bool;
+ Capability_permit_store : bool;
+ Capability_permit_load : bool;
+ Capability_permit_execute : bool;
+ Capability_global : bool;
+ Capability_sealed : bool;
+ Capability_address : bits 64;
+ Capability_base : bits 64;
+ Capability_length : bits 64; }.
+Instance Decidable_eq_Capability :
+forall (x y : Capability), Decidable (x = y).
+ intros [x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20].
+ intros [y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15 y16 y17 y18 y19 y20].
+cmp_record_field x0 y0.
+cmp_record_field x1 y1.
+cmp_record_field x2 y2.
+cmp_record_field x3 y3.
+cmp_record_field x4 y4.
+cmp_record_field x5 y5.
+cmp_record_field x6 y6.
+cmp_record_field x7 y7.
+cmp_record_field x8 y8.
+cmp_record_field x9 y9.
+cmp_record_field x10 y10.
+cmp_record_field x11 y11.
+cmp_record_field x12 y12.
+cmp_record_field x13 y13.
+cmp_record_field x14 y14.
+cmp_record_field x15 y15.
+cmp_record_field x16 y16.
+cmp_record_field x17 y17.
+cmp_record_field x18 y18.
+cmp_record_field x19 y19.
+cmp_record_field x20 y20.
+refine (Build_Decidable _ true _). subst. split; reflexivity.
+Defined.
+Notation "{[ r 'with' 'Capability_tag' := e ]}" := ({| Capability_tag := e; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_padding' := e ]}" := ({| Capability_padding := e; Capability_tag := Capability_tag r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_otype' := e ]}" := ({| Capability_otype := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_uperms' := e ]}" := ({| Capability_uperms := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_perm_reserved12_14' := e ]}" := ({| Capability_perm_reserved12_14 := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_set_CID' := e ]}" := ({| Capability_permit_set_CID := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_access_system_regs' := e ]}" := ({| Capability_access_system_regs := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_unseal' := e ]}" := ({| Capability_permit_unseal := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_ccall' := e ]}" := ({| Capability_permit_ccall := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_seal' := e ]}" := ({| Capability_permit_seal := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_store_local_cap' := e ]}" := ({| Capability_permit_store_local_cap := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_store_cap' := e ]}" := ({| Capability_permit_store_cap := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_load_cap' := e ]}" := ({| Capability_permit_load_cap := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_store' := e ]}" := ({| Capability_permit_store := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_load' := e ]}" := ({| Capability_permit_load := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_permit_execute' := e ]}" := ({| Capability_permit_execute := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_global' := e ]}" := ({| Capability_global := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_sealed' := e ]}" := ({| Capability_sealed := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_address := Capability_address r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_address' := e ]}" := ({| Capability_address := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_base := Capability_base r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_base' := e ]}" := ({| Capability_base := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_length := Capability_length r |}).
+Notation "{[ r 'with' 'Capability_length' := e ]}" := ({| Capability_length := e; Capability_tag := Capability_tag r; Capability_padding := Capability_padding r; Capability_otype := Capability_otype r; Capability_uperms := Capability_uperms r; Capability_perm_reserved12_14 := Capability_perm_reserved12_14 r; Capability_permit_set_CID := Capability_permit_set_CID r; Capability_access_system_regs := Capability_access_system_regs r; Capability_permit_unseal := Capability_permit_unseal r; Capability_permit_ccall := Capability_permit_ccall r; Capability_permit_seal := Capability_permit_seal r; Capability_permit_store_local_cap := Capability_permit_store_local_cap r; Capability_permit_store_cap := Capability_permit_store_cap r; Capability_permit_load_cap := Capability_permit_load_cap r; Capability_permit_store := Capability_permit_store r; Capability_permit_load := Capability_permit_load r; Capability_permit_execute := Capability_permit_execute r; Capability_global := Capability_global r; Capability_sealed := Capability_sealed r; Capability_address := Capability_address r; Capability_base := Capability_base r |}).
+
+Inductive MemAccessType := Instruction | LoadData | StoreData.
+Scheme Equality for MemAccessType.
+Instance Decidable_eq_MemAccessType :
+forall (x y : MemAccessType), Decidable (x = y) :=
+Decidable_eq_from_dec MemAccessType_eq_dec.
+
+
+Inductive AccessLevel := User | Supervisor | Kernel.
+Scheme Equality for AccessLevel.
+Instance Decidable_eq_AccessLevel :
+forall (x y : AccessLevel), Decidable (x = y) :=
+Decidable_eq_from_dec AccessLevel_eq_dec.
+
+
+Definition regno : Type := bits 5.
+
+Definition imm16 : Type := bits 16.
+
+Definition regregreg : Type := (regno * regno * regno).
+
+Definition regregimm16 : Type := (regno * regno * imm16).
+
+Inductive decode_failure :=
+ no_matching_pattern | unsupported_instruction | illegal_instruction | internal_error.
+Scheme Equality for decode_failure.
+Instance Decidable_eq_decode_failure :
+forall (x y : decode_failure), Decidable (x = y) :=
+Decidable_eq_from_dec decode_failure_eq_dec.
+
+
+Inductive Comparison := EQ' | NE | GE | GEU | GT' | LE | LT' | LTU.
+Scheme Equality for Comparison.
+Instance Decidable_eq_Comparison :
+forall (x y : Comparison), Decidable (x = y) :=
+Decidable_eq_from_dec Comparison_eq_dec.
+
+
+Inductive WordType := B | H | W | D.
+Scheme Equality for WordType.
+Instance Decidable_eq_WordType :
+forall (x y : WordType), Decidable (x = y) :=
+Decidable_eq_from_dec WordType_eq_dec.
+
+
+Inductive WordTypeUnaligned := WL | WR | DL | DR.
+Scheme Equality for WordTypeUnaligned.
+Instance Decidable_eq_WordTypeUnaligned :
+forall (x y : WordTypeUnaligned), Decidable (x = y) :=
+Decidable_eq_from_dec WordTypeUnaligned_eq_dec.
+
+
+Definition CapLen : Type := {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 65))}.
+
+Definition uint64 : Type := {rangevar : Z & ArithFact (0 <= rangevar /\ rangevar <= (2 ^ 64 - 1))}.
+
+Inductive CPtrCmpOp := CEQ | CNE | CLT | CLE | CLTU | CLEU | CEXEQ | CNEXEQ.
+Scheme Equality for CPtrCmpOp.
+Instance Decidable_eq_CPtrCmpOp :
+forall (x y : CPtrCmpOp), Decidable (x = y) :=
+Decidable_eq_from_dec CPtrCmpOp_eq_dec.
+
+
+Inductive ClearRegSet := GPLo | GPHi | CLo | CHi.
+Scheme Equality for ClearRegSet.
+Instance Decidable_eq_ClearRegSet :
+forall (x y : ClearRegSet), Decidable (x = y) :=
+Decidable_eq_from_dec ClearRegSet_eq_dec.
+
+
+Definition CapBits : Type := bits 256.
+
+Inductive ast :=
+ DADDIU : (regno * regno * imm16) -> ast
+ | DADDU : (regno * regno * regno) -> ast
+ | DADDI : (regno * regno * bits 16) -> ast
+ | DADD : (regno * regno * regno) -> ast
+ | ADD : (regno * regno * regno) -> ast
+ | ADDI : (regno * regno * bits 16) -> ast
+ | ADDU : (regno * regno * regno) -> ast
+ | ADDIU : (regno * regno * bits 16) -> ast
+ | DSUBU : (regno * regno * regno) -> ast
+ | DSUB : (regno * regno * regno) -> ast
+ | SUB : (regno * regno * regno) -> ast
+ | SUBU : (regno * regno * regno) -> ast
+ | AND : (regno * regno * regno) -> ast
+ | ANDI : (regno * regno * bits 16) -> ast
+ | OR : (regno * regno * regno) -> ast
+ | ORI : (regno * regno * bits 16) -> ast
+ | NOR : (regno * regno * regno) -> ast
+ | XOR : (regno * regno * regno) -> ast
+ | XORI : (regno * regno * bits 16) -> ast
+ | LUI : (regno * imm16) -> ast
+ | DSLL : (regno * regno * regno) -> ast
+ | DSLL32 : (regno * regno * regno) -> ast
+ | DSLLV : (regno * regno * regno) -> ast
+ | DSRA : (regno * regno * regno) -> ast
+ | DSRA32 : (regno * regno * regno) -> ast
+ | DSRAV : (regno * regno * regno) -> ast
+ | DSRL : (regno * regno * regno) -> ast
+ | DSRL32 : (regno * regno * regno) -> ast
+ | DSRLV : (regno * regno * regno) -> ast
+ | SLL : (regno * regno * regno) -> ast
+ | SLLV : (regno * regno * regno) -> ast
+ | SRA : (regno * regno * regno) -> ast
+ | SRAV : (regno * regno * regno) -> ast
+ | SRL : (regno * regno * regno) -> ast
+ | SRLV : (regno * regno * regno) -> ast
+ | SLT : (regno * regno * regno) -> ast
+ | SLTI : (regno * regno * bits 16) -> ast
+ | SLTU : (regno * regno * regno) -> ast
+ | SLTIU : (regno * regno * bits 16) -> ast
+ | MOVN : (regno * regno * regno) -> ast
+ | MOVZ : (regno * regno * regno) -> ast
+ | MFHI : regno -> ast
+ | MFLO : regno -> ast
+ | MTHI : regno -> ast
+ | MTLO : regno -> ast
+ | MUL : (regno * regno * regno) -> ast
+ | MULT : (regno * regno) -> ast
+ | MULTU : (regno * regno) -> ast
+ | DMULT : (regno * regno) -> ast
+ | DMULTU : (regno * regno) -> ast
+ | MADD : (regno * regno) -> ast
+ | MADDU : (regno * regno) -> ast
+ | MSUB : (regno * regno) -> ast
+ | MSUBU : (regno * regno) -> ast
+ | DIV : (regno * regno) -> ast
+ | DIVU : (regno * regno) -> ast
+ | DDIV : (regno * regno) -> ast
+ | DDIVU : (regno * regno) -> ast
+ | J : bits 26 -> ast
+ | JAL : bits 26 -> ast
+ | JR : regno -> ast
+ | JALR : (regno * regno) -> ast
+ | BEQ : (regno * regno * imm16 * bool * bool) -> ast
+ | BCMPZ : (regno * imm16 * Comparison * bool * bool) -> ast
+ | SYSCALL : unit -> ast
+ | BREAK : unit -> ast
+ | WAIT : unit -> ast
+ | TRAPREG : (regno * regno * Comparison) -> ast
+ | TRAPIMM : (regno * imm16 * Comparison) -> ast
+ | Load : (WordType * bool * bool * regno * regno * imm16) -> ast
+ | Store : (WordType * bool * regno * regno * imm16) -> ast
+ | LWL : (regno * regno * bits 16) -> ast
+ | LWR : (regno * regno * bits 16) -> ast
+ | SWL : (regno * regno * bits 16) -> ast
+ | SWR : (regno * regno * bits 16) -> ast
+ | LDL : (regno * regno * bits 16) -> ast
+ | LDR : (regno * regno * bits 16) -> ast
+ | SDL : (regno * regno * bits 16) -> ast
+ | SDR : (regno * regno * bits 16) -> ast
+ | CACHE : (regno * regno * bits 16) -> ast
+ | SYNC : unit -> ast
+ | MFC0 : (regno * regno * bits 3 * bool) -> ast
+ | HCF : unit -> ast
+ | MTC0 : (regno * regno * bits 3 * bool) -> ast
+ | TLBWI : unit -> ast
+ | TLBWR : unit -> ast
+ | TLBR : unit -> ast
+ | TLBP : unit -> ast
+ | RDHWR : (regno * regno) -> ast
+ | ERET : unit -> ast
+ | CGetPerm : (regno * regno) -> ast
+ | CGetType : (regno * regno) -> ast
+ | CGetBase : (regno * regno) -> ast
+ | CGetLen : (regno * regno) -> ast
+ | CGetTag : (regno * regno) -> ast
+ | CGetSealed : (regno * regno) -> ast
+ | CGetOffset : (regno * regno) -> ast
+ | CGetAddr : (regno * regno) -> ast
+ | CGetPCC : regno -> ast
+ | CGetPCCSetOffset : (regno * regno) -> ast
+ | CGetCause : regno -> ast
+ | CSetCause : regno -> ast
+ | CGetCID : regno -> ast
+ | CSetCID : regno -> ast
+ | CReadHwr : (regno * regno) -> ast
+ | CWriteHwr : (regno * regno) -> ast
+ | CAndPerm : (regno * regno * regno) -> ast
+ | CToPtr : (regno * regno * regno) -> ast
+ | CSub : (regno * regno * regno) -> ast
+ | CPtrCmp : (regno * regno * regno * CPtrCmpOp) -> ast
+ | CIncOffset : (regno * regno * regno) -> ast
+ | CIncOffsetImmediate : (regno * regno * bits 11) -> ast
+ | CSetOffset : (regno * regno * regno) -> ast
+ | CSetBounds : (regno * regno * regno) -> ast
+ | CSetBoundsImmediate : (regno * regno * bits 11) -> ast
+ | CSetBoundsExact : (regno * regno * regno) -> ast
+ | CClearTag : (regno * regno) -> ast
+ | CMOVX : (regno * regno * regno * bool) -> ast
+ | ClearRegs : (ClearRegSet * bits 16) -> ast
+ | CFromPtr : (regno * regno * regno) -> ast
+ | CBuildCap : (regno * regno * regno) -> ast
+ | CCopyType : (regno * regno * regno) -> ast
+ | CCheckPerm : (regno * regno) -> ast
+ | CCheckType : (regno * regno) -> ast
+ | CCheckTag : regno -> ast
+ | CTestSubset : (regno * regno * regno) -> ast
+ | CSeal : (regno * regno * regno) -> ast
+ | CCSeal : (regno * regno * regno) -> ast
+ | CUnseal : (regno * regno * regno) -> ast
+ | CCall : (regno * regno * bits 11) -> ast
+ | CReturn : unit -> ast
+ | CBX : (regno * bits 16 * bool) -> ast
+ | CBZ : (regno * bits 16 * bool) -> ast
+ | CJALR : (regno * regno * bool) -> ast
+ | CLoad : (regno * regno * regno * bits 8 * bool * WordType) -> ast
+ | CLoadLinked : (regno * regno * bool * WordType) -> ast
+ | CLoadTags : (regno * regno) -> ast
+ | CStore : (regno * regno * regno * bits 8 * WordType) -> ast
+ | CStoreConditional : (regno * regno * regno * WordType) -> ast
+ | CSC : (regno * regno * regno * bits 11) -> ast
+ | CSCC : (regno * regno * regno) -> ast
+ | CLC : (regno * regno * regno * bits 11) -> ast
+ | CLCBI : (regno * regno * bits 16) -> ast
+ | CLLC : (regno * regno) -> ast
+ | C2Dump : regno -> ast
+ | RI : unit -> ast.
+Arguments ast : clear implicits.
+
+
+
+Inductive CapEx :=
+ CapEx_None
+ | CapEx_LengthViolation
+ | CapEx_TagViolation
+ | CapEx_SealViolation
+ | CapEx_TypeViolation
+ | CapEx_CallTrap
+ | CapEx_ReturnTrap
+ | CapEx_TSSUnderFlow
+ | CapEx_UserDefViolation
+ | CapEx_TLBNoStoreCap
+ | CapEx_InexactBounds
+ | CapEx_GlobalViolation
+ | CapEx_PermitExecuteViolation
+ | CapEx_PermitLoadViolation
+ | CapEx_PermitStoreViolation
+ | CapEx_PermitLoadCapViolation
+ | CapEx_PermitStoreCapViolation
+ | CapEx_PermitStoreLocalCapViolation
+ | CapEx_PermitSealViolation
+ | CapEx_AccessSystemRegsViolation
+ | CapEx_PermitCCallViolation
+ | CapEx_AccessCCallIDCViolation
+ | CapEx_PermitUnsealViolation
+ | CapEx_PermitSetCIDViolation.
+Scheme Equality for CapEx.
+Instance Decidable_eq_CapEx :
+forall (x y : CapEx), Decidable (x = y) :=
+Decidable_eq_from_dec CapEx_eq_dec.
+
+
+Inductive register_value :=
+ Regval_vector : (Z * bool * list register_value) -> register_value
+ | Regval_list : list register_value -> register_value
+ | Regval_option : option register_value -> register_value
+ | Regval_CapCauseReg : CapCauseReg -> register_value
+ | Regval_Capability : Capability -> register_value
+ | Regval_CauseReg : CauseReg -> register_value
+ | Regval_ContextReg : ContextReg -> register_value
+ | Regval_StatusReg : StatusReg -> register_value
+ | Regval_TLBEntry : TLBEntry -> register_value
+ | Regval_TLBEntryHiReg : TLBEntryHiReg -> register_value
+ | Regval_TLBEntryLoReg : TLBEntryLoReg -> register_value
+ | Regval_XContextReg : XContextReg -> register_value
+ | Regval_vector_16_dec_bit : mword 16 -> register_value
+ | Regval_vector_1_dec_bit : mword 1 -> register_value
+ | Regval_vector_32_dec_bit : mword 32 -> register_value
+ | Regval_vector_3_dec_bit : mword 3 -> register_value
+ | Regval_vector_64_dec_bit : mword 64 -> register_value
+ | Regval_vector_6_dec_bit : mword 6 -> register_value
+ | Regval_vector_8_dec_bit : mword 8 -> register_value.
+Arguments register_value : clear implicits.
+
+
+
+Record regstate :=
+ { CID : mword 64;
+ CapCause : CapCauseReg;
+ EPCC : Capability;
+ KDC : Capability;
+ KCC : Capability;
+ KR2C : Capability;
+ KR1C : Capability;
+ CTLSP : Capability;
+ CTLSU : Capability;
+ C31 : Capability;
+ C30 : Capability;
+ C29 : Capability;
+ C28 : Capability;
+ C27 : Capability;
+ C26 : Capability;
+ C25 : Capability;
+ C24 : Capability;
+ C23 : Capability;
+ C22 : Capability;
+ C21 : Capability;
+ C20 : Capability;
+ C19 : Capability;
+ C18 : Capability;
+ C17 : Capability;
+ C16 : Capability;
+ C15 : Capability;
+ C14 : Capability;
+ C13 : Capability;
+ C12 : Capability;
+ C11 : Capability;
+ C10 : Capability;
+ C09 : Capability;
+ C08 : Capability;
+ C07 : Capability;
+ C06 : Capability;
+ C05 : Capability;
+ C04 : Capability;
+ C03 : Capability;
+ C02 : Capability;
+ C01 : Capability;
+ DDC : Capability;
+ DelayedPCC : Capability;
+ NextPCC : Capability;
+ PCC : Capability;
+ UART_RVALID : mword 1;
+ UART_RDATA : mword 8;
+ UART_WRITTEN : mword 1;
+ UART_WDATA : mword 8;
+ GPR : vec (mword 64) 32;
+ LO : mword 64;
+ HI : mword 64;
+ DelayedPC : mword 64;
+ BranchPending : mword 1;
+ InBranchDelay : mword 1;
+ NextInBranchDelay : mword 1;
+ CP0Status : StatusReg;
+ CP0ConfigK0 : mword 3;
+ CP0UserLocal : mword 64;
+ CP0HWREna : mword 32;
+ CP0Count : mword 32;
+ CP0BadInstrP : mword 32;
+ CP0BadInstr : mword 32;
+ LastInstrBits : mword 32;
+ CurrentInstrBits : mword 32;
+ CP0BadVAddr : mword 64;
+ CP0LLAddr : mword 64;
+ CP0LLBit : mword 1;
+ CP0ErrorEPC : mword 64;
+ CP0EPC : mword 64;
+ CP0Cause : CauseReg;
+ CP0Compare : mword 32;
+ TLBEntry63 : TLBEntry;
+ TLBEntry62 : TLBEntry;
+ TLBEntry61 : TLBEntry;
+ TLBEntry60 : TLBEntry;
+ TLBEntry59 : TLBEntry;
+ TLBEntry58 : TLBEntry;
+ TLBEntry57 : TLBEntry;
+ TLBEntry56 : TLBEntry;
+ TLBEntry55 : TLBEntry;
+ TLBEntry54 : TLBEntry;
+ TLBEntry53 : TLBEntry;
+ TLBEntry52 : TLBEntry;
+ TLBEntry51 : TLBEntry;
+ TLBEntry50 : TLBEntry;
+ TLBEntry49 : TLBEntry;
+ TLBEntry48 : TLBEntry;
+ TLBEntry47 : TLBEntry;
+ TLBEntry46 : TLBEntry;
+ TLBEntry45 : TLBEntry;
+ TLBEntry44 : TLBEntry;
+ TLBEntry43 : TLBEntry;
+ TLBEntry42 : TLBEntry;
+ TLBEntry41 : TLBEntry;
+ TLBEntry40 : TLBEntry;
+ TLBEntry39 : TLBEntry;
+ TLBEntry38 : TLBEntry;
+ TLBEntry37 : TLBEntry;
+ TLBEntry36 : TLBEntry;
+ TLBEntry35 : TLBEntry;
+ TLBEntry34 : TLBEntry;
+ TLBEntry33 : TLBEntry;
+ TLBEntry32 : TLBEntry;
+ TLBEntry31 : TLBEntry;
+ TLBEntry30 : TLBEntry;
+ TLBEntry29 : TLBEntry;
+ TLBEntry28 : TLBEntry;
+ TLBEntry27 : TLBEntry;
+ TLBEntry26 : TLBEntry;
+ TLBEntry25 : TLBEntry;
+ TLBEntry24 : TLBEntry;
+ TLBEntry23 : TLBEntry;
+ TLBEntry22 : TLBEntry;
+ TLBEntry21 : TLBEntry;
+ TLBEntry20 : TLBEntry;
+ TLBEntry19 : TLBEntry;
+ TLBEntry18 : TLBEntry;
+ TLBEntry17 : TLBEntry;
+ TLBEntry16 : TLBEntry;
+ TLBEntry15 : TLBEntry;
+ TLBEntry14 : TLBEntry;
+ TLBEntry13 : TLBEntry;
+ TLBEntry12 : TLBEntry;
+ TLBEntry11 : TLBEntry;
+ TLBEntry10 : TLBEntry;
+ TLBEntry09 : TLBEntry;
+ TLBEntry08 : TLBEntry;
+ TLBEntry07 : TLBEntry;
+ TLBEntry06 : TLBEntry;
+ TLBEntry05 : TLBEntry;
+ TLBEntry04 : TLBEntry;
+ TLBEntry03 : TLBEntry;
+ TLBEntry02 : TLBEntry;
+ TLBEntry01 : TLBEntry;
+ TLBEntry00 : TLBEntry;
+ TLBXContext : XContextReg;
+ TLBEntryHi : TLBEntryHiReg;
+ TLBWired : mword 6;
+ TLBPageMask : mword 16;
+ TLBContext : ContextReg;
+ TLBEntryLo1 : TLBEntryLoReg;
+ TLBEntryLo0 : TLBEntryLoReg;
+ TLBRandom : mword 6;
+ TLBIndex : mword 6;
+ TLBProbe : mword 1;
+ NextPC : mword 64;
+ PC : mword 64; }.
+Notation "{[ r 'with' 'CID' := e ]}" := ({| CID := e; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CapCause' := e ]}" := ({| CapCause := e; CID := CID r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'EPCC' := e ]}" := ({| EPCC := e; CID := CID r; CapCause := CapCause r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'KDC' := e ]}" := ({| KDC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'KCC' := e ]}" := ({| KCC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'KR2C' := e ]}" := ({| KR2C := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'KR1C' := e ]}" := ({| KR1C := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CTLSP' := e ]}" := ({| CTLSP := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CTLSU' := e ]}" := ({| CTLSU := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C31' := e ]}" := ({| C31 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C30' := e ]}" := ({| C30 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C29' := e ]}" := ({| C29 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C28' := e ]}" := ({| C28 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C27' := e ]}" := ({| C27 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C26' := e ]}" := ({| C26 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C25' := e ]}" := ({| C25 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C24' := e ]}" := ({| C24 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C23' := e ]}" := ({| C23 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C22' := e ]}" := ({| C22 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C21' := e ]}" := ({| C21 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C20' := e ]}" := ({| C20 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C19' := e ]}" := ({| C19 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C18' := e ]}" := ({| C18 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C17' := e ]}" := ({| C17 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C16' := e ]}" := ({| C16 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C15' := e ]}" := ({| C15 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C14' := e ]}" := ({| C14 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C13' := e ]}" := ({| C13 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C12' := e ]}" := ({| C12 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C11' := e ]}" := ({| C11 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C10' := e ]}" := ({| C10 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C09' := e ]}" := ({| C09 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C08' := e ]}" := ({| C08 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C07' := e ]}" := ({| C07 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C06' := e ]}" := ({| C06 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C05' := e ]}" := ({| C05 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C04' := e ]}" := ({| C04 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C03' := e ]}" := ({| C03 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C02' := e ]}" := ({| C02 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'C01' := e ]}" := ({| C01 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'DDC' := e ]}" := ({| DDC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'DelayedPCC' := e ]}" := ({| DelayedPCC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'NextPCC' := e ]}" := ({| NextPCC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'PCC' := e ]}" := ({| PCC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_RVALID' := e ]}" := ({| UART_RVALID := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_RDATA' := e ]}" := ({| UART_RDATA := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_WRITTEN' := e ]}" := ({| UART_WRITTEN := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_WDATA' := e ]}" := ({| UART_WDATA := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'GPR' := e ]}" := ({| GPR := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'LO' := e ]}" := ({| LO := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'HI' := e ]}" := ({| HI := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'DelayedPC' := e ]}" := ({| DelayedPC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'BranchPending' := e ]}" := ({| BranchPending := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'InBranchDelay' := e ]}" := ({| InBranchDelay := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'NextInBranchDelay' := e ]}" := ({| NextInBranchDelay := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Status' := e ]}" := ({| CP0Status := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0ConfigK0' := e ]}" := ({| CP0ConfigK0 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0UserLocal' := e ]}" := ({| CP0UserLocal := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0HWREna' := e ]}" := ({| CP0HWREna := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Count' := e ]}" := ({| CP0Count := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0BadInstrP' := e ]}" := ({| CP0BadInstrP := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0BadInstr' := e ]}" := ({| CP0BadInstr := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'LastInstrBits' := e ]}" := ({| LastInstrBits := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CurrentInstrBits' := e ]}" := ({| CurrentInstrBits := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0BadVAddr' := e ]}" := ({| CP0BadVAddr := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0LLAddr' := e ]}" := ({| CP0LLAddr := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0LLBit' := e ]}" := ({| CP0LLBit := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0ErrorEPC' := e ]}" := ({| CP0ErrorEPC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0EPC' := e ]}" := ({| CP0EPC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Cause' := e ]}" := ({| CP0Cause := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Compare' := e ]}" := ({| CP0Compare := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry63' := e ]}" := ({| TLBEntry63 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry62' := e ]}" := ({| TLBEntry62 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry61' := e ]}" := ({| TLBEntry61 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry60' := e ]}" := ({| TLBEntry60 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry59' := e ]}" := ({| TLBEntry59 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry58' := e ]}" := ({| TLBEntry58 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry57' := e ]}" := ({| TLBEntry57 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry56' := e ]}" := ({| TLBEntry56 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry55' := e ]}" := ({| TLBEntry55 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry54' := e ]}" := ({| TLBEntry54 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry53' := e ]}" := ({| TLBEntry53 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry52' := e ]}" := ({| TLBEntry52 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry51' := e ]}" := ({| TLBEntry51 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry50' := e ]}" := ({| TLBEntry50 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry49' := e ]}" := ({| TLBEntry49 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry48' := e ]}" := ({| TLBEntry48 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry47' := e ]}" := ({| TLBEntry47 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry46' := e ]}" := ({| TLBEntry46 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry45' := e ]}" := ({| TLBEntry45 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry44' := e ]}" := ({| TLBEntry44 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry43' := e ]}" := ({| TLBEntry43 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry42' := e ]}" := ({| TLBEntry42 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry41' := e ]}" := ({| TLBEntry41 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry40' := e ]}" := ({| TLBEntry40 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry39' := e ]}" := ({| TLBEntry39 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry38' := e ]}" := ({| TLBEntry38 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry37' := e ]}" := ({| TLBEntry37 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry36' := e ]}" := ({| TLBEntry36 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry35' := e ]}" := ({| TLBEntry35 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry34' := e ]}" := ({| TLBEntry34 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry33' := e ]}" := ({| TLBEntry33 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry32' := e ]}" := ({| TLBEntry32 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry31' := e ]}" := ({| TLBEntry31 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry30' := e ]}" := ({| TLBEntry30 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry29' := e ]}" := ({| TLBEntry29 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry28' := e ]}" := ({| TLBEntry28 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry27' := e ]}" := ({| TLBEntry27 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry26' := e ]}" := ({| TLBEntry26 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry25' := e ]}" := ({| TLBEntry25 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry24' := e ]}" := ({| TLBEntry24 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry23' := e ]}" := ({| TLBEntry23 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry22' := e ]}" := ({| TLBEntry22 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry21' := e ]}" := ({| TLBEntry21 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry20' := e ]}" := ({| TLBEntry20 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry19' := e ]}" := ({| TLBEntry19 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry18' := e ]}" := ({| TLBEntry18 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry17' := e ]}" := ({| TLBEntry17 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry16' := e ]}" := ({| TLBEntry16 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry15' := e ]}" := ({| TLBEntry15 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry14' := e ]}" := ({| TLBEntry14 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry13' := e ]}" := ({| TLBEntry13 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry12' := e ]}" := ({| TLBEntry12 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry11' := e ]}" := ({| TLBEntry11 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry10' := e ]}" := ({| TLBEntry10 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry09' := e ]}" := ({| TLBEntry09 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry08' := e ]}" := ({| TLBEntry08 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry07' := e ]}" := ({| TLBEntry07 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry06' := e ]}" := ({| TLBEntry06 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry05' := e ]}" := ({| TLBEntry05 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry04' := e ]}" := ({| TLBEntry04 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry03' := e ]}" := ({| TLBEntry03 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry02' := e ]}" := ({| TLBEntry02 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry01' := e ]}" := ({| TLBEntry01 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry00' := e ]}" := ({| TLBEntry00 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBXContext' := e ]}" := ({| TLBXContext := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntryHi' := e ]}" := ({| TLBEntryHi := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBWired' := e ]}" := ({| TLBWired := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBPageMask' := e ]}" := ({| TLBPageMask := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBContext' := e ]}" := ({| TLBContext := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntryLo1' := e ]}" := ({| TLBEntryLo1 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntryLo0' := e ]}" := ({| TLBEntryLo0 := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBRandom' := e ]}" := ({| TLBRandom := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBIndex' := e ]}" := ({| TLBIndex := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBProbe' := e ]}" := ({| TLBProbe := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'NextPC' := e ]}" := ({| NextPC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; PC := PC r |}).
+Notation "{[ r 'with' 'PC' := e ]}" := ({| PC := e; CID := CID r; CapCause := CapCause r; EPCC := EPCC r; KDC := KDC r; KCC := KCC r; KR2C := KR2C r; KR1C := KR1C r; CTLSP := CTLSP r; CTLSU := CTLSU r; C31 := C31 r; C30 := C30 r; C29 := C29 r; C28 := C28 r; C27 := C27 r; C26 := C26 r; C25 := C25 r; C24 := C24 r; C23 := C23 r; C22 := C22 r; C21 := C21 r; C20 := C20 r; C19 := C19 r; C18 := C18 r; C17 := C17 r; C16 := C16 r; C15 := C15 r; C14 := C14 r; C13 := C13 r; C12 := C12 r; C11 := C11 r; C10 := C10 r; C09 := C09 r; C08 := C08 r; C07 := C07 r; C06 := C06 r; C05 := C05 r; C04 := C04 r; C03 := C03 r; C02 := C02 r; C01 := C01 r; DDC := DDC r; DelayedPCC := DelayedPCC r; NextPCC := NextPCC r; PCC := PCC r; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r |}).
+
+
+
+Definition CapCauseReg_of_regval (merge_var : register_value)
+: option CapCauseReg :=
+
+ match merge_var with | Regval_CapCauseReg (v) => Some (v) | g__15 => None end.
+
+Definition regval_of_CapCauseReg (v : CapCauseReg) : register_value := Regval_CapCauseReg (v).
+
+Definition Capability_of_regval (merge_var : register_value)
+: option Capability :=
+
+ match merge_var with | Regval_Capability (v) => Some (v) | g__14 => None end.
+
+Definition regval_of_Capability (v : Capability) : register_value := Regval_Capability (v).
+
+Definition CauseReg_of_regval (merge_var : register_value)
+: option CauseReg :=
+
+ match merge_var with | Regval_CauseReg (v) => Some (v) | g__13 => None end.
+
+Definition regval_of_CauseReg (v : CauseReg) : register_value := Regval_CauseReg (v).
+
+Definition ContextReg_of_regval (merge_var : register_value)
+: option ContextReg :=
+
+ match merge_var with | Regval_ContextReg (v) => Some (v) | g__12 => None end.
+
+Definition regval_of_ContextReg (v : ContextReg) : register_value := Regval_ContextReg (v).
+
+Definition StatusReg_of_regval (merge_var : register_value)
+: option StatusReg :=
+
+ match merge_var with | Regval_StatusReg (v) => Some (v) | g__11 => None end.
+
+Definition regval_of_StatusReg (v : StatusReg) : register_value := Regval_StatusReg (v).
+
+Definition TLBEntry_of_regval (merge_var : register_value)
+: option TLBEntry :=
+
+ match merge_var with | Regval_TLBEntry (v) => Some (v) | g__10 => None end.
+
+Definition regval_of_TLBEntry (v : TLBEntry) : register_value := Regval_TLBEntry (v).
+
+Definition TLBEntryHiReg_of_regval (merge_var : register_value)
+: option TLBEntryHiReg :=
+
+ match merge_var with | Regval_TLBEntryHiReg (v) => Some (v) | g__9 => None end.
+
+Definition regval_of_TLBEntryHiReg (v : TLBEntryHiReg)
+: register_value :=
+
+ Regval_TLBEntryHiReg
+ (v).
+
+Definition TLBEntryLoReg_of_regval (merge_var : register_value)
+: option TLBEntryLoReg :=
+
+ match merge_var with | Regval_TLBEntryLoReg (v) => Some (v) | g__8 => None end.
+
+Definition regval_of_TLBEntryLoReg (v : TLBEntryLoReg)
+: register_value :=
+
+ Regval_TLBEntryLoReg
+ (v).
+
+Definition XContextReg_of_regval (merge_var : register_value)
+: option XContextReg :=
+
+ match merge_var with | Regval_XContextReg (v) => Some (v) | g__7 => None end.
+
+Definition regval_of_XContextReg (v : XContextReg) : register_value := Regval_XContextReg (v).
+
+Definition vector_16_dec_bit_of_regval (merge_var : register_value)
+: option (mword 16) :=
+
+ match merge_var with | Regval_vector_16_dec_bit (v) => Some (v) | g__6 => None end.
+
+Definition regval_of_vector_16_dec_bit (v : mword 16)
+: register_value :=
+
+ Regval_vector_16_dec_bit
+ (v).
+
+Definition vector_1_dec_bit_of_regval (merge_var : register_value)
+: option (mword 1) :=
+
+ match merge_var with | Regval_vector_1_dec_bit (v) => Some (v) | g__5 => None end.
+
+Definition regval_of_vector_1_dec_bit (v : mword 1)
+: register_value :=
+
+ Regval_vector_1_dec_bit
+ (v).
+
+Definition vector_32_dec_bit_of_regval (merge_var : register_value)
+: option (mword 32) :=
+
+ match merge_var with | Regval_vector_32_dec_bit (v) => Some (v) | g__4 => None end.
+
+Definition regval_of_vector_32_dec_bit (v : mword 32)
+: register_value :=
+
+ Regval_vector_32_dec_bit
+ (v).
+
+Definition vector_3_dec_bit_of_regval (merge_var : register_value)
+: option (mword 3) :=
+
+ match merge_var with | Regval_vector_3_dec_bit (v) => Some (v) | g__3 => None end.
+
+Definition regval_of_vector_3_dec_bit (v : mword 3)
+: register_value :=
+
+ Regval_vector_3_dec_bit
+ (v).
+
+Definition vector_64_dec_bit_of_regval (merge_var : register_value)
+: option (mword 64) :=
+
+ match merge_var with | Regval_vector_64_dec_bit (v) => Some (v) | g__2 => None end.
+
+Definition regval_of_vector_64_dec_bit (v : mword 64)
+: register_value :=
+
+ Regval_vector_64_dec_bit
+ (v).
+
+Definition vector_6_dec_bit_of_regval (merge_var : register_value)
+: option (mword 6) :=
+
+ match merge_var with | Regval_vector_6_dec_bit (v) => Some (v) | g__1 => None end.
+
+Definition regval_of_vector_6_dec_bit (v : mword 6)
+: register_value :=
+
+ Regval_vector_6_dec_bit
+ (v).
+
+Definition vector_8_dec_bit_of_regval (merge_var : register_value)
+: option (mword 8) :=
+
+ match merge_var with | Regval_vector_8_dec_bit (v) => Some (v) | g__0 => None end.
+
+Definition regval_of_vector_8_dec_bit (v : mword 8)
+: register_value :=
+
+ Regval_vector_8_dec_bit
+ (v).
+
+
+
+Definition vector_of_regval {a} n (of_regval : register_value -> option a) (rv : register_value) : option (vec a n) := match rv with
+ | Regval_vector (n', _, v) => if n =? n' then map_bind (vec_of_list n) (just_list (List.map of_regval v)) else None
+ | _ => None
+end.
+
+Definition regval_of_vector {a} (regval_of : a -> register_value) (size : Z) (is_inc : bool) (xs : vec a size) : register_value := Regval_vector (size, is_inc, List.map regval_of (list_of_vec xs)).
+
+Definition list_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (list a) := match rv with
+ | Regval_list v => just_list (List.map of_regval v)
+ | _ => None
+end.
+
+Definition regval_of_list {a} (regval_of : a -> register_value) (xs : list a) : register_value := Regval_list (List.map regval_of xs).
+
+Definition option_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (option a) := match rv with
+ | Regval_option v => option_map of_regval v
+ | _ => None
+end.
+
+Definition regval_of_option {a} (regval_of : a -> register_value) (v : option a) := Regval_option (option_map regval_of v).
+
+
+Definition CID_ref := {|
+ name := "CID";
+ read_from := (fun s => s.(CID));
+ write_to := (fun v s => ({[ s with CID := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CapCause_ref := {|
+ name := "CapCause";
+ read_from := (fun s => s.(CapCause));
+ write_to := (fun v s => ({[ s with CapCause := v ]}));
+ of_regval := (fun v => CapCauseReg_of_regval v);
+ regval_of := (fun v => regval_of_CapCauseReg v) |}.
+
+Definition KDC_ref := {|
+ name := "KDC";
+ read_from := (fun s => s.(KDC));
+ write_to := (fun v s => ({[ s with KDC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition KR2C_ref := {|
+ name := "KR2C";
+ read_from := (fun s => s.(KR2C));
+ write_to := (fun v s => ({[ s with KR2C := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition KR1C_ref := {|
+ name := "KR1C";
+ read_from := (fun s => s.(KR1C));
+ write_to := (fun v s => ({[ s with KR1C := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition CTLSP_ref := {|
+ name := "CTLSP";
+ read_from := (fun s => s.(CTLSP));
+ write_to := (fun v s => ({[ s with CTLSP := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition CTLSU_ref := {|
+ name := "CTLSU";
+ read_from := (fun s => s.(CTLSU));
+ write_to := (fun v s => ({[ s with CTLSU := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C31_ref := {|
+ name := "C31";
+ read_from := (fun s => s.(C31));
+ write_to := (fun v s => ({[ s with C31 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C30_ref := {|
+ name := "C30";
+ read_from := (fun s => s.(C30));
+ write_to := (fun v s => ({[ s with C30 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C29_ref := {|
+ name := "C29";
+ read_from := (fun s => s.(C29));
+ write_to := (fun v s => ({[ s with C29 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C28_ref := {|
+ name := "C28";
+ read_from := (fun s => s.(C28));
+ write_to := (fun v s => ({[ s with C28 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C27_ref := {|
+ name := "C27";
+ read_from := (fun s => s.(C27));
+ write_to := (fun v s => ({[ s with C27 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C26_ref := {|
+ name := "C26";
+ read_from := (fun s => s.(C26));
+ write_to := (fun v s => ({[ s with C26 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C25_ref := {|
+ name := "C25";
+ read_from := (fun s => s.(C25));
+ write_to := (fun v s => ({[ s with C25 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C24_ref := {|
+ name := "C24";
+ read_from := (fun s => s.(C24));
+ write_to := (fun v s => ({[ s with C24 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C23_ref := {|
+ name := "C23";
+ read_from := (fun s => s.(C23));
+ write_to := (fun v s => ({[ s with C23 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C22_ref := {|
+ name := "C22";
+ read_from := (fun s => s.(C22));
+ write_to := (fun v s => ({[ s with C22 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C21_ref := {|
+ name := "C21";
+ read_from := (fun s => s.(C21));
+ write_to := (fun v s => ({[ s with C21 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C20_ref := {|
+ name := "C20";
+ read_from := (fun s => s.(C20));
+ write_to := (fun v s => ({[ s with C20 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C19_ref := {|
+ name := "C19";
+ read_from := (fun s => s.(C19));
+ write_to := (fun v s => ({[ s with C19 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C18_ref := {|
+ name := "C18";
+ read_from := (fun s => s.(C18));
+ write_to := (fun v s => ({[ s with C18 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C17_ref := {|
+ name := "C17";
+ read_from := (fun s => s.(C17));
+ write_to := (fun v s => ({[ s with C17 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C16_ref := {|
+ name := "C16";
+ read_from := (fun s => s.(C16));
+ write_to := (fun v s => ({[ s with C16 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C15_ref := {|
+ name := "C15";
+ read_from := (fun s => s.(C15));
+ write_to := (fun v s => ({[ s with C15 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C14_ref := {|
+ name := "C14";
+ read_from := (fun s => s.(C14));
+ write_to := (fun v s => ({[ s with C14 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C13_ref := {|
+ name := "C13";
+ read_from := (fun s => s.(C13));
+ write_to := (fun v s => ({[ s with C13 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C12_ref := {|
+ name := "C12";
+ read_from := (fun s => s.(C12));
+ write_to := (fun v s => ({[ s with C12 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C11_ref := {|
+ name := "C11";
+ read_from := (fun s => s.(C11));
+ write_to := (fun v s => ({[ s with C11 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C10_ref := {|
+ name := "C10";
+ read_from := (fun s => s.(C10));
+ write_to := (fun v s => ({[ s with C10 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C09_ref := {|
+ name := "C09";
+ read_from := (fun s => s.(C09));
+ write_to := (fun v s => ({[ s with C09 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C08_ref := {|
+ name := "C08";
+ read_from := (fun s => s.(C08));
+ write_to := (fun v s => ({[ s with C08 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C07_ref := {|
+ name := "C07";
+ read_from := (fun s => s.(C07));
+ write_to := (fun v s => ({[ s with C07 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C06_ref := {|
+ name := "C06";
+ read_from := (fun s => s.(C06));
+ write_to := (fun v s => ({[ s with C06 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C05_ref := {|
+ name := "C05";
+ read_from := (fun s => s.(C05));
+ write_to := (fun v s => ({[ s with C05 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C04_ref := {|
+ name := "C04";
+ read_from := (fun s => s.(C04));
+ write_to := (fun v s => ({[ s with C04 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C03_ref := {|
+ name := "C03";
+ read_from := (fun s => s.(C03));
+ write_to := (fun v s => ({[ s with C03 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C02_ref := {|
+ name := "C02";
+ read_from := (fun s => s.(C02));
+ write_to := (fun v s => ({[ s with C02 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition C01_ref := {|
+ name := "C01";
+ read_from := (fun s => s.(C01));
+ write_to := (fun v s => ({[ s with C01 := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition DDC_ref := {|
+ name := "DDC";
+ read_from := (fun s => s.(DDC));
+ write_to := (fun v s => ({[ s with DDC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition NextPCC_ref := {|
+ name := "NextPCC";
+ read_from := (fun s => s.(NextPCC));
+ write_to := (fun v s => ({[ s with NextPCC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition DelayedPCC_ref := {|
+ name := "DelayedPCC";
+ read_from := (fun s => s.(DelayedPCC));
+ write_to := (fun v s => ({[ s with DelayedPCC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition PCC_ref := {|
+ name := "PCC";
+ read_from := (fun s => s.(PCC));
+ write_to := (fun v s => ({[ s with PCC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition KCC_ref := {|
+ name := "KCC";
+ read_from := (fun s => s.(KCC));
+ write_to := (fun v s => ({[ s with KCC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition EPCC_ref := {|
+ name := "EPCC";
+ read_from := (fun s => s.(EPCC));
+ write_to := (fun v s => ({[ s with EPCC := v ]}));
+ of_regval := (fun v => Capability_of_regval v);
+ regval_of := (fun v => regval_of_Capability v) |}.
+
+Definition UART_RVALID_ref := {|
+ name := "UART_RVALID";
+ read_from := (fun s => s.(UART_RVALID));
+ write_to := (fun v s => ({[ s with UART_RVALID := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition UART_RDATA_ref := {|
+ name := "UART_RDATA";
+ read_from := (fun s => s.(UART_RDATA));
+ write_to := (fun v s => ({[ s with UART_RDATA := v ]}));
+ of_regval := (fun v => vector_8_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_8_dec_bit v) |}.
+
+Definition UART_WRITTEN_ref := {|
+ name := "UART_WRITTEN";
+ read_from := (fun s => s.(UART_WRITTEN));
+ write_to := (fun v s => ({[ s with UART_WRITTEN := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition UART_WDATA_ref := {|
+ name := "UART_WDATA";
+ read_from := (fun s => s.(UART_WDATA));
+ write_to := (fun v s => ({[ s with UART_WDATA := v ]}));
+ of_regval := (fun v => vector_8_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_8_dec_bit v) |}.
+
+Definition GPR_ref := {|
+ name := "GPR";
+ read_from := (fun s => s.(GPR));
+ write_to := (fun v s => ({[ s with GPR := v ]}));
+ of_regval := (fun v => vector_of_regval 32 (fun v => vector_64_dec_bit_of_regval v) v);
+ regval_of := (fun v => regval_of_vector (fun v => regval_of_vector_64_dec_bit v) 32 false v) |}.
+
+Definition LO_ref := {|
+ name := "LO";
+ read_from := (fun s => s.(LO));
+ write_to := (fun v s => ({[ s with LO := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition HI_ref := {|
+ name := "HI";
+ read_from := (fun s => s.(HI));
+ write_to := (fun v s => ({[ s with HI := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition DelayedPC_ref := {|
+ name := "DelayedPC";
+ read_from := (fun s => s.(DelayedPC));
+ write_to := (fun v s => ({[ s with DelayedPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition BranchPending_ref := {|
+ name := "BranchPending";
+ read_from := (fun s => s.(BranchPending));
+ write_to := (fun v s => ({[ s with BranchPending := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition InBranchDelay_ref := {|
+ name := "InBranchDelay";
+ read_from := (fun s => s.(InBranchDelay));
+ write_to := (fun v s => ({[ s with InBranchDelay := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition NextInBranchDelay_ref := {|
+ name := "NextInBranchDelay";
+ read_from := (fun s => s.(NextInBranchDelay));
+ write_to := (fun v s => ({[ s with NextInBranchDelay := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition CP0Status_ref := {|
+ name := "CP0Status";
+ read_from := (fun s => s.(CP0Status));
+ write_to := (fun v s => ({[ s with CP0Status := v ]}));
+ of_regval := (fun v => StatusReg_of_regval v);
+ regval_of := (fun v => regval_of_StatusReg v) |}.
+
+Definition CP0ConfigK0_ref := {|
+ name := "CP0ConfigK0";
+ read_from := (fun s => s.(CP0ConfigK0));
+ write_to := (fun v s => ({[ s with CP0ConfigK0 := v ]}));
+ of_regval := (fun v => vector_3_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_3_dec_bit v) |}.
+
+Definition CP0UserLocal_ref := {|
+ name := "CP0UserLocal";
+ read_from := (fun s => s.(CP0UserLocal));
+ write_to := (fun v s => ({[ s with CP0UserLocal := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0HWREna_ref := {|
+ name := "CP0HWREna";
+ read_from := (fun s => s.(CP0HWREna));
+ write_to := (fun v s => ({[ s with CP0HWREna := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0Count_ref := {|
+ name := "CP0Count";
+ read_from := (fun s => s.(CP0Count));
+ write_to := (fun v s => ({[ s with CP0Count := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0BadInstrP_ref := {|
+ name := "CP0BadInstrP";
+ read_from := (fun s => s.(CP0BadInstrP));
+ write_to := (fun v s => ({[ s with CP0BadInstrP := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0BadInstr_ref := {|
+ name := "CP0BadInstr";
+ read_from := (fun s => s.(CP0BadInstr));
+ write_to := (fun v s => ({[ s with CP0BadInstr := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition LastInstrBits_ref := {|
+ name := "LastInstrBits";
+ read_from := (fun s => s.(LastInstrBits));
+ write_to := (fun v s => ({[ s with LastInstrBits := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CurrentInstrBits_ref := {|
+ name := "CurrentInstrBits";
+ read_from := (fun s => s.(CurrentInstrBits));
+ write_to := (fun v s => ({[ s with CurrentInstrBits := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0BadVAddr_ref := {|
+ name := "CP0BadVAddr";
+ read_from := (fun s => s.(CP0BadVAddr));
+ write_to := (fun v s => ({[ s with CP0BadVAddr := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0LLAddr_ref := {|
+ name := "CP0LLAddr";
+ read_from := (fun s => s.(CP0LLAddr));
+ write_to := (fun v s => ({[ s with CP0LLAddr := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0LLBit_ref := {|
+ name := "CP0LLBit";
+ read_from := (fun s => s.(CP0LLBit));
+ write_to := (fun v s => ({[ s with CP0LLBit := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition CP0ErrorEPC_ref := {|
+ name := "CP0ErrorEPC";
+ read_from := (fun s => s.(CP0ErrorEPC));
+ write_to := (fun v s => ({[ s with CP0ErrorEPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0EPC_ref := {|
+ name := "CP0EPC";
+ read_from := (fun s => s.(CP0EPC));
+ write_to := (fun v s => ({[ s with CP0EPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0Cause_ref := {|
+ name := "CP0Cause";
+ read_from := (fun s => s.(CP0Cause));
+ write_to := (fun v s => ({[ s with CP0Cause := v ]}));
+ of_regval := (fun v => CauseReg_of_regval v);
+ regval_of := (fun v => regval_of_CauseReg v) |}.
+
+Definition CP0Compare_ref := {|
+ name := "CP0Compare";
+ read_from := (fun s => s.(CP0Compare));
+ write_to := (fun v s => ({[ s with CP0Compare := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition TLBEntry63_ref := {|
+ name := "TLBEntry63";
+ read_from := (fun s => s.(TLBEntry63));
+ write_to := (fun v s => ({[ s with TLBEntry63 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry62_ref := {|
+ name := "TLBEntry62";
+ read_from := (fun s => s.(TLBEntry62));
+ write_to := (fun v s => ({[ s with TLBEntry62 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry61_ref := {|
+ name := "TLBEntry61";
+ read_from := (fun s => s.(TLBEntry61));
+ write_to := (fun v s => ({[ s with TLBEntry61 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry60_ref := {|
+ name := "TLBEntry60";
+ read_from := (fun s => s.(TLBEntry60));
+ write_to := (fun v s => ({[ s with TLBEntry60 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry59_ref := {|
+ name := "TLBEntry59";
+ read_from := (fun s => s.(TLBEntry59));
+ write_to := (fun v s => ({[ s with TLBEntry59 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry58_ref := {|
+ name := "TLBEntry58";
+ read_from := (fun s => s.(TLBEntry58));
+ write_to := (fun v s => ({[ s with TLBEntry58 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry57_ref := {|
+ name := "TLBEntry57";
+ read_from := (fun s => s.(TLBEntry57));
+ write_to := (fun v s => ({[ s with TLBEntry57 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry56_ref := {|
+ name := "TLBEntry56";
+ read_from := (fun s => s.(TLBEntry56));
+ write_to := (fun v s => ({[ s with TLBEntry56 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry55_ref := {|
+ name := "TLBEntry55";
+ read_from := (fun s => s.(TLBEntry55));
+ write_to := (fun v s => ({[ s with TLBEntry55 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry54_ref := {|
+ name := "TLBEntry54";
+ read_from := (fun s => s.(TLBEntry54));
+ write_to := (fun v s => ({[ s with TLBEntry54 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry53_ref := {|
+ name := "TLBEntry53";
+ read_from := (fun s => s.(TLBEntry53));
+ write_to := (fun v s => ({[ s with TLBEntry53 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry52_ref := {|
+ name := "TLBEntry52";
+ read_from := (fun s => s.(TLBEntry52));
+ write_to := (fun v s => ({[ s with TLBEntry52 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry51_ref := {|
+ name := "TLBEntry51";
+ read_from := (fun s => s.(TLBEntry51));
+ write_to := (fun v s => ({[ s with TLBEntry51 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry50_ref := {|
+ name := "TLBEntry50";
+ read_from := (fun s => s.(TLBEntry50));
+ write_to := (fun v s => ({[ s with TLBEntry50 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry49_ref := {|
+ name := "TLBEntry49";
+ read_from := (fun s => s.(TLBEntry49));
+ write_to := (fun v s => ({[ s with TLBEntry49 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry48_ref := {|
+ name := "TLBEntry48";
+ read_from := (fun s => s.(TLBEntry48));
+ write_to := (fun v s => ({[ s with TLBEntry48 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry47_ref := {|
+ name := "TLBEntry47";
+ read_from := (fun s => s.(TLBEntry47));
+ write_to := (fun v s => ({[ s with TLBEntry47 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry46_ref := {|
+ name := "TLBEntry46";
+ read_from := (fun s => s.(TLBEntry46));
+ write_to := (fun v s => ({[ s with TLBEntry46 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry45_ref := {|
+ name := "TLBEntry45";
+ read_from := (fun s => s.(TLBEntry45));
+ write_to := (fun v s => ({[ s with TLBEntry45 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry44_ref := {|
+ name := "TLBEntry44";
+ read_from := (fun s => s.(TLBEntry44));
+ write_to := (fun v s => ({[ s with TLBEntry44 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry43_ref := {|
+ name := "TLBEntry43";
+ read_from := (fun s => s.(TLBEntry43));
+ write_to := (fun v s => ({[ s with TLBEntry43 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry42_ref := {|
+ name := "TLBEntry42";
+ read_from := (fun s => s.(TLBEntry42));
+ write_to := (fun v s => ({[ s with TLBEntry42 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry41_ref := {|
+ name := "TLBEntry41";
+ read_from := (fun s => s.(TLBEntry41));
+ write_to := (fun v s => ({[ s with TLBEntry41 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry40_ref := {|
+ name := "TLBEntry40";
+ read_from := (fun s => s.(TLBEntry40));
+ write_to := (fun v s => ({[ s with TLBEntry40 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry39_ref := {|
+ name := "TLBEntry39";
+ read_from := (fun s => s.(TLBEntry39));
+ write_to := (fun v s => ({[ s with TLBEntry39 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry38_ref := {|
+ name := "TLBEntry38";
+ read_from := (fun s => s.(TLBEntry38));
+ write_to := (fun v s => ({[ s with TLBEntry38 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry37_ref := {|
+ name := "TLBEntry37";
+ read_from := (fun s => s.(TLBEntry37));
+ write_to := (fun v s => ({[ s with TLBEntry37 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry36_ref := {|
+ name := "TLBEntry36";
+ read_from := (fun s => s.(TLBEntry36));
+ write_to := (fun v s => ({[ s with TLBEntry36 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry35_ref := {|
+ name := "TLBEntry35";
+ read_from := (fun s => s.(TLBEntry35));
+ write_to := (fun v s => ({[ s with TLBEntry35 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry34_ref := {|
+ name := "TLBEntry34";
+ read_from := (fun s => s.(TLBEntry34));
+ write_to := (fun v s => ({[ s with TLBEntry34 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry33_ref := {|
+ name := "TLBEntry33";
+ read_from := (fun s => s.(TLBEntry33));
+ write_to := (fun v s => ({[ s with TLBEntry33 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry32_ref := {|
+ name := "TLBEntry32";
+ read_from := (fun s => s.(TLBEntry32));
+ write_to := (fun v s => ({[ s with TLBEntry32 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry31_ref := {|
+ name := "TLBEntry31";
+ read_from := (fun s => s.(TLBEntry31));
+ write_to := (fun v s => ({[ s with TLBEntry31 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry30_ref := {|
+ name := "TLBEntry30";
+ read_from := (fun s => s.(TLBEntry30));
+ write_to := (fun v s => ({[ s with TLBEntry30 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry29_ref := {|
+ name := "TLBEntry29";
+ read_from := (fun s => s.(TLBEntry29));
+ write_to := (fun v s => ({[ s with TLBEntry29 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry28_ref := {|
+ name := "TLBEntry28";
+ read_from := (fun s => s.(TLBEntry28));
+ write_to := (fun v s => ({[ s with TLBEntry28 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry27_ref := {|
+ name := "TLBEntry27";
+ read_from := (fun s => s.(TLBEntry27));
+ write_to := (fun v s => ({[ s with TLBEntry27 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry26_ref := {|
+ name := "TLBEntry26";
+ read_from := (fun s => s.(TLBEntry26));
+ write_to := (fun v s => ({[ s with TLBEntry26 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry25_ref := {|
+ name := "TLBEntry25";
+ read_from := (fun s => s.(TLBEntry25));
+ write_to := (fun v s => ({[ s with TLBEntry25 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry24_ref := {|
+ name := "TLBEntry24";
+ read_from := (fun s => s.(TLBEntry24));
+ write_to := (fun v s => ({[ s with TLBEntry24 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry23_ref := {|
+ name := "TLBEntry23";
+ read_from := (fun s => s.(TLBEntry23));
+ write_to := (fun v s => ({[ s with TLBEntry23 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry22_ref := {|
+ name := "TLBEntry22";
+ read_from := (fun s => s.(TLBEntry22));
+ write_to := (fun v s => ({[ s with TLBEntry22 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry21_ref := {|
+ name := "TLBEntry21";
+ read_from := (fun s => s.(TLBEntry21));
+ write_to := (fun v s => ({[ s with TLBEntry21 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry20_ref := {|
+ name := "TLBEntry20";
+ read_from := (fun s => s.(TLBEntry20));
+ write_to := (fun v s => ({[ s with TLBEntry20 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry19_ref := {|
+ name := "TLBEntry19";
+ read_from := (fun s => s.(TLBEntry19));
+ write_to := (fun v s => ({[ s with TLBEntry19 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry18_ref := {|
+ name := "TLBEntry18";
+ read_from := (fun s => s.(TLBEntry18));
+ write_to := (fun v s => ({[ s with TLBEntry18 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry17_ref := {|
+ name := "TLBEntry17";
+ read_from := (fun s => s.(TLBEntry17));
+ write_to := (fun v s => ({[ s with TLBEntry17 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry16_ref := {|
+ name := "TLBEntry16";
+ read_from := (fun s => s.(TLBEntry16));
+ write_to := (fun v s => ({[ s with TLBEntry16 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry15_ref := {|
+ name := "TLBEntry15";
+ read_from := (fun s => s.(TLBEntry15));
+ write_to := (fun v s => ({[ s with TLBEntry15 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry14_ref := {|
+ name := "TLBEntry14";
+ read_from := (fun s => s.(TLBEntry14));
+ write_to := (fun v s => ({[ s with TLBEntry14 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry13_ref := {|
+ name := "TLBEntry13";
+ read_from := (fun s => s.(TLBEntry13));
+ write_to := (fun v s => ({[ s with TLBEntry13 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry12_ref := {|
+ name := "TLBEntry12";
+ read_from := (fun s => s.(TLBEntry12));
+ write_to := (fun v s => ({[ s with TLBEntry12 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry11_ref := {|
+ name := "TLBEntry11";
+ read_from := (fun s => s.(TLBEntry11));
+ write_to := (fun v s => ({[ s with TLBEntry11 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry10_ref := {|
+ name := "TLBEntry10";
+ read_from := (fun s => s.(TLBEntry10));
+ write_to := (fun v s => ({[ s with TLBEntry10 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry09_ref := {|
+ name := "TLBEntry09";
+ read_from := (fun s => s.(TLBEntry09));
+ write_to := (fun v s => ({[ s with TLBEntry09 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry08_ref := {|
+ name := "TLBEntry08";
+ read_from := (fun s => s.(TLBEntry08));
+ write_to := (fun v s => ({[ s with TLBEntry08 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry07_ref := {|
+ name := "TLBEntry07";
+ read_from := (fun s => s.(TLBEntry07));
+ write_to := (fun v s => ({[ s with TLBEntry07 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry06_ref := {|
+ name := "TLBEntry06";
+ read_from := (fun s => s.(TLBEntry06));
+ write_to := (fun v s => ({[ s with TLBEntry06 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry05_ref := {|
+ name := "TLBEntry05";
+ read_from := (fun s => s.(TLBEntry05));
+ write_to := (fun v s => ({[ s with TLBEntry05 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry04_ref := {|
+ name := "TLBEntry04";
+ read_from := (fun s => s.(TLBEntry04));
+ write_to := (fun v s => ({[ s with TLBEntry04 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry03_ref := {|
+ name := "TLBEntry03";
+ read_from := (fun s => s.(TLBEntry03));
+ write_to := (fun v s => ({[ s with TLBEntry03 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry02_ref := {|
+ name := "TLBEntry02";
+ read_from := (fun s => s.(TLBEntry02));
+ write_to := (fun v s => ({[ s with TLBEntry02 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry01_ref := {|
+ name := "TLBEntry01";
+ read_from := (fun s => s.(TLBEntry01));
+ write_to := (fun v s => ({[ s with TLBEntry01 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry00_ref := {|
+ name := "TLBEntry00";
+ read_from := (fun s => s.(TLBEntry00));
+ write_to := (fun v s => ({[ s with TLBEntry00 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBXContext_ref := {|
+ name := "TLBXContext";
+ read_from := (fun s => s.(TLBXContext));
+ write_to := (fun v s => ({[ s with TLBXContext := v ]}));
+ of_regval := (fun v => XContextReg_of_regval v);
+ regval_of := (fun v => regval_of_XContextReg v) |}.
+
+Definition TLBEntryHi_ref := {|
+ name := "TLBEntryHi";
+ read_from := (fun s => s.(TLBEntryHi));
+ write_to := (fun v s => ({[ s with TLBEntryHi := v ]}));
+ of_regval := (fun v => TLBEntryHiReg_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntryHiReg v) |}.
+
+Definition TLBWired_ref := {|
+ name := "TLBWired";
+ read_from := (fun s => s.(TLBWired));
+ write_to := (fun v s => ({[ s with TLBWired := v ]}));
+ of_regval := (fun v => vector_6_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
+
+Definition TLBPageMask_ref := {|
+ name := "TLBPageMask";
+ read_from := (fun s => s.(TLBPageMask));
+ write_to := (fun v s => ({[ s with TLBPageMask := v ]}));
+ of_regval := (fun v => vector_16_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_16_dec_bit v) |}.
+
+Definition TLBContext_ref := {|
+ name := "TLBContext";
+ read_from := (fun s => s.(TLBContext));
+ write_to := (fun v s => ({[ s with TLBContext := v ]}));
+ of_regval := (fun v => ContextReg_of_regval v);
+ regval_of := (fun v => regval_of_ContextReg v) |}.
+
+Definition TLBEntryLo1_ref := {|
+ name := "TLBEntryLo1";
+ read_from := (fun s => s.(TLBEntryLo1));
+ write_to := (fun v s => ({[ s with TLBEntryLo1 := v ]}));
+ of_regval := (fun v => TLBEntryLoReg_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntryLoReg v) |}.
+
+Definition TLBEntryLo0_ref := {|
+ name := "TLBEntryLo0";
+ read_from := (fun s => s.(TLBEntryLo0));
+ write_to := (fun v s => ({[ s with TLBEntryLo0 := v ]}));
+ of_regval := (fun v => TLBEntryLoReg_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntryLoReg v) |}.
+
+Definition TLBRandom_ref := {|
+ name := "TLBRandom";
+ read_from := (fun s => s.(TLBRandom));
+ write_to := (fun v s => ({[ s with TLBRandom := v ]}));
+ of_regval := (fun v => vector_6_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
+
+Definition TLBIndex_ref := {|
+ name := "TLBIndex";
+ read_from := (fun s => s.(TLBIndex));
+ write_to := (fun v s => ({[ s with TLBIndex := v ]}));
+ of_regval := (fun v => vector_6_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
+
+Definition TLBProbe_ref := {|
+ name := "TLBProbe";
+ read_from := (fun s => s.(TLBProbe));
+ write_to := (fun v s => ({[ s with TLBProbe := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition NextPC_ref := {|
+ name := "NextPC";
+ read_from := (fun s => s.(NextPC));
+ write_to := (fun v s => ({[ s with NextPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition PC_ref := {|
+ name := "PC";
+ read_from := (fun s => s.(PC));
+ write_to := (fun v s => ({[ s with PC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Local Open Scope string.
+Definition get_regval (reg_name : string) (s : regstate) : option register_value :=
+ if string_dec reg_name "CID" then Some (CID_ref.(regval_of) (CID_ref.(read_from) s)) else
+ if string_dec reg_name "CapCause" then Some (CapCause_ref.(regval_of) (CapCause_ref.(read_from) s)) else
+ if string_dec reg_name "KDC" then Some (KDC_ref.(regval_of) (KDC_ref.(read_from) s)) else
+ if string_dec reg_name "KR2C" then Some (KR2C_ref.(regval_of) (KR2C_ref.(read_from) s)) else
+ if string_dec reg_name "KR1C" then Some (KR1C_ref.(regval_of) (KR1C_ref.(read_from) s)) else
+ if string_dec reg_name "CTLSP" then Some (CTLSP_ref.(regval_of) (CTLSP_ref.(read_from) s)) else
+ if string_dec reg_name "CTLSU" then Some (CTLSU_ref.(regval_of) (CTLSU_ref.(read_from) s)) else
+ if string_dec reg_name "C31" then Some (C31_ref.(regval_of) (C31_ref.(read_from) s)) else
+ if string_dec reg_name "C30" then Some (C30_ref.(regval_of) (C30_ref.(read_from) s)) else
+ if string_dec reg_name "C29" then Some (C29_ref.(regval_of) (C29_ref.(read_from) s)) else
+ if string_dec reg_name "C28" then Some (C28_ref.(regval_of) (C28_ref.(read_from) s)) else
+ if string_dec reg_name "C27" then Some (C27_ref.(regval_of) (C27_ref.(read_from) s)) else
+ if string_dec reg_name "C26" then Some (C26_ref.(regval_of) (C26_ref.(read_from) s)) else
+ if string_dec reg_name "C25" then Some (C25_ref.(regval_of) (C25_ref.(read_from) s)) else
+ if string_dec reg_name "C24" then Some (C24_ref.(regval_of) (C24_ref.(read_from) s)) else
+ if string_dec reg_name "C23" then Some (C23_ref.(regval_of) (C23_ref.(read_from) s)) else
+ if string_dec reg_name "C22" then Some (C22_ref.(regval_of) (C22_ref.(read_from) s)) else
+ if string_dec reg_name "C21" then Some (C21_ref.(regval_of) (C21_ref.(read_from) s)) else
+ if string_dec reg_name "C20" then Some (C20_ref.(regval_of) (C20_ref.(read_from) s)) else
+ if string_dec reg_name "C19" then Some (C19_ref.(regval_of) (C19_ref.(read_from) s)) else
+ if string_dec reg_name "C18" then Some (C18_ref.(regval_of) (C18_ref.(read_from) s)) else
+ if string_dec reg_name "C17" then Some (C17_ref.(regval_of) (C17_ref.(read_from) s)) else
+ if string_dec reg_name "C16" then Some (C16_ref.(regval_of) (C16_ref.(read_from) s)) else
+ if string_dec reg_name "C15" then Some (C15_ref.(regval_of) (C15_ref.(read_from) s)) else
+ if string_dec reg_name "C14" then Some (C14_ref.(regval_of) (C14_ref.(read_from) s)) else
+ if string_dec reg_name "C13" then Some (C13_ref.(regval_of) (C13_ref.(read_from) s)) else
+ if string_dec reg_name "C12" then Some (C12_ref.(regval_of) (C12_ref.(read_from) s)) else
+ if string_dec reg_name "C11" then Some (C11_ref.(regval_of) (C11_ref.(read_from) s)) else
+ if string_dec reg_name "C10" then Some (C10_ref.(regval_of) (C10_ref.(read_from) s)) else
+ if string_dec reg_name "C09" then Some (C09_ref.(regval_of) (C09_ref.(read_from) s)) else
+ if string_dec reg_name "C08" then Some (C08_ref.(regval_of) (C08_ref.(read_from) s)) else
+ if string_dec reg_name "C07" then Some (C07_ref.(regval_of) (C07_ref.(read_from) s)) else
+ if string_dec reg_name "C06" then Some (C06_ref.(regval_of) (C06_ref.(read_from) s)) else
+ if string_dec reg_name "C05" then Some (C05_ref.(regval_of) (C05_ref.(read_from) s)) else
+ if string_dec reg_name "C04" then Some (C04_ref.(regval_of) (C04_ref.(read_from) s)) else
+ if string_dec reg_name "C03" then Some (C03_ref.(regval_of) (C03_ref.(read_from) s)) else
+ if string_dec reg_name "C02" then Some (C02_ref.(regval_of) (C02_ref.(read_from) s)) else
+ if string_dec reg_name "C01" then Some (C01_ref.(regval_of) (C01_ref.(read_from) s)) else
+ if string_dec reg_name "DDC" then Some (DDC_ref.(regval_of) (DDC_ref.(read_from) s)) else
+ if string_dec reg_name "NextPCC" then Some (NextPCC_ref.(regval_of) (NextPCC_ref.(read_from) s)) else
+ if string_dec reg_name "DelayedPCC" then Some (DelayedPCC_ref.(regval_of) (DelayedPCC_ref.(read_from) s)) else
+ if string_dec reg_name "PCC" then Some (PCC_ref.(regval_of) (PCC_ref.(read_from) s)) else
+ if string_dec reg_name "KCC" then Some (KCC_ref.(regval_of) (KCC_ref.(read_from) s)) else
+ if string_dec reg_name "EPCC" then Some (EPCC_ref.(regval_of) (EPCC_ref.(read_from) s)) else
+ if string_dec reg_name "UART_RVALID" then Some (UART_RVALID_ref.(regval_of) (UART_RVALID_ref.(read_from) s)) else
+ if string_dec reg_name "UART_RDATA" then Some (UART_RDATA_ref.(regval_of) (UART_RDATA_ref.(read_from) s)) else
+ if string_dec reg_name "UART_WRITTEN" then Some (UART_WRITTEN_ref.(regval_of) (UART_WRITTEN_ref.(read_from) s)) else
+ if string_dec reg_name "UART_WDATA" then Some (UART_WDATA_ref.(regval_of) (UART_WDATA_ref.(read_from) s)) else
+ if string_dec reg_name "GPR" then Some (GPR_ref.(regval_of) (GPR_ref.(read_from) s)) else
+ if string_dec reg_name "LO" then Some (LO_ref.(regval_of) (LO_ref.(read_from) s)) else
+ if string_dec reg_name "HI" then Some (HI_ref.(regval_of) (HI_ref.(read_from) s)) else
+ if string_dec reg_name "DelayedPC" then Some (DelayedPC_ref.(regval_of) (DelayedPC_ref.(read_from) s)) else
+ if string_dec reg_name "BranchPending" then Some (BranchPending_ref.(regval_of) (BranchPending_ref.(read_from) s)) else
+ if string_dec reg_name "InBranchDelay" then Some (InBranchDelay_ref.(regval_of) (InBranchDelay_ref.(read_from) s)) else
+ if string_dec reg_name "NextInBranchDelay" then Some (NextInBranchDelay_ref.(regval_of) (NextInBranchDelay_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Status" then Some (CP0Status_ref.(regval_of) (CP0Status_ref.(read_from) s)) else
+ if string_dec reg_name "CP0ConfigK0" then Some (CP0ConfigK0_ref.(regval_of) (CP0ConfigK0_ref.(read_from) s)) else
+ if string_dec reg_name "CP0UserLocal" then Some (CP0UserLocal_ref.(regval_of) (CP0UserLocal_ref.(read_from) s)) else
+ if string_dec reg_name "CP0HWREna" then Some (CP0HWREna_ref.(regval_of) (CP0HWREna_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Count" then Some (CP0Count_ref.(regval_of) (CP0Count_ref.(read_from) s)) else
+ if string_dec reg_name "CP0BadInstrP" then Some (CP0BadInstrP_ref.(regval_of) (CP0BadInstrP_ref.(read_from) s)) else
+ if string_dec reg_name "CP0BadInstr" then Some (CP0BadInstr_ref.(regval_of) (CP0BadInstr_ref.(read_from) s)) else
+ if string_dec reg_name "LastInstrBits" then Some (LastInstrBits_ref.(regval_of) (LastInstrBits_ref.(read_from) s)) else
+ if string_dec reg_name "CurrentInstrBits" then Some (CurrentInstrBits_ref.(regval_of) (CurrentInstrBits_ref.(read_from) s)) else
+ if string_dec reg_name "CP0BadVAddr" then Some (CP0BadVAddr_ref.(regval_of) (CP0BadVAddr_ref.(read_from) s)) else
+ if string_dec reg_name "CP0LLAddr" then Some (CP0LLAddr_ref.(regval_of) (CP0LLAddr_ref.(read_from) s)) else
+ if string_dec reg_name "CP0LLBit" then Some (CP0LLBit_ref.(regval_of) (CP0LLBit_ref.(read_from) s)) else
+ if string_dec reg_name "CP0ErrorEPC" then Some (CP0ErrorEPC_ref.(regval_of) (CP0ErrorEPC_ref.(read_from) s)) else
+ if string_dec reg_name "CP0EPC" then Some (CP0EPC_ref.(regval_of) (CP0EPC_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Cause" then Some (CP0Cause_ref.(regval_of) (CP0Cause_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Compare" then Some (CP0Compare_ref.(regval_of) (CP0Compare_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry63" then Some (TLBEntry63_ref.(regval_of) (TLBEntry63_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry62" then Some (TLBEntry62_ref.(regval_of) (TLBEntry62_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry61" then Some (TLBEntry61_ref.(regval_of) (TLBEntry61_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry60" then Some (TLBEntry60_ref.(regval_of) (TLBEntry60_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry59" then Some (TLBEntry59_ref.(regval_of) (TLBEntry59_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry58" then Some (TLBEntry58_ref.(regval_of) (TLBEntry58_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry57" then Some (TLBEntry57_ref.(regval_of) (TLBEntry57_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry56" then Some (TLBEntry56_ref.(regval_of) (TLBEntry56_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry55" then Some (TLBEntry55_ref.(regval_of) (TLBEntry55_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry54" then Some (TLBEntry54_ref.(regval_of) (TLBEntry54_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry53" then Some (TLBEntry53_ref.(regval_of) (TLBEntry53_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry52" then Some (TLBEntry52_ref.(regval_of) (TLBEntry52_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry51" then Some (TLBEntry51_ref.(regval_of) (TLBEntry51_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry50" then Some (TLBEntry50_ref.(regval_of) (TLBEntry50_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry49" then Some (TLBEntry49_ref.(regval_of) (TLBEntry49_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry48" then Some (TLBEntry48_ref.(regval_of) (TLBEntry48_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry47" then Some (TLBEntry47_ref.(regval_of) (TLBEntry47_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry46" then Some (TLBEntry46_ref.(regval_of) (TLBEntry46_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry45" then Some (TLBEntry45_ref.(regval_of) (TLBEntry45_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry44" then Some (TLBEntry44_ref.(regval_of) (TLBEntry44_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry43" then Some (TLBEntry43_ref.(regval_of) (TLBEntry43_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry42" then Some (TLBEntry42_ref.(regval_of) (TLBEntry42_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry41" then Some (TLBEntry41_ref.(regval_of) (TLBEntry41_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry40" then Some (TLBEntry40_ref.(regval_of) (TLBEntry40_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry39" then Some (TLBEntry39_ref.(regval_of) (TLBEntry39_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry38" then Some (TLBEntry38_ref.(regval_of) (TLBEntry38_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry37" then Some (TLBEntry37_ref.(regval_of) (TLBEntry37_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry36" then Some (TLBEntry36_ref.(regval_of) (TLBEntry36_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry35" then Some (TLBEntry35_ref.(regval_of) (TLBEntry35_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry34" then Some (TLBEntry34_ref.(regval_of) (TLBEntry34_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry33" then Some (TLBEntry33_ref.(regval_of) (TLBEntry33_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry32" then Some (TLBEntry32_ref.(regval_of) (TLBEntry32_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry31" then Some (TLBEntry31_ref.(regval_of) (TLBEntry31_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry30" then Some (TLBEntry30_ref.(regval_of) (TLBEntry30_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry29" then Some (TLBEntry29_ref.(regval_of) (TLBEntry29_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry28" then Some (TLBEntry28_ref.(regval_of) (TLBEntry28_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry27" then Some (TLBEntry27_ref.(regval_of) (TLBEntry27_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry26" then Some (TLBEntry26_ref.(regval_of) (TLBEntry26_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry25" then Some (TLBEntry25_ref.(regval_of) (TLBEntry25_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry24" then Some (TLBEntry24_ref.(regval_of) (TLBEntry24_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry23" then Some (TLBEntry23_ref.(regval_of) (TLBEntry23_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry22" then Some (TLBEntry22_ref.(regval_of) (TLBEntry22_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry21" then Some (TLBEntry21_ref.(regval_of) (TLBEntry21_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry20" then Some (TLBEntry20_ref.(regval_of) (TLBEntry20_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry19" then Some (TLBEntry19_ref.(regval_of) (TLBEntry19_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry18" then Some (TLBEntry18_ref.(regval_of) (TLBEntry18_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry17" then Some (TLBEntry17_ref.(regval_of) (TLBEntry17_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry16" then Some (TLBEntry16_ref.(regval_of) (TLBEntry16_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry15" then Some (TLBEntry15_ref.(regval_of) (TLBEntry15_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry14" then Some (TLBEntry14_ref.(regval_of) (TLBEntry14_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry13" then Some (TLBEntry13_ref.(regval_of) (TLBEntry13_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry12" then Some (TLBEntry12_ref.(regval_of) (TLBEntry12_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry11" then Some (TLBEntry11_ref.(regval_of) (TLBEntry11_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry10" then Some (TLBEntry10_ref.(regval_of) (TLBEntry10_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry09" then Some (TLBEntry09_ref.(regval_of) (TLBEntry09_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry08" then Some (TLBEntry08_ref.(regval_of) (TLBEntry08_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry07" then Some (TLBEntry07_ref.(regval_of) (TLBEntry07_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry06" then Some (TLBEntry06_ref.(regval_of) (TLBEntry06_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry05" then Some (TLBEntry05_ref.(regval_of) (TLBEntry05_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry04" then Some (TLBEntry04_ref.(regval_of) (TLBEntry04_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry03" then Some (TLBEntry03_ref.(regval_of) (TLBEntry03_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry02" then Some (TLBEntry02_ref.(regval_of) (TLBEntry02_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry01" then Some (TLBEntry01_ref.(regval_of) (TLBEntry01_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry00" then Some (TLBEntry00_ref.(regval_of) (TLBEntry00_ref.(read_from) s)) else
+ if string_dec reg_name "TLBXContext" then Some (TLBXContext_ref.(regval_of) (TLBXContext_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntryHi" then Some (TLBEntryHi_ref.(regval_of) (TLBEntryHi_ref.(read_from) s)) else
+ if string_dec reg_name "TLBWired" then Some (TLBWired_ref.(regval_of) (TLBWired_ref.(read_from) s)) else
+ if string_dec reg_name "TLBPageMask" then Some (TLBPageMask_ref.(regval_of) (TLBPageMask_ref.(read_from) s)) else
+ if string_dec reg_name "TLBContext" then Some (TLBContext_ref.(regval_of) (TLBContext_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntryLo1" then Some (TLBEntryLo1_ref.(regval_of) (TLBEntryLo1_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntryLo0" then Some (TLBEntryLo0_ref.(regval_of) (TLBEntryLo0_ref.(read_from) s)) else
+ if string_dec reg_name "TLBRandom" then Some (TLBRandom_ref.(regval_of) (TLBRandom_ref.(read_from) s)) else
+ if string_dec reg_name "TLBIndex" then Some (TLBIndex_ref.(regval_of) (TLBIndex_ref.(read_from) s)) else
+ if string_dec reg_name "TLBProbe" then Some (TLBProbe_ref.(regval_of) (TLBProbe_ref.(read_from) s)) else
+ if string_dec reg_name "NextPC" then Some (NextPC_ref.(regval_of) (NextPC_ref.(read_from) s)) else
+ if string_dec reg_name "PC" then Some (PC_ref.(regval_of) (PC_ref.(read_from) s)) else
+ None.
+
+Definition set_regval (reg_name : string) (v : register_value) (s : regstate) : option regstate :=
+ if string_dec reg_name "CID" then option_map (fun v => CID_ref.(write_to) v s) (CID_ref.(of_regval) v) else
+ if string_dec reg_name "CapCause" then option_map (fun v => CapCause_ref.(write_to) v s) (CapCause_ref.(of_regval) v) else
+ if string_dec reg_name "KDC" then option_map (fun v => KDC_ref.(write_to) v s) (KDC_ref.(of_regval) v) else
+ if string_dec reg_name "KR2C" then option_map (fun v => KR2C_ref.(write_to) v s) (KR2C_ref.(of_regval) v) else
+ if string_dec reg_name "KR1C" then option_map (fun v => KR1C_ref.(write_to) v s) (KR1C_ref.(of_regval) v) else
+ if string_dec reg_name "CTLSP" then option_map (fun v => CTLSP_ref.(write_to) v s) (CTLSP_ref.(of_regval) v) else
+ if string_dec reg_name "CTLSU" then option_map (fun v => CTLSU_ref.(write_to) v s) (CTLSU_ref.(of_regval) v) else
+ if string_dec reg_name "C31" then option_map (fun v => C31_ref.(write_to) v s) (C31_ref.(of_regval) v) else
+ if string_dec reg_name "C30" then option_map (fun v => C30_ref.(write_to) v s) (C30_ref.(of_regval) v) else
+ if string_dec reg_name "C29" then option_map (fun v => C29_ref.(write_to) v s) (C29_ref.(of_regval) v) else
+ if string_dec reg_name "C28" then option_map (fun v => C28_ref.(write_to) v s) (C28_ref.(of_regval) v) else
+ if string_dec reg_name "C27" then option_map (fun v => C27_ref.(write_to) v s) (C27_ref.(of_regval) v) else
+ if string_dec reg_name "C26" then option_map (fun v => C26_ref.(write_to) v s) (C26_ref.(of_regval) v) else
+ if string_dec reg_name "C25" then option_map (fun v => C25_ref.(write_to) v s) (C25_ref.(of_regval) v) else
+ if string_dec reg_name "C24" then option_map (fun v => C24_ref.(write_to) v s) (C24_ref.(of_regval) v) else
+ if string_dec reg_name "C23" then option_map (fun v => C23_ref.(write_to) v s) (C23_ref.(of_regval) v) else
+ if string_dec reg_name "C22" then option_map (fun v => C22_ref.(write_to) v s) (C22_ref.(of_regval) v) else
+ if string_dec reg_name "C21" then option_map (fun v => C21_ref.(write_to) v s) (C21_ref.(of_regval) v) else
+ if string_dec reg_name "C20" then option_map (fun v => C20_ref.(write_to) v s) (C20_ref.(of_regval) v) else
+ if string_dec reg_name "C19" then option_map (fun v => C19_ref.(write_to) v s) (C19_ref.(of_regval) v) else
+ if string_dec reg_name "C18" then option_map (fun v => C18_ref.(write_to) v s) (C18_ref.(of_regval) v) else
+ if string_dec reg_name "C17" then option_map (fun v => C17_ref.(write_to) v s) (C17_ref.(of_regval) v) else
+ if string_dec reg_name "C16" then option_map (fun v => C16_ref.(write_to) v s) (C16_ref.(of_regval) v) else
+ if string_dec reg_name "C15" then option_map (fun v => C15_ref.(write_to) v s) (C15_ref.(of_regval) v) else
+ if string_dec reg_name "C14" then option_map (fun v => C14_ref.(write_to) v s) (C14_ref.(of_regval) v) else
+ if string_dec reg_name "C13" then option_map (fun v => C13_ref.(write_to) v s) (C13_ref.(of_regval) v) else
+ if string_dec reg_name "C12" then option_map (fun v => C12_ref.(write_to) v s) (C12_ref.(of_regval) v) else
+ if string_dec reg_name "C11" then option_map (fun v => C11_ref.(write_to) v s) (C11_ref.(of_regval) v) else
+ if string_dec reg_name "C10" then option_map (fun v => C10_ref.(write_to) v s) (C10_ref.(of_regval) v) else
+ if string_dec reg_name "C09" then option_map (fun v => C09_ref.(write_to) v s) (C09_ref.(of_regval) v) else
+ if string_dec reg_name "C08" then option_map (fun v => C08_ref.(write_to) v s) (C08_ref.(of_regval) v) else
+ if string_dec reg_name "C07" then option_map (fun v => C07_ref.(write_to) v s) (C07_ref.(of_regval) v) else
+ if string_dec reg_name "C06" then option_map (fun v => C06_ref.(write_to) v s) (C06_ref.(of_regval) v) else
+ if string_dec reg_name "C05" then option_map (fun v => C05_ref.(write_to) v s) (C05_ref.(of_regval) v) else
+ if string_dec reg_name "C04" then option_map (fun v => C04_ref.(write_to) v s) (C04_ref.(of_regval) v) else
+ if string_dec reg_name "C03" then option_map (fun v => C03_ref.(write_to) v s) (C03_ref.(of_regval) v) else
+ if string_dec reg_name "C02" then option_map (fun v => C02_ref.(write_to) v s) (C02_ref.(of_regval) v) else
+ if string_dec reg_name "C01" then option_map (fun v => C01_ref.(write_to) v s) (C01_ref.(of_regval) v) else
+ if string_dec reg_name "DDC" then option_map (fun v => DDC_ref.(write_to) v s) (DDC_ref.(of_regval) v) else
+ if string_dec reg_name "NextPCC" then option_map (fun v => NextPCC_ref.(write_to) v s) (NextPCC_ref.(of_regval) v) else
+ if string_dec reg_name "DelayedPCC" then option_map (fun v => DelayedPCC_ref.(write_to) v s) (DelayedPCC_ref.(of_regval) v) else
+ if string_dec reg_name "PCC" then option_map (fun v => PCC_ref.(write_to) v s) (PCC_ref.(of_regval) v) else
+ if string_dec reg_name "KCC" then option_map (fun v => KCC_ref.(write_to) v s) (KCC_ref.(of_regval) v) else
+ if string_dec reg_name "EPCC" then option_map (fun v => EPCC_ref.(write_to) v s) (EPCC_ref.(of_regval) v) else
+ if string_dec reg_name "UART_RVALID" then option_map (fun v => UART_RVALID_ref.(write_to) v s) (UART_RVALID_ref.(of_regval) v) else
+ if string_dec reg_name "UART_RDATA" then option_map (fun v => UART_RDATA_ref.(write_to) v s) (UART_RDATA_ref.(of_regval) v) else
+ if string_dec reg_name "UART_WRITTEN" then option_map (fun v => UART_WRITTEN_ref.(write_to) v s) (UART_WRITTEN_ref.(of_regval) v) else
+ if string_dec reg_name "UART_WDATA" then option_map (fun v => UART_WDATA_ref.(write_to) v s) (UART_WDATA_ref.(of_regval) v) else
+ if string_dec reg_name "GPR" then option_map (fun v => GPR_ref.(write_to) v s) (GPR_ref.(of_regval) v) else
+ if string_dec reg_name "LO" then option_map (fun v => LO_ref.(write_to) v s) (LO_ref.(of_regval) v) else
+ if string_dec reg_name "HI" then option_map (fun v => HI_ref.(write_to) v s) (HI_ref.(of_regval) v) else
+ if string_dec reg_name "DelayedPC" then option_map (fun v => DelayedPC_ref.(write_to) v s) (DelayedPC_ref.(of_regval) v) else
+ if string_dec reg_name "BranchPending" then option_map (fun v => BranchPending_ref.(write_to) v s) (BranchPending_ref.(of_regval) v) else
+ if string_dec reg_name "InBranchDelay" then option_map (fun v => InBranchDelay_ref.(write_to) v s) (InBranchDelay_ref.(of_regval) v) else
+ if string_dec reg_name "NextInBranchDelay" then option_map (fun v => NextInBranchDelay_ref.(write_to) v s) (NextInBranchDelay_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Status" then option_map (fun v => CP0Status_ref.(write_to) v s) (CP0Status_ref.(of_regval) v) else
+ if string_dec reg_name "CP0ConfigK0" then option_map (fun v => CP0ConfigK0_ref.(write_to) v s) (CP0ConfigK0_ref.(of_regval) v) else
+ if string_dec reg_name "CP0UserLocal" then option_map (fun v => CP0UserLocal_ref.(write_to) v s) (CP0UserLocal_ref.(of_regval) v) else
+ if string_dec reg_name "CP0HWREna" then option_map (fun v => CP0HWREna_ref.(write_to) v s) (CP0HWREna_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Count" then option_map (fun v => CP0Count_ref.(write_to) v s) (CP0Count_ref.(of_regval) v) else
+ if string_dec reg_name "CP0BadInstrP" then option_map (fun v => CP0BadInstrP_ref.(write_to) v s) (CP0BadInstrP_ref.(of_regval) v) else
+ if string_dec reg_name "CP0BadInstr" then option_map (fun v => CP0BadInstr_ref.(write_to) v s) (CP0BadInstr_ref.(of_regval) v) else
+ if string_dec reg_name "LastInstrBits" then option_map (fun v => LastInstrBits_ref.(write_to) v s) (LastInstrBits_ref.(of_regval) v) else
+ if string_dec reg_name "CurrentInstrBits" then option_map (fun v => CurrentInstrBits_ref.(write_to) v s) (CurrentInstrBits_ref.(of_regval) v) else
+ if string_dec reg_name "CP0BadVAddr" then option_map (fun v => CP0BadVAddr_ref.(write_to) v s) (CP0BadVAddr_ref.(of_regval) v) else
+ if string_dec reg_name "CP0LLAddr" then option_map (fun v => CP0LLAddr_ref.(write_to) v s) (CP0LLAddr_ref.(of_regval) v) else
+ if string_dec reg_name "CP0LLBit" then option_map (fun v => CP0LLBit_ref.(write_to) v s) (CP0LLBit_ref.(of_regval) v) else
+ if string_dec reg_name "CP0ErrorEPC" then option_map (fun v => CP0ErrorEPC_ref.(write_to) v s) (CP0ErrorEPC_ref.(of_regval) v) else
+ if string_dec reg_name "CP0EPC" then option_map (fun v => CP0EPC_ref.(write_to) v s) (CP0EPC_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Cause" then option_map (fun v => CP0Cause_ref.(write_to) v s) (CP0Cause_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Compare" then option_map (fun v => CP0Compare_ref.(write_to) v s) (CP0Compare_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry63" then option_map (fun v => TLBEntry63_ref.(write_to) v s) (TLBEntry63_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry62" then option_map (fun v => TLBEntry62_ref.(write_to) v s) (TLBEntry62_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry61" then option_map (fun v => TLBEntry61_ref.(write_to) v s) (TLBEntry61_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry60" then option_map (fun v => TLBEntry60_ref.(write_to) v s) (TLBEntry60_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry59" then option_map (fun v => TLBEntry59_ref.(write_to) v s) (TLBEntry59_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry58" then option_map (fun v => TLBEntry58_ref.(write_to) v s) (TLBEntry58_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry57" then option_map (fun v => TLBEntry57_ref.(write_to) v s) (TLBEntry57_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry56" then option_map (fun v => TLBEntry56_ref.(write_to) v s) (TLBEntry56_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry55" then option_map (fun v => TLBEntry55_ref.(write_to) v s) (TLBEntry55_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry54" then option_map (fun v => TLBEntry54_ref.(write_to) v s) (TLBEntry54_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry53" then option_map (fun v => TLBEntry53_ref.(write_to) v s) (TLBEntry53_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry52" then option_map (fun v => TLBEntry52_ref.(write_to) v s) (TLBEntry52_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry51" then option_map (fun v => TLBEntry51_ref.(write_to) v s) (TLBEntry51_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry50" then option_map (fun v => TLBEntry50_ref.(write_to) v s) (TLBEntry50_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry49" then option_map (fun v => TLBEntry49_ref.(write_to) v s) (TLBEntry49_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry48" then option_map (fun v => TLBEntry48_ref.(write_to) v s) (TLBEntry48_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry47" then option_map (fun v => TLBEntry47_ref.(write_to) v s) (TLBEntry47_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry46" then option_map (fun v => TLBEntry46_ref.(write_to) v s) (TLBEntry46_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry45" then option_map (fun v => TLBEntry45_ref.(write_to) v s) (TLBEntry45_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry44" then option_map (fun v => TLBEntry44_ref.(write_to) v s) (TLBEntry44_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry43" then option_map (fun v => TLBEntry43_ref.(write_to) v s) (TLBEntry43_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry42" then option_map (fun v => TLBEntry42_ref.(write_to) v s) (TLBEntry42_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry41" then option_map (fun v => TLBEntry41_ref.(write_to) v s) (TLBEntry41_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry40" then option_map (fun v => TLBEntry40_ref.(write_to) v s) (TLBEntry40_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry39" then option_map (fun v => TLBEntry39_ref.(write_to) v s) (TLBEntry39_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry38" then option_map (fun v => TLBEntry38_ref.(write_to) v s) (TLBEntry38_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry37" then option_map (fun v => TLBEntry37_ref.(write_to) v s) (TLBEntry37_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry36" then option_map (fun v => TLBEntry36_ref.(write_to) v s) (TLBEntry36_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry35" then option_map (fun v => TLBEntry35_ref.(write_to) v s) (TLBEntry35_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry34" then option_map (fun v => TLBEntry34_ref.(write_to) v s) (TLBEntry34_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry33" then option_map (fun v => TLBEntry33_ref.(write_to) v s) (TLBEntry33_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry32" then option_map (fun v => TLBEntry32_ref.(write_to) v s) (TLBEntry32_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry31" then option_map (fun v => TLBEntry31_ref.(write_to) v s) (TLBEntry31_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry30" then option_map (fun v => TLBEntry30_ref.(write_to) v s) (TLBEntry30_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry29" then option_map (fun v => TLBEntry29_ref.(write_to) v s) (TLBEntry29_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry28" then option_map (fun v => TLBEntry28_ref.(write_to) v s) (TLBEntry28_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry27" then option_map (fun v => TLBEntry27_ref.(write_to) v s) (TLBEntry27_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry26" then option_map (fun v => TLBEntry26_ref.(write_to) v s) (TLBEntry26_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry25" then option_map (fun v => TLBEntry25_ref.(write_to) v s) (TLBEntry25_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry24" then option_map (fun v => TLBEntry24_ref.(write_to) v s) (TLBEntry24_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry23" then option_map (fun v => TLBEntry23_ref.(write_to) v s) (TLBEntry23_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry22" then option_map (fun v => TLBEntry22_ref.(write_to) v s) (TLBEntry22_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry21" then option_map (fun v => TLBEntry21_ref.(write_to) v s) (TLBEntry21_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry20" then option_map (fun v => TLBEntry20_ref.(write_to) v s) (TLBEntry20_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry19" then option_map (fun v => TLBEntry19_ref.(write_to) v s) (TLBEntry19_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry18" then option_map (fun v => TLBEntry18_ref.(write_to) v s) (TLBEntry18_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry17" then option_map (fun v => TLBEntry17_ref.(write_to) v s) (TLBEntry17_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry16" then option_map (fun v => TLBEntry16_ref.(write_to) v s) (TLBEntry16_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry15" then option_map (fun v => TLBEntry15_ref.(write_to) v s) (TLBEntry15_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry14" then option_map (fun v => TLBEntry14_ref.(write_to) v s) (TLBEntry14_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry13" then option_map (fun v => TLBEntry13_ref.(write_to) v s) (TLBEntry13_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry12" then option_map (fun v => TLBEntry12_ref.(write_to) v s) (TLBEntry12_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry11" then option_map (fun v => TLBEntry11_ref.(write_to) v s) (TLBEntry11_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry10" then option_map (fun v => TLBEntry10_ref.(write_to) v s) (TLBEntry10_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry09" then option_map (fun v => TLBEntry09_ref.(write_to) v s) (TLBEntry09_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry08" then option_map (fun v => TLBEntry08_ref.(write_to) v s) (TLBEntry08_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry07" then option_map (fun v => TLBEntry07_ref.(write_to) v s) (TLBEntry07_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry06" then option_map (fun v => TLBEntry06_ref.(write_to) v s) (TLBEntry06_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry05" then option_map (fun v => TLBEntry05_ref.(write_to) v s) (TLBEntry05_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry04" then option_map (fun v => TLBEntry04_ref.(write_to) v s) (TLBEntry04_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry03" then option_map (fun v => TLBEntry03_ref.(write_to) v s) (TLBEntry03_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry02" then option_map (fun v => TLBEntry02_ref.(write_to) v s) (TLBEntry02_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry01" then option_map (fun v => TLBEntry01_ref.(write_to) v s) (TLBEntry01_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry00" then option_map (fun v => TLBEntry00_ref.(write_to) v s) (TLBEntry00_ref.(of_regval) v) else
+ if string_dec reg_name "TLBXContext" then option_map (fun v => TLBXContext_ref.(write_to) v s) (TLBXContext_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntryHi" then option_map (fun v => TLBEntryHi_ref.(write_to) v s) (TLBEntryHi_ref.(of_regval) v) else
+ if string_dec reg_name "TLBWired" then option_map (fun v => TLBWired_ref.(write_to) v s) (TLBWired_ref.(of_regval) v) else
+ if string_dec reg_name "TLBPageMask" then option_map (fun v => TLBPageMask_ref.(write_to) v s) (TLBPageMask_ref.(of_regval) v) else
+ if string_dec reg_name "TLBContext" then option_map (fun v => TLBContext_ref.(write_to) v s) (TLBContext_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntryLo1" then option_map (fun v => TLBEntryLo1_ref.(write_to) v s) (TLBEntryLo1_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntryLo0" then option_map (fun v => TLBEntryLo0_ref.(write_to) v s) (TLBEntryLo0_ref.(of_regval) v) else
+ if string_dec reg_name "TLBRandom" then option_map (fun v => TLBRandom_ref.(write_to) v s) (TLBRandom_ref.(of_regval) v) else
+ if string_dec reg_name "TLBIndex" then option_map (fun v => TLBIndex_ref.(write_to) v s) (TLBIndex_ref.(of_regval) v) else
+ if string_dec reg_name "TLBProbe" then option_map (fun v => TLBProbe_ref.(write_to) v s) (TLBProbe_ref.(of_regval) v) else
+ if string_dec reg_name "NextPC" then option_map (fun v => NextPC_ref.(write_to) v s) (NextPC_ref.(of_regval) v) else
+ if string_dec reg_name "PC" then option_map (fun v => PC_ref.(write_to) v s) (PC_ref.(of_regval) v) else
+ None.
+
+Definition register_accessors := (get_regval, set_regval).
+
+
+Definition MR a r := monadR register_value a r exception.
+Definition M a := monad register_value a exception.
diff --git a/snapshots/coq/mips/mips.v b/snapshots/coq/cheri-mips/mips.v
index 8d43a6e2..dd3c206d 100644
--- a/snapshots/coq/mips/mips.v
+++ b/snapshots/coq/cheri-mips/mips.v
@@ -1,6 +1,8 @@
(*Generated by Sail from mips.*)
Require Import Sail2_instr_kinds.
Require Import Sail2_values.
+Require Import Sail2_string.
+Require Import Sail2_real.
Require Import Sail2_operators_mwords.
Require Import Sail2_prompt_monad.
Require Import Sail2_prompt.
@@ -9,153 +11,184 @@ Require Import mips_types.
Require Import mips_extras.
Import ListNotations.
Open Scope string.
+Open Scope bool.
Section Content.
-Definition neq_atom (x : Z) (y : Z) `{ArithFact (x = x)} `{ArithFact (y = y)}
-: bool :=
- negb (Z.eqb x y).
-
-Definition neq_range {n : Z} {m : Z} {o : Z} {p : Z} '((existT _ x _) : {rangevar : Z & ArithFact (n <=
- rangevar /\
- rangevar <= m)}) '((existT _ y _) : {rangevar : Z & ArithFact (o <= rangevar /\ rangevar <= p)})
-: bool :=
- negb (eq_range (build_ex x) (build_ex y)).
+Definition trace : bool := false.
+Hint Unfold trace : sail.
+Definition eq_unit (g__17 : unit) (g__18 : unit) : bool := true.
-Definition neq_int (x : Z) (y : Z) : bool := negb (Z.eqb x y).
+Definition neq_int (x : Z) (y : Z) : bool := negb (Z.eqb x y).
-Definition neq_bool (x : bool) (y : bool) : bool := negb (Bool.eqb x y).
+Definition neq_bool (x : bool) (y : bool) : bool := negb (Bool.eqb x y).
Definition undefined_option {a : Type} (typ_a : a)
: M (option a) :=
- undefined_unit tt >>= fun u_0 =>
+
+ (undefined_unit tt) >>= fun u_0 : unit =>
let u_1 : a := typ_a in
- (internal_pick [Some u_1;None])
+ (internal_pick [Some (u_1);None])
: M (option a).
Definition is_none {a : Type} (opt : option a)
: bool :=
+
match opt with | Some (_) => false | None => true end.
Definition is_some {a : Type} (opt : option a)
: bool :=
+
match opt with | Some (_) => true | None => false end.
-Definition sail_mask {v0 : Z} (len : Z) (v : mword v0) `{ArithFact (len >= 0 /\ v0 >= 0)} `{ArithFact (len =
- len)}
+Definition sail_mask {v0 : Z} (len : Z) (v : mword v0) `{ArithFact (len >= 0 /\ v0 >= 0)}
: mword len :=
+
if sumbool_of_bool ((Z.leb len (length_mword v))) then vector_truncate v len
else zero_extend v len.
-Definition neq_vec {n : Z} (x : mword n) (y : mword n) : bool := negb (eq_vec x y).
+Definition neq_vec {n : Z} (x : mword n) (y : mword n) : bool := negb (eq_vec x y).
Definition cast_unit_vec (b : bitU)
: mword 1 :=
+
match b with | B0 => (vec_of_bits [B0] : mword 1) | _ => (vec_of_bits [B1] : mword 1) end.
-Definition __MIPS_write (addr : mword 64) (width : Z) (data : mword (8 * width)) `{ArithFact (width =
- width)}
+Definition __MIPS_write (addr : mword 64) (width : Z) (data : mword (8 * width))
: M (unit) :=
+
(write_ram 64 width
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
- : mword 64) addr data)
- : M (unit).
+ : mword 64) addr data) >>
+ returnm (tt
+ : unit).
-Definition __MIPS_read (addr : mword 64) (width : Z) `{ArithFact (width >= 0)} `{ArithFact (width =
- width)}
+Definition __MIPS_read (addr : mword 64) (width : Z) `{ArithFact (width >= 0)}
: M (mword (8 * width)) :=
- (autocast_m (read_ram 64 width
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0]
- : mword 64) addr))
+
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr)
: M (mword (8 * width)).
-Definition zopz0zQzQ {n0 : Z} (bs : mword n0) (n : Z) `{ArithFact (n >= 0)} `{ArithFact (n = n)}
+Definition zopz0zQzQ {n0 : Z} (bs : mword n0) (n : Z) `{ArithFact (n >= 0)}
: mword (n0 * n) :=
+
replicate_bits bs n.
Definition undefined_exception '(tt : unit)
: M (exception) :=
- undefined_string tt >>= fun u_0 =>
- undefined_unit tt >>= fun u_1 =>
+
+ (undefined_string tt) >>= fun u_0 : string =>
+ (undefined_unit tt) >>= fun u_1 : unit =>
(internal_pick
- [ISAException u_1;Error_not_implemented u_0;Error_misaligned_access u_1;Error_EBREAK u_1;Error_internal_error u_1])
+ [ISAException
+ (u_1);Error_not_implemented
+ (u_0);Error_misaligned_access
+ (u_1);Error_EBREAK
+ (u_1);Error_internal_error
+ (u_1)])
: M (exception).
Definition mips_sign_extend {n : Z} (m__tv : Z) (v : mword n) `{ArithFact (m__tv >= n)}
: mword m__tv :=
+
sign_extend v m__tv.
Definition mips_zero_extend {n : Z} (m__tv : Z) (v : mword n) `{ArithFact (m__tv >= n)}
: mword m__tv :=
+
zero_extend v m__tv.
-Definition zeros (n__tv : Z) '(tt : unit) `{ArithFact (n__tv >= 0)}
+Axiom sign_extend : forall {n : Z} {m : Z} (_ : mword n) `{ArithFact (m >= n)}, mword m.
+
+Axiom zero_extend : forall {n : Z} {m : Z} (_ : mword n) `{ArithFact (m >= n)}, mword m.
+
+Definition zeros_implicit (n__tv : Z) '(tt : unit) `{ArithFact (n__tv >= 0)}
: mword n__tv :=
- autocast (replicate_bits (vec_of_bits [B0] : mword 1) n__tv).
-Arguments zeros _ _ {_}.
+
+ zeros n__tv.
+Arguments zeros_implicit _ _ {_}.
+
+Definition ones_n (n : Z) `{ArithFact (n >= 0)}
+: mword n :=
+
+ autocast (replicate_bits (vec_of_bits [B1] : mword 1) n).
-Definition ones (n__tv : Z) '(tt : unit) `{ArithFact (n__tv >= 0)}
+Definition ones_implicit (n__tv : Z) '(tt : unit) `{ArithFact (n__tv >= 0)}
: mword n__tv :=
- autocast (replicate_bits (vec_of_bits [B1] : mword 1) n__tv).
-Arguments ones _ _ {_}.
+
+ ones_n n__tv.
+Arguments ones_implicit _ _ {_}.
-Definition zopz0zI_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= 1)}
+Definition zopz0zI_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= (0 + 1))}
: bool :=
+
Z.ltb (projT1 (sint x)) (projT1 (sint y)).
-Definition zopz0zKzJ_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= 1)}
+Definition zopz0zKzJ_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= (0 + 1))}
: bool :=
+
Z.geb (projT1 (sint x)) (projT1 (sint y)).
Definition zopz0zI_u {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= 0)}
: bool :=
+
Z.ltb (projT1 (uint x)) (projT1 (uint y)).
Definition zopz0zKzJ_u {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= 0)}
: bool :=
+
Z.geb (projT1 (uint x)) (projT1 (uint y)).
Definition bool_to_bits (x : bool)
: mword 1 :=
+
if (x) then (vec_of_bits [B1] : mword 1)
else (vec_of_bits [B0] : mword 1).
-Definition bit_to_bool (b : bitU) : bool := match b with | B1 => true | _ => false end.
+Definition bool_to_bit (x : bool) : bitU := if (x) then B1 else B0.
-Definition bits_to_bool (x : mword 1) : bool := bit_to_bool (access_vec_dec x 0).
+Definition bit_to_bool (b : bitU) : bool := match b with | B1 => true | _ => false end.
-Definition to_bits (l : Z) (n : Z) `{ArithFact (l >= 0)} `{ArithFact (l = l)}
-: mword l :=
- get_slice_int l n 0.
+Definition bits_to_bool (x : mword 1) : bool := bit_to_bool (access_vec_dec x 0).
-Definition mask {m : Z} (n__tv : Z) (bs : mword m) `{ArithFact (m >= n__tv /\ n__tv >= 1)}
+Definition to_bits (l : Z) (n : Z) `{ArithFact (l >= 0)} : mword l := get_slice_int l n 0.
+
+Definition mask {m : Z} (n__tv : Z) (bs : mword m) `{ArithFact (m >= n__tv /\ n__tv >= (0 + 1))}
: mword n__tv :=
+
autocast (subrange_vec_dec bs (Z.sub n__tv 1) 0).
Definition undefined_CauseReg '(tt : unit)
: M (CauseReg) :=
- undefined_bitvector 32 >>= fun w__0 =>
+
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
returnm (({| CauseReg_CauseReg_chunk_0 := w__0 |})
: CauseReg).
Definition Mk_CauseReg (v : mword 32)
: CauseReg :=
+
{| CauseReg_CauseReg_chunk_0 := (subrange_vec_dec v 31 0) |}.
Definition _get_CauseReg_bits (v : CauseReg)
: mword 32 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 0.
-Definition _set_CauseReg_bits (r_ref : register_ref regstate register_value CauseReg) (v : mword 32)
+Definition _set_CauseReg_bits (r_ref : register_ref regstate register_value CauseReg) (v : mword 32)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -166,17 +199,20 @@ Definition _set_CauseReg_bits (r_ref : register_ref regstate register_value Caus
Definition _update_CauseReg_bits (v : CauseReg) (x : mword 32)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 0 (subrange_vec_dec x 31 0)) ]}.
Definition _get_CauseReg_BD (v : CauseReg)
: mword 1 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 31.
Definition _set_CauseReg_BD (r_ref : register_ref regstate register_value CauseReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -187,17 +223,20 @@ Definition _set_CauseReg_BD (r_ref : register_ref regstate register_value CauseR
Definition _update_CauseReg_BD (v : CauseReg) (x : mword 1)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 31 31 (subrange_vec_dec x 0 0)) ]}.
Definition _get_CauseReg_CE (v : CauseReg)
: mword 2 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 29 28.
Definition _set_CauseReg_CE (r_ref : register_ref regstate register_value CauseReg) (v : mword 2)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -208,17 +247,20 @@ Definition _set_CauseReg_CE (r_ref : register_ref regstate register_value CauseR
Definition _update_CauseReg_CE (v : CauseReg) (x : mword 2)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 29 28 (subrange_vec_dec x 1 0)) ]}.
Definition _get_CauseReg_IV (v : CauseReg)
: mword 1 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 23 23.
Definition _set_CauseReg_IV (r_ref : register_ref regstate register_value CauseReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -229,17 +271,20 @@ Definition _set_CauseReg_IV (r_ref : register_ref regstate register_value CauseR
Definition _update_CauseReg_IV (v : CauseReg) (x : mword 1)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 23 23 (subrange_vec_dec x 0 0)) ]}.
Definition _get_CauseReg_WP (v : CauseReg)
: mword 1 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 22 22.
Definition _set_CauseReg_WP (r_ref : register_ref regstate register_value CauseReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -250,17 +295,20 @@ Definition _set_CauseReg_WP (r_ref : register_ref regstate register_value CauseR
Definition _update_CauseReg_WP (v : CauseReg) (x : mword 1)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 22 22 (subrange_vec_dec x 0 0)) ]}.
Definition _get_CauseReg_IP (v : CauseReg)
: mword 8 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 15 8.
Definition _set_CauseReg_IP (r_ref : register_ref regstate register_value CauseReg) (v : mword 8)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -271,17 +319,21 @@ Definition _set_CauseReg_IP (r_ref : register_ref regstate register_value CauseR
Definition _update_CauseReg_IP (v : CauseReg) (x : mword 8)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 15 8 (subrange_vec_dec x 7 0)) ]}.
Definition _get_CauseReg_ExcCode (v : CauseReg)
: mword 5 :=
+
subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 6 2.
-Definition _set_CauseReg_ExcCode (r_ref : register_ref regstate register_value CauseReg) (v : mword 5)
+Definition _set_CauseReg_ExcCode
+(r_ref : register_ref regstate register_value CauseReg) (v : mword 5)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
CauseReg_CauseReg_chunk_0 :=
@@ -292,27 +344,33 @@ Definition _set_CauseReg_ExcCode (r_ref : register_ref regstate register_value C
Definition _update_CauseReg_ExcCode (v : CauseReg) (x : mword 5)
: CauseReg :=
+
{[ v with
CauseReg_CauseReg_chunk_0 :=
(update_subrange_vec_dec v.(CauseReg_CauseReg_chunk_0) 6 2 (subrange_vec_dec x 4 0)) ]}.
Definition undefined_TLBEntryLoReg '(tt : unit)
: M (TLBEntryLoReg) :=
- undefined_bitvector 64 >>= fun w__0 =>
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
returnm (({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := w__0 |})
: TLBEntryLoReg).
Definition Mk_TLBEntryLoReg (v : mword 64)
: TLBEntryLoReg :=
+
{| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
Definition _get_TLBEntryLoReg_bits (v : TLBEntryLoReg)
: mword 64 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 0.
-Definition _set_TLBEntryLoReg_bits (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 64)
+Definition _set_TLBEntryLoReg_bits
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 64)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -324,6 +382,7 @@ Definition _set_TLBEntryLoReg_bits (r_ref : register_ref regstate register_value
Definition _update_TLBEntryLoReg_bits (v : TLBEntryLoReg) (x : mword 64)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 0
@@ -331,11 +390,14 @@ Definition _update_TLBEntryLoReg_bits (v : TLBEntryLoReg) (x : mword 64)
Definition _get_TLBEntryLoReg_CapS (v : TLBEntryLoReg)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 63.
-Definition _set_TLBEntryLoReg_CapS (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+Definition _set_TLBEntryLoReg_CapS
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -347,6 +409,7 @@ Definition _set_TLBEntryLoReg_CapS (r_ref : register_ref regstate register_value
Definition _update_TLBEntryLoReg_CapS (v : TLBEntryLoReg) (x : mword 1)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 63 63
@@ -354,11 +417,14 @@ Definition _update_TLBEntryLoReg_CapS (v : TLBEntryLoReg) (x : mword 1)
Definition _get_TLBEntryLoReg_CapL (v : TLBEntryLoReg)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 62 62.
-Definition _set_TLBEntryLoReg_CapL (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+Definition _set_TLBEntryLoReg_CapL
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -370,6 +436,7 @@ Definition _set_TLBEntryLoReg_CapL (r_ref : register_ref regstate register_value
Definition _update_TLBEntryLoReg_CapL (v : TLBEntryLoReg) (x : mword 1)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 62 62
@@ -377,11 +444,14 @@ Definition _update_TLBEntryLoReg_CapL (v : TLBEntryLoReg) (x : mword 1)
Definition _get_TLBEntryLoReg_PFN (v : TLBEntryLoReg)
: mword 24 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 29 6.
-Definition _set_TLBEntryLoReg_PFN (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 24)
+Definition _set_TLBEntryLoReg_PFN
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 24)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -393,6 +463,7 @@ Definition _set_TLBEntryLoReg_PFN (r_ref : register_ref regstate register_value
Definition _update_TLBEntryLoReg_PFN (v : TLBEntryLoReg) (x : mword 24)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 29 6
@@ -400,11 +471,14 @@ Definition _update_TLBEntryLoReg_PFN (v : TLBEntryLoReg) (x : mword 24)
Definition _get_TLBEntryLoReg_C (v : TLBEntryLoReg)
: mword 3 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 5 3.
-Definition _set_TLBEntryLoReg_C (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 3)
+Definition _set_TLBEntryLoReg_C
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 3)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -416,17 +490,21 @@ Definition _set_TLBEntryLoReg_C (r_ref : register_ref regstate register_value TL
Definition _update_TLBEntryLoReg_C (v : TLBEntryLoReg) (x : mword 3)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 5 3 (subrange_vec_dec x 2 0)) ]}.
Definition _get_TLBEntryLoReg_D (v : TLBEntryLoReg)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 2 2.
-Definition _set_TLBEntryLoReg_D (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+Definition _set_TLBEntryLoReg_D
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -438,17 +516,21 @@ Definition _set_TLBEntryLoReg_D (r_ref : register_ref regstate register_value TL
Definition _update_TLBEntryLoReg_D (v : TLBEntryLoReg) (x : mword 1)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntryLoReg_V (v : TLBEntryLoReg)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 1 1.
-Definition _set_TLBEntryLoReg_V (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+Definition _set_TLBEntryLoReg_V
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -460,17 +542,21 @@ Definition _set_TLBEntryLoReg_V (r_ref : register_ref regstate register_value TL
Definition _update_TLBEntryLoReg_V (v : TLBEntryLoReg) (x : mword 1)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntryLoReg_G (v : TLBEntryLoReg)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 0 0.
-Definition _set_TLBEntryLoReg_G (r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
+Definition _set_TLBEntryLoReg_G
+(r_ref : register_ref regstate register_value TLBEntryLoReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
@@ -482,27 +568,33 @@ Definition _set_TLBEntryLoReg_G (r_ref : register_ref regstate register_value TL
Definition _update_TLBEntryLoReg_G (v : TLBEntryLoReg) (x : mword 1)
: TLBEntryLoReg :=
+
{[ v with
TLBEntryLoReg_TLBEntryLoReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryLoReg_TLBEntryLoReg_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
Definition undefined_TLBEntryHiReg '(tt : unit)
: M (TLBEntryHiReg) :=
- undefined_bitvector 64 >>= fun w__0 =>
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
returnm (({| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := w__0 |})
: TLBEntryHiReg).
Definition Mk_TLBEntryHiReg (v : mword 64)
: TLBEntryHiReg :=
+
{| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
Definition _get_TLBEntryHiReg_bits (v : TLBEntryHiReg)
: mword 64 :=
+
subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 0.
-Definition _set_TLBEntryHiReg_bits (r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 64)
+Definition _set_TLBEntryHiReg_bits
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 64)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
@@ -514,6 +606,7 @@ Definition _set_TLBEntryHiReg_bits (r_ref : register_ref regstate register_value
Definition _update_TLBEntryHiReg_bits (v : TLBEntryHiReg) (x : mword 64)
: TLBEntryHiReg :=
+
{[ v with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 0
@@ -521,11 +614,14 @@ Definition _update_TLBEntryHiReg_bits (v : TLBEntryHiReg) (x : mword 64)
Definition _get_TLBEntryHiReg_R (v : TLBEntryHiReg)
: mword 2 :=
+
subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 62.
-Definition _set_TLBEntryHiReg_R (r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 2)
+Definition _set_TLBEntryHiReg_R
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 2)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
@@ -537,6 +633,7 @@ Definition _set_TLBEntryHiReg_R (r_ref : register_ref regstate register_value TL
Definition _update_TLBEntryHiReg_R (v : TLBEntryHiReg) (x : mword 2)
: TLBEntryHiReg :=
+
{[ v with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 63 62
@@ -544,11 +641,14 @@ Definition _update_TLBEntryHiReg_R (v : TLBEntryHiReg) (x : mword 2)
Definition _get_TLBEntryHiReg_VPN2 (v : TLBEntryHiReg)
: mword 27 :=
+
subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 39 13.
-Definition _set_TLBEntryHiReg_VPN2 (r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 27)
+Definition _set_TLBEntryHiReg_VPN2
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 27)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
@@ -560,6 +660,7 @@ Definition _set_TLBEntryHiReg_VPN2 (r_ref : register_ref regstate register_value
Definition _update_TLBEntryHiReg_VPN2 (v : TLBEntryHiReg) (x : mword 27)
: TLBEntryHiReg :=
+
{[ v with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 39 13
@@ -567,11 +668,14 @@ Definition _update_TLBEntryHiReg_VPN2 (v : TLBEntryHiReg) (x : mword 27)
Definition _get_TLBEntryHiReg_ASID (v : TLBEntryHiReg)
: mword 8 :=
+
subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 7 0.
-Definition _set_TLBEntryHiReg_ASID (r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 8)
+Definition _set_TLBEntryHiReg_ASID
+(r_ref : register_ref regstate register_value TLBEntryHiReg) (v : mword 8)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
@@ -583,27 +687,33 @@ Definition _set_TLBEntryHiReg_ASID (r_ref : register_ref regstate register_value
Definition _update_TLBEntryHiReg_ASID (v : TLBEntryHiReg) (x : mword 8)
: TLBEntryHiReg :=
+
{[ v with
TLBEntryHiReg_TLBEntryHiReg_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntryHiReg_TLBEntryHiReg_chunk_0) 7 0 (subrange_vec_dec x 7 0)) ]}.
Definition undefined_ContextReg '(tt : unit)
: M (ContextReg) :=
- undefined_bitvector 64 >>= fun w__0 =>
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
returnm (({| ContextReg_ContextReg_chunk_0 := w__0 |})
: ContextReg).
Definition Mk_ContextReg (v : mword 64)
: ContextReg :=
+
{| ContextReg_ContextReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
Definition _get_ContextReg_bits (v : ContextReg)
: mword 64 :=
+
subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 0.
-Definition _set_ContextReg_bits (r_ref : register_ref regstate register_value ContextReg) (v : mword 64)
+Definition _set_ContextReg_bits
+(r_ref : register_ref regstate register_value ContextReg) (v : mword 64)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
ContextReg_ContextReg_chunk_0 :=
@@ -614,17 +724,21 @@ Definition _set_ContextReg_bits (r_ref : register_ref regstate register_value Co
Definition _update_ContextReg_bits (v : ContextReg) (x : mword 64)
: ContextReg :=
+
{[ v with
ContextReg_ContextReg_chunk_0 :=
(update_subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
Definition _get_ContextReg_PTEBase (v : ContextReg)
: mword 41 :=
+
subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 23.
-Definition _set_ContextReg_PTEBase (r_ref : register_ref regstate register_value ContextReg) (v : mword 41)
+Definition _set_ContextReg_PTEBase
+(r_ref : register_ref regstate register_value ContextReg) (v : mword 41)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
ContextReg_ContextReg_chunk_0 :=
@@ -635,17 +749,21 @@ Definition _set_ContextReg_PTEBase (r_ref : register_ref regstate register_value
Definition _update_ContextReg_PTEBase (v : ContextReg) (x : mword 41)
: ContextReg :=
+
{[ v with
ContextReg_ContextReg_chunk_0 :=
(update_subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 63 23 (subrange_vec_dec x 40 0)) ]}.
Definition _get_ContextReg_BadVPN2 (v : ContextReg)
: mword 19 :=
+
subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 22 4.
-Definition _set_ContextReg_BadVPN2 (r_ref : register_ref regstate register_value ContextReg) (v : mword 19)
+Definition _set_ContextReg_BadVPN2
+(r_ref : register_ref regstate register_value ContextReg) (v : mword 19)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
ContextReg_ContextReg_chunk_0 :=
@@ -656,27 +774,33 @@ Definition _set_ContextReg_BadVPN2 (r_ref : register_ref regstate register_value
Definition _update_ContextReg_BadVPN2 (v : ContextReg) (x : mword 19)
: ContextReg :=
+
{[ v with
ContextReg_ContextReg_chunk_0 :=
(update_subrange_vec_dec v.(ContextReg_ContextReg_chunk_0) 22 4 (subrange_vec_dec x 18 0)) ]}.
Definition undefined_XContextReg '(tt : unit)
: M (XContextReg) :=
- undefined_bitvector 64 >>= fun w__0 =>
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
returnm (({| XContextReg_XContextReg_chunk_0 := w__0 |})
: XContextReg).
Definition Mk_XContextReg (v : mword 64)
: XContextReg :=
+
{| XContextReg_XContextReg_chunk_0 := (subrange_vec_dec v 63 0) |}.
Definition _get_XContextReg_bits (v : XContextReg)
: mword 64 :=
+
subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 0.
-Definition _set_XContextReg_bits (r_ref : register_ref regstate register_value XContextReg) (v : mword 64)
+Definition _set_XContextReg_bits
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 64)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
XContextReg_XContextReg_chunk_0 :=
@@ -687,17 +811,21 @@ Definition _set_XContextReg_bits (r_ref : register_ref regstate register_value X
Definition _update_XContextReg_bits (v : XContextReg) (x : mword 64)
: XContextReg :=
+
{[ v with
XContextReg_XContextReg_chunk_0 :=
(update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
Definition _get_XContextReg_XPTEBase (v : XContextReg)
: mword 31 :=
+
subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 33.
-Definition _set_XContextReg_XPTEBase (r_ref : register_ref regstate register_value XContextReg) (v : mword 31)
+Definition _set_XContextReg_XPTEBase
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 31)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
XContextReg_XContextReg_chunk_0 :=
@@ -709,17 +837,21 @@ Definition _set_XContextReg_XPTEBase (r_ref : register_ref regstate register_val
Definition _update_XContextReg_XPTEBase (v : XContextReg) (x : mword 31)
: XContextReg :=
+
{[ v with
XContextReg_XContextReg_chunk_0 :=
(update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 63 33 (subrange_vec_dec x 30 0)) ]}.
Definition _get_XContextReg_XR (v : XContextReg)
: mword 2 :=
+
subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 32 31.
-Definition _set_XContextReg_XR (r_ref : register_ref regstate register_value XContextReg) (v : mword 2)
+Definition _set_XContextReg_XR
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 2)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
XContextReg_XContextReg_chunk_0 :=
@@ -730,17 +862,21 @@ Definition _set_XContextReg_XR (r_ref : register_ref regstate register_value XCo
Definition _update_XContextReg_XR (v : XContextReg) (x : mword 2)
: XContextReg :=
+
{[ v with
XContextReg_XContextReg_chunk_0 :=
(update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 32 31 (subrange_vec_dec x 1 0)) ]}.
Definition _get_XContextReg_XBadVPN2 (v : XContextReg)
: mword 27 :=
+
subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 30 4.
-Definition _set_XContextReg_XBadVPN2 (r_ref : register_ref regstate register_value XContextReg) (v : mword 27)
+Definition _set_XContextReg_XBadVPN2
+(r_ref : register_ref regstate register_value XContextReg) (v : mword 27)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
XContextReg_XContextReg_chunk_0 :=
@@ -751,43 +887,52 @@ Definition _set_XContextReg_XBadVPN2 (r_ref : register_ref regstate register_val
Definition _update_XContextReg_XBadVPN2 (v : XContextReg) (x : mword 27)
: XContextReg :=
+
{[ v with
XContextReg_XContextReg_chunk_0 :=
(update_subrange_vec_dec v.(XContextReg_XContextReg_chunk_0) 30 4 (subrange_vec_dec x 26 0)) ]}.
Definition TLBNumEntries := 64.
-
+Hint Unfold TLBNumEntries : sail.
Definition TLBIndexMax : TLBIndexT := (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword 6).
-
-Definition MAX (n : Z) `{ArithFact (n = n)} : Z := Z.sub (pow2 n) 1.
-
-Definition MAX_U64 := MAX 64.
-
-Definition MAX_VA := MAX 40.
-
-Definition MAX_PA := MAX 36.
-
+Hint Unfold TLBIndexMax : sail.
+Definition MAX (n : Z) `{ArithFact (n >= 0)}
+: {_retval : Z & ArithFact (_retval = (2 ^ n - 1))} :=
+
+ build_ex(Z.sub (projT1 (pow2 n)) 1).
+
+Definition MAX_U64 := projT1 (MAX 64).
+Hint Unfold MAX_U64 : sail.
+Definition MAX_VA := projT1 (MAX 40).
+Hint Unfold MAX_VA : sail.
+Definition MAX_PA := projT1 (MAX 36).
+Hint Unfold MAX_PA : sail.
Definition undefined_TLBEntry '(tt : unit)
: M (TLBEntry) :=
- undefined_bitvector 53 >>= fun w__0 =>
- undefined_bitvector 64 >>= fun w__1 =>
+
+ (undefined_bitvector 53) >>= fun w__0 : mword 53 =>
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 =>
returnm (({| TLBEntry_TLBEntry_chunk_1 := w__0;
TLBEntry_TLBEntry_chunk_0 := w__1 |})
: TLBEntry).
Definition Mk_TLBEntry (v : mword 117)
: TLBEntry :=
+
{| TLBEntry_TLBEntry_chunk_1 := (subrange_vec_dec v 116 64);
TLBEntry_TLBEntry_chunk_0 := (subrange_vec_dec v 63 0) |}.
Definition _get_TLBEntry_bits (v : TLBEntry)
: mword 117 :=
+
concat_vec (subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 0)
(subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 0).
-Definition _set_TLBEntry_bits (r_ref : register_ref regstate register_value TLBEntry) (v : mword 117)
+Definition _set_TLBEntry_bits
+(r_ref : register_ref regstate register_value TLBEntry) (v : mword 117)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_1 :=
@@ -803,6 +948,7 @@ Definition _set_TLBEntry_bits (r_ref : register_ref regstate register_value TLBE
Definition _update_TLBEntry_bits (v : TLBEntry) (x : mword 117)
: TLBEntry :=
+
let v :=
{[ v with
TLBEntry_TLBEntry_chunk_1 :=
@@ -813,11 +959,14 @@ Definition _update_TLBEntry_bits (v : TLBEntry) (x : mword 117)
Definition _get_TLBEntry_pagemask (v : TLBEntry)
: mword 16 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 37.
-Definition _set_TLBEntry_pagemask (r_ref : register_ref regstate register_value TLBEntry) (v : mword 16)
+Definition _set_TLBEntry_pagemask
+(r_ref : register_ref regstate register_value TLBEntry) (v : mword 16)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_1 :=
@@ -828,17 +977,20 @@ Definition _set_TLBEntry_pagemask (r_ref : register_ref regstate register_value
Definition _update_TLBEntry_pagemask (v : TLBEntry) (x : mword 16)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_1 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 52 37 (subrange_vec_dec x 15 0)) ]}.
Definition _get_TLBEntry_r (v : TLBEntry)
: mword 2 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 36 35.
Definition _set_TLBEntry_r (r_ref : register_ref regstate register_value TLBEntry) (v : mword 2)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_1 :=
@@ -849,17 +1001,21 @@ Definition _set_TLBEntry_r (r_ref : register_ref regstate register_value TLBEntr
Definition _update_TLBEntry_r (v : TLBEntry) (x : mword 2)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_1 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 36 35 (subrange_vec_dec x 1 0)) ]}.
Definition _get_TLBEntry_vpn2 (v : TLBEntry)
: mword 27 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 34 8.
-Definition _set_TLBEntry_vpn2 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 27)
+Definition _set_TLBEntry_vpn2 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 27)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_1 :=
@@ -870,17 +1026,20 @@ Definition _set_TLBEntry_vpn2 (r_ref : register_ref regstate register_value TLBE
Definition _update_TLBEntry_vpn2 (v : TLBEntry) (x : mword 27)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_1 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 34 8 (subrange_vec_dec x 26 0)) ]}.
Definition _get_TLBEntry_asid (v : TLBEntry)
: mword 8 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 7 0.
Definition _set_TLBEntry_asid (r_ref : register_ref regstate register_value TLBEntry) (v : mword 8)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_1 :=
@@ -891,17 +1050,20 @@ Definition _set_TLBEntry_asid (r_ref : register_ref regstate register_value TLBE
Definition _update_TLBEntry_asid (v : TLBEntry) (x : mword 8)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_1 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_1) 7 0 (subrange_vec_dec x 7 0)) ]}.
Definition _get_TLBEntry_g (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 63.
Definition _set_TLBEntry_g (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -912,17 +1074,21 @@ Definition _set_TLBEntry_g (r_ref : register_ref regstate register_value TLBEntr
Definition _update_TLBEntry_g (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 63 63 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_valid (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 62 62.
-Definition _set_TLBEntry_valid (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+Definition _set_TLBEntry_valid (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -933,17 +1099,21 @@ Definition _set_TLBEntry_valid (r_ref : register_ref regstate register_value TLB
Definition _update_TLBEntry_valid (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 62 62 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_caps1 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 61 61.
-Definition _set_TLBEntry_caps1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+Definition _set_TLBEntry_caps1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -954,17 +1124,21 @@ Definition _set_TLBEntry_caps1 (r_ref : register_ref regstate register_value TLB
Definition _update_TLBEntry_caps1 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 61 61 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_capl1 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 60 60.
-Definition _set_TLBEntry_capl1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+Definition _set_TLBEntry_capl1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -975,17 +1149,21 @@ Definition _set_TLBEntry_capl1 (r_ref : register_ref regstate register_value TLB
Definition _update_TLBEntry_capl1 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 60 60 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_pfn1 (v : TLBEntry)
: mword 24 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 59 36.
-Definition _set_TLBEntry_pfn1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 24)
+Definition _set_TLBEntry_pfn1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 24)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -996,17 +1174,20 @@ Definition _set_TLBEntry_pfn1 (r_ref : register_ref regstate register_value TLBE
Definition _update_TLBEntry_pfn1 (v : TLBEntry) (x : mword 24)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 59 36 (subrange_vec_dec x 23 0)) ]}.
Definition _get_TLBEntry_c1 (v : TLBEntry)
: mword 3 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 35 33.
Definition _set_TLBEntry_c1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 3)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1017,17 +1198,20 @@ Definition _set_TLBEntry_c1 (r_ref : register_ref regstate register_value TLBEnt
Definition _update_TLBEntry_c1 (v : TLBEntry) (x : mword 3)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 35 33 (subrange_vec_dec x 2 0)) ]}.
Definition _get_TLBEntry_d1 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 32 32.
Definition _set_TLBEntry_d1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1038,17 +1222,20 @@ Definition _set_TLBEntry_d1 (r_ref : register_ref regstate register_value TLBEnt
Definition _update_TLBEntry_d1 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 32 32 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_v1 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 31 31.
Definition _set_TLBEntry_v1 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1059,17 +1246,21 @@ Definition _set_TLBEntry_v1 (r_ref : register_ref regstate register_value TLBEnt
Definition _update_TLBEntry_v1 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 31 31 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_caps0 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 30 30.
-Definition _set_TLBEntry_caps0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+Definition _set_TLBEntry_caps0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1080,17 +1271,21 @@ Definition _set_TLBEntry_caps0 (r_ref : register_ref regstate register_value TLB
Definition _update_TLBEntry_caps0 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 30 30 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_capl0 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 29 29.
-Definition _set_TLBEntry_capl0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+Definition _set_TLBEntry_capl0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1101,17 +1296,21 @@ Definition _set_TLBEntry_capl0 (r_ref : register_ref regstate register_value TLB
Definition _update_TLBEntry_capl0 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 29 29 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_pfn0 (v : TLBEntry)
: mword 24 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 28 5.
-Definition _set_TLBEntry_pfn0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 24)
+Definition _set_TLBEntry_pfn0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 24)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1122,17 +1321,20 @@ Definition _set_TLBEntry_pfn0 (r_ref : register_ref regstate register_value TLBE
Definition _update_TLBEntry_pfn0 (v : TLBEntry) (x : mword 24)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 28 5 (subrange_vec_dec x 23 0)) ]}.
Definition _get_TLBEntry_c0 (v : TLBEntry)
: mword 3 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 4 2.
Definition _set_TLBEntry_c0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 3)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1143,17 +1345,20 @@ Definition _set_TLBEntry_c0 (r_ref : register_ref regstate register_value TLBEnt
Definition _update_TLBEntry_c0 (v : TLBEntry) (x : mword 3)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 4 2 (subrange_vec_dec x 2 0)) ]}.
Definition _get_TLBEntry_d0 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 1 1.
Definition _set_TLBEntry_d0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1164,17 +1369,20 @@ Definition _set_TLBEntry_d0 (r_ref : register_ref regstate register_value TLBEnt
Definition _update_TLBEntry_d0 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
Definition _get_TLBEntry_v0 (v : TLBEntry)
: mword 1 :=
+
subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 0 0.
Definition _set_TLBEntry_v0 (r_ref : register_ref regstate register_value TLBEntry) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
TLBEntry_TLBEntry_chunk_0 :=
@@ -1185,6 +1393,7 @@ Definition _set_TLBEntry_v0 (r_ref : register_ref regstate register_value TLBEnt
Definition _update_TLBEntry_v0 (v : TLBEntry) (x : mword 1)
: TLBEntry :=
+
{[ v with
TLBEntry_TLBEntry_chunk_0 :=
(update_subrange_vec_dec v.(TLBEntry_TLBEntry_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
@@ -1194,24 +1403,29 @@ vec_of_list_len [TLBEntry63_ref;TLBEntry62_ref;TLBEntry61_ref;TLBEntry60_ref;TLB
TLBEntry42_ref;TLBEntry41_ref;TLBEntry40_ref;TLBEntry39_ref;TLBEntry38_ref;TLBEntry37_ref;TLBEntry36_ref;TLBEntry35_ref;TLBEntry34_ref;TLBEntry33_ref;TLBEntry32_ref;TLBEntry31_ref;TLBEntry30_ref;TLBEntry29_ref;TLBEntry28_ref;TLBEntry27_ref;TLBEntry26_ref;TLBEntry25_ref;TLBEntry24_ref;TLBEntry23_ref;TLBEntry22_ref;
TLBEntry21_ref;TLBEntry20_ref;TLBEntry19_ref;TLBEntry18_ref;TLBEntry17_ref;TLBEntry16_ref;TLBEntry15_ref;TLBEntry14_ref;TLBEntry13_ref;TLBEntry12_ref;TLBEntry11_ref;TLBEntry10_ref;TLBEntry09_ref;TLBEntry08_ref;TLBEntry07_ref;TLBEntry06_ref;TLBEntry05_ref;TLBEntry04_ref;TLBEntry03_ref;TLBEntry02_ref;TLBEntry01_ref;
TLBEntry00_ref].
-
+Hint Unfold TLBEntries : sail.
Definition undefined_StatusReg '(tt : unit)
: M (StatusReg) :=
- undefined_bitvector 32 >>= fun w__0 =>
+
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
returnm (({| StatusReg_StatusReg_chunk_0 := w__0 |})
: StatusReg).
Definition Mk_StatusReg (v : mword 32)
: StatusReg :=
+
{| StatusReg_StatusReg_chunk_0 := (subrange_vec_dec v 31 0) |}.
Definition _get_StatusReg_bits (v : StatusReg)
: mword 32 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 0.
-Definition _set_StatusReg_bits (r_ref : register_ref regstate register_value StatusReg) (v : mword 32)
+Definition _set_StatusReg_bits
+(r_ref : register_ref regstate register_value StatusReg) (v : mword 32)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1222,17 +1436,20 @@ Definition _set_StatusReg_bits (r_ref : register_ref regstate register_value Sta
Definition _update_StatusReg_bits (v : StatusReg) (x : mword 32)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 0 (subrange_vec_dec x 31 0)) ]}.
Definition _get_StatusReg_CU (v : StatusReg)
: mword 4 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 28.
Definition _set_StatusReg_CU (r_ref : register_ref regstate register_value StatusReg) (v : mword 4)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1243,17 +1460,21 @@ Definition _set_StatusReg_CU (r_ref : register_ref regstate register_value Statu
Definition _update_StatusReg_CU (v : StatusReg) (x : mword 4)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 31 28 (subrange_vec_dec x 3 0)) ]}.
Definition _get_StatusReg_BEV (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 22 22.
-Definition _set_StatusReg_BEV (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+Definition _set_StatusReg_BEV (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1264,17 +1485,20 @@ Definition _set_StatusReg_BEV (r_ref : register_ref regstate register_value Stat
Definition _update_StatusReg_BEV (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 22 22 (subrange_vec_dec x 0 0)) ]}.
Definition _get_StatusReg_IM (v : StatusReg)
: mword 8 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 15 8.
Definition _set_StatusReg_IM (r_ref : register_ref regstate register_value StatusReg) (v : mword 8)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1285,17 +1509,20 @@ Definition _set_StatusReg_IM (r_ref : register_ref regstate register_value Statu
Definition _update_StatusReg_IM (v : StatusReg) (x : mword 8)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 15 8 (subrange_vec_dec x 7 0)) ]}.
Definition _get_StatusReg_KX (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 7 7.
Definition _set_StatusReg_KX (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1306,17 +1533,20 @@ Definition _set_StatusReg_KX (r_ref : register_ref regstate register_value Statu
Definition _update_StatusReg_KX (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
Definition _get_StatusReg_SX (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 6 6.
Definition _set_StatusReg_SX (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1327,17 +1557,20 @@ Definition _set_StatusReg_SX (r_ref : register_ref regstate register_value Statu
Definition _update_StatusReg_SX (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 6 6 (subrange_vec_dec x 0 0)) ]}.
Definition _get_StatusReg_UX (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 5 5.
Definition _set_StatusReg_UX (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1348,17 +1581,21 @@ Definition _set_StatusReg_UX (r_ref : register_ref regstate register_value Statu
Definition _update_StatusReg_UX (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
Definition _get_StatusReg_KSU (v : StatusReg)
: mword 2 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 4 3.
-Definition _set_StatusReg_KSU (r_ref : register_ref regstate register_value StatusReg) (v : mword 2)
+Definition _set_StatusReg_KSU (r_ref : register_ref regstate register_value StatusReg) (v : mword 2)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1369,17 +1606,21 @@ Definition _set_StatusReg_KSU (r_ref : register_ref regstate register_value Stat
Definition _update_StatusReg_KSU (v : StatusReg) (x : mword 2)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 4 3 (subrange_vec_dec x 1 0)) ]}.
Definition _get_StatusReg_ERL (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 2 2.
-Definition _set_StatusReg_ERL (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+Definition _set_StatusReg_ERL (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1390,17 +1631,21 @@ Definition _set_StatusReg_ERL (r_ref : register_ref regstate register_value Stat
Definition _update_StatusReg_ERL (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
Definition _get_StatusReg_EXL (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 1 1.
-Definition _set_StatusReg_EXL (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+Definition _set_StatusReg_EXL (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
+
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1411,17 +1656,20 @@ Definition _set_StatusReg_EXL (r_ref : register_ref regstate register_value Stat
Definition _update_StatusReg_EXL (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
Definition _get_StatusReg_IE (v : StatusReg)
: mword 1 :=
+
subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 0 0.
Definition _set_StatusReg_IE (r_ref : register_ref regstate register_value StatusReg) (v : mword 1)
: M (unit) :=
- reg_deref r_ref >>= fun r =>
+
+ (reg_deref r_ref) >>= fun r =>
let r :=
{[ r with
StatusReg_StatusReg_chunk_0 :=
@@ -1432,24 +1680,28 @@ Definition _set_StatusReg_IE (r_ref : register_ref regstate register_value Statu
Definition _update_StatusReg_IE (v : StatusReg) (x : mword 1)
: StatusReg :=
+
{[ v with
StatusReg_StatusReg_chunk_0 :=
(update_subrange_vec_dec v.(StatusReg_StatusReg_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
-Definition execute_branch (pc : mword 64)
+Definition execute_branch_mips (pc : mword 64)
: M (unit) :=
- write_reg delayedPC_ref pc >>
- write_reg branchPending_ref (vec_of_bits [B1] : mword 1)
+
+ write_reg DelayedPC_ref pc >>
+ write_reg BranchPending_ref (vec_of_bits [B1] : mword 1) >>
+ write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1)
: M (unit).
Definition NotWordVal (word : mword 64)
: bool :=
- neq_vec (zopz0zQzQ ((cast_unit_vec (access_vec_dec word 31)) : mword 1) 32)
- (subrange_vec_dec word 63 32).
+
+ neq_vec (zopz0zQzQ (cast_unit_vec (access_vec_dec word 31)) 32) (subrange_vec_dec word 63 32).
Definition rGPR (idx : mword 5)
: M (mword 64) :=
- let '(existT _ i _) := uint idx in
+
+ let 'i := projT1 (uint idx) in
(if sumbool_of_bool ((Z.eqb i 0)) then
returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -1457,53 +1709,61 @@ Definition rGPR (idx : mword 5)
B0]
: mword 64)
: mword 64)
- else read_reg GPR_ref >>= fun w__0 => returnm ((vec_access_dec w__0 i) : mword 64))
+ else
+ read_reg GPR_ref >>= fun w__0 : vec (bits 64) 32 =>
+ returnm ((vec_access_dec w__0 i)
+ : mword 64))
: M (mword 64).
Definition wGPR (idx : mword 5) (v : mword 64)
: M (unit) :=
- let '(existT _ i _) := uint idx in
- (if ((neq_atom i 0)) then
- read_reg GPR_ref >>= fun w__0 => write_reg GPR_ref (vec_update_dec w__0 i v) : M (unit)
+
+ let 'i := projT1 (uint idx) in
+ (if ((neq_int i 0)) then
+ let '_ :=
+ (if (trace) then
+ let '_ := (prerr (string_of_int i)) : unit in
+ prerr_bits " <- " v
+ else tt)
+ : unit in
+ read_reg GPR_ref >>= fun w__0 : vec (bits 64) 32 =>
+ write_reg GPR_ref (vec_update_dec w__0 i v)
+ : M (unit)
else returnm (tt : unit))
: M (unit).
-Definition MEMr (addr : mword 64) (size : Z) `{ArithFact (size >= 0)} `{ArithFact (size = size)}
+Definition MEMr (addr : mword 64) (size : Z) `{ArithFact (size >= 0)}
: M (mword (8 * size)) :=
- (autocast_m (__MIPS_read addr size))
+
+ (__MIPS_read addr size)
: M (mword (8 * size)).
-Definition MEMr_reserve (addr : mword 64) (size : Z) `{ArithFact (size >= 0)} `{ArithFact (size =
- size)}
+Definition MEMr_reserve (addr : mword 64) (size : Z) `{ArithFact (size >= 0)}
: M (mword (8 * size)) :=
- (autocast_m (__MIPS_read addr size))
+
+ (__MIPS_read addr size)
: M (mword (8 * size)).
-Definition MEM_sync '(tt : unit) : M (unit) := (skip tt) : M (unit).
+Definition MEM_sync '(tt : unit) : M (unit) := (skip tt) : M (unit).
-Definition MEMea (addr : mword 64) (size : Z) `{ArithFact (size = size)}
-: M (unit) :=
- (skip tt)
- : M (unit).
+Definition MEMea (addr : mword 64) (size : Z) : M (unit) := (skip tt) : M (unit).
-Definition MEMea_conditional (addr : mword 64) (size : Z) `{ArithFact (size = size)}
-: M (unit) :=
- (skip tt)
- : M (unit).
+Definition MEMea_conditional (addr : mword 64) (size : Z) : M (unit) := (skip tt) : M (unit).
-Definition MEMval (addr : mword 64) (size : Z) (data : mword (8 * size)) `{ArithFact (size = size)}
+Definition MEMval (addr : mword 64) (size : Z) (data : mword (8 * size))
: M (unit) :=
+
(__MIPS_write addr size data)
: M (unit).
-Definition MEMval_conditional (addr : mword 64) (size : Z) (data : mword (8 * size)) `{ArithFact (size =
- size)}
+Definition MEMval_conditional (addr : mword 64) (size : Z) (data : mword (8 * size))
: M (bool) :=
- __MIPS_write addr size data >> returnm (true : bool).
+
+ (__MIPS_write addr size data) >> returnm (true : bool).
-Definition Exception_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 18)} `{ArithFact (arg_ =
- arg_)}
+Definition Exception_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 18)}
: Exception :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then Interrupt
else if sumbool_of_bool ((Z.eqb p0_ 1)) then TLBMod
@@ -1527,36 +1787,39 @@ Definition Exception_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 18)} `{
Definition num_of_Exception (arg_ : Exception)
: {e : Z & ArithFact (0 <= e /\ e <= 18)} :=
- match arg_ with
- | Interrupt => build_ex 0
- | TLBMod => build_ex 1
- | TLBL => build_ex 2
- | TLBS => build_ex 3
- | AdEL => build_ex 4
- | AdES => build_ex 5
- | Sys => build_ex 6
- | Bp => build_ex 7
- | ResI => build_ex 8
- | CpU => build_ex 9
- | Ov => build_ex 10
- | Tr => build_ex 11
- | C2E => build_ex 12
- | C2Trap => build_ex 13
- | XTLBRefillL => build_ex 14
- | XTLBRefillS => build_ex 15
- | XTLBInvL => build_ex 16
- | XTLBInvS => build_ex 17
- | MCheck => build_ex 18
- end.
+
+ build_ex(match arg_ with
+ | Interrupt => 0
+ | TLBMod => 1
+ | TLBL => 2
+ | TLBS => 3
+ | AdEL => 4
+ | AdES => 5
+ | Sys => 6
+ | Bp => 7
+ | ResI => 8
+ | CpU => 9
+ | Ov => 10
+ | Tr => 11
+ | C2E => 12
+ | C2Trap => 13
+ | XTLBRefillL => 14
+ | XTLBRefillS => 15
+ | XTLBInvL => 16
+ | XTLBInvS => 17
+ | MCheck => 18
+ end).
Definition undefined_Exception '(tt : unit)
: M (Exception) :=
+
(internal_pick
[Interrupt;TLBMod;TLBL;TLBS;AdEL;AdES;Sys;Bp;ResI;CpU;Ov;Tr;C2E;C2Trap;XTLBRefillL;XTLBRefillS;XTLBInvL;XTLBInvS;MCheck])
: M (Exception).
Definition ExceptionCode (ex : Exception)
: mword 5 :=
+
let x : bits 8 :=
match ex with
| Interrupt => (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)
@@ -1581,35 +1844,75 @@ Definition ExceptionCode (ex : Exception)
end in
subrange_vec_dec x 4 0.
+Definition string_of_exception (ex : Exception)
+: string :=
+
+ match ex with
+ | Interrupt => "Interrupt"
+ | TLBMod => "TLBMod"
+ | TLBL => "TLBL"
+ | TLBS => "TLBS"
+ | AdEL => "AdEL"
+ | AdES => "AdES"
+ | Sys => "Sys"
+ | Bp => "Bp "
+ | ResI => "ResI"
+ | CpU => "CpU"
+ | Ov => "Ov"
+ | Tr => "Tr"
+ | C2E => "C2E"
+ | C2Trap => "C2Trap"
+ | XTLBRefillL => "XTLBRefillL"
+ | XTLBRefillS => "XTLBRefillS"
+ | XTLBInvL => "XTLBInvL"
+ | XTLBInvS => "XTLBInvS"
+ | MCheck => "MCheck"
+ end.
+
Definition SignalExceptionMIPS {o : Type} (ex : Exception) (kccBase : mword 64)
: M (o) :=
- read_reg CP0Status_ref >>= fun w__0 =>
+
+ let '_ :=
+ (if (trace) then
+ let '_ := (prerr " EXCEPTION ") : unit in
+ prerr_endline (string_of_exception ex)
+ else tt)
+ : unit in
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
(if ((negb ((bits_to_bool (_get_StatusReg_EXL w__0)) : bool))) then
- (read_reg inBranchDelay_ref : M (mword 1)) >>= fun w__1 =>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
(if (((bit_to_bool (access_vec_dec w__1 0)) : bool)) then
- (read_reg PC_ref : M (mword 64)) >>= fun w__2 =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
write_reg CP0EPC_ref (sub_vec_int w__2 4) >>
(_set_CauseReg_BD CP0Cause_ref (vec_of_bits [B1] : mword 1))
: M (unit)
else
- (read_reg PC_ref : M (mword 64)) >>= fun w__3 =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : bits 64 =>
write_reg CP0EPC_ref w__3 >>
(_set_CauseReg_BD CP0Cause_ref (vec_of_bits [B0] : mword 1))
: M (unit))
: M (unit)
else returnm (tt : unit)) >>
- read_reg CP0Status_ref >>= fun w__4 =>
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__4 : bits 1 =>
+ (if (((bit_to_bool (access_vec_dec w__4 0)) : bool)) then
+ ((read_reg LastInstrBits_ref) : M (mword 32)) >>= fun w__5 : bits 32 =>
+ write_reg CP0BadInstrP_ref w__5
+ : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg CurrentInstrBits_ref) : M (mword 32)) >>= fun w__6 : bits 32 =>
+ write_reg CP0BadInstr_ref w__6 >>
+ read_reg CP0Status_ref >>= fun w__7 : StatusReg =>
let vectorOffset :=
- if (((bits_to_bool (_get_StatusReg_EXL w__4)) : bool)) then
+ if (((bits_to_bool (_get_StatusReg_EXL w__7)) : bool)) then
(vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
else if ((orb (generic_eq ex XTLBRefillL) (generic_eq ex XTLBRefillS))) then
(vec_of_bits [B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
else if ((generic_eq ex C2Trap)) then
(vec_of_bits [B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
else (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12) in
- read_reg CP0Status_ref >>= fun w__5 =>
+ read_reg CP0Status_ref >>= fun w__8 : StatusReg =>
let vectorBase : bits 64 :=
- if (((bits_to_bool (_get_StatusReg_BEV w__5)) : bool)) then
+ if (((bits_to_bool (_get_StatusReg_BEV w__8)) : bool)) then
(vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1;B1;B1;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -1621,14 +1924,16 @@ Definition SignalExceptionMIPS {o : Type} (ex : Exception) (kccBase : mword 64)
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64) in
- write_reg nextPC_ref (sub_vec (add_vec vectorBase (mips_sign_extend 64 vectorOffset)) kccBase) >>
- _set_CauseReg_ExcCode CP0Cause_ref (ExceptionCode ex) >>
- _set_StatusReg_EXL CP0Status_ref (vec_of_bits [B1] : mword 1) >>
- (throw (ISAException tt))
+ write_reg NextPC_ref (sub_vec (add_vec vectorBase (mips_sign_extend 64 vectorOffset)) kccBase) >>
+ (_set_CauseReg_ExcCode CP0Cause_ref (ExceptionCode ex)) >>
+ (_set_StatusReg_EXL CP0Status_ref (vec_of_bits [B1] : mword 1)) >>
+ (throw (ISAException
+ (tt)))
: M (o).
Definition SignalException {o : Type} (ex : Exception)
: M (o) :=
+
(SignalExceptionMIPS ex
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -1639,22 +1944,24 @@ Definition SignalException {o : Type} (ex : Exception)
Definition SignalExceptionBadAddr {o : Type} (ex : Exception) (badAddr : mword 64)
: M (o) :=
+
write_reg CP0BadVAddr_ref badAddr >> (SignalException ex) : M (o).
Definition SignalExceptionTLB {o : Type} (ex : Exception) (badAddr : mword 64)
: M (o) :=
+
write_reg CP0BadVAddr_ref badAddr >>
- _set_ContextReg_BadVPN2 TLBContext_ref (subrange_vec_dec badAddr 31 13) >>
- _set_XContextReg_XBadVPN2 TLBXContext_ref (subrange_vec_dec badAddr 39 13) >>
- _set_XContextReg_XR TLBXContext_ref (subrange_vec_dec badAddr 63 62) >>
- _set_TLBEntryHiReg_R TLBEntryHi_ref (subrange_vec_dec badAddr 63 62) >>
- _set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (subrange_vec_dec badAddr 39 13) >>
+ (_set_ContextReg_BadVPN2 TLBContext_ref (subrange_vec_dec badAddr 31 13)) >>
+ (_set_XContextReg_XBadVPN2 TLBXContext_ref (subrange_vec_dec badAddr 39 13)) >>
+ (_set_XContextReg_XR TLBXContext_ref (subrange_vec_dec badAddr 63 62)) >>
+ (_set_TLBEntryHiReg_R TLBEntryHi_ref (subrange_vec_dec badAddr 63 62)) >>
+ (_set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (subrange_vec_dec badAddr 39 13)) >>
(SignalException ex)
: M (o).
-Definition MemAccessType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)} `{ArithFact (arg_ =
- arg_)}
+Definition MemAccessType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
: MemAccessType :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then Instruction
else if sumbool_of_bool ((Z.eqb p0_ 1)) then LoadData
@@ -1662,20 +1969,18 @@ Definition MemAccessType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
Definition num_of_MemAccessType (arg_ : MemAccessType)
: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
- match arg_ with
- | Instruction => build_ex 0
- | LoadData => build_ex 1
- | StoreData => build_ex 2
- end.
+
+ build_ex(match arg_ with | Instruction => 0 | LoadData => 1 | StoreData => 2 end).
Definition undefined_MemAccessType '(tt : unit)
: M (MemAccessType) :=
+
(internal_pick [Instruction;LoadData;StoreData])
: M (MemAccessType).
-Definition AccessLevel_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)} `{ArithFact (arg_ =
- arg_)}
+Definition AccessLevel_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
: AccessLevel :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then User
else if sumbool_of_bool ((Z.eqb p0_ 1)) then Supervisor
@@ -1683,35 +1988,40 @@ Definition AccessLevel_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)} `
Definition num_of_AccessLevel (arg_ : AccessLevel)
: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
- match arg_ with | User => build_ex 0 | Supervisor => build_ex 1 | Kernel => build_ex 2 end.
+
+ build_ex(match arg_ with | User => 0 | Supervisor => 1 | Kernel => 2 end).
Definition undefined_AccessLevel '(tt : unit)
: M (AccessLevel) :=
+
(internal_pick [User;Supervisor;Kernel])
: M (AccessLevel).
Definition int_of_AccessLevel (level : AccessLevel)
-: Z :=
- match level with | User => 0 | Supervisor => 1 | Kernel => 2 end.
+: {n : Z & ArithFact (In n [0; 1; 2])} :=
+
+ build_ex(match level with | User => 0 | Supervisor => 1 | Kernel => 2 end).
Definition grantsAccess (currentLevel : AccessLevel) (requiredLevel : AccessLevel)
: bool :=
- Z.geb (int_of_AccessLevel currentLevel) (int_of_AccessLevel requiredLevel).
+
+ Z.geb (projT1 (int_of_AccessLevel currentLevel)) (projT1 (int_of_AccessLevel requiredLevel)).
Definition getAccessLevel '(tt : unit)
: M (AccessLevel) :=
- or_boolM
- (read_reg CP0Status_ref >>= fun w__0 =>
- returnm ((bits_to_bool (_get_StatusReg_EXL w__0))
- : bool))
- (read_reg CP0Status_ref >>= fun w__1 =>
- returnm ((bits_to_bool (_get_StatusReg_ERL w__1))
- : bool)) >>= fun w__2 =>
+
+ (or_boolM
+ (read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ returnm ((bits_to_bool (_get_StatusReg_EXL w__0))
+ : bool))
+ (read_reg CP0Status_ref >>= fun w__1 : StatusReg =>
+ returnm ((bits_to_bool (_get_StatusReg_ERL w__1))
+ : bool))) >>= fun w__2 : bool =>
(if (w__2) then returnm (Kernel : AccessLevel)
else
- read_reg CP0Status_ref >>= fun w__3 =>
- let p__27 := _get_StatusReg_KSU w__3 in
- let b__0 := p__27 in
+ read_reg CP0Status_ref >>= fun w__3 : StatusReg =>
+ let p__16 := _get_StatusReg_KSU w__3 in
+ let b__0 := p__16 in
returnm ((if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then Kernel
else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then Supervisor
else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then User
@@ -1721,13 +2031,14 @@ Definition getAccessLevel '(tt : unit)
Definition checkCP0Access '(tt : unit)
: M (unit) :=
- getAccessLevel tt >>= fun accessLevel =>
- and_boolM (returnm ((generic_neq accessLevel Kernel) : bool))
- (read_reg CP0Status_ref >>= fun w__0 =>
- returnm ((negb ((bit_to_bool (access_vec_dec (_get_StatusReg_CU w__0) 0)) : bool))
- : bool)) >>= fun w__1 =>
+
+ (getAccessLevel tt) >>= fun accessLevel =>
+ (and_boolM (returnm ((generic_neq accessLevel Kernel) : bool))
+ (read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
+ returnm ((negb ((bit_to_bool (access_vec_dec (_get_StatusReg_CU w__0) 0)) : bool))
+ : bool))) >>= fun w__1 : bool =>
(if (w__1) then
- _set_CauseReg_CE CP0Cause_ref (vec_of_bits [B0;B0] : mword 2) >>
+ (_set_CauseReg_CE CP0Cause_ref (vec_of_bits [B0;B0] : mword 2)) >>
(SignalException CpU)
: M (unit)
else returnm (tt : unit))
@@ -1735,33 +2046,34 @@ Definition checkCP0Access '(tt : unit)
Definition incrementCP0Count '(tt : unit)
: M (unit) :=
- (read_reg TLBRandom_ref : M (mword 6)) >>= fun w__0 =>
- (read_reg TLBWired_ref : M (mword 6)) >>= fun w__1 =>
+
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ ((read_reg TLBWired_ref) : M (mword 6)) >>= fun w__1 : TLBIndexT =>
(if ((eq_vec w__0 w__1)) then returnm (TLBIndexMax : TLBIndexT)
else
- (read_reg TLBRandom_ref : M (mword 6)) >>= fun w__2 =>
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__2 : TLBIndexT =>
returnm ((sub_vec_int w__2 1)
- : TLBIndexT)) >>= fun w__3 =>
+ : mword 6)) >>= fun w__3 : mword 6 =>
write_reg TLBRandom_ref w__3 >>
- (read_reg CP0Count_ref : M (mword 32)) >>= fun w__4 =>
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__4 : bits 32 =>
write_reg CP0Count_ref (add_vec_int w__4 1) >>
- (read_reg CP0Count_ref : M (mword 32)) >>= fun w__5 =>
- (read_reg CP0Compare_ref : M (mword 32)) >>= fun w__6 =>
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__5 : bits 32 =>
+ ((read_reg CP0Compare_ref) : M (mword 32)) >>= fun w__6 : bits 32 =>
(if ((eq_vec w__5 w__6)) then
- read_reg CP0Cause_ref >>= fun w__7 =>
+ read_reg CP0Cause_ref >>= fun w__7 : CauseReg =>
(_set_CauseReg_IP CP0Cause_ref
(or_vec (_get_CauseReg_IP w__7) (vec_of_bits [B1;B0;B0;B0;B0;B0;B0;B0] : mword 8)))
: M (unit)
else returnm (tt : unit)) >>
- read_reg CP0Status_ref >>= fun w__8 =>
+ read_reg CP0Status_ref >>= fun w__8 : StatusReg =>
let ims := _get_StatusReg_IM w__8 in
- read_reg CP0Cause_ref >>= fun w__9 =>
+ read_reg CP0Cause_ref >>= fun w__9 : CauseReg =>
let ips := _get_CauseReg_IP w__9 in
- read_reg CP0Status_ref >>= fun w__10 =>
+ read_reg CP0Status_ref >>= fun w__10 : StatusReg =>
let ie := _get_StatusReg_IE w__10 in
- read_reg CP0Status_ref >>= fun w__11 =>
+ read_reg CP0Status_ref >>= fun w__11 : StatusReg =>
let exl := _get_StatusReg_EXL w__11 in
- read_reg CP0Status_ref >>= fun w__12 =>
+ read_reg CP0Status_ref >>= fun w__12 : StatusReg =>
let erl := _get_StatusReg_ERL w__12 in
(if ((andb (negb ((bits_to_bool exl) : bool))
(andb (negb ((bits_to_bool erl) : bool))
@@ -1773,9 +2085,9 @@ Definition incrementCP0Count '(tt : unit)
else returnm (tt : unit))
: M (unit).
-Definition decode_failure_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)} `{ArithFact (arg_ =
- arg_)}
+Definition decode_failure_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
: decode_failure :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then no_matching_pattern
else if sumbool_of_bool ((Z.eqb p0_ 1)) then unsupported_instruction
@@ -1784,21 +2096,23 @@ Definition decode_failure_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)
Definition num_of_decode_failure (arg_ : decode_failure)
: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
- match arg_ with
- | no_matching_pattern => build_ex 0
- | unsupported_instruction => build_ex 1
- | illegal_instruction => build_ex 2
- | internal_error => build_ex 3
- end.
+
+ build_ex(match arg_ with
+ | no_matching_pattern => 0
+ | unsupported_instruction => 1
+ | illegal_instruction => 2
+ | internal_error => 3
+ end).
Definition undefined_decode_failure '(tt : unit)
: M (decode_failure) :=
+
(internal_pick [no_matching_pattern;unsupported_instruction;illegal_instruction;internal_error])
: M (decode_failure).
-Definition Comparison_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 7)} `{ArithFact (arg_ =
- arg_)}
+Definition Comparison_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 7)}
: Comparison :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then EQ'
else if sumbool_of_bool ((Z.eqb p0_ 1)) then NE
@@ -1811,24 +2125,27 @@ Definition Comparison_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 7)} `{
Definition num_of_Comparison (arg_ : Comparison)
: {e : Z & ArithFact (0 <= e /\ e <= 7)} :=
- match arg_ with
- | EQ' => build_ex 0
- | NE => build_ex 1
- | GE => build_ex 2
- | GEU => build_ex 3
- | GT' => build_ex 4
- | LE => build_ex 5
- | LT' => build_ex 6
- | LTU => build_ex 7
- end.
+
+ build_ex(match arg_ with
+ | EQ' => 0
+ | NE => 1
+ | GE => 2
+ | GEU => 3
+ | GT' => 4
+ | LE => 5
+ | LT' => 6
+ | LTU => 7
+ end).
Definition undefined_Comparison '(tt : unit)
: M (Comparison) :=
+
(internal_pick [EQ';NE;GE;GEU;GT';LE;LT';LTU])
: M (Comparison).
Definition compare (cmp : Comparison) (valA : mword 64) (valB : mword 64)
: bool :=
+
match cmp with
| EQ' => eq_vec valA valB
| NE => neq_vec valA valB
@@ -1840,8 +2157,9 @@ Definition compare (cmp : Comparison) (valA : mword 64) (valB : mword 64)
| LTU => zopz0zI_u valA valB
end.
-Definition WordType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)} `{ArithFact (arg_ = arg_)}
+Definition WordType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
: WordType :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then B
else if sumbool_of_bool ((Z.eqb p0_ 1)) then H
@@ -1850,16 +2168,18 @@ Definition WordType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)} `{Ar
Definition num_of_WordType (arg_ : WordType)
: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
- match arg_ with | B => build_ex 0 | H => build_ex 1 | W => build_ex 2 | D => build_ex 3 end.
+
+ build_ex(match arg_ with | B => 0 | H => 1 | W => 2 | D => 3 end).
Definition undefined_WordType '(tt : unit)
: M (WordType) :=
+
(internal_pick [B;H;W;D])
: M (WordType).
-Definition WordTypeUnaligned_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)} `{ArithFact (arg_ =
- arg_)}
+Definition WordTypeUnaligned_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
: WordTypeUnaligned :=
+
let p0_ := arg_ in
if sumbool_of_bool ((Z.eqb p0_ 0)) then WL
else if sumbool_of_bool ((Z.eqb p0_ 1)) then WR
@@ -1868,37 +2188,47 @@ Definition WordTypeUnaligned_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <=
Definition num_of_WordTypeUnaligned (arg_ : WordTypeUnaligned)
: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
- match arg_ with | WL => build_ex 0 | WR => build_ex 1 | DL => build_ex 2 | DR => build_ex 3 end.
+
+ build_ex(match arg_ with | WL => 0 | WR => 1 | DL => 2 | DR => 3 end).
Definition undefined_WordTypeUnaligned '(tt : unit)
: M (WordTypeUnaligned) :=
+
(internal_pick [WL;WR;DL;DR])
: M (WordTypeUnaligned).
Definition wordWidthBytes (w : WordType)
: {rangevar : Z & ArithFact (1 <= rangevar /\ rangevar <= 8)} :=
- match w with | B => build_ex 1 | H => build_ex 2 | W => build_ex 4 | D => build_ex 8 end.
+
+ build_ex(match w with | B => 1 | H => 2 | W => 4 | D => 8 end).
Definition alignment_width := 16.
-
+Hint Unfold alignment_width : sail.
Definition isAddressAligned (addr : mword 64) (wordType : WordType)
: bool :=
- let '(existT _ a _) := uint addr in
- Z.eqb (projT1 (div_with_eq a alignment_width))
- (Z.quot (Z.sub (Z.add a (projT1 (wordWidthBytes wordType))) 1) alignment_width).
+
+ let 'a := projT1 (uint addr) in
+ Z.eqb (projT1 (ediv_with_eq a alignment_width))
+ (projT1 (ediv_with_eq (Z.sub (Z.add a (projT1 (wordWidthBytes wordType))) 1) alignment_width)).
-Definition MEMr_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ size <= 8)} `{ArithFact (size =
- size)}
+Definition extendLoad {sz : Z} (memResult : mword sz) (sign : bool) `{ArithFact (sz <= 64)}
+: mword 64 :=
+
+ if (sign) then mips_sign_extend 64 memResult
+ else mips_zero_extend 64 memResult.
+
+Definition MEMr_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ size <= 8)}
: M (mword (8 * size)) :=
+
(if ((eq_vec addr
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64))) then
- (read_reg UART_RVALID_ref : M (mword 1)) >>= fun rvalid =>
+ ((read_reg UART_RVALID_ref) : M (mword 1)) >>= fun rvalid =>
write_reg UART_RVALID_ref (vec_of_bits [B0] : mword 1) >>
- (read_reg UART_RDATA_ref : M (mword 8)) >>= fun w__0 =>
+ ((read_reg UART_RDATA_ref) : M (mword 8)) >>= fun w__0 : bits 8 =>
returnm ((mask (Z.mul 8 size)
(concat_vec
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -1924,25 +2254,27 @@ Definition MEMr_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ s
: mword 64))
: mword (8 * size))
else
- autocast_m (MEMr addr size) >>= fun w__1 =>
- returnm ((autocast (reverse_endianness w__1))
+ (MEMr addr size) >>= fun w__1 : mword (8 * size) =>
+ returnm ((reverse_endianness w__1)
: mword (8 * size)))
: M (mword (8 * size)).
-Definition MEMr_reserve_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ size <= 8)} `{ArithFact (size =
- size)}
+Definition MEMr_reserve_wrapper (addr : mword 64) (size : Z) `{ArithFact (1 <= size /\ size <= 8)}
: M (mword (8 * size)) :=
- autocast_m (MEMr_reserve addr size) >>= fun w__0 =>
- returnm ((autocast (reverse_endianness w__0))
+
+ (MEMr_reserve addr size) >>= fun w__0 : mword (8 * size) =>
+ returnm ((reverse_endianness w__0)
: mword (8 * size)).
Definition init_cp0_state '(tt : unit)
: M (unit) :=
+
(_set_StatusReg_BEV CP0Status_ref ((cast_unit_vec B1) : mword 1))
: M (unit).
Definition tlbEntryMatch (r : mword 2) (vpn2 : mword 27) (asid : mword 8) (entry : TLBEntry)
: bool :=
+
let entryValid := _get_TLBEntry_valid entry in
let entryR := _get_TLBEntry_r entry in
let entryMask := _get_TLBEntry_pagemask entry in
@@ -1957,16 +2289,19 @@ Definition tlbEntryMatch (r : mword 2) (vpn2 : mword 27) (asid : mword 8) (entry
Definition tlbSearch (VAddr : mword 64)
: M (option (mword 6)) :=
+
catch_early_return
(let r := subrange_vec_dec VAddr 63 62 in
let vpn2 := subrange_vec_dec VAddr 39 13 in
- liftR (read_reg TLBEntryHi_ref) >>= fun w__0 =>
+ liftR (read_reg TLBEntryHi_ref) >>= fun w__0 : TLBEntryHiReg =>
let asid := _get_TLBEntryHiReg_ASID w__0 in
(foreach_ZM_up 0 63 1 tt
(fun idx _ unit_var =>
- liftR (reg_deref (vec_access_dec TLBEntries idx)) >>= fun w__1 =>
+ liftR ((reg_deref (vec_access_dec TLBEntries idx))) >>= fun w__1 : TLBEntry =>
(if ((tlbEntryMatch r vpn2 asid w__1)) then
- (early_return ((Some (to_bits 6 idx)) : option (mword 6)) : MR unit (option (mword 6)))
+ (early_return ((Some
+ (to_bits 6 idx))
+ : option (mword 6)))
: MR (unit) _
else returnm (tt : unit))
: MR (unit) _)) >>
@@ -1975,83 +2310,73 @@ Definition tlbSearch (VAddr : mword 64)
Definition TLBTranslate2 (vAddr : mword 64) (accessType : MemAccessType)
: M ((mword 64 * bool)) :=
- tlbSearch vAddr >>= fun idx =>
+
+ (tlbSearch vAddr) >>= fun idx =>
(match idx with
| Some (idx) =>
- let '(existT _ i _) := uint idx in
- reg_deref (vec_access_dec TLBEntries i) >>= fun entry =>
+ let 'i := projT1 (uint idx) in
+ (reg_deref (vec_access_dec TLBEntries i)) >>= fun entry =>
let entryMask := _get_TLBEntry_pagemask entry in
let b__0 := entryMask in
(if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16)))
then
- returnm ((build_ex
- 12)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (12
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 14)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (14
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 16)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (16
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 18)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (18
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 20)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (20
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 22)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (22
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 24)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (24
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B0;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 26)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (26
+ : Z))
else if ((eq_vec b__0
(vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1] : mword 16)))
then
- returnm ((build_ex
- 28)
- : {rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})
+ returnm (build_ex (28
+ : Z))
else
(undefined_range 12 28)
- : M ({rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})) >>= fun '(existT _ evenOddBit _) =>
+ : M ({rangevar : Z & ArithFact (12 <= rangevar /\ rangevar <= 28)})) >>= fun '(existT _ evenOddBit _ : {rangevar : Z & ArithFact (12 <=
+ rangevar /\
+ rangevar <= 28)}) =>
let isOdd := access_vec_dec vAddr evenOddBit in
let '(caps, capl, pfn, d, v) :=
if (((bit_to_bool isOdd) : bool)) then
- (_get_TLBEntry_caps1 entry,
- _get_TLBEntry_capl1 entry,
- _get_TLBEntry_pfn1 entry,
- _get_TLBEntry_d1 entry,
- _get_TLBEntry_v1 entry)
+ (_get_TLBEntry_caps1 entry, _get_TLBEntry_capl1 entry, _get_TLBEntry_pfn1 entry, _get_TLBEntry_d1
+ entry, _get_TLBEntry_v1
+ entry)
else
- (_get_TLBEntry_caps0 entry,
- _get_TLBEntry_capl0 entry,
- _get_TLBEntry_pfn0 entry,
- _get_TLBEntry_d0 entry,
- _get_TLBEntry_v0 entry) in
+ (_get_TLBEntry_caps0 entry, _get_TLBEntry_capl0 entry, _get_TLBEntry_pfn0 entry, _get_TLBEntry_d0
+ entry, _get_TLBEntry_v0
+ entry) in
(if ((negb ((bits_to_bool v) : bool))) then
(SignalExceptionTLB (if ((generic_eq accessType StoreData)) then XTLBInvS else XTLBInvL)
vAddr)
@@ -2064,8 +2389,7 @@ Definition TLBTranslate2 (vAddr : mword 64) (accessType : MemAccessType)
mips_zero_extend 64
(concat_vec (subrange_vec_dec pfn 23 (Z.sub evenOddBit 12))
(subrange_vec_dec vAddr (Z.sub evenOddBit 1) 0)) in
- returnm ((res, bits_to_bool (if ((generic_eq accessType StoreData)) then caps else capl))
- : (mword 64 * bool)))
+ returnm (res, bits_to_bool (if ((generic_eq accessType StoreData)) then caps else capl)))
: M ((mword 64 * bool))
| None =>
(SignalExceptionTLB
@@ -2077,75 +2401,85 @@ Definition TLBTranslate2 (vAddr : mword 64) (accessType : MemAccessType)
Definition TLBTranslateC (vAddr : mword 64) (accessType : MemAccessType)
: M ((mword 64 * bool)) :=
- getAccessLevel tt >>= fun currentAccessLevel =>
+
+ (getAccessLevel tt) >>= fun currentAccessLevel =>
let compat32 :=
eq_vec (subrange_vec_dec vAddr 61 31)
(vec_of_bits [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
B1;B1;B1;B1;B1;B1;B1;B1;B1;B1]
- : mword 31) in
+ : mword (61 - 31 + 1)) in
let b__0 := subrange_vec_dec vAddr 63 62 in
let '(requiredLevel, addr) :=
- (if ((eq_vec b__0 (vec_of_bits [B1;B1] : mword 2))) then
+ (if ((eq_vec b__0 (vec_of_bits [B1;B1] : mword (63 - 62 + 1)))) then
match (compat32, subrange_vec_dec vAddr 30 29) with
| (true, b__1) =>
- if ((eq_vec b__1 (vec_of_bits [B1;B1] : mword 2))) then
- (Kernel, None : option (bits 64))
- else if ((eq_vec b__1 (vec_of_bits [B1;B0] : mword 2))) then
- (Supervisor, None : option (bits 64))
- else if ((eq_vec b__1 (vec_of_bits [B0;B1] : mword 2))) then
- (Kernel,
- Some (concat_vec
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
- : mword 32)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3) (subrange_vec_dec vAddr 28 0))))
- else if ((eq_vec b__1 (vec_of_bits [B0;B0] : mword 2))) then
- (Kernel,
- Some (concat_vec
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
- : mword 32)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3) (subrange_vec_dec vAddr 28 0))))
- else match (true, b__1) with | (g__25, g__26) => (Kernel, None : option (bits 64)) end
- | (g__25, g__26) => (Kernel, None : option (bits 64))
+ if ((eq_vec b__1 (vec_of_bits [B1;B1] : mword (30 - 29 + 1)))) then
+ (Kernel, None
+ : option (bits 64))
+ else if ((eq_vec b__1 (vec_of_bits [B1;B0] : mword (30 - 29 + 1)))) then
+ (Supervisor, None
+ : option (bits 64))
+ else if ((eq_vec b__1 (vec_of_bits [B0;B1] : mword (30 - 29 + 1)))) then
+ (Kernel, Some
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (subrange_vec_dec vAddr 28 0))))
+ else if ((eq_vec b__1 (vec_of_bits [B0;B0] : mword (30 - 29 + 1)))) then
+ (Kernel, Some
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (subrange_vec_dec vAddr 28 0))))
+ else match (true, b__1) with | (g__14, g__15) => (Kernel, None : option (bits 64)) end
+ | (g__14, g__15) => (Kernel, None : option (bits 64))
end
- else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then
- (Kernel,
- Some (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5) (subrange_vec_dec vAddr 58 0)))
- else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then
- (Supervisor, None : option (bits 64))
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword (63 - 62 + 1)))) then
+ (Kernel, Some
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (subrange_vec_dec vAddr 58 0)))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword (63 - 62 + 1)))) then
+ (Supervisor, None
+ : option (bits 64))
else (User, None : option (bits 64)))
: (AccessLevel * option (bits 64)) in
(if ((negb (grantsAccess currentAccessLevel requiredLevel))) then
(SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL) vAddr)
: M ((mword 64 * bool))
else
- match addr with
- | Some (a) => returnm ((a, false) : (mword 64 * bool))
- | None =>
- (if ((andb (negb compat32) (gtb_range_l (uint (subrange_vec_dec vAddr 61 0)) MAX_VA))) then
- (SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL)
- vAddr)
- : M ((bits 64 * bool))
- else (TLBTranslate2 vAddr accessType) : M ((bits 64 * bool)))
- : M ((mword 64 * bool))
- end >>= fun '(pa, c) =>
- (if ((gtb_range_l (uint pa) MAX_PA)) then
+ (match addr with
+ | Some (a) => returnm (a, false)
+ | None =>
+ (if sumbool_of_bool ((andb (negb compat32)
+ (Z.gtb (projT1 (uint (subrange_vec_dec vAddr 61 0))) MAX_VA)))
+ then
+ (SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL)
+ vAddr)
+ : M ((mword 64 * bool))
+ else (TLBTranslate2 vAddr accessType) : M ((mword 64 * bool)))
+ : M ((mword 64 * bool))
+ end) >>= fun '(pa, c) =>
+ (if sumbool_of_bool ((Z.gtb (projT1 (uint pa)) MAX_PA)) then
(SignalExceptionBadAddr (if ((generic_eq accessType StoreData)) then AdES else AdEL) vAddr)
: M ((mword 64 * bool))
- else returnm ((pa, c) : (mword 64 * bool)))
+ else returnm (pa, c))
: M ((mword 64 * bool)))
: M ((mword 64 * bool)).
Definition TLBTranslate (vAddr : mword 64) (accessType : MemAccessType)
: M (mword 64) :=
- TLBTranslateC vAddr accessType >>= fun '(addr, c) => returnm (addr : mword 64).
+
+ (TLBTranslateC vAddr accessType) >>= fun '(addr, c) => returnm (addr : mword 64).
-Definition MEMw_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size)) `{ArithFact (1 <=
- size /\
- size <= 8)} `{ArithFact (size = size)}
+Definition MEMw_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size))
+`{ArithFact (1 <= size /\ size <= 8)}
: M (unit) :=
- let ledata := autocast (reverse_endianness data) in
+
+ let ledata := reverse_endianness data in
(if ((eq_vec addr
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1;B1;B1;B0;B0;
@@ -2155,70 +2489,57 @@ Definition MEMw_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size)) `
write_reg UART_WDATA_ref (subrange_vec_dec ledata 7 0) >>
write_reg UART_WRITTEN_ref ((cast_unit_vec B1) : bits 1)
: M (unit)
- else MEMea addr size >> (MEMval addr size ledata) : M (unit))
+ else (MEMea addr size) >> (MEMval addr size ledata) : M (unit))
: M (unit).
-Definition MEMw_conditional_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size)) `{ArithFact (1 <=
- size /\
- size <= 8)} `{ArithFact (size = size)}
+Definition MEMw_conditional_wrapper (addr : mword 64) (size : Z) (data : mword (8 * size))
+`{ArithFact (1 <= size /\ size <= 8)}
: M (bool) :=
- MEMea_conditional addr size >>
- (MEMval_conditional addr size (autocast (reverse_endianness data)))
+
+ (MEMea_conditional addr size) >>
+ (MEMval_conditional addr size (reverse_endianness data))
: M (bool).
Definition addrWrapper (addr : mword 64) (accessType : MemAccessType) (width : WordType)
: mword 64 :=
+
addr.
-Definition addrWrapperUnaligned (addr : mword 64) (accessType : MemAccessType) (width : WordTypeUnaligned)
+Definition addrWrapperUnaligned
+(addr : mword 64) (accessType : MemAccessType) (width : WordTypeUnaligned)
: mword 64 :=
+
addr.
Definition TranslatePC (vAddr : mword 64)
: M (mword 64) :=
- incrementCP0Count tt >>
- (if ((neq_vec (subrange_vec_dec vAddr 1 0) (vec_of_bits [B0;B0] : mword 2))) then
+
+ (incrementCP0Count tt) >>
+ (if ((neq_vec (subrange_vec_dec vAddr 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
(SignalExceptionBadAddr AdEL vAddr)
: M (mword 64)
else (TLBTranslate vAddr Instruction) : M (mword 64))
: M (mword 64).
Definition have_cp2 := false.
+Hint Unfold have_cp2 : sail.
+Definition ERETHook '(tt : unit) : unit := tt.
-Definition ERETHook '(tt : unit) : unit := tt.
-
-Definition init_cp2_state '(tt : unit) : M (unit) := (skip tt) : M (unit).
+Definition init_cp2_state '(tt : unit) : M (unit) := (skip tt) >> (skip tt) : M (unit).
-Definition cp2_next_pc '(tt : unit) : M (unit) := skip tt >> (skip tt) : M (unit).
+Definition cp2_next_pc '(tt : unit) : M (unit) := (skip tt) >> (skip tt) : M (unit).
-Definition dump_cp2_state '(tt : unit) : M (unit) := skip tt >> (skip tt) : M (unit).
+Definition dump_cp2_state '(tt : unit) : M (unit) := (skip tt) >> (skip tt) : M (unit).
-Definition undefined_ast '(tt : unit)
-: M (ast) :=
- undefined_Comparison tt >>= fun u_0 =>
- undefined_WordType tt >>= fun u_1 =>
- undefined_bool tt >>= fun u_3 =>
- undefined_bool tt >>= fun u_2 =>
- undefined_bitvector 16 >>= fun u_4 =>
- undefined_bitvector 5 >>= fun u_7 =>
- undefined_bitvector 5 >>= fun u_6 =>
- undefined_bitvector 5 >>= fun u_5 =>
- undefined_unit tt >>= fun u_8 =>
- undefined_bitvector 3 >>= fun u_9 =>
- undefined_bitvector 16 >>= fun u_10 =>
- undefined_bitvector 26 >>= fun u_11 =>
- (internal_pick
- [DADDIU (u_6,u_5,u_4);DADDU (u_7,u_6,u_5);DADDI (u_6,u_5,u_10);DADD (u_7,u_6,u_5);ADD (u_7,u_6,u_5);ADDI (u_6,u_5,u_10);ADDU (u_7,u_6,u_5);ADDIU (u_6,u_5,u_10);DSUBU (u_7,u_6,u_5);DSUB (u_7,u_6,u_5);SUB (u_7,u_6,u_5);SUBU (u_7,u_6,u_5);AND (u_7,u_6,u_5);ANDI (u_6,u_5,u_10);OR (u_7,u_6,u_5);ORI (u_6,u_5,u_10);NOR (u_7,u_6,u_5);XOR (u_7,u_6,u_5);XORI (u_6,u_5,u_10);LUI (u_5,u_4);DSLL (u_7,u_6,u_5);DSLL32 (u_7,u_6,u_5);DSLLV (u_7,u_6,u_5);DSRA (u_7,u_6,u_5);DSRA32 (u_7,u_6,u_5);DSRAV (u_7,u_6,u_5);DSRL (u_7,u_6,u_5);DSRL32 (u_7,u_6,u_5);DSRLV (u_7,u_6,u_5);SLL (u_7,u_6,u_5);SLLV (u_7,u_6,u_5);SRA (u_7,u_6,u_5);SRAV (u_7,u_6,u_5);SRL (u_7,u_6,u_5);SRLV (u_7,u_6,u_5);SLT (u_7,u_6,u_5);SLTI (u_6,u_5,u_10);SLTU (u_7,u_6,u_5);SLTIU (u_6,u_5,u_10);MOVN (u_7,u_6,u_5);MOVZ (u_7,u_6,u_5);MFHI u_5;MFLO u_5;MTHI u_5;MTLO u_5;MUL (u_7,u_6,u_5);MULT (u_6,u_5);MULTU (u_6,u_5);DMULT (u_6,u_5);DMULTU (u_6,u_5);MADD (u_6,u_5);MADDU (u_6,u_5);MSUB (u_6,u_5);MSUBU (u_6,u_5);DIV (u_6,u_5);DIVU (u_6,u_5);DDIV (u_6,u_5);DDIVU (u_6,u_5);J u_11;JAL u_11;JR u_5;JALR (u_6,u_5);BEQ (u_6,u_5,u_4,u_3,u_2);BCMPZ (u_5,u_4,u_0,u_3,u_2);SYSCALL u_8;BREAK u_8;WAIT u_8;TRAPREG (u_6,u_5,u_0);TRAPIMM (u_5,u_4,u_0);Load (u_1,u_3,u_2,u_6,u_5,u_4);Store (u_1,u_2,u_6,u_5,u_4);LWL (u_6,u_5,u_10);LWR (u_6,u_5,u_10);SWL (u_6,u_5,u_10);SWR (u_6,u_5,u_10);LDL (u_6,u_5,u_10);LDR (u_6,u_5,u_10);SDL (u_6,u_5,u_10);SDR (u_6,u_5,u_10);CACHE (u_6,u_5,u_10);SYNC u_8;MFC0 (u_6,u_5,u_9,u_2);HCF u_8;MTC0 (u_6,u_5,u_9,u_2);TLBWI u_8;TLBWR u_8;TLBR u_8;TLBP u_8;RDHWR (u_6,u_5);ERET u_8;RI u_8])
- : M (ast).
-
-Definition extendLoad {sz : Z} (memResult : mword sz) (sign : bool) `{ArithFact (sz <= 64)}
-: mword 64 :=
- if (sign) then mips_sign_extend 64 memResult
- else mips_zero_extend 64 memResult.
+Definition execute_branch (pc : mword 64)
+: M (unit) :=
+
+ (skip tt) >> (skip tt) >> (execute_branch_mips pc) : M (unit).
Definition TLBWriteEntry (idx : mword 6)
: M (unit) :=
- (read_reg TLBPageMask_ref : M (mword 16)) >>= fun pagemask =>
+
+ ((read_reg TLBPageMask_ref) : M (mword 16)) >>= fun pagemask =>
let b__0 := pagemask in
(if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16)))
then
@@ -2257,988 +2578,1330 @@ Definition TLBWriteEntry (idx : mword 6)
returnm (tt
: unit)
else (SignalException MCheck) : M (unit)) >>
- let '(existT _ i _) := uint idx in
+ let 'i := projT1 (uint idx) in
let entry := vec_access_dec TLBEntries i in
- _set_TLBEntry_pagemask entry pagemask >>
- read_reg TLBEntryHi_ref >>= fun w__0 =>
- _set_TLBEntry_r entry (_get_TLBEntryHiReg_R w__0) >>
- read_reg TLBEntryHi_ref >>= fun w__1 =>
- _set_TLBEntry_vpn2 entry (_get_TLBEntryHiReg_VPN2 w__1) >>
- read_reg TLBEntryHi_ref >>= fun w__2 =>
- _set_TLBEntry_asid entry (_get_TLBEntryHiReg_ASID w__2) >>
- and_boolM
- (read_reg TLBEntryLo0_ref >>= fun w__3 =>
- returnm ((bits_to_bool (_get_TLBEntryLoReg_G w__3))
- : bool))
- (read_reg TLBEntryLo1_ref >>= fun w__4 =>
- returnm ((bits_to_bool (_get_TLBEntryLoReg_G w__4))
- : bool)) >>= fun w__5 =>
- _set_TLBEntry_g entry ((bool_to_bits w__5) : mword 1) >>
- _set_TLBEntry_valid entry ((cast_unit_vec B1) : mword 1) >>
- read_reg TLBEntryLo0_ref >>= fun w__6 =>
- _set_TLBEntry_caps0 entry (_get_TLBEntryLoReg_CapS w__6) >>
- read_reg TLBEntryLo0_ref >>= fun w__7 =>
- _set_TLBEntry_capl0 entry (_get_TLBEntryLoReg_CapL w__7) >>
- read_reg TLBEntryLo0_ref >>= fun w__8 =>
- _set_TLBEntry_pfn0 entry (_get_TLBEntryLoReg_PFN w__8) >>
- read_reg TLBEntryLo0_ref >>= fun w__9 =>
- _set_TLBEntry_c0 entry (_get_TLBEntryLoReg_C w__9) >>
- read_reg TLBEntryLo0_ref >>= fun w__10 =>
- _set_TLBEntry_d0 entry (_get_TLBEntryLoReg_D w__10) >>
- read_reg TLBEntryLo0_ref >>= fun w__11 =>
- _set_TLBEntry_v0 entry (_get_TLBEntryLoReg_V w__11) >>
- read_reg TLBEntryLo1_ref >>= fun w__12 =>
- _set_TLBEntry_caps1 entry (_get_TLBEntryLoReg_CapS w__12) >>
- read_reg TLBEntryLo1_ref >>= fun w__13 =>
- _set_TLBEntry_capl1 entry (_get_TLBEntryLoReg_CapL w__13) >>
- read_reg TLBEntryLo1_ref >>= fun w__14 =>
- _set_TLBEntry_pfn1 entry (_get_TLBEntryLoReg_PFN w__14) >>
- read_reg TLBEntryLo1_ref >>= fun w__15 =>
- _set_TLBEntry_c1 entry (_get_TLBEntryLoReg_C w__15) >>
- read_reg TLBEntryLo1_ref >>= fun w__16 =>
- _set_TLBEntry_d1 entry (_get_TLBEntryLoReg_D w__16) >>
- read_reg TLBEntryLo1_ref >>= fun w__17 =>
+ (_set_TLBEntry_pagemask entry pagemask) >>
+ read_reg TLBEntryHi_ref >>= fun w__0 : TLBEntryHiReg =>
+ (_set_TLBEntry_r entry (_get_TLBEntryHiReg_R w__0)) >>
+ read_reg TLBEntryHi_ref >>= fun w__1 : TLBEntryHiReg =>
+ (_set_TLBEntry_vpn2 entry (_get_TLBEntryHiReg_VPN2 w__1)) >>
+ read_reg TLBEntryHi_ref >>= fun w__2 : TLBEntryHiReg =>
+ (_set_TLBEntry_asid entry (_get_TLBEntryHiReg_ASID w__2)) >>
+ (and_boolM
+ (read_reg TLBEntryLo0_ref >>= fun w__3 : TLBEntryLoReg =>
+ returnm ((bits_to_bool (_get_TLBEntryLoReg_G w__3))
+ : bool))
+ (read_reg TLBEntryLo1_ref >>= fun w__4 : TLBEntryLoReg =>
+ returnm ((bits_to_bool (_get_TLBEntryLoReg_G w__4))
+ : bool))) >>= fun w__5 : bool =>
+ (_set_TLBEntry_g entry ((bool_to_bits w__5) : mword 1)) >>
+ (_set_TLBEntry_valid entry ((cast_unit_vec B1) : mword 1)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__6 : TLBEntryLoReg =>
+ (_set_TLBEntry_caps0 entry (_get_TLBEntryLoReg_CapS w__6)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__7 : TLBEntryLoReg =>
+ (_set_TLBEntry_capl0 entry (_get_TLBEntryLoReg_CapL w__7)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__8 : TLBEntryLoReg =>
+ (_set_TLBEntry_pfn0 entry (_get_TLBEntryLoReg_PFN w__8)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__9 : TLBEntryLoReg =>
+ (_set_TLBEntry_c0 entry (_get_TLBEntryLoReg_C w__9)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__10 : TLBEntryLoReg =>
+ (_set_TLBEntry_d0 entry (_get_TLBEntryLoReg_D w__10)) >>
+ read_reg TLBEntryLo0_ref >>= fun w__11 : TLBEntryLoReg =>
+ (_set_TLBEntry_v0 entry (_get_TLBEntryLoReg_V w__11)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__12 : TLBEntryLoReg =>
+ (_set_TLBEntry_caps1 entry (_get_TLBEntryLoReg_CapS w__12)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__13 : TLBEntryLoReg =>
+ (_set_TLBEntry_capl1 entry (_get_TLBEntryLoReg_CapL w__13)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__14 : TLBEntryLoReg =>
+ (_set_TLBEntry_pfn1 entry (_get_TLBEntryLoReg_PFN w__14)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__15 : TLBEntryLoReg =>
+ (_set_TLBEntry_c1 entry (_get_TLBEntryLoReg_C w__15)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__16 : TLBEntryLoReg =>
+ (_set_TLBEntry_d1 entry (_get_TLBEntryLoReg_D w__16)) >>
+ read_reg TLBEntryLo1_ref >>= fun w__17 : TLBEntryLoReg =>
(_set_TLBEntry_v1 entry (_get_TLBEntryLoReg_V w__17))
: M (unit).
Definition decode (v__0 : mword 32)
: option ast :=
- if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B0;B0;B1] : mword 6))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+
+ if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (DADDIU (rs,rt,imm))
+ Some
+ (DADDIU
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DADDU (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B0;B0;B0] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (DADDU
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (DADDI (rs,rt,imm))
+ Some
+ (DADDI
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DADD (rs,rt,rd))
+ Some
+ (DADD
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (ADD (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (ADD
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (ADDI (rs,rt,imm))
+ Some
+ (ADDI
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (ADDU (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (ADDU
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (ADDIU (rs,rt,imm))
+ Some
+ (ADDIU
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DSUBU (rs,rt,rd))
+ Some
+ (DSUBU
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DSUB (rs,rt,rd))
+ Some
+ (DSUB
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SUB (rs,rt,rd))
+ Some
+ (SUB
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SUBU (rs,rt,rd))
+ Some
+ (SUBU
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B0;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B0;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (AND (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (AND
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (ANDI (rs,rt,imm))
+ Some
+ (ANDI
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B0;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B0;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (OR (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (OR
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (ORI (rs,rt,imm))
+ Some
+ (ORI
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (NOR (rs,rt,rd))
+ Some
+ (NOR
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (XOR (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B1;B1;B0] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (XOR
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B1;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (XORI (rs,rt,imm))
+ Some
+ (XORI
+ ((rs, rt, imm)))
else if ((eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword 11))) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (LUI (rt,imm))
+ Some
+ (LUI
+ ((rt, imm)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B1;B0;B0;B0] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : bits 5 := subrange_vec_dec v__0 10 6 in
- Some (DSLL (rt,rd,sa))
+ Some
+ (DSLL
+ ((rt, rd, sa)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B1;B1;B0;B0] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : bits 5 := subrange_vec_dec v__0 10 6 in
- Some (DSLL32 (rt,rd,sa))
+ Some
+ (DSLL32
+ ((rt, rd, sa)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B0;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B0;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DSLLV (rs,rt,rd))
+ Some
+ (DSLLV
+ ((rs, rt, rd)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B1;B0;B1;B1] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : bits 5 := subrange_vec_dec v__0 10 6 in
- Some (DSRA (rt,rd,sa))
+ Some
+ (DSRA
+ ((rt, rd, sa)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : bits 5 := subrange_vec_dec v__0 10 6 in
- Some (DSRA32 (rt,rd,sa))
+ Some
+ (DSRA32
+ ((rt, rd, sa)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DSRAV (rs,rt,rd))
+ Some
+ (DSRAV
+ ((rs, rt, rd)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : bits 5 := subrange_vec_dec v__0 10 6 in
- Some (DSRL (rt,rd,sa))
+ Some
+ (DSRL
+ ((rt, rd, sa)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B1;B1;B1;B0] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B1;B1;B1;B0] : mword (5 - 0 + 1))))) then
+ let sa : bits 5 := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : bits 5 := subrange_vec_dec v__0 10 6 in
- Some (DSRL32 (rt,rd,sa))
+ Some
+ (DSRL32
+ ((rt, rd, sa)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (DSRLV (rs,rt,rd))
+ Some
+ (DSRLV
+ ((rs, rt, rd)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
+ let sa : regno := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : regno := subrange_vec_dec v__0 10 6 in
- Some (SLL (rt,rd,sa))
+ Some
+ (SLL
+ ((rt, rd, sa)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SLLV (rs,rt,rd))
+ Some
+ (SLLV
+ ((rs, rt, rd)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
+ let sa : regno := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : regno := subrange_vec_dec v__0 10 6 in
- Some (SRA (rt,rd,sa))
+ Some
+ (SRA
+ ((rt, rd, sa)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SRAV (rs,rt,rd))
+ Some
+ (SRAV
+ ((rs, rt, rd)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword 6))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let sa : regno := subrange_vec_dec v__0 10 6 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sa : regno := subrange_vec_dec v__0 10 6 in
- Some (SRL (rt,rd,sa))
+ Some
+ (SRL
+ ((rt, rd, sa)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SRLV (rs,rt,rd))
+ Some
+ (SRLV
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SLT (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B0;B1;B0] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SLT
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (SLTI (rs,rt,imm))
+ Some
+ (SLTI
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (SLTU (rs,rt,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B1;B0;B1;B1] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let rd : regno := subrange_vec_dec v__0 15 11 in
+ Some
+ (SLTU
+ ((rs, rt, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B1;B0;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (SLTIU (rs,rt,imm))
+ Some
+ (SLTIU
+ ((rs, rt, imm)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (MOVN (rs,rt,rd))
+ Some
+ (MOVN
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (MOVZ (rs,rt,rd))
+ Some
+ (MOVZ
+ ((rs, rt, rd)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 16)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 16 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0] : mword 11)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0] : mword (10 - 0 + 1))))) then
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (MFHI rd)
+ Some
+ (MFHI
+ (rd))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 16)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (31 - 16 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B0;B1;B0] : mword 11)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (MFLO rd)
+ Some
+ (MFLO
+ (rd))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 20 0)
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B1]
- : mword 21)))) then
+ : mword (20 - 0 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
- Some (MTHI rs)
+ Some
+ (MTHI
+ (rs))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 20 0)
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B1;B1]
- : mword 21)))) then
+ : mword (20 - 0 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
- Some (MTLO rs)
+ Some
+ (MTLO
+ (rs))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 11)))) then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (MUL (rs,rt,rd))
+ Some
+ (MUL
+ ((rs, rt, rd)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (MULT (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MULT
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B1] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B1]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (MULTU (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MULTU
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B0] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B0]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (DMULT (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DMULT
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B1] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B1]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (DMULTU (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DMULTU
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (MADD (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MADD
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (MADDU (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MADDU
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (MSUB (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MSUB
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (MSUBU (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (MSUBU
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B0] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B0]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (DIV (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DIV
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (DIVU (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DIVU
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B0] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B0]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (DDIV (rs,rt))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DDIV
+ ((rs, rt)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1] : mword 16))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1]
+ : mword (15 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (DDIVU (rs,rt))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword 6)))
- then
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (DDIVU
+ ((rs, rt)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B1;B0] : mword (31 - 26 + 1)))) then
let offset : bits 26 := subrange_vec_dec v__0 25 0 in
- Some (J offset)
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword 6)))
- then
+ Some
+ (J
+ (offset))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B1;B1] : mword (31 - 26 + 1)))) then
let offset : bits 26 := subrange_vec_dec v__0 25 0 in
- Some (JAL offset)
+ Some
+ (JAL
+ (offset))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(andb
(eq_vec (subrange_vec_dec v__0 20 11)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 10))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword 6)))))
- then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (20 - 11 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B0] : mword (5 - 0 + 1)))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
- Some (JR rs)
+ Some
+ (JR
+ (rs))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
(andb
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword 6)))))
- then
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1] : mword (5 - 0 + 1)))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (JALR (rs,rd))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B1;B0;B0] : mword 6)))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (JALR
+ ((rs, rd)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BEQ (rs,rt,imm,false,false))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B0;B1;B0;B0] : mword 6)))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
- let rt : regno := subrange_vec_dec v__0 20 16 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BEQ (rs,rt,imm,false,true))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B1;B0;B1] : mword 6)))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (BEQ
+ ((rs, rt, imm, false, false)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BEQ (rs,rt,imm,true,false))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B0;B1;B0;B1] : mword 6)))
- then
+ Some
+ (BEQ
+ ((rs, rt, imm, false, true)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B0;B1] : mword (31 - 26 + 1)))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
let rs : regno := subrange_vec_dec v__0 25 21 in
+ let imm : imm16 := subrange_vec_dec v__0 15 0 in
+ Some
+ (BEQ
+ ((rs, rt, imm, true, false)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
+ let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BEQ (rs,rt,imm,true,true))
+ Some
+ (BEQ
+ ((rs, rt, imm, true, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,LT',false,false))
+ Some
+ (BCMPZ
+ ((rs, imm, LT', false, false)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,LT',true,false))
+ Some
+ (BCMPZ
+ ((rs, imm, LT', true, false)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B1;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,LT',false,true))
+ Some
+ (BCMPZ
+ ((rs, imm, LT', false, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B1;B0;B0;B1;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B1;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,LT',true,true))
+ Some
+ (BCMPZ
+ ((rs, imm, LT', true, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B1] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,GE,false,false))
+ Some
+ (BCMPZ
+ ((rs, imm, GE, false, false)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B1;B0;B0;B0;B1] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B0;B1] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,GE,true,false))
+ Some
+ (BCMPZ
+ ((rs, imm, GE, true, false)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B1;B1] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,GE,false,true))
+ Some
+ (BCMPZ
+ ((rs, imm, GE, false, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B1;B0;B0;B1;B1] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B1;B0;B0;B1;B1] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,GE,true,true))
+ Some
+ (BCMPZ
+ ((rs, imm, GE, true, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B1;B1;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,GT',false,false))
+ Some
+ (BCMPZ
+ ((rs, imm, GT', false, false)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B0;B1;B1;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,GT',false,true))
+ Some
+ (BCMPZ
+ ((rs, imm, GT', false, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B1;B1;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B1;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,LE,false,false))
+ Some
+ (BCMPZ
+ ((rs, imm, LE, false, false)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B0;B1;B1;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B0;B1;B1;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (BCMPZ (rs,imm,LE,false,true))
+ Some
+ (BCMPZ
+ ((rs, imm, LE, false, true)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword 6))))
- then
- Some (SYSCALL tt)
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ Some
+ (SYSCALL
+ (tt))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword 6))))
- then
- Some (BREAK tt)
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1] : mword (5 - 0 + 1))))) then
+ Some
+ (BREAK
+ (tt))
else if ((eq_vec v__0
(vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0]
: mword 32))) then
- Some (WAIT tt)
+ Some
+ (WAIT
+ (tt))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B0;B0;B0;B0] : mword 6))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B0;B0] : mword (5 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (TRAPREG (rs,rt,GE))
- else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B0;B0;B0;B1] : mword 6))))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
- let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (TRAPREG (rs,rt,GEU))
+ Some
+ (TRAPREG
+ ((rs, rt, GE)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword 6))))
- then
- let rs : regno := subrange_vec_dec v__0 25 21 in
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B0;B1] : mword (5 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (TRAPREG (rs,rt,LT'))
- else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B0;B0;B1;B1] : mword 6))))
- then
let rs : regno := subrange_vec_dec v__0 25 21 in
- let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (TRAPREG (rs,rt,LTU))
+ Some
+ (TRAPREG
+ ((rs, rt, GEU)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B0;B1;B0;B0] : mword 6))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B1;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, LT')))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B0;B1;B1] : mword (5 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (TRAPREG (rs,rt,EQ'))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, LTU)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B1;B1;B0;B1;B1;B0] : mword 6))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B1;B0;B0] : mword (5 - 0 + 1))))) then
+ let rt : regno := subrange_vec_dec v__0 20 16 in
let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, EQ')))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B1;B1;B0;B1;B1;B0] : mword (5 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
- Some (TRAPREG (rs,rt,NE))
+ let rs : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPREG
+ ((rs, rt, NE)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B1;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (TRAPIMM (rs,imm,EQ'))
+ Some
+ (TRAPIMM
+ ((rs, imm, EQ')))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B1;B1;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (TRAPIMM (rs,imm,NE))
+ Some
+ (TRAPIMM
+ ((rs, imm, NE)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B0;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (TRAPIMM (rs,imm,GE))
+ Some
+ (TRAPIMM
+ ((rs, imm, GE)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B0;B1] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (TRAPIMM (rs,imm,GEU))
+ Some
+ (TRAPIMM
+ ((rs, imm, GEU)))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B1;B0] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (TRAPIMM (rs,imm,LT'))
+ Some
+ (TRAPIMM
+ ((rs, imm, LT')))
else if ((andb
- (eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword 6))
- (eq_vec (subrange_vec_dec v__0 20 16) (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))))
- then
+ (eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))
+ (eq_vec (subrange_vec_dec v__0 20 16)
+ (vec_of_bits [B0;B1;B0;B1;B1] : mword (20 - 16 + 1))))) then
let rs : regno := subrange_vec_dec v__0 25 21 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (TRAPIMM (rs,imm,LTU))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B0;B0;B0] : mword 6)))
- then
- let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (TRAPIMM
+ ((rs, imm, LTU)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (B,true,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B1;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((B, true, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (B,false,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B0;B0;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((B, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (H,true,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B1;B0;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((H, true, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (H,false,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((H, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (W,true,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((W, true, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (W,false,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B1;B0;B1;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((W, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B1;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (D,false,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B1;B0;B0;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((D, false, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B0;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (W,true,true,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B1;B0;B1;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((W, true, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B0;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Load (D,false,true,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B0;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Load
+ ((D, false, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Store (B,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B0;B0;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((B, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Store (H,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B0;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((H, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Store (W,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((W, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B1;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Store (D,false,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B1;B1;B0;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((D, false, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B0;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Store (W,true,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B1;B1;B1;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((W, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B1;B1;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (Store (D,true,base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B0;B1;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (Store
+ ((D, true, base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B0;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (LWL (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B0;B1;B1;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LWL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B0;B1;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (LWR (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B0;B1;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LWR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B0;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (SWL (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B1;B1;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SWL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (SWR (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B0;B1;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SWR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B1;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (LDL (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B0;B1;B1;B0;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LDL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B0;B1;B1;B0;B1;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (LDR (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B1;B0;B0] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (LDR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B0;B0] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (SDL (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B1;B0;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SDL
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B0;B1] : mword (31 - 26 + 1)))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let offset : imm16 := subrange_vec_dec v__0 15 0 in
- Some (SDR (base,rt,offset))
- else if ((eq_vec (subrange_vec_dec v__0 31 26) (vec_of_bits [B1;B0;B1;B1;B1;B1] : mword 6)))
- then
let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (SDR
+ ((base, rt, offset)))
+ else if ((eq_vec (subrange_vec_dec v__0 31 26)
+ (vec_of_bits [B1;B0;B1;B1;B1;B1] : mword (31 - 26 + 1)))) then
let op : regno := subrange_vec_dec v__0 20 16 in
let imm : imm16 := subrange_vec_dec v__0 15 0 in
- Some (CACHE (base,op,imm))
+ let base : regno := subrange_vec_dec v__0 25 21 in
+ Some
+ (CACHE
+ ((base, op, imm)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 11)
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
- : mword 21))
- (eq_vec (subrange_vec_dec v__0 5 0) (vec_of_bits [B0;B0;B1;B1;B1;B1] : mword 6))))
- then
- Some (SYNC tt)
+ : mword (31 - 11 + 1)))
+ (eq_vec (subrange_vec_dec v__0 5 0)
+ (vec_of_bits [B0;B0;B1;B1;B1;B1] : mword (5 - 0 + 1))))) then
+ Some
+ (SYNC
+ (tt))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 11))
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 10 3)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sel : bits 3 := subrange_vec_dec v__0 2 0 in
- Some (MFC0 (rt,rd,sel,false))
+ Some
+ (MFC0
+ ((rt, rd, sel, false)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 11))
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 10 3)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sel : bits 3 := subrange_vec_dec v__0 2 0 in
- Some (MFC0 (rt,rd,sel,true))
+ Some
+ (MFC0
+ ((rt, rd, sel, true)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 11))
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))))
- then
- Some (HCF tt)
+ (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ Some
+ (HCF
+ (tt))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 11))
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 15 0)
- (vec_of_bits [B1;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))))
- then
- Some (HCF tt)
+ (vec_of_bits [B1;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword (15 - 0 + 1))))) then
+ Some
+ (HCF
+ (tt))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 11))
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 10 3)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sel : bits 3 := subrange_vec_dec v__0 2 0 in
- Some (MTC0 (rt,rd,sel,false))
+ Some
+ (MTC0
+ ((rt, rd, sel, false)))
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 11))
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 10 3)
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (10 - 3 + 1))))) then
+ let sel : bits 3 := subrange_vec_dec v__0 2 0 in
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- let sel : bits 3 := subrange_vec_dec v__0 2 0 in
- Some (MTC0 (rt,rd,sel,true))
+ Some
+ (MTC0
+ ((rt, rd, sel, true)))
else if ((eq_vec v__0
(vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0]
: mword 32))) then
- Some ((TLBWI tt)
- : ast)
+ Some
+ ((TLBWI
+ (tt))
+ : ast)
else if ((eq_vec v__0
(vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0]
: mword 32))) then
- Some ((TLBWR tt)
- : ast)
+ Some
+ ((TLBWR
+ (tt))
+ : ast)
else if ((eq_vec v__0
(vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1]
: mword 32))) then
- Some ((TLBR tt)
- : ast)
+ Some
+ ((TLBR
+ (tt))
+ : ast)
else if ((eq_vec v__0
(vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0]
: mword 32))) then
- Some ((TLBP tt)
- : ast)
+ Some
+ ((TLBP
+ (tt))
+ : ast)
else if ((andb
(eq_vec (subrange_vec_dec v__0 31 21)
- (vec_of_bits [B0;B1;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword 11))
+ (vec_of_bits [B0;B1;B1;B1;B1;B1;B0;B0;B0;B0;B0] : mword (31 - 21 + 1)))
(eq_vec (subrange_vec_dec v__0 10 0)
- (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B1;B0;B1;B1] : mword 11)))) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1;B1;B0;B1;B1] : mword (10 - 0 + 1))))) then
let rt : regno := subrange_vec_dec v__0 20 16 in
let rd : regno := subrange_vec_dec v__0 15 11 in
- Some (RDHWR (rt,rd))
+ Some
+ (RDHWR
+ ((rt, rd)))
else if ((eq_vec v__0
(vec_of_bits [B0;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0]
: mword 32))) then
- Some (ERET tt)
- else Some (RI tt).
+ Some
+ (ERET
+ (tt))
+ else Some (RI (tt)).
Definition execute_XORI (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun w__0 => (wGPR rt (xor_vec w__0 (mips_zero_extend 64 imm))) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (xor_vec w__0 (mips_zero_extend 64 imm)))
+ : M (unit).
Definition execute_XOR (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => rGPR rt >>= fun w__1 => (wGPR rd (xor_vec w__0 w__1)) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (xor_vec w__0 w__1)) : M (unit).
-Definition execute_WAIT (g__16 : unit)
+Definition execute_WAIT '(tt : unit)
: M (unit) :=
- (read_reg PC_ref : M (mword 64)) >>= fun w__0 => write_reg nextPC_ref w__0 : M (unit).
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ write_reg NextPC_ref w__1
+ : M (unit).
Definition execute_TRAPREG (rs : mword 5) (rt : mword 5) (cmp : Comparison)
: M (unit) :=
- rGPR rs >>= fun rs_val =>
- rGPR rt >>= fun rt_val =>
+
+ (rGPR rs) >>= fun rs_val =>
+ (rGPR rt) >>= fun rt_val =>
let condition := compare cmp rs_val rt_val in
(if (condition) then (SignalException Tr) : M (unit)
else returnm (tt : unit))
@@ -3246,54 +3909,63 @@ Definition execute_TRAPREG (rs : mword 5) (rt : mword 5) (cmp : Comparison)
Definition execute_TRAPIMM (rs : mword 5) (imm : mword 16) (cmp : Comparison)
: M (unit) :=
- rGPR rs >>= fun rs_val =>
+
+ (rGPR rs) >>= fun rs_val =>
let imm_val : bits 64 := mips_sign_extend 64 imm in
let condition := compare cmp rs_val imm_val in
(if (condition) then (SignalException Tr) : M (unit)
else returnm (tt : unit))
: M (unit).
-Definition execute_TLBWR (g__20 : unit)
+Definition execute_TLBWR '(tt : unit)
: M (unit) :=
- checkCP0Access tt >>
- (read_reg TLBRandom_ref : M (mword 6)) >>= fun w__0 => (TLBWriteEntry w__0) : M (unit).
+
+ (checkCP0Access tt) >>
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ (TLBWriteEntry w__0)
+ : M (unit).
-Definition execute_TLBWI (g__19 : unit)
+Definition execute_TLBWI '(tt : unit)
: M (unit) :=
- checkCP0Access tt >>
- (read_reg TLBIndex_ref : M (mword 6)) >>= fun w__0 => (TLBWriteEntry w__0) : M (unit).
+
+ (checkCP0Access tt) >>
+ ((read_reg TLBIndex_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ (TLBWriteEntry w__0)
+ : M (unit).
-Definition execute_TLBR (g__21 : unit)
+Definition execute_TLBR '(tt : unit)
: M (unit) :=
- checkCP0Access tt >>
- (read_reg TLBIndex_ref : M (mword 6)) >>= fun w__0 =>
- let '(existT _ i _) := uint w__0 in
- reg_deref (vec_access_dec TLBEntries i) >>= fun entry =>
+
+ (checkCP0Access tt) >>
+ ((read_reg TLBIndex_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ let 'i := projT1 (uint w__0) in
+ (reg_deref (vec_access_dec TLBEntries i)) >>= fun entry =>
write_reg TLBPageMask_ref (_get_TLBEntry_pagemask entry) >>
- _set_TLBEntryHiReg_R TLBEntryHi_ref (_get_TLBEntry_r entry) >>
- _set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (_get_TLBEntry_vpn2 entry) >>
- _set_TLBEntryHiReg_ASID TLBEntryHi_ref (_get_TLBEntry_asid entry) >>
- _set_TLBEntryLoReg_CapS TLBEntryLo0_ref (_get_TLBEntry_caps0 entry) >>
- _set_TLBEntryLoReg_CapL TLBEntryLo0_ref (_get_TLBEntry_capl0 entry) >>
- _set_TLBEntryLoReg_PFN TLBEntryLo0_ref (_get_TLBEntry_pfn0 entry) >>
- _set_TLBEntryLoReg_C TLBEntryLo0_ref (_get_TLBEntry_c0 entry) >>
- _set_TLBEntryLoReg_D TLBEntryLo0_ref (_get_TLBEntry_d0 entry) >>
- _set_TLBEntryLoReg_V TLBEntryLo0_ref (_get_TLBEntry_v0 entry) >>
- _set_TLBEntryLoReg_G TLBEntryLo0_ref (_get_TLBEntry_g entry) >>
- _set_TLBEntryLoReg_CapS TLBEntryLo1_ref (_get_TLBEntry_caps1 entry) >>
- _set_TLBEntryLoReg_CapL TLBEntryLo1_ref (_get_TLBEntry_capl1 entry) >>
- _set_TLBEntryLoReg_PFN TLBEntryLo1_ref (_get_TLBEntry_pfn1 entry) >>
- _set_TLBEntryLoReg_C TLBEntryLo1_ref (_get_TLBEntry_c1 entry) >>
- _set_TLBEntryLoReg_D TLBEntryLo1_ref (_get_TLBEntry_d1 entry) >>
- _set_TLBEntryLoReg_V TLBEntryLo1_ref (_get_TLBEntry_v1 entry) >>
+ (_set_TLBEntryHiReg_R TLBEntryHi_ref (_get_TLBEntry_r entry)) >>
+ (_set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (_get_TLBEntry_vpn2 entry)) >>
+ (_set_TLBEntryHiReg_ASID TLBEntryHi_ref (_get_TLBEntry_asid entry)) >>
+ (_set_TLBEntryLoReg_CapS TLBEntryLo0_ref (_get_TLBEntry_caps0 entry)) >>
+ (_set_TLBEntryLoReg_CapL TLBEntryLo0_ref (_get_TLBEntry_capl0 entry)) >>
+ (_set_TLBEntryLoReg_PFN TLBEntryLo0_ref (_get_TLBEntry_pfn0 entry)) >>
+ (_set_TLBEntryLoReg_C TLBEntryLo0_ref (_get_TLBEntry_c0 entry)) >>
+ (_set_TLBEntryLoReg_D TLBEntryLo0_ref (_get_TLBEntry_d0 entry)) >>
+ (_set_TLBEntryLoReg_V TLBEntryLo0_ref (_get_TLBEntry_v0 entry)) >>
+ (_set_TLBEntryLoReg_G TLBEntryLo0_ref (_get_TLBEntry_g entry)) >>
+ (_set_TLBEntryLoReg_CapS TLBEntryLo1_ref (_get_TLBEntry_caps1 entry)) >>
+ (_set_TLBEntryLoReg_CapL TLBEntryLo1_ref (_get_TLBEntry_capl1 entry)) >>
+ (_set_TLBEntryLoReg_PFN TLBEntryLo1_ref (_get_TLBEntry_pfn1 entry)) >>
+ (_set_TLBEntryLoReg_C TLBEntryLo1_ref (_get_TLBEntry_c1 entry)) >>
+ (_set_TLBEntryLoReg_D TLBEntryLo1_ref (_get_TLBEntry_d1 entry)) >>
+ (_set_TLBEntryLoReg_V TLBEntryLo1_ref (_get_TLBEntry_v1 entry)) >>
(_set_TLBEntryLoReg_G TLBEntryLo1_ref (_get_TLBEntry_g entry))
: M (unit).
-Definition execute_TLBP (g__22 : unit)
+Definition execute_TLBP '(tt : unit)
: M (unit) :=
- checkCP0Access tt >>
- read_reg TLBEntryHi_ref >>= fun w__0 =>
- tlbSearch (_get_TLBEntryHiReg_bits w__0) >>= fun result =>
+
+ (checkCP0Access tt) >>
+ read_reg TLBEntryHi_ref >>= fun w__0 : TLBEntryHiReg =>
+ (tlbSearch (_get_TLBEntryHiReg_bits w__0)) >>= fun result =>
(match result with
| Some (idx) =>
write_reg TLBProbe_ref (vec_of_bits [B0] : mword 1) >>
@@ -3306,25 +3978,27 @@ Definition execute_TLBP (g__22 : unit)
end)
: M (unit).
-Definition execute_Store (width : WordType) (conditional : bool) (base : mword 5) (rt : mword 5) (offset : mword 16)
+Definition execute_Store
+(width : WordType) (conditional : bool) (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr : bits 64 := addrWrapper (add_vec (mips_sign_extend 64 offset) w__0) StoreData width in
- rGPR rt >>= fun rt_val =>
+ (rGPR rt) >>= fun rt_val =>
(if ((negb (isAddressAligned vAddr width))) then (SignalExceptionBadAddr AdES vAddr) : M (unit)
else
- TLBTranslate vAddr StoreData >>= fun pAddr =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
(if (conditional) then
- (read_reg CP0LLBit_ref : M (mword 1)) >>= fun w__1 =>
+ ((read_reg CP0LLBit_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
(if (((bit_to_bool (access_vec_dec w__1 0)) : bool)) then
(match width with
| W => (MEMw_conditional_wrapper pAddr 4 (subrange_vec_dec rt_val 31 0)) : M (bool)
| D => (MEMw_conditional_wrapper pAddr 8 rt_val) : M (bool)
- | _ => (throw (Error_internal_error tt)) : M (bool)
+ | _ => (throw (Error_internal_error (tt))) : M (bool)
end)
: M (bool)
- else returnm (false : bool)) >>= fun success =>
- (wGPR rt (mips_zero_extend 64 ((bool_to_bits success) : mword 1)))
+ else returnm (false : bool)) >>= fun success : bool =>
+ (wGPR rt (mips_zero_extend 64 (bool_to_bits success)))
: M (unit)
else
(match width with
@@ -3337,25 +4011,26 @@ Definition execute_Store (width : WordType) (conditional : bool) (base : mword 5
: M (unit))
: M (unit).
-Definition execute_SYSCALL (g__14 : unit) : M (unit) := (SignalException Sys) : M (unit).
+Definition execute_SYSCALL '(tt : unit) : M (unit) := (SignalException Sys) : M (unit).
-Definition execute_SYNC (g__17 : unit) : M (unit) := (MEM_sync tt) : M (unit).
+Definition execute_SYNC '(tt : unit) : M (unit) := (MEM_sync tt) : M (unit).
Definition execute_SWR (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData WR in
- TLBTranslate vAddr StoreData >>= fun pAddr =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
let wordAddr := concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2) in
- rGPR rt >>= fun reg_val =>
+ (rGPR rt) >>= fun reg_val =>
let b__12 := subrange_vec_dec vAddr 1 0 in
- (if ((eq_vec b__12 (vec_of_bits [B0;B0] : mword 2))) then
+ (if ((eq_vec b__12 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
(MEMw_wrapper wordAddr 1 (subrange_vec_dec reg_val 7 0))
: M (unit)
- else if ((eq_vec b__12 (vec_of_bits [B0;B1] : mword 2))) then
+ else if ((eq_vec b__12 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
(MEMw_wrapper wordAddr 2 (subrange_vec_dec reg_val 15 0))
: M (unit)
- else if ((eq_vec b__12 (vec_of_bits [B1;B0] : mword 2))) then
+ else if ((eq_vec b__12 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
(MEMw_wrapper wordAddr 3 (subrange_vec_dec reg_val 23 0))
: M (unit)
else (MEMw_wrapper wordAddr 4 (subrange_vec_dec reg_val 31 0)) : M (unit))
@@ -3363,18 +4038,19 @@ Definition execute_SWR (base : mword 5) (rt : mword 5) (offset : mword 16)
Definition execute_SWL (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData WL in
- TLBTranslate vAddr StoreData >>= fun pAddr =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (rGPR rt) >>= fun reg_val =>
let b__8 := subrange_vec_dec vAddr 1 0 in
- (if ((eq_vec b__8 (vec_of_bits [B0;B0] : mword 2))) then
+ (if ((eq_vec b__8 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
(MEMw_wrapper pAddr 4 (subrange_vec_dec reg_val 31 0))
: M (unit)
- else if ((eq_vec b__8 (vec_of_bits [B0;B1] : mword 2))) then
+ else if ((eq_vec b__8 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
(MEMw_wrapper pAddr 3 (subrange_vec_dec reg_val 31 8))
: M (unit)
- else if ((eq_vec b__8 (vec_of_bits [B1;B0] : mword 2))) then
+ else if ((eq_vec b__8 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
(MEMw_wrapper pAddr 2 (subrange_vec_dec reg_val 31 16))
: M (unit)
else (MEMw_wrapper pAddr 1 (subrange_vec_dec reg_val 31 24)) : M (unit))
@@ -3382,10 +4058,11 @@ Definition execute_SWL (base : mword 5) (rt : mword 5) (offset : mword 16)
Definition execute_SUBU (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun opA =>
- rGPR rt >>= fun opB =>
+
+ (rGPR rs) >>= fun opA =>
+ (rGPR rt) >>= fun opB =>
(if ((orb (NotWordVal opA) (NotWordVal opB))) then
- undefined_bitvector 64 >>= fun w__0 => (wGPR rd w__0) : M (unit)
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
else
(wGPR rd
(mips_sign_extend 64 (sub_vec (subrange_vec_dec opA 31 0) (subrange_vec_dec opB 31 0))))
@@ -3394,10 +4071,11 @@ Definition execute_SUBU (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_SUB (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun opA =>
- rGPR rt >>= fun opB =>
+
+ (rGPR rs) >>= fun opA =>
+ (rGPR rt) >>= fun opB =>
(if ((orb (NotWordVal opA) (NotWordVal opB))) then
- undefined_bitvector 64 >>= fun w__0 => (wGPR rd w__0) : M (unit)
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
else
let temp33 : bits 33 :=
sub_vec (mips_sign_extend 33 (subrange_vec_dec opA 31 0))
@@ -3413,52 +4091,65 @@ Definition execute_SUB (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_SRLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
- rGPR rs >>= fun w__0 =>
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
let sa := subrange_vec_dec w__0 4 0 in
- (if ((NotWordVal temp)) then undefined_bitvector 64 >>= fun w__1 => (wGPR rd w__1) : M (unit)
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
else
let rt32 := subrange_vec_dec temp 31 0 in
- shift_bits_right rt32 sa >>= fun w__2 => (wGPR rd (mips_sign_extend 64 w__2)) : M (unit))
+ (shift_bits_right rt32 sa) >>= fun w__2 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__2))
+ : M (unit))
: M (unit).
Definition execute_SRL (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
- (if ((NotWordVal temp)) then undefined_bitvector 64 >>= fun w__0 => (wGPR rd w__0) : M (unit)
+
+ (rGPR rt) >>= fun temp =>
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
else
let rt32 := subrange_vec_dec temp 31 0 in
- shift_bits_right rt32 sa >>= fun w__1 => (wGPR rd (mips_sign_extend 64 w__1)) : M (unit))
+ (shift_bits_right rt32 sa) >>= fun w__1 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__1))
+ : M (unit))
: M (unit).
Definition execute_SRAV (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
- rGPR rs >>= fun w__0 =>
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
let sa := subrange_vec_dec w__0 4 0 in
- (if ((NotWordVal temp)) then undefined_bitvector 64 >>= fun w__1 => (wGPR rd w__1) : M (unit)
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
else
let rt32 := subrange_vec_dec temp 31 0 in
- shift_bits_right_arith rt32 sa >>= fun w__2 =>
+ (shift_bits_right_arith rt32 sa) >>= fun w__2 : mword (31 - 0 + 1) =>
(wGPR rd (mips_sign_extend 64 w__2))
: M (unit))
: M (unit).
Definition execute_SRA (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
- (if ((NotWordVal temp)) then undefined_bitvector 64 >>= fun w__0 => (wGPR rd w__0) : M (unit)
+
+ (rGPR rt) >>= fun temp =>
+ (if ((NotWordVal temp)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
else
let rt32 := subrange_vec_dec temp 31 0 in
- shift_bits_right_arith rt32 sa >>= fun w__1 =>
+ (shift_bits_right_arith rt32 sa) >>= fun w__1 : mword (31 - 0 + 1) =>
(wGPR rd (mips_sign_extend 64 w__1))
: M (unit))
: M (unit).
Definition execute_SLTU (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun rs_val =>
- rGPR rt >>= fun rt_val =>
+
+ (rGPR rs) >>= fun rs_val =>
+ (rGPR rt) >>= fun rt_val =>
(wGPR rd
(mips_zero_extend 64
(if ((zopz0zI_u rs_val rt_val)) then (vec_of_bits [B1] : mword 1)
@@ -3467,7 +4158,8 @@ Definition execute_SLTU (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_SLTIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun rs_val =>
+
+ (rGPR rs) >>= fun rs_val =>
let immext : bits 64 := mips_sign_extend 64 imm in
(wGPR rt
(mips_zero_extend 64
@@ -3477,9 +4169,10 @@ Definition execute_SLTIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
Definition execute_SLTI (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- let '(existT _ imm_val _) := sint imm in
- rGPR rs >>= fun w__0 =>
- let '(existT _ rs_val _) := sint w__0 in
+
+ let 'imm_val := projT1 (sint imm) in
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let 'rs_val := projT1 (sint w__0) in
(wGPR rt
(mips_zero_extend 64
(if sumbool_of_bool ((Z.ltb rs_val imm_val)) then (vec_of_bits [B1] : mword 1)
@@ -3488,8 +4181,9 @@ Definition execute_SLTI (rs : mword 5) (rt : mword 5) (imm : mword 16)
Definition execute_SLT (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rt >>= fun w__1 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
(wGPR rd
(mips_zero_extend 64
(if ((zopz0zI_s w__0 w__1)) then (vec_of_bits [B1] : mword 1)
@@ -3498,45 +4192,52 @@ Definition execute_SLT (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_SLLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
let sa := subrange_vec_dec w__0 4 0 in
- rGPR rt >>= fun w__1 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
let rt32 := subrange_vec_dec w__1 31 0 in
- shift_bits_left rt32 sa >>= fun w__2 => (wGPR rd (mips_sign_extend 64 w__2)) : M (unit).
+ (shift_bits_left rt32 sa) >>= fun w__2 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__2))
+ : M (unit).
Definition execute_SLL (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun w__0 =>
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
let rt32 := subrange_vec_dec w__0 31 0 in
- shift_bits_left rt32 sa >>= fun w__1 => (wGPR rd (mips_sign_extend 64 w__1)) : M (unit).
+ (shift_bits_left rt32 sa) >>= fun w__1 : mword (31 - 0 + 1) =>
+ (wGPR rd (mips_sign_extend 64 w__1))
+ : M (unit).
Definition execute_SDR (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData DR in
- TLBTranslate vAddr StoreData >>= fun pAddr =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (rGPR rt) >>= fun reg_val =>
let wordAddr := concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3) in
let b__40 := subrange_vec_dec vAddr 2 0 in
- (if ((eq_vec b__40 (vec_of_bits [B0;B0;B0] : mword 3))) then
+ (if ((eq_vec b__40 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 1 (subrange_vec_dec reg_val 7 0))
: M (unit)
- else if ((eq_vec b__40 (vec_of_bits [B0;B0;B1] : mword 3))) then
+ else if ((eq_vec b__40 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 2 (subrange_vec_dec reg_val 15 0))
: M (unit)
- else if ((eq_vec b__40 (vec_of_bits [B0;B1;B0] : mword 3))) then
+ else if ((eq_vec b__40 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 3 (subrange_vec_dec reg_val 23 0))
: M (unit)
- else if ((eq_vec b__40 (vec_of_bits [B0;B1;B1] : mword 3))) then
+ else if ((eq_vec b__40 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 4 (subrange_vec_dec reg_val 31 0))
: M (unit)
- else if ((eq_vec b__40 (vec_of_bits [B1;B0;B0] : mword 3))) then
+ else if ((eq_vec b__40 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 5 (subrange_vec_dec reg_val 39 0))
: M (unit)
- else if ((eq_vec b__40 (vec_of_bits [B1;B0;B1] : mword 3))) then
+ else if ((eq_vec b__40 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 6 (subrange_vec_dec reg_val 47 0))
: M (unit)
- else if ((eq_vec b__40 (vec_of_bits [B1;B1;B0] : mword 3))) then
+ else if ((eq_vec b__40 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper wordAddr 7 (subrange_vec_dec reg_val 55 0))
: M (unit)
else (MEMw_wrapper wordAddr 8 (subrange_vec_dec reg_val 63 0)) : M (unit))
@@ -3544,164 +4245,180 @@ Definition execute_SDR (base : mword 5) (rt : mword 5) (offset : mword 16)
Definition execute_SDL (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) StoreData DL in
- TLBTranslate vAddr StoreData >>= fun pAddr =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr StoreData) >>= fun pAddr =>
+ (rGPR rt) >>= fun reg_val =>
let b__32 := subrange_vec_dec vAddr 2 0 in
- (if ((eq_vec b__32 (vec_of_bits [B0;B0;B0] : mword 3))) then
+ (if ((eq_vec b__32 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 8 (subrange_vec_dec reg_val 63 0))
: M (unit)
- else if ((eq_vec b__32 (vec_of_bits [B0;B0;B1] : mword 3))) then
+ else if ((eq_vec b__32 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 7 (subrange_vec_dec reg_val 63 8))
: M (unit)
- else if ((eq_vec b__32 (vec_of_bits [B0;B1;B0] : mword 3))) then
+ else if ((eq_vec b__32 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 6 (subrange_vec_dec reg_val 63 16))
: M (unit)
- else if ((eq_vec b__32 (vec_of_bits [B0;B1;B1] : mword 3))) then
+ else if ((eq_vec b__32 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 5 (subrange_vec_dec reg_val 63 24))
: M (unit)
- else if ((eq_vec b__32 (vec_of_bits [B1;B0;B0] : mword 3))) then
+ else if ((eq_vec b__32 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 4 (subrange_vec_dec reg_val 63 32))
: M (unit)
- else if ((eq_vec b__32 (vec_of_bits [B1;B0;B1] : mword 3))) then
+ else if ((eq_vec b__32 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 3 (subrange_vec_dec reg_val 63 40))
: M (unit)
- else if ((eq_vec b__32 (vec_of_bits [B1;B1;B0] : mword 3))) then
+ else if ((eq_vec b__32 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
(MEMw_wrapper pAddr 2 (subrange_vec_dec reg_val 63 48))
: M (unit)
else (MEMw_wrapper pAddr 1 (subrange_vec_dec reg_val 63 56)) : M (unit))
: M (unit).
-Definition execute_RI (g__24 : unit) : M (unit) := (SignalException ResI) : M (unit).
+Definition execute_RI '(tt : unit) : M (unit) := (skip tt) >> (SignalException ResI) : M (unit).
Definition execute_RDHWR (rt : mword 5) (rd : mword 5)
: M (unit) :=
- getAccessLevel tt >>= fun accessLevel =>
+
+ (getAccessLevel tt) >>= fun accessLevel =>
let haveAccessLevel : bool := generic_eq accessLevel Kernel in
- read_reg CP0Status_ref >>= fun w__0 =>
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
let haveCU0 : bool := eq_bit B1 (access_vec_dec (_get_StatusReg_CU w__0) 0) in
- let '(existT _ rdi _) := uint rd in
- (read_reg CP0HWREna_ref : M (mword 32)) >>= fun w__1 =>
+ let 'rdi := projT1 (uint rd) in
+ ((read_reg CP0HWREna_ref) : M (mword 32)) >>= fun w__1 : bits 32 =>
let haveHWREna : bool := eq_bit B1 (access_vec_dec w__1 rdi) in
(if ((negb (orb haveAccessLevel (orb haveCU0 haveHWREna)))) then
(SignalException ResI)
: M (unit)
else returnm (tt : unit)) >>
- let b__146 := rd in
- (if ((eq_vec b__146 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))) then
+ let b__150 := rd in
+ (if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))) then
returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((eq_vec b__146 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))) then
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))) then
returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((eq_vec b__146 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))) then
- (read_reg CP0Count_ref : M (mword 32)) >>= fun w__2 =>
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))) then
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__2 : bits 32 =>
returnm ((mips_zero_extend 64 w__2)
- : bits 64)
- else if ((eq_vec b__146 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))) then
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))) then
returnm ((mips_zero_extend 64 (vec_of_bits [B1] : mword 1))
- : bits 64)
- else if ((eq_vec b__146 (vec_of_bits [B1;B1;B1;B0;B1] : mword 5))) then
- (read_reg CP0UserLocal_ref : M (mword 64))
+ : mword 64)
+ else if ((eq_vec b__150 (vec_of_bits [B1;B1;B1;B0;B1] : mword 5))) then
+ ((read_reg CP0UserLocal_ref) : M (mword 64))
: M (bits 64)
- else (SignalException ResI) : M (bits 64)) >>= fun temp =>
+ else (SignalException ResI) : M (mword 64)) >>= fun temp : bits 64 =>
(wGPR rt temp)
: M (unit).
Definition execute_ORI (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun w__0 => (wGPR rt (or_vec w__0 (mips_zero_extend 64 imm))) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (or_vec w__0 (mips_zero_extend 64 imm)))
+ : M (unit).
Definition execute_OR (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => rGPR rt >>= fun w__1 => (wGPR rd (or_vec w__0 w__1)) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (or_vec w__0 w__1)) : M (unit).
Definition execute_NOR (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rt >>= fun w__1 => (wGPR rd (not_vec (or_vec w__0 w__1))) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (not_vec (or_vec w__0 w__1))) : M (unit).
Definition execute_MULTU (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
- (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (bits 64)
- else returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0)) : bits 64)) >>= fun result =>
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun result : bits 64 =>
write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
: M (unit).
Definition execute_MULT (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
- (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (bits 64)
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
else
returnm ((mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
- : bits 64)) >>= fun result =>
+ : mword (2 * 32))) >>= fun result : bits 64 =>
write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
: M (unit).
Definition execute_MUL (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
let result : bits 64 :=
mips_sign_extend 64 (mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0)) in
(if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
- else returnm ((mips_sign_extend 64 (subrange_vec_dec result 31 0)) : mword 64)) >>= fun w__1 =>
+ else returnm ((mips_sign_extend 64 (subrange_vec_dec result 31 0)) : mword 64)) >>= fun w__1 : mword 64 =>
(wGPR rd w__1)
: M (unit).
Definition execute_MTLO (rs : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => write_reg LO_ref w__0 : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 => write_reg LO_ref w__0 : M (unit).
Definition execute_MTHI (rs : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => write_reg HI_ref w__0 : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 => write_reg HI_ref w__0 : M (unit).
Definition execute_MTC0 (rt : mword 5) (rd : mword 5) (sel : mword 3) (double : bool)
: M (unit) :=
- checkCP0Access tt >>
- rGPR rt >>= fun reg_val =>
+
+ (checkCP0Access tt) >>
+ (rGPR rt) >>= fun reg_val =>
(match (rd, sel) with
- | (b__108, b__109) =>
- (if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ | (b__112, b__113) =>
+ (if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg TLBIndex_ref (mask 6 reg_val)
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
returnm (tt
: unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
(_set_TLBEntryLoReg_bits TLBEntryLo0_ref reg_val)
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
(_set_TLBEntryLoReg_bits TLBEntryLo1_ref reg_val)
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
(_set_ContextReg_PTEBase TLBContext_ref (subrange_vec_dec reg_val 63 23))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B1;B0] : mword 3)))) then
write_reg CP0UserLocal_ref reg_val
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B1;B0;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg TLBPageMask_ref (subrange_vec_dec reg_val 28 13)
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B1;B1;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg TLBWired_ref (mask 6 reg_val) >> write_reg TLBRandom_ref TLBIndexMax : M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B0;B1;B1;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B0;B1;B1;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg
CP0HWREna_ref
(concat_vec (subrange_vec_dec reg_val 31 29)
@@ -3710,62 +4427,65 @@ Definition execute_MTC0 (rt : mword 5) (rd : mword 5) (sel : mword 3) (double :
B0;B0;B0;B0]
: mword 25) (subrange_vec_dec reg_val 3 0)))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
returnm (tt
: unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg CP0Count_ref (subrange_vec_dec reg_val 31 0)
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- _set_TLBEntryHiReg_R TLBEntryHi_ref (subrange_vec_dec reg_val 63 62) >>
- _set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (subrange_vec_dec reg_val 39 13) >>
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_TLBEntryHiReg_R TLBEntryHi_ref (subrange_vec_dec reg_val 63 62)) >>
+ (_set_TLBEntryHiReg_VPN2 TLBEntryHi_ref (subrange_vec_dec reg_val 39 13)) >>
(_set_TLBEntryHiReg_ASID TLBEntryHi_ref (subrange_vec_dec reg_val 7 0))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg CP0Compare_ref (subrange_vec_dec reg_val 31 0) >>
- read_reg CP0Cause_ref >>= fun w__0 =>
+ read_reg CP0Cause_ref >>= fun w__0 : CauseReg =>
(_set_CauseReg_IP CP0Cause_ref
(and_vec (_get_CauseReg_IP w__0) (vec_of_bits [B0;B1;B1;B1;B1;B1;B1;B1] : mword 8)))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- _set_StatusReg_CU CP0Status_ref (subrange_vec_dec reg_val 31 28) >>
- _set_StatusReg_BEV CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 22)) : mword 1) >>
- _set_StatusReg_IM CP0Status_ref (subrange_vec_dec reg_val 15 8) >>
- _set_StatusReg_KX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 7)) : mword 1) >>
- _set_StatusReg_SX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 6)) : mword 1) >>
- _set_StatusReg_UX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 5)) : mword 1) >>
- _set_StatusReg_KSU CP0Status_ref (subrange_vec_dec reg_val 4 3) >>
- _set_StatusReg_ERL CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 2)) : mword 1) >>
- _set_StatusReg_EXL CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 1)) : mword 1) >>
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_StatusReg_CU CP0Status_ref
+ (and_vec (subrange_vec_dec reg_val 31 28)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (bool_to_bits have_cp2) (vec_of_bits [B0;B1] : mword 2))))) >>
+ (_set_StatusReg_BEV CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 22)) : mword 1)) >>
+ (_set_StatusReg_IM CP0Status_ref (subrange_vec_dec reg_val 15 8)) >>
+ (_set_StatusReg_KX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 7)) : mword 1)) >>
+ (_set_StatusReg_SX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 6)) : mword 1)) >>
+ (_set_StatusReg_UX CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 5)) : mword 1)) >>
+ (_set_StatusReg_KSU CP0Status_ref (subrange_vec_dec reg_val 4 3)) >>
+ (_set_StatusReg_ERL CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 2)) : mword 1)) >>
+ (_set_StatusReg_EXL CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 1)) : mword 1)) >>
(_set_StatusReg_IE CP0Status_ref ((cast_unit_vec (access_vec_dec reg_val 0)) : mword 1))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B1;B0;B1] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- _set_CauseReg_IV CP0Cause_ref ((cast_unit_vec (access_vec_dec reg_val 23)) : mword 1) >>
- read_reg CP0Cause_ref >>= fun w__1 =>
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B1;B0;B1] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ (_set_CauseReg_IV CP0Cause_ref ((cast_unit_vec (access_vec_dec reg_val 23)) : mword 1)) >>
+ read_reg CP0Cause_ref >>= fun w__1 : CauseReg =>
let ip := _get_CauseReg_IP w__1 in
(_set_CauseReg_IP CP0Cause_ref
(concat_vec (subrange_vec_dec ip 7 2) (subrange_vec_dec reg_val 9 8)))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg CP0EPC_ref reg_val
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg CP0ConfigK0_ref (subrange_vec_dec reg_val 2 0)
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B1;B0;B1;B0;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B1;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
(_set_XContextReg_XPTEBase TLBXContext_ref (subrange_vec_dec reg_val 63 33))
: M (unit)
- else if ((andb (eq_vec b__108 (vec_of_bits [B1;B1;B1;B1;B0] : mword 5))
- (eq_vec b__109 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ else if ((andb (eq_vec b__112 (vec_of_bits [B1;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__113 (vec_of_bits [B0;B0;B0] : mword 3)))) then
write_reg CP0ErrorEPC_ref reg_val
: M (unit)
else (SignalException ResI) : M (unit))
@@ -3775,12 +4495,15 @@ Definition execute_MTC0 (rt : mword 5) (rd : mword 5) (sel : mword 3) (double :
Definition execute_MSUBU (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
- (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (bits 64)
- else returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0)) : bits 64)) >>= fun mul_result =>
- (read_reg HI_ref : M (mword 64)) >>= fun w__1 =>
- (read_reg LO_ref : M (mword 64)) >>= fun w__2 =>
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
let result :=
sub_vec (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) mul_result in
write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
@@ -3789,14 +4512,15 @@ Definition execute_MSUBU (rs : mword 5) (rt : mword 5)
Definition execute_MSUB (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
- (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (bits 64)
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
else
returnm ((mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
- : bits 64)) >>= fun mul_result =>
- (read_reg HI_ref : M (mword 64)) >>= fun w__1 =>
- (read_reg LO_ref : M (mword 64)) >>= fun w__2 =>
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
let result :=
sub_vec (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) mul_result in
write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
@@ -3805,241 +4529,265 @@ Definition execute_MSUB (rs : mword 5) (rt : mword 5)
Definition execute_MOVZ (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun w__0 =>
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
(if ((eq_vec w__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64))) then
- rGPR rs >>= fun w__1 => (wGPR rd w__1) : M (unit)
+ (rGPR rs) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
else returnm (tt : unit))
: M (unit).
Definition execute_MOVN (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun w__0 =>
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
(if ((neq_vec w__0
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64))) then
- rGPR rs >>= fun w__1 => (wGPR rd w__1) : M (unit)
+ (rGPR rs) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit)
else returnm (tt : unit))
: M (unit).
Definition execute_MFLO (rd : mword 5)
: M (unit) :=
- (read_reg LO_ref : M (mword 64)) >>= fun w__0 => (wGPR rd w__0) : M (unit).
+
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__0 : bits 64 => (wGPR rd w__0) : M (unit).
Definition execute_MFHI (rd : mword 5)
: M (unit) :=
- (read_reg HI_ref : M (mword 64)) >>= fun w__0 => (wGPR rd w__0) : M (unit).
+
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__0 : bits 64 => (wGPR rd w__0) : M (unit).
Definition execute_MFC0 (rt : mword 5) (rd : mword 5) (sel : mword 3) (double : bool)
: M (unit) :=
- checkCP0Access tt >>
- match (rd, sel) with
- | (b__48, b__49) =>
- (if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg TLBIndex_ref : M (mword 6)) >>= fun w__0 =>
- let idx : bits 31 := mips_zero_extend 31 w__0 in
- (read_reg TLBProbe_ref : M (mword 1)) >>= fun w__1 =>
- returnm ((concat_vec
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
- : mword 32) (concat_vec w__1 idx))
- : mword 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg TLBRandom_ref : M (mword 6)) >>= fun w__2 =>
- returnm ((mips_zero_extend 64 w__2)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg TLBEntryLo0_ref >>= fun w__3 =>
- returnm ((_get_TLBEntryLoReg_bits w__3)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg TLBEntryLo1_ref >>= fun w__4 =>
- returnm ((_get_TLBEntryLoReg_bits w__4)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg TLBContext_ref >>= fun w__5 => returnm ((_get_ContextReg_bits w__5) : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
- (read_reg CP0UserLocal_ref : M (mword 64))
- : M (bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg TLBPageMask_ref : M (mword 16)) >>= fun w__7 =>
- returnm ((mips_zero_extend 64
- (concat_vec w__7
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B1;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg TLBWired_ref : M (mword 6)) >>= fun w__8 =>
- returnm ((mips_zero_extend 64 w__8)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0HWREna_ref : M (mword 32)) >>= fun w__9 =>
- returnm ((mips_zero_extend 64 w__9)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0BadVAddr_ref : M (mword 64))
- : M (bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B1] : mword 3)))) then
- returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0Count_ref : M (mword 32)) >>= fun w__11 =>
- returnm ((mips_zero_extend 64 w__11)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg TLBEntryHi_ref >>= fun w__12 =>
- returnm ((_get_TLBEntryHiReg_bits w__12)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0Compare_ref : M (mword 32)) >>= fun w__13 =>
- returnm ((mips_zero_extend 64 w__13)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg CP0Status_ref >>= fun w__14 =>
- returnm ((mips_zero_extend 64 (_get_StatusReg_bits w__14))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B0;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg CP0Cause_ref >>= fun w__15 =>
- returnm ((mips_zero_extend 64 (_get_CauseReg_bits w__15))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0EPC_ref : M (mword 64))
- : M (bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- returnm ((mips_zero_extend 64
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
- : mword 32))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B1;B1;B0] : mword 3)))) then
- returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B1;B1;B1] : mword 3)))) then
- returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0ConfigK0_ref : M (mword 3)) >>= fun w__17 =>
- returnm ((mips_zero_extend 64
- (concat_vec (vec_of_bits [B1] : mword 1)
- (concat_vec
- (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 15)
- (concat_vec (vec_of_bits [B1] : mword 1)
- (concat_vec (vec_of_bits [B1;B0] : mword 2)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4) w__17))))))))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B1] : mword 3)))) then
- returnm ((mips_zero_extend 64
- (concat_vec (vec_of_bits [B1] : mword 1)
- (concat_vec TLBIndexMax
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (bool_to_bits have_cp2)
- (concat_vec (vec_of_bits [B0] : mword 1)
- (concat_vec (vec_of_bits [B0] : mword 1)
- (concat_vec (vec_of_bits [B0] : mword 1)
- (concat_vec (vec_of_bits [B0] : mword 1)
- (concat_vec
- (vec_of_bits [B0] : mword 1)
- (vec_of_bits [B0] : mword 1))))))))))))))))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
- returnm ((mips_zero_extend 64
- (concat_vec (vec_of_bits [B1] : mword 1)
- (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
- (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
- (vec_of_bits [B0;B0;B0;B0] : mword 4))))))))))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B1;B1] : mword 3)))) then
- returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0]
- : mword 64)
- : mword 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B1;B0;B1] : mword 3)))) then
- returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
- B0]
- : mword 64)
- : mword 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0LLAddr_ref : M (mword 64))
- : M (bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B1;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B1;B1] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B1;B0;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- read_reg TLBXContext_ref >>= fun w__19 =>
- returnm ((_get_XContextReg_bits w__19)
- : bits 64)
- else if ((andb (eq_vec b__48 (vec_of_bits [B1;B1;B1;B1;B0] : mword 5))
- (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
- (read_reg CP0ErrorEPC_ref : M (mword 64))
- : M (bits 64)
- else (SignalException ResI) : M (bits 64))
- : M (mword 64)
- end >>= fun result =>
+
+ (checkCP0Access tt) >>
+ (match (rd, sel) with
+ | (b__48, b__49) =>
+ (if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBIndex_ref) : M (mword 6)) >>= fun w__0 : TLBIndexT =>
+ let idx : bits 31 := mips_zero_extend 31 w__0 in
+ ((read_reg TLBProbe_ref) : M (mword 1)) >>= fun w__1 : bits 1 =>
+ returnm ((concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32) (concat_vec w__1 idx))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBRandom_ref) : M (mword 6)) >>= fun w__2 : TLBIndexT =>
+ returnm ((mips_zero_extend 64 w__2)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBEntryLo0_ref >>= fun w__3 : TLBEntryLoReg =>
+ returnm ((_get_TLBEntryLoReg_bits w__3)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBEntryLo1_ref >>= fun w__4 : TLBEntryLoReg =>
+ returnm ((_get_TLBEntryLoReg_bits w__4)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBContext_ref >>= fun w__5 : ContextReg =>
+ returnm ((_get_ContextReg_bits w__5)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ ((read_reg CP0UserLocal_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBPageMask_ref) : M (mword 16)) >>= fun w__7 : bits 16 =>
+ returnm ((mips_zero_extend 64
+ (concat_vec w__7
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg TLBWired_ref) : M (mword 6)) >>= fun w__8 : TLBIndexT =>
+ returnm ((mips_zero_extend 64 w__8)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B0;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0HWREna_ref) : M (mword 32)) >>= fun w__9 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__9)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0BadVAddr_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B1] : mword 3)))) then
+ ((read_reg CP0BadInstr_ref) : M (mword 32)) >>= fun w__11 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__11)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ ((read_reg CP0BadInstrP_ref) : M (mword 32)) >>= fun w__12 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__12)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0Count_ref) : M (mword 32)) >>= fun w__13 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__13)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBEntryHi_ref >>= fun w__14 : TLBEntryHiReg =>
+ returnm ((_get_TLBEntryHiReg_bits w__14)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B0;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0Compare_ref) : M (mword 32)) >>= fun w__15 : bits 32 =>
+ returnm ((mips_zero_extend 64 w__15)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg CP0Status_ref >>= fun w__16 : StatusReg =>
+ returnm ((mips_zero_extend 64 (_get_StatusReg_bits w__16))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg CP0Cause_ref >>= fun w__17 : CauseReg =>
+ returnm ((mips_zero_extend 64 (_get_CauseReg_bits w__17))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0EPC_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B1;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B0;B1;B1;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B1;B1] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0ConfigK0_ref) : M (mword 3)) >>= fun w__19 : bits 3 =>
+ returnm ((mips_zero_extend 64
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 15)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B1;B0] : mword 2)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4) w__19))))))))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B1] : mword 3)))) then
+ returnm ((mips_zero_extend 64
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec TLBIndexMax
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (bool_to_bits have_cp2)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec
+ (vec_of_bits [B0] : mword 1)
+ (vec_of_bits [B0] : mword 1))))))))))))))))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (vec_of_bits [B0;B0;B0;B0] : mword 4))))))))))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B1;B1] : mword 3)))) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B0;B1] : mword 3)))) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B1;B1;B0] : mword 3)))) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B0;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0LLAddr_ref) : M (mword 64))
+ : M (bits 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B0;B1;B1] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ returnm ((mips_zero_extend 64 (vec_of_bits [B0] : mword 1))
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B0;B1;B0;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ read_reg TLBXContext_ref >>= fun w__21 : XContextReg =>
+ returnm ((_get_XContextReg_bits w__21)
+ : mword 64)
+ else if ((andb (eq_vec b__48 (vec_of_bits [B1;B1;B1;B1;B0] : mword 5))
+ (eq_vec b__49 (vec_of_bits [B0;B0;B0] : mword 3)))) then
+ ((read_reg CP0ErrorEPC_ref) : M (mword 64))
+ : M (bits 64)
+ else (SignalException ResI) : M (mword 64))
+ : M (mword 64)
+ end) >>= fun result : bits 64 =>
(wGPR rt (if (double) then result else mips_sign_extend 64 (subrange_vec_dec result 31 0)))
: M (unit).
Definition execute_MADDU (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
- (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (bits 64)
- else returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0)) : bits 64)) >>= fun mul_result =>
- (read_reg HI_ref : M (mword 64)) >>= fun w__1 =>
- (read_reg LO_ref : M (mword 64)) >>= fun w__2 =>
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
+ else
+ returnm ((mult_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
let result :=
add_vec mul_result (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) in
write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
@@ -4048,68 +4796,85 @@ Definition execute_MADDU (rs : mword 5) (rt : mword 5)
Definition execute_MADD (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
- (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (bits 64)
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
+ (if ((orb (NotWordVal rsVal) (NotWordVal rtVal))) then (undefined_bitvector 64) : M (mword 64)
else
returnm ((mults_vec (subrange_vec_dec rsVal 31 0) (subrange_vec_dec rtVal 31 0))
- : bits 64)) >>= fun mul_result =>
- (read_reg HI_ref : M (mword 64)) >>= fun w__1 =>
- (read_reg LO_ref : M (mword 64)) >>= fun w__2 =>
+ : mword (2 * 32))) >>= fun mul_result : bits 64 =>
+ ((read_reg HI_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ ((read_reg LO_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
let result :=
add_vec mul_result (concat_vec (subrange_vec_dec w__1 31 0) (subrange_vec_dec w__2 31 0)) in
write_reg HI_ref (mips_sign_extend 64 (subrange_vec_dec result 63 32)) >>
write_reg LO_ref (mips_sign_extend 64 (subrange_vec_dec result 31 0))
: M (unit).
-Definition execute_Load (width : WordType) (sign : bool) (linked : bool) (base : mword 5) (rt : mword 5) (offset : mword 16)
+Definition execute_Load
+(width : WordType) (sign : bool) (linked : bool) (base : mword 5) (rt : mword 5) (offset : mword 16)
+
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr : bits 64 := addrWrapper (add_vec (mips_sign_extend 64 offset) w__0) LoadData width in
(if ((negb (isAddressAligned vAddr width))) then (SignalExceptionBadAddr AdEL vAddr) : M (unit)
else
- TLBTranslate vAddr LoadData >>= fun pAddr =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
(if (linked) then
write_reg CP0LLBit_ref (vec_of_bits [B1] : mword 1) >>
write_reg CP0LLAddr_ref pAddr >>
(match width with
| W =>
- MEMr_reserve_wrapper pAddr 4 >>= fun w__1 =>
+ (MEMr_reserve_wrapper pAddr 4) >>= fun w__1 : mword (8 * 4) =>
returnm ((extendLoad w__1 sign)
- : bits 64)
+ : mword 64)
| D =>
- MEMr_reserve_wrapper pAddr 8 >>= fun w__2 =>
+ (MEMr_reserve_wrapper pAddr 8) >>= fun w__2 : mword (8 * 8) =>
returnm ((extendLoad w__2 sign)
- : bits 64)
- | _ => (throw (Error_internal_error tt)) : M (mword 64)
+ : mword 64)
+ | _ => (throw (Error_internal_error (tt))) : M (mword 64)
end)
: M (mword 64)
else
(match width with
- | B => MEMr_wrapper pAddr 1 >>= fun w__5 => returnm ((extendLoad w__5 sign) : bits 64)
- | H => MEMr_wrapper pAddr 2 >>= fun w__6 => returnm ((extendLoad w__6 sign) : bits 64)
- | W => MEMr_wrapper pAddr 4 >>= fun w__7 => returnm ((extendLoad w__7 sign) : bits 64)
- | D => MEMr_wrapper pAddr 8 >>= fun w__8 => returnm ((extendLoad w__8 sign) : bits 64)
+ | B =>
+ (MEMr_wrapper pAddr 1) >>= fun w__5 : mword (8 * 1) =>
+ returnm ((extendLoad w__5 sign)
+ : mword 64)
+ | H =>
+ (MEMr_wrapper pAddr 2) >>= fun w__6 : mword (8 * 2) =>
+ returnm ((extendLoad w__6 sign)
+ : mword 64)
+ | W =>
+ (MEMr_wrapper pAddr 4) >>= fun w__7 : mword (8 * 4) =>
+ returnm ((extendLoad w__7 sign)
+ : mword 64)
+ | D =>
+ (MEMr_wrapper pAddr 8) >>= fun w__8 : mword (8 * 8) =>
+ returnm ((extendLoad w__8 sign)
+ : mword 64)
end)
- : M (mword 64)) >>= fun memResult =>
+ : M (mword 64)) >>= fun memResult : bits 64 =>
(wGPR rt memResult)
: M (unit))
: M (unit).
Definition execute_LWR (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData WR in
- TLBTranslate vAddr LoadData >>= fun pAddr =>
- MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2)) 4 >>= fun mem_val =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2)) 4) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
let b__4 := subrange_vec_dec vAddr 1 0 in
let result : bits 32 :=
- if ((eq_vec b__4 (vec_of_bits [B0;B0] : mword 2))) then
+ if ((eq_vec b__4 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 31 8) (subrange_vec_dec mem_val 31 24)
- else if ((eq_vec b__4 (vec_of_bits [B0;B1] : mword 2))) then
+ else if ((eq_vec b__4 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 31 16) (subrange_vec_dec mem_val 31 16)
- else if ((eq_vec b__4 (vec_of_bits [B1;B0] : mword 2))) then
+ else if ((eq_vec b__4 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 31 24) (subrange_vec_dec mem_val 31 8)
else mem_val in
(wGPR rt (mips_sign_extend 64 result))
@@ -4117,17 +4882,18 @@ Definition execute_LWR (base : mword 5) (rt : mword 5) (offset : mword 16)
Definition execute_LWL (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData WL in
- TLBTranslate vAddr LoadData >>= fun pAddr =>
- MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2)) 4 >>= fun mem_val =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 2) (vec_of_bits [B0;B0] : mword 2)) 4) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
let b__0 := subrange_vec_dec vAddr 1 0 in
let result : bits 32 :=
- if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then mem_val
- else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))) then mem_val
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 23 0) (subrange_vec_dec reg_val 7 0)
- else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 15 0) (subrange_vec_dec reg_val 15 0)
else concat_vec (subrange_vec_dec mem_val 7 0) (subrange_vec_dec reg_val 23 0) in
(wGPR rt (mips_sign_extend 64 result))
@@ -4135,6 +4901,7 @@ Definition execute_LWL (base : mword 5) (rt : mword 5) (offset : mword 16)
Definition execute_LUI (rt : mword 5) (imm : mword 16)
: M (unit) :=
+
(wGPR rt
(mips_sign_extend 64
(concat_vec imm (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 16))))
@@ -4142,112 +4909,136 @@ Definition execute_LUI (rt : mword 5) (imm : mword 16)
Definition execute_LDR (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData DR in
- TLBTranslate vAddr LoadData >>= fun pAddr =>
- MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3)) 8 >>= fun mem_val =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3)) 8) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
let b__24 := subrange_vec_dec vAddr 2 0 in
(wGPR rt
- (if ((eq_vec b__24 (vec_of_bits [B0;B0;B0] : mword 3))) then
+ (if ((eq_vec b__24 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 8) (subrange_vec_dec mem_val 63 56)
- else if ((eq_vec b__24 (vec_of_bits [B0;B0;B1] : mword 3))) then
+ else if ((eq_vec b__24 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 16) (subrange_vec_dec mem_val 63 48)
- else if ((eq_vec b__24 (vec_of_bits [B0;B1;B0] : mword 3))) then
+ else if ((eq_vec b__24 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 24) (subrange_vec_dec mem_val 63 40)
- else if ((eq_vec b__24 (vec_of_bits [B0;B1;B1] : mword 3))) then
+ else if ((eq_vec b__24 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 32) (subrange_vec_dec mem_val 63 32)
- else if ((eq_vec b__24 (vec_of_bits [B1;B0;B0] : mword 3))) then
+ else if ((eq_vec b__24 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 40) (subrange_vec_dec mem_val 63 24)
- else if ((eq_vec b__24 (vec_of_bits [B1;B0;B1] : mword 3))) then
+ else if ((eq_vec b__24 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 48) (subrange_vec_dec mem_val 63 16)
- else if ((eq_vec b__24 (vec_of_bits [B1;B1;B0] : mword 3))) then
+ else if ((eq_vec b__24 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec reg_val 63 56) (subrange_vec_dec mem_val 63 8)
else mem_val))
: M (unit).
Definition execute_LDL (base : mword 5) (rt : mword 5) (offset : mword 16)
: M (unit) :=
- rGPR base >>= fun w__0 =>
+
+ (rGPR base) >>= fun w__0 : mword 64 =>
let vAddr := addrWrapperUnaligned (add_vec (mips_sign_extend 64 offset) w__0) LoadData DL in
- TLBTranslate vAddr LoadData >>= fun pAddr =>
- MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3)) 8 >>= fun mem_val =>
- rGPR rt >>= fun reg_val =>
+ (TLBTranslate vAddr LoadData) >>= fun pAddr =>
+ (MEMr_wrapper (concat_vec (subrange_vec_dec pAddr 63 3) (vec_of_bits [B0;B0;B0] : mword 3)) 8) >>= fun mem_val =>
+ (rGPR rt) >>= fun reg_val =>
let b__16 := subrange_vec_dec vAddr 2 0 in
(wGPR rt
- (if ((eq_vec b__16 (vec_of_bits [B0;B0;B0] : mword 3))) then mem_val
- else if ((eq_vec b__16 (vec_of_bits [B0;B0;B1] : mword 3))) then
+ (if ((eq_vec b__16 (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))) then mem_val
+ else if ((eq_vec b__16 (vec_of_bits [B0;B0;B1] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 55 0) (subrange_vec_dec reg_val 7 0)
- else if ((eq_vec b__16 (vec_of_bits [B0;B1;B0] : mword 3))) then
+ else if ((eq_vec b__16 (vec_of_bits [B0;B1;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 47 0) (subrange_vec_dec reg_val 15 0)
- else if ((eq_vec b__16 (vec_of_bits [B0;B1;B1] : mword 3))) then
+ else if ((eq_vec b__16 (vec_of_bits [B0;B1;B1] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 39 0) (subrange_vec_dec reg_val 23 0)
- else if ((eq_vec b__16 (vec_of_bits [B1;B0;B0] : mword 3))) then
+ else if ((eq_vec b__16 (vec_of_bits [B1;B0;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 31 0) (subrange_vec_dec reg_val 31 0)
- else if ((eq_vec b__16 (vec_of_bits [B1;B0;B1] : mword 3))) then
+ else if ((eq_vec b__16 (vec_of_bits [B1;B0;B1] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 23 0) (subrange_vec_dec reg_val 39 0)
- else if ((eq_vec b__16 (vec_of_bits [B1;B1;B0] : mword 3))) then
+ else if ((eq_vec b__16 (vec_of_bits [B1;B1;B0] : mword (2 - 0 + 1)))) then
concat_vec (subrange_vec_dec mem_val 15 0) (subrange_vec_dec reg_val 47 0)
else concat_vec (subrange_vec_dec mem_val 7 0) (subrange_vec_dec reg_val 55 0)))
: M (unit).
Definition execute_JR (rs : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => (execute_branch w__0) : M (unit).
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (rGPR rs) >>= fun w__1 : mword 64 => (execute_branch w__1) : M (unit).
Definition execute_JALR (rs : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- execute_branch w__0 >>
- (read_reg PC_ref : M (mword 64)) >>= fun w__1 => (wGPR rd (add_vec_int w__1 8)) : M (unit).
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (rGPR rs) >>= fun w__1 : mword 64 =>
+ (execute_branch w__1) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ (wGPR rd (add_vec_int w__2 8))
+ : M (unit).
Definition execute_JAL (offset : mword 26)
: M (unit) :=
- (read_reg PC_ref : M (mword 64)) >>= fun w__0 =>
- execute_branch
- (concat_vec (subrange_vec_dec (add_vec_int w__0 4) 63 28)
- (concat_vec offset (vec_of_bits [B0;B0] : mword 2))) >>
- (read_reg PC_ref : M (mword 64)) >>= fun w__1 =>
- (wGPR (vec_of_bits [B1;B1;B1;B1;B1] : mword 5) (add_vec_int w__1 8))
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ (execute_branch
+ (concat_vec (subrange_vec_dec (add_vec_int w__1 4) 63 28)
+ (concat_vec offset (vec_of_bits [B0;B0] : mword 2)))) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ (wGPR (vec_of_bits [B1;B1;B1;B1;B1] : mword 5) (add_vec_int w__2 8))
: M (unit).
Definition execute_J (offset : mword 26)
: M (unit) :=
- (read_reg PC_ref : M (mword 64)) >>= fun w__0 =>
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
(execute_branch
- (concat_vec (subrange_vec_dec (add_vec_int w__0 4) 63 28)
+ (concat_vec (subrange_vec_dec (add_vec_int w__1 4) 63 28)
(concat_vec offset (vec_of_bits [B0;B0] : mword 2))))
: M (unit).
-Definition execute_HCF (g__18 : unit) : unit := tt.
+Definition execute_HCF '(tt : unit) : unit := tt.
-Definition execute_ERET (g__23 : unit)
+Definition execute_ERET '(tt : unit)
: M (unit) :=
- checkCP0Access tt >>
+
+ (checkCP0Access tt) >>
let '_ := (ERETHook tt) : unit in
write_reg CP0LLBit_ref (vec_of_bits [B0] : mword 1) >>
- read_reg CP0Status_ref >>= fun w__0 =>
+ read_reg CP0Status_ref >>= fun w__0 : StatusReg =>
(if ((Bool.eqb ((bits_to_bool (_get_StatusReg_ERL w__0)) : bool) ((bit_to_bool B1) : bool)))
then
- (read_reg CP0ErrorEPC_ref : M (mword 64)) >>= fun w__1 =>
- write_reg nextPC_ref w__1 >>
+ ((read_reg CP0ErrorEPC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ write_reg NextPC_ref w__1 >>
(_set_StatusReg_ERL CP0Status_ref (vec_of_bits [B0] : mword 1))
: M (unit)
else
- (read_reg CP0EPC_ref : M (mword 64)) >>= fun w__2 =>
- write_reg nextPC_ref w__2 >>
+ ((read_reg CP0EPC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ write_reg NextPC_ref w__2 >>
(_set_StatusReg_EXL CP0Status_ref (vec_of_bits [B0] : mword 1))
: M (unit))
: M (unit).
Definition execute_DSUBU (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => rGPR rt >>= fun w__1 => (wGPR rd (sub_vec w__0 w__1)) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (sub_vec w__0 w__1)) : M (unit).
Definition execute_DSUB (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rt >>= fun w__1 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
let temp65 : bits 65 := sub_vec (mips_sign_extend 65 w__0) (mips_sign_extend 65 w__1) in
(if ((neq_bool ((bit_to_bool (access_vec_dec temp65 64)) : bool)
((bit_to_bool (access_vec_dec temp65 63))
@@ -4259,59 +5050,74 @@ Definition execute_DSUB (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_DSRLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
- rGPR rs >>= fun w__0 =>
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
let sa := subrange_vec_dec w__0 5 0 in
- shift_bits_right temp sa >>= fun w__1 => (wGPR rd w__1) : M (unit).
+ (shift_bits_right temp sa) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit).
Definition execute_DSRL32 (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
+
+ (rGPR rt) >>= fun temp =>
let sa32 := concat_vec (vec_of_bits [B1] : mword 1) sa in
- shift_bits_right temp sa32 >>= fun w__0 => (wGPR rd w__0) : M (unit).
+ (shift_bits_right temp sa32) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
Definition execute_DSRL (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp => shift_bits_right temp sa >>= fun w__0 => (wGPR rd w__0) : M (unit).
+
+ (rGPR rt) >>= fun temp =>
+ (shift_bits_right temp sa) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
Definition execute_DSRAV (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
- rGPR rs >>= fun w__0 =>
+
+ (rGPR rt) >>= fun temp =>
+ (rGPR rs) >>= fun w__0 : mword 64 =>
let sa := subrange_vec_dec w__0 5 0 in
- shift_bits_right_arith temp sa >>= fun w__1 => (wGPR rd w__1) : M (unit).
+ (shift_bits_right_arith temp sa) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit).
Definition execute_DSRA32 (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp =>
+
+ (rGPR rt) >>= fun temp =>
let sa32 := concat_vec (vec_of_bits [B1] : mword 1) sa in
- shift_bits_right_arith temp sa32 >>= fun w__0 => (wGPR rd w__0) : M (unit).
+ (shift_bits_right_arith temp sa32) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
Definition execute_DSRA (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun temp => shift_bits_right_arith temp sa >>= fun w__0 => (wGPR rd w__0) : M (unit).
+
+ (rGPR rt) >>= fun temp =>
+ (shift_bits_right_arith temp sa) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit).
Definition execute_DSLLV (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rt >>= fun w__0 =>
- rGPR rs >>= fun w__1 =>
- shift_bits_left w__0 (subrange_vec_dec w__1 5 0) >>= fun w__2 => (wGPR rd w__2) : M (unit).
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (rGPR rs) >>= fun w__1 : mword 64 =>
+ (shift_bits_left w__0 (subrange_vec_dec w__1 5 0)) >>= fun w__2 : mword 64 =>
+ (wGPR rd w__2)
+ : M (unit).
Definition execute_DSLL32 (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun w__0 =>
- shift_bits_left w__0 (concat_vec (vec_of_bits [B1] : mword 1) sa) >>= fun w__1 =>
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (shift_bits_left w__0 (concat_vec (vec_of_bits [B1] : mword 1) sa)) >>= fun w__1 : mword 64 =>
(wGPR rd w__1)
: M (unit).
Definition execute_DSLL (rt : mword 5) (rd : mword 5) (sa : mword 5)
: M (unit) :=
- rGPR rt >>= fun w__0 => shift_bits_left w__0 sa >>= fun w__1 => (wGPR rd w__1) : M (unit).
+
+ (rGPR rt) >>= fun w__0 : mword 64 =>
+ (shift_bits_left w__0 sa) >>= fun w__1 : mword 64 => (wGPR rd w__1) : M (unit).
Definition execute_DMULTU (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rt >>= fun w__1 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
let result := mult_vec w__0 w__1 in
write_reg HI_ref (subrange_vec_dec result 127 64) >>
write_reg LO_ref (subrange_vec_dec result 63 0)
@@ -4319,8 +5125,9 @@ Definition execute_DMULTU (rs : mword 5) (rt : mword 5)
Definition execute_DMULT (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rt >>= fun w__1 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
let result := mults_vec w__0 w__1 in
write_reg HI_ref (subrange_vec_dec result 127 64) >>
write_reg LO_ref (subrange_vec_dec result 63 0)
@@ -4328,8 +5135,9 @@ Definition execute_DMULT (rs : mword 5) (rt : mword 5)
Definition execute_DIVU (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
(if ((orb (NotWordVal rsVal)
(orb (NotWordVal rtVal)
(eq_vec rtVal
@@ -4338,23 +5146,21 @@ Definition execute_DIVU (rs : mword 5) (rt : mword 5)
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64))))) then
- undefined_bitvector 32 >>= fun w__0 =>
- undefined_bitvector 32 >>= fun w__1 =>
- returnm ((w__0 : bits 32, w__1 : bits 32)
- : (bits 32 * bits 32))
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
+ (undefined_bitvector 32) >>= fun w__1 : mword 32 => returnm (w__0 : bits 32, w__1 : bits 32)
else
- let '(existT _ si _) := uint (subrange_vec_dec rsVal 31 0) in
- let '(existT _ ti _) := uint (subrange_vec_dec rtVal 31 0) in
+ let 'si := projT1 (uint (subrange_vec_dec rsVal 31 0)) in
+ let 'ti := projT1 (uint (subrange_vec_dec rtVal 31 0)) in
let qi := Z.quot si ti in
let ri := Z.rem si ti in
- returnm ((to_bits 32 qi, to_bits 32 ri)
- : (mword 32 * mword 32))) >>= fun '(q, r) =>
+ returnm (to_bits 32 qi, to_bits 32 ri)) >>= fun '(q, r) =>
write_reg HI_ref (mips_sign_extend 64 r) >> write_reg LO_ref (mips_sign_extend 64 q) : M (unit).
Definition execute_DIV (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun rsVal =>
- rGPR rt >>= fun rtVal =>
+
+ (rGPR rs) >>= fun rsVal =>
+ (rGPR rt) >>= fun rtVal =>
(if ((orb (NotWordVal rsVal)
(orb (NotWordVal rtVal)
(eq_vec rtVal
@@ -4363,66 +5169,65 @@ Definition execute_DIV (rs : mword 5) (rt : mword 5)
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64))))) then
- undefined_bitvector 32 >>= fun w__0 =>
- undefined_bitvector 32 >>= fun w__1 =>
- returnm ((w__0 : bits 32, w__1 : bits 32)
- : (bits 32 * bits 32))
+ (undefined_bitvector 32) >>= fun w__0 : mword 32 =>
+ (undefined_bitvector 32) >>= fun w__1 : mword 32 => returnm (w__0 : bits 32, w__1 : bits 32)
else
- let '(existT _ si _) := sint (subrange_vec_dec rsVal 31 0) in
- let '(existT _ ti _) := sint (subrange_vec_dec rtVal 31 0) in
+ let 'si := projT1 (sint (subrange_vec_dec rsVal 31 0)) in
+ let 'ti := projT1 (sint (subrange_vec_dec rtVal 31 0)) in
let qi := Z.quot si ti in
let ri := Z.sub si (Z.mul ti qi) in
- returnm ((to_bits 32 qi, to_bits 32 ri)
- : (mword 32 * mword 32))) >>= fun '(q, r) =>
+ returnm (to_bits 32 qi, to_bits 32 ri)) >>= fun '(q, r) =>
write_reg HI_ref (mips_sign_extend 64 r) >> write_reg LO_ref (mips_sign_extend 64 q) : M (unit).
Definition execute_DDIVU (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- let '(existT _ rsVal _) := uint w__0 in
- rGPR rt >>= fun w__1 =>
- let '(existT _ rtVal _) := uint w__1 in
- (if ((eq_range (build_ex rtVal) (build_ex 0))) then
- undefined_bitvector 64 >>= fun w__2 =>
- undefined_bitvector 64 >>= fun w__3 =>
- returnm ((w__2 : bits 64, w__3 : bits 64)
- : (bits 64 * bits 64))
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let 'rsVal := projT1 (uint w__0) in
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let 'rtVal := projT1 (uint w__1) in
+ (if sumbool_of_bool ((Z.eqb rtVal 0)) then
+ (undefined_bitvector 64) >>= fun w__2 : mword 64 =>
+ (undefined_bitvector 64) >>= fun w__3 : mword 64 => returnm (w__2 : bits 64, w__3 : bits 64)
else
let qi := Z.quot rsVal rtVal in
let ri := Z.rem rsVal rtVal in
- returnm ((to_bits 64 qi, to_bits 64 ri)
- : (mword 64 * mword 64))) >>= fun '(q, r) =>
+ returnm (to_bits 64 qi, to_bits 64 ri)) >>= fun '(q, r) =>
write_reg LO_ref q >> write_reg HI_ref r : M (unit).
Definition execute_DDIV (rs : mword 5) (rt : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- let '(existT _ rsVal _) := sint w__0 in
- rGPR rt >>= fun w__1 =>
- let '(existT _ rtVal _) := sint w__1 in
- (if ((eq_range (build_ex rtVal) (build_ex 0))) then
- undefined_bitvector 64 >>= fun w__2 =>
- undefined_bitvector 64 >>= fun w__3 =>
- returnm ((w__2 : bits 64, w__3 : bits 64)
- : (bits 64 * bits 64))
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ let 'rsVal := projT1 (sint w__0) in
+ (rGPR rt) >>= fun w__1 : mword 64 =>
+ let 'rtVal := projT1 (sint w__1) in
+ (if sumbool_of_bool ((Z.eqb rtVal 0)) then
+ (undefined_bitvector 64) >>= fun w__2 : mword 64 =>
+ (undefined_bitvector 64) >>= fun w__3 : mword 64 => returnm (w__2 : bits 64, w__3 : bits 64)
else
let qi := Z.quot rsVal rtVal in
let ri := Z.sub rsVal (Z.mul qi rtVal) in
- returnm ((to_bits 64 qi, to_bits 64 ri)
- : (mword 64 * mword 64))) >>= fun '(q, r) =>
+ returnm (to_bits 64 qi, to_bits 64 ri)) >>= fun '(q, r) =>
write_reg LO_ref q >> write_reg HI_ref r : M (unit).
Definition execute_DADDU (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => rGPR rt >>= fun w__1 => (wGPR rd (add_vec w__0 w__1)) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (add_vec w__0 w__1)) : M (unit).
Definition execute_DADDIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun w__0 => (wGPR rt (add_vec w__0 (mips_sign_extend 64 imm))) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (add_vec w__0 (mips_sign_extend 64 imm)))
+ : M (unit).
Definition execute_DADDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
let sum65 : bits 65 := add_vec (mips_sign_extend 65 w__0) (mips_sign_extend 65 imm) in
(if ((neq_bool ((bit_to_bool (access_vec_dec sum65 64)) : bool)
((bit_to_bool (access_vec_dec sum65 63))
@@ -4434,8 +5239,9 @@ Definition execute_DADDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
Definition execute_DADD (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rt >>= fun w__1 =>
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 =>
let sum65 : bits 65 := add_vec (mips_sign_extend 65 w__0) (mips_sign_extend 65 w__1) in
(if ((neq_bool ((bit_to_bool (access_vec_dec sum65 64)) : bool)
((bit_to_bool (access_vec_dec sum65 63))
@@ -4447,65 +5253,80 @@ Definition execute_DADD (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_CACHE (base : mword 5) (op : mword 5) (imm : mword 16)
: M (unit) :=
+
(checkCP0Access tt)
: M (unit).
-Definition execute_BREAK (g__15 : unit) : M (unit) := (SignalException Bp) : M (unit).
+Definition execute_BREAK '(tt : unit) : M (unit) := (SignalException Bp) : M (unit).
Definition execute_BEQ (rs : mword 5) (rd : mword 5) (imm : mword 16) (ne : bool) (likely : bool)
: M (unit) :=
- rGPR rs >>= fun w__0 =>
- rGPR rd >>= fun w__1 =>
- (if (((bits_to_bool
- (xor_vec ((bool_to_bits (eq_vec w__0 w__1)) : mword 1) ((bool_to_bits ne) : mword 1)))
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ (rGPR rs) >>= fun w__1 : mword 64 =>
+ (rGPR rd) >>= fun w__2 : mword 64 =>
+ (if (((bits_to_bool (xor_vec (bool_to_bits (eq_vec w__1 w__2)) ((bool_to_bits ne) : mword 1)))
: bool)) then
let offset : bits 64 :=
add_vec_int (mips_sign_extend 64 (concat_vec imm (vec_of_bits [B0;B0] : mword 2))) 4 in
- (read_reg PC_ref : M (mword 64)) >>= fun w__2 =>
- (execute_branch (add_vec w__2 offset))
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : bits 64 =>
+ (execute_branch (add_vec w__3 offset))
: M (unit)
else if (likely) then
- (read_reg PC_ref : M (mword 64)) >>= fun w__3 =>
- write_reg nextPC_ref (add_vec_int w__3 8)
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__4 : bits 64 =>
+ write_reg NextPC_ref (add_vec_int w__4 8)
: M (unit)
- else returnm (tt : unit))
+ else write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1) : M (unit))
: M (unit).
-Definition execute_BCMPZ (rs : mword 5) (imm : mword 16) (cmp : Comparison) (link : bool) (likely : bool)
+Definition execute_BCMPZ
+(rs : mword 5) (imm : mword 16) (cmp : Comparison) (link : bool) (likely : bool)
: M (unit) :=
- (read_reg PC_ref : M (mword 64)) >>= fun w__0 =>
- let linkVal := add_vec_int w__0 8 in
- rGPR rs >>= fun regVal =>
+
+ ((read_reg InBranchDelay_ref) : M (mword 1)) >>= fun w__0 : bits 1 =>
+ (if (((bits_to_bool w__0) : bool)) then (SignalException ResI) : M (unit)
+ else returnm (tt : unit)) >>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : bits 64 =>
+ let linkVal := add_vec_int w__1 8 in
+ (rGPR rs) >>= fun regVal =>
let condition := compare cmp regVal (mips_zero_extend 64 (vec_of_bits [B0] : mword 1)) in
(if (condition) then
let offset : bits 64 :=
add_vec_int (mips_sign_extend 64 (concat_vec imm (vec_of_bits [B0;B0] : mword 2))) 4 in
- (read_reg PC_ref : M (mword 64)) >>= fun w__1 =>
- (execute_branch (add_vec w__1 offset))
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : bits 64 =>
+ (execute_branch (add_vec w__2 offset))
: M (unit)
else if (likely) then
- (read_reg PC_ref : M (mword 64)) >>= fun w__2 =>
- write_reg nextPC_ref (add_vec_int w__2 8)
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : bits 64 =>
+ write_reg NextPC_ref (add_vec_int w__3 8)
: M (unit)
- else returnm (tt : unit)) >>
+ else write_reg NextInBranchDelay_ref (vec_of_bits [B1] : mword 1) : M (unit)) >>
(if (link) then (wGPR (vec_of_bits [B1;B1;B1;B1;B1] : mword 5) linkVal) : M (unit)
else returnm (tt : unit))
: M (unit).
Definition execute_ANDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun w__0 => (wGPR rt (and_vec w__0 (mips_zero_extend 64 imm))) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (wGPR rt (and_vec w__0 (mips_zero_extend 64 imm)))
+ : M (unit).
Definition execute_AND (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun w__0 => rGPR rt >>= fun w__1 => (wGPR rd (and_vec w__0 w__1)) : M (unit).
+
+ (rGPR rs) >>= fun w__0 : mword 64 =>
+ (rGPR rt) >>= fun w__1 : mword 64 => (wGPR rd (and_vec w__0 w__1)) : M (unit).
Definition execute_ADDU (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun opA =>
- rGPR rt >>= fun opB =>
+
+ (rGPR rs) >>= fun opA =>
+ (rGPR rt) >>= fun opB =>
(if ((orb (NotWordVal opA) (NotWordVal opB))) then
- undefined_bitvector 64 >>= fun w__0 => (wGPR rd w__0) : M (unit)
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
else
(wGPR rd
(mips_sign_extend 64 (add_vec (subrange_vec_dec opA 31 0) (subrange_vec_dec opB 31 0))))
@@ -4514,8 +5335,10 @@ Definition execute_ADDU (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute_ADDIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun opA =>
- (if ((NotWordVal opA)) then undefined_bitvector 64 >>= fun w__0 => (wGPR rt w__0) : M (unit)
+
+ (rGPR rs) >>= fun opA =>
+ (if ((NotWordVal opA)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rt w__0) : M (unit)
else
(wGPR rt (mips_sign_extend 64 (add_vec (subrange_vec_dec opA 31 0) (mips_sign_extend 32 imm))))
: M (unit))
@@ -4523,8 +5346,10 @@ Definition execute_ADDIU (rs : mword 5) (rt : mword 5) (imm : mword 16)
Definition execute_ADDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
: M (unit) :=
- rGPR rs >>= fun opA =>
- (if ((NotWordVal opA)) then undefined_bitvector 64 >>= fun w__0 => (wGPR rt w__0) : M (unit)
+
+ (rGPR rs) >>= fun opA =>
+ (if ((NotWordVal opA)) then
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rt w__0) : M (unit)
else
let sum33 : bits 33 :=
add_vec (mips_sign_extend 33 (subrange_vec_dec opA 31 0)) (mips_sign_extend 33 imm) in
@@ -4539,10 +5364,11 @@ Definition execute_ADDI (rs : mword 5) (rt : mword 5) (imm : mword 16)
Definition execute_ADD (rs : mword 5) (rt : mword 5) (rd : mword 5)
: M (unit) :=
- rGPR rs >>= fun opA =>
- rGPR rt >>= fun opB =>
+
+ (rGPR rs) >>= fun opA : bits 64 =>
+ (rGPR rt) >>= fun opB : bits 64 =>
(if ((orb (NotWordVal opA) (NotWordVal opB))) then
- undefined_bitvector 64 >>= fun w__0 => (wGPR rd w__0) : M (unit)
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 => (wGPR rd w__0) : M (unit)
else
let sum33 : bits 33 :=
add_vec (mips_sign_extend 33 (subrange_vec_dec opA 31 0))
@@ -4558,302 +5384,315 @@ Definition execute_ADD (rs : mword 5) (rt : mword 5) (rd : mword 5)
Definition execute (merge_var : ast)
: M (unit) :=
- match merge_var with
- | DADDIU (rs,rt,imm) => (execute_DADDIU rs rt imm) : M (unit)
- | DADDU (rs,rt,rd) => (execute_DADDU rs rt rd) : M (unit)
- | DADDI (rs,rt,imm) => (execute_DADDI rs rt imm) : M (unit)
- | DADD (rs,rt,rd) => (execute_DADD rs rt rd) : M (unit)
- | ADD (rs,rt,rd) => (execute_ADD rs rt rd) : M (unit)
- | ADDI (rs,rt,imm) => (execute_ADDI rs rt imm) : M (unit)
- | ADDU (rs,rt,rd) => (execute_ADDU rs rt rd) : M (unit)
- | ADDIU (rs,rt,imm) => (execute_ADDIU rs rt imm) : M (unit)
- | DSUBU (rs,rt,rd) => (execute_DSUBU rs rt rd) : M (unit)
- | DSUB (rs,rt,rd) => (execute_DSUB rs rt rd) : M (unit)
- | SUB (rs,rt,rd) => (execute_SUB rs rt rd) : M (unit)
- | SUBU (rs,rt,rd) => (execute_SUBU rs rt rd) : M (unit)
- | AND (rs,rt,rd) => (execute_AND rs rt rd) : M (unit)
- | ANDI (rs,rt,imm) => (execute_ANDI rs rt imm) : M (unit)
- | OR (rs,rt,rd) => (execute_OR rs rt rd) : M (unit)
- | ORI (rs,rt,imm) => (execute_ORI rs rt imm) : M (unit)
- | NOR (rs,rt,rd) => (execute_NOR rs rt rd) : M (unit)
- | XOR (rs,rt,rd) => (execute_XOR rs rt rd) : M (unit)
- | XORI (rs,rt,imm) => (execute_XORI rs rt imm) : M (unit)
- | LUI (rt,imm) => (execute_LUI rt imm) : M (unit)
- | DSLL (rt,rd,sa) => (execute_DSLL rt rd sa) : M (unit)
- | DSLL32 (rt,rd,sa) => (execute_DSLL32 rt rd sa) : M (unit)
- | DSLLV (rs,rt,rd) => (execute_DSLLV rs rt rd) : M (unit)
- | DSRA (rt,rd,sa) => (execute_DSRA rt rd sa) : M (unit)
- | DSRA32 (rt,rd,sa) => (execute_DSRA32 rt rd sa) : M (unit)
- | DSRAV (rs,rt,rd) => (execute_DSRAV rs rt rd) : M (unit)
- | DSRL (rt,rd,sa) => (execute_DSRL rt rd sa) : M (unit)
- | DSRL32 (rt,rd,sa) => (execute_DSRL32 rt rd sa) : M (unit)
- | DSRLV (rs,rt,rd) => (execute_DSRLV rs rt rd) : M (unit)
- | SLL (rt,rd,sa) => (execute_SLL rt rd sa) : M (unit)
- | SLLV (rs,rt,rd) => (execute_SLLV rs rt rd) : M (unit)
- | SRA (rt,rd,sa) => (execute_SRA rt rd sa) : M (unit)
- | SRAV (rs,rt,rd) => (execute_SRAV rs rt rd) : M (unit)
- | SRL (rt,rd,sa) => (execute_SRL rt rd sa) : M (unit)
- | SRLV (rs,rt,rd) => (execute_SRLV rs rt rd) : M (unit)
- | SLT (rs,rt,rd) => (execute_SLT rs rt rd) : M (unit)
- | SLTI (rs,rt,imm) => (execute_SLTI rs rt imm) : M (unit)
- | SLTU (rs,rt,rd) => (execute_SLTU rs rt rd) : M (unit)
- | SLTIU (rs,rt,imm) => (execute_SLTIU rs rt imm) : M (unit)
- | MOVN (rs,rt,rd) => (execute_MOVN rs rt rd) : M (unit)
- | MOVZ (rs,rt,rd) => (execute_MOVZ rs rt rd) : M (unit)
- | MFHI (rd) => (execute_MFHI rd) : M (unit)
- | MFLO (rd) => (execute_MFLO rd) : M (unit)
- | MTHI (rs) => (execute_MTHI rs) : M (unit)
- | MTLO (rs) => (execute_MTLO rs) : M (unit)
- | MUL (rs,rt,rd) => (execute_MUL rs rt rd) : M (unit)
- | MULT (rs,rt) => (execute_MULT rs rt) : M (unit)
- | MULTU (rs,rt) => (execute_MULTU rs rt) : M (unit)
- | DMULT (rs,rt) => (execute_DMULT rs rt) : M (unit)
- | DMULTU (rs,rt) => (execute_DMULTU rs rt) : M (unit)
- | MADD (rs,rt) => (execute_MADD rs rt) : M (unit)
- | MADDU (rs,rt) => (execute_MADDU rs rt) : M (unit)
- | MSUB (rs,rt) => (execute_MSUB rs rt) : M (unit)
- | MSUBU (rs,rt) => (execute_MSUBU rs rt) : M (unit)
- | DIV (rs,rt) => (execute_DIV rs rt) : M (unit)
- | DIVU (rs,rt) => (execute_DIVU rs rt) : M (unit)
- | DDIV (rs,rt) => (execute_DDIV rs rt) : M (unit)
- | DDIVU (rs,rt) => (execute_DDIVU rs rt) : M (unit)
- | J (offset) => (execute_J offset) : M (unit)
- | JAL (offset) => (execute_JAL offset) : M (unit)
- | JR (rs) => (execute_JR rs) : M (unit)
- | JALR (rs,rd) => (execute_JALR rs rd) : M (unit)
- | BEQ (rs,rd,imm,ne,likely) => (execute_BEQ rs rd imm ne likely) : M (unit)
- | BCMPZ (rs,imm,cmp,link,likely) => (execute_BCMPZ rs imm cmp link likely) : M (unit)
- | SYSCALL (g__14) => (execute_SYSCALL g__14) : M (unit)
- | BREAK (g__15) => (execute_BREAK g__15) : M (unit)
- | WAIT (g__16) => (execute_WAIT g__16) : M (unit)
- | TRAPREG (rs,rt,cmp) => (execute_TRAPREG rs rt cmp) : M (unit)
- | TRAPIMM (rs,imm,cmp) => (execute_TRAPIMM rs imm cmp) : M (unit)
- | Load (width,sign,linked,base,rt,offset) =>
- (execute_Load width sign linked base rt offset) : M (unit)
- | Store (width,conditional,base,rt,offset) =>
- (execute_Store width conditional base rt offset) : M (unit)
- | LWL (base,rt,offset) => (execute_LWL base rt offset) : M (unit)
- | LWR (base,rt,offset) => (execute_LWR base rt offset) : M (unit)
- | SWL (base,rt,offset) => (execute_SWL base rt offset) : M (unit)
- | SWR (base,rt,offset) => (execute_SWR base rt offset) : M (unit)
- | LDL (base,rt,offset) => (execute_LDL base rt offset) : M (unit)
- | LDR (base,rt,offset) => (execute_LDR base rt offset) : M (unit)
- | SDL (base,rt,offset) => (execute_SDL base rt offset) : M (unit)
- | SDR (base,rt,offset) => (execute_SDR base rt offset) : M (unit)
- | CACHE (base,op,imm) => (execute_CACHE base op imm) : M (unit)
- | SYNC (g__17) => (execute_SYNC g__17) : M (unit)
- | MFC0 (rt,rd,sel,double) => (execute_MFC0 rt rd sel double) : M (unit)
- | HCF (g__18) => returnm ((execute_HCF g__18) : unit)
- | MTC0 (rt,rd,sel,double) => (execute_MTC0 rt rd sel double) : M (unit)
- | TLBWI (g__19) => (execute_TLBWI g__19) : M (unit)
- | TLBWR (g__20) => (execute_TLBWR g__20) : M (unit)
- | TLBR (g__21) => (execute_TLBR g__21) : M (unit)
- | TLBP (g__22) => (execute_TLBP g__22) : M (unit)
- | RDHWR (rt,rd) => (execute_RDHWR rt rd) : M (unit)
- | ERET (g__23) => (execute_ERET g__23) : M (unit)
- | RI (g__24) => (execute_RI g__24) : M (unit)
- end.
+
+ (match merge_var with
+ | DADDIU (rs,rt,imm) => (execute_DADDIU rs rt imm) : M (unit)
+ | DADDU (rs,rt,rd) => (execute_DADDU rs rt rd) : M (unit)
+ | DADDI (rs,rt,imm) => (execute_DADDI rs rt imm) : M (unit)
+ | DADD (rs,rt,rd) => (execute_DADD rs rt rd) : M (unit)
+ | ADD (rs,rt,rd) => (execute_ADD rs rt rd) : M (unit)
+ | ADDI (rs,rt,imm) => (execute_ADDI rs rt imm) : M (unit)
+ | ADDU (rs,rt,rd) => (execute_ADDU rs rt rd) : M (unit)
+ | ADDIU (rs,rt,imm) => (execute_ADDIU rs rt imm) : M (unit)
+ | DSUBU (rs,rt,rd) => (execute_DSUBU rs rt rd) : M (unit)
+ | DSUB (rs,rt,rd) => (execute_DSUB rs rt rd) : M (unit)
+ | SUB (rs,rt,rd) => (execute_SUB rs rt rd) : M (unit)
+ | SUBU (rs,rt,rd) => (execute_SUBU rs rt rd) : M (unit)
+ | AND (rs,rt,rd) => (execute_AND rs rt rd) : M (unit)
+ | ANDI (rs,rt,imm) => (execute_ANDI rs rt imm) : M (unit)
+ | OR (rs,rt,rd) => (execute_OR rs rt rd) : M (unit)
+ | ORI (rs,rt,imm) => (execute_ORI rs rt imm) : M (unit)
+ | NOR (rs,rt,rd) => (execute_NOR rs rt rd) : M (unit)
+ | XOR (rs,rt,rd) => (execute_XOR rs rt rd) : M (unit)
+ | XORI (rs,rt,imm) => (execute_XORI rs rt imm) : M (unit)
+ | LUI (rt,imm) => (execute_LUI rt imm) : M (unit)
+ | DSLL (rt,rd,sa) => (execute_DSLL rt rd sa) : M (unit)
+ | DSLL32 (rt,rd,sa) => (execute_DSLL32 rt rd sa) : M (unit)
+ | DSLLV (rs,rt,rd) => (execute_DSLLV rs rt rd) : M (unit)
+ | DSRA (rt,rd,sa) => (execute_DSRA rt rd sa) : M (unit)
+ | DSRA32 (rt,rd,sa) => (execute_DSRA32 rt rd sa) : M (unit)
+ | DSRAV (rs,rt,rd) => (execute_DSRAV rs rt rd) : M (unit)
+ | DSRL (rt,rd,sa) => (execute_DSRL rt rd sa) : M (unit)
+ | DSRL32 (rt,rd,sa) => (execute_DSRL32 rt rd sa) : M (unit)
+ | DSRLV (rs,rt,rd) => (execute_DSRLV rs rt rd) : M (unit)
+ | SLL (rt,rd,sa) => (execute_SLL rt rd sa) : M (unit)
+ | SLLV (rs,rt,rd) => (execute_SLLV rs rt rd) : M (unit)
+ | SRA (rt,rd,sa) => (execute_SRA rt rd sa) : M (unit)
+ | SRAV (rs,rt,rd) => (execute_SRAV rs rt rd) : M (unit)
+ | SRL (rt,rd,sa) => (execute_SRL rt rd sa) : M (unit)
+ | SRLV (rs,rt,rd) => (execute_SRLV rs rt rd) : M (unit)
+ | SLT (rs,rt,rd) => (execute_SLT rs rt rd) : M (unit)
+ | SLTI (rs,rt,imm) => (execute_SLTI rs rt imm) : M (unit)
+ | SLTU (rs,rt,rd) => (execute_SLTU rs rt rd) : M (unit)
+ | SLTIU (rs,rt,imm) => (execute_SLTIU rs rt imm) : M (unit)
+ | MOVN (rs,rt,rd) => (execute_MOVN rs rt rd) : M (unit)
+ | MOVZ (rs,rt,rd) => (execute_MOVZ rs rt rd) : M (unit)
+ | MFHI (rd) => (execute_MFHI rd) : M (unit)
+ | MFLO (rd) => (execute_MFLO rd) : M (unit)
+ | MTHI (rs) => (execute_MTHI rs) : M (unit)
+ | MTLO (rs) => (execute_MTLO rs) : M (unit)
+ | MUL (rs,rt,rd) => (execute_MUL rs rt rd) : M (unit)
+ | MULT (rs,rt) => (execute_MULT rs rt) : M (unit)
+ | MULTU (rs,rt) => (execute_MULTU rs rt) : M (unit)
+ | DMULT (rs,rt) => (execute_DMULT rs rt) : M (unit)
+ | DMULTU (rs,rt) => (execute_DMULTU rs rt) : M (unit)
+ | MADD (rs,rt) => (execute_MADD rs rt) : M (unit)
+ | MADDU (rs,rt) => (execute_MADDU rs rt) : M (unit)
+ | MSUB (rs,rt) => (execute_MSUB rs rt) : M (unit)
+ | MSUBU (rs,rt) => (execute_MSUBU rs rt) : M (unit)
+ | DIV (rs,rt) => (execute_DIV rs rt) : M (unit)
+ | DIVU (rs,rt) => (execute_DIVU rs rt) : M (unit)
+ | DDIV (rs,rt) => (execute_DDIV rs rt) : M (unit)
+ | DDIVU (rs,rt) => (execute_DDIVU rs rt) : M (unit)
+ | J (offset) => (execute_J offset) : M (unit)
+ | JAL (offset) => (execute_JAL offset) : M (unit)
+ | JR (rs) => (execute_JR rs) : M (unit)
+ | JALR (rs,rd) => (execute_JALR rs rd) : M (unit)
+ | BEQ (rs,rd,imm,ne,likely) => (execute_BEQ rs rd imm ne likely) : M (unit)
+ | BCMPZ (rs,imm,cmp,link,likely) => (execute_BCMPZ rs imm cmp link likely) : M (unit)
+ | SYSCALL (arg0) => (execute_SYSCALL arg0) : M (unit)
+ | BREAK (arg0) => (execute_BREAK arg0) : M (unit)
+ | WAIT (arg0) => (execute_WAIT arg0) : M (unit)
+ | TRAPREG (rs,rt,cmp) => (execute_TRAPREG rs rt cmp) : M (unit)
+ | TRAPIMM (rs,imm,cmp) => (execute_TRAPIMM rs imm cmp) : M (unit)
+ | Load (width,sign,linked,base,rt,offset) =>
+ (execute_Load width sign linked base rt offset) : M (unit)
+ | Store (width,conditional,base,rt,offset) =>
+ (execute_Store width conditional base rt offset) : M (unit)
+ | LWL (base,rt,offset) => (execute_LWL base rt offset) : M (unit)
+ | LWR (base,rt,offset) => (execute_LWR base rt offset) : M (unit)
+ | SWL (base,rt,offset) => (execute_SWL base rt offset) : M (unit)
+ | SWR (base,rt,offset) => (execute_SWR base rt offset) : M (unit)
+ | LDL (base,rt,offset) => (execute_LDL base rt offset) : M (unit)
+ | LDR (base,rt,offset) => (execute_LDR base rt offset) : M (unit)
+ | SDL (base,rt,offset) => (execute_SDL base rt offset) : M (unit)
+ | SDR (base,rt,offset) => (execute_SDR base rt offset) : M (unit)
+ | CACHE (base,op,imm) => (execute_CACHE base op imm) : M (unit)
+ | SYNC (arg0) => (execute_SYNC arg0) : M (unit)
+ | MFC0 (rt,rd,sel,double) => (execute_MFC0 rt rd sel double) : M (unit)
+ | HCF (arg0) => returnm ((execute_HCF arg0) : unit)
+ | MTC0 (rt,rd,sel,double) => (execute_MTC0 rt rd sel double) : M (unit)
+ | TLBWI (arg0) => (execute_TLBWI arg0) : M (unit)
+ | TLBWR (arg0) => (execute_TLBWR arg0) : M (unit)
+ | TLBR (arg0) => (execute_TLBR arg0) : M (unit)
+ | TLBP (arg0) => (execute_TLBP arg0) : M (unit)
+ | RDHWR (rt,rd) => (execute_RDHWR rt rd) : M (unit)
+ | ERET (arg0) => (execute_ERET arg0) : M (unit)
+ | RI (arg0) => (execute_RI arg0) : M (unit)
+ end)
+ : M (unit).
-Definition supported_instructions (instr : ast) : option ast := Some instr.
+Definition supported_instructions (instr : ast) : option ast := Some (instr).
Definition initialize_registers '(tt : unit)
: M (unit) :=
- undefined_bitvector 64 >>= fun w__0 =>
+
+ (undefined_bitvector 64) >>= fun w__0 : mword 64 =>
write_reg PC_ref w__0 >>
- undefined_bitvector 64 >>= fun w__1 =>
- write_reg nextPC_ref w__1 >>
- undefined_bitvector 1 >>= fun w__2 =>
+ (undefined_bitvector 64) >>= fun w__1 : mword 64 =>
+ write_reg NextPC_ref w__1 >>
+ (undefined_bitvector 1) >>= fun w__2 : mword 1 =>
write_reg TLBProbe_ref w__2 >>
- undefined_bitvector 6 >>= fun w__3 =>
+ (undefined_bitvector 6) >>= fun w__3 : mword 6 =>
write_reg TLBIndex_ref w__3 >>
- undefined_bitvector 6 >>= fun w__4 =>
+ (undefined_bitvector 6) >>= fun w__4 : mword 6 =>
write_reg TLBRandom_ref w__4 >>
- undefined_TLBEntryLoReg tt >>= fun w__5 =>
+ (undefined_TLBEntryLoReg tt) >>= fun w__5 : TLBEntryLoReg =>
write_reg TLBEntryLo0_ref w__5 >>
- undefined_TLBEntryLoReg tt >>= fun w__6 =>
+ (undefined_TLBEntryLoReg tt) >>= fun w__6 : TLBEntryLoReg =>
write_reg TLBEntryLo1_ref w__6 >>
- undefined_ContextReg tt >>= fun w__7 =>
+ (undefined_ContextReg tt) >>= fun w__7 : ContextReg =>
write_reg TLBContext_ref w__7 >>
- undefined_bitvector 16 >>= fun w__8 =>
+ (undefined_bitvector 16) >>= fun w__8 : mword 16 =>
write_reg TLBPageMask_ref w__8 >>
- undefined_bitvector 6 >>= fun w__9 =>
+ (undefined_bitvector 6) >>= fun w__9 : mword 6 =>
write_reg TLBWired_ref w__9 >>
- undefined_TLBEntryHiReg tt >>= fun w__10 =>
+ (undefined_TLBEntryHiReg tt) >>= fun w__10 : TLBEntryHiReg =>
write_reg TLBEntryHi_ref w__10 >>
- undefined_XContextReg tt >>= fun w__11 =>
+ (undefined_XContextReg tt) >>= fun w__11 : XContextReg =>
write_reg TLBXContext_ref w__11 >>
- undefined_TLBEntry tt >>= fun w__12 =>
+ (undefined_TLBEntry tt) >>= fun w__12 : TLBEntry =>
write_reg TLBEntry00_ref w__12 >>
- undefined_TLBEntry tt >>= fun w__13 =>
+ (undefined_TLBEntry tt) >>= fun w__13 : TLBEntry =>
write_reg TLBEntry01_ref w__13 >>
- undefined_TLBEntry tt >>= fun w__14 =>
+ (undefined_TLBEntry tt) >>= fun w__14 : TLBEntry =>
write_reg TLBEntry02_ref w__14 >>
- undefined_TLBEntry tt >>= fun w__15 =>
+ (undefined_TLBEntry tt) >>= fun w__15 : TLBEntry =>
write_reg TLBEntry03_ref w__15 >>
- undefined_TLBEntry tt >>= fun w__16 =>
+ (undefined_TLBEntry tt) >>= fun w__16 : TLBEntry =>
write_reg TLBEntry04_ref w__16 >>
- undefined_TLBEntry tt >>= fun w__17 =>
+ (undefined_TLBEntry tt) >>= fun w__17 : TLBEntry =>
write_reg TLBEntry05_ref w__17 >>
- undefined_TLBEntry tt >>= fun w__18 =>
+ (undefined_TLBEntry tt) >>= fun w__18 : TLBEntry =>
write_reg TLBEntry06_ref w__18 >>
- undefined_TLBEntry tt >>= fun w__19 =>
+ (undefined_TLBEntry tt) >>= fun w__19 : TLBEntry =>
write_reg TLBEntry07_ref w__19 >>
- undefined_TLBEntry tt >>= fun w__20 =>
+ (undefined_TLBEntry tt) >>= fun w__20 : TLBEntry =>
write_reg TLBEntry08_ref w__20 >>
- undefined_TLBEntry tt >>= fun w__21 =>
+ (undefined_TLBEntry tt) >>= fun w__21 : TLBEntry =>
write_reg TLBEntry09_ref w__21 >>
- undefined_TLBEntry tt >>= fun w__22 =>
+ (undefined_TLBEntry tt) >>= fun w__22 : TLBEntry =>
write_reg TLBEntry10_ref w__22 >>
- undefined_TLBEntry tt >>= fun w__23 =>
+ (undefined_TLBEntry tt) >>= fun w__23 : TLBEntry =>
write_reg TLBEntry11_ref w__23 >>
- undefined_TLBEntry tt >>= fun w__24 =>
+ (undefined_TLBEntry tt) >>= fun w__24 : TLBEntry =>
write_reg TLBEntry12_ref w__24 >>
- undefined_TLBEntry tt >>= fun w__25 =>
+ (undefined_TLBEntry tt) >>= fun w__25 : TLBEntry =>
write_reg TLBEntry13_ref w__25 >>
- undefined_TLBEntry tt >>= fun w__26 =>
+ (undefined_TLBEntry tt) >>= fun w__26 : TLBEntry =>
write_reg TLBEntry14_ref w__26 >>
- undefined_TLBEntry tt >>= fun w__27 =>
+ (undefined_TLBEntry tt) >>= fun w__27 : TLBEntry =>
write_reg TLBEntry15_ref w__27 >>
- undefined_TLBEntry tt >>= fun w__28 =>
+ (undefined_TLBEntry tt) >>= fun w__28 : TLBEntry =>
write_reg TLBEntry16_ref w__28 >>
- undefined_TLBEntry tt >>= fun w__29 =>
+ (undefined_TLBEntry tt) >>= fun w__29 : TLBEntry =>
write_reg TLBEntry17_ref w__29 >>
- undefined_TLBEntry tt >>= fun w__30 =>
+ (undefined_TLBEntry tt) >>= fun w__30 : TLBEntry =>
write_reg TLBEntry18_ref w__30 >>
- undefined_TLBEntry tt >>= fun w__31 =>
+ (undefined_TLBEntry tt) >>= fun w__31 : TLBEntry =>
write_reg TLBEntry19_ref w__31 >>
- undefined_TLBEntry tt >>= fun w__32 =>
+ (undefined_TLBEntry tt) >>= fun w__32 : TLBEntry =>
write_reg TLBEntry20_ref w__32 >>
- undefined_TLBEntry tt >>= fun w__33 =>
+ (undefined_TLBEntry tt) >>= fun w__33 : TLBEntry =>
write_reg TLBEntry21_ref w__33 >>
- undefined_TLBEntry tt >>= fun w__34 =>
+ (undefined_TLBEntry tt) >>= fun w__34 : TLBEntry =>
write_reg TLBEntry22_ref w__34 >>
- undefined_TLBEntry tt >>= fun w__35 =>
+ (undefined_TLBEntry tt) >>= fun w__35 : TLBEntry =>
write_reg TLBEntry23_ref w__35 >>
- undefined_TLBEntry tt >>= fun w__36 =>
+ (undefined_TLBEntry tt) >>= fun w__36 : TLBEntry =>
write_reg TLBEntry24_ref w__36 >>
- undefined_TLBEntry tt >>= fun w__37 =>
+ (undefined_TLBEntry tt) >>= fun w__37 : TLBEntry =>
write_reg TLBEntry25_ref w__37 >>
- undefined_TLBEntry tt >>= fun w__38 =>
+ (undefined_TLBEntry tt) >>= fun w__38 : TLBEntry =>
write_reg TLBEntry26_ref w__38 >>
- undefined_TLBEntry tt >>= fun w__39 =>
+ (undefined_TLBEntry tt) >>= fun w__39 : TLBEntry =>
write_reg TLBEntry27_ref w__39 >>
- undefined_TLBEntry tt >>= fun w__40 =>
+ (undefined_TLBEntry tt) >>= fun w__40 : TLBEntry =>
write_reg TLBEntry28_ref w__40 >>
- undefined_TLBEntry tt >>= fun w__41 =>
+ (undefined_TLBEntry tt) >>= fun w__41 : TLBEntry =>
write_reg TLBEntry29_ref w__41 >>
- undefined_TLBEntry tt >>= fun w__42 =>
+ (undefined_TLBEntry tt) >>= fun w__42 : TLBEntry =>
write_reg TLBEntry30_ref w__42 >>
- undefined_TLBEntry tt >>= fun w__43 =>
+ (undefined_TLBEntry tt) >>= fun w__43 : TLBEntry =>
write_reg TLBEntry31_ref w__43 >>
- undefined_TLBEntry tt >>= fun w__44 =>
+ (undefined_TLBEntry tt) >>= fun w__44 : TLBEntry =>
write_reg TLBEntry32_ref w__44 >>
- undefined_TLBEntry tt >>= fun w__45 =>
+ (undefined_TLBEntry tt) >>= fun w__45 : TLBEntry =>
write_reg TLBEntry33_ref w__45 >>
- undefined_TLBEntry tt >>= fun w__46 =>
+ (undefined_TLBEntry tt) >>= fun w__46 : TLBEntry =>
write_reg TLBEntry34_ref w__46 >>
- undefined_TLBEntry tt >>= fun w__47 =>
+ (undefined_TLBEntry tt) >>= fun w__47 : TLBEntry =>
write_reg TLBEntry35_ref w__47 >>
- undefined_TLBEntry tt >>= fun w__48 =>
+ (undefined_TLBEntry tt) >>= fun w__48 : TLBEntry =>
write_reg TLBEntry36_ref w__48 >>
- undefined_TLBEntry tt >>= fun w__49 =>
+ (undefined_TLBEntry tt) >>= fun w__49 : TLBEntry =>
write_reg TLBEntry37_ref w__49 >>
- undefined_TLBEntry tt >>= fun w__50 =>
+ (undefined_TLBEntry tt) >>= fun w__50 : TLBEntry =>
write_reg TLBEntry38_ref w__50 >>
- undefined_TLBEntry tt >>= fun w__51 =>
+ (undefined_TLBEntry tt) >>= fun w__51 : TLBEntry =>
write_reg TLBEntry39_ref w__51 >>
- undefined_TLBEntry tt >>= fun w__52 =>
+ (undefined_TLBEntry tt) >>= fun w__52 : TLBEntry =>
write_reg TLBEntry40_ref w__52 >>
- undefined_TLBEntry tt >>= fun w__53 =>
+ (undefined_TLBEntry tt) >>= fun w__53 : TLBEntry =>
write_reg TLBEntry41_ref w__53 >>
- undefined_TLBEntry tt >>= fun w__54 =>
+ (undefined_TLBEntry tt) >>= fun w__54 : TLBEntry =>
write_reg TLBEntry42_ref w__54 >>
- undefined_TLBEntry tt >>= fun w__55 =>
+ (undefined_TLBEntry tt) >>= fun w__55 : TLBEntry =>
write_reg TLBEntry43_ref w__55 >>
- undefined_TLBEntry tt >>= fun w__56 =>
+ (undefined_TLBEntry tt) >>= fun w__56 : TLBEntry =>
write_reg TLBEntry44_ref w__56 >>
- undefined_TLBEntry tt >>= fun w__57 =>
+ (undefined_TLBEntry tt) >>= fun w__57 : TLBEntry =>
write_reg TLBEntry45_ref w__57 >>
- undefined_TLBEntry tt >>= fun w__58 =>
+ (undefined_TLBEntry tt) >>= fun w__58 : TLBEntry =>
write_reg TLBEntry46_ref w__58 >>
- undefined_TLBEntry tt >>= fun w__59 =>
+ (undefined_TLBEntry tt) >>= fun w__59 : TLBEntry =>
write_reg TLBEntry47_ref w__59 >>
- undefined_TLBEntry tt >>= fun w__60 =>
+ (undefined_TLBEntry tt) >>= fun w__60 : TLBEntry =>
write_reg TLBEntry48_ref w__60 >>
- undefined_TLBEntry tt >>= fun w__61 =>
+ (undefined_TLBEntry tt) >>= fun w__61 : TLBEntry =>
write_reg TLBEntry49_ref w__61 >>
- undefined_TLBEntry tt >>= fun w__62 =>
+ (undefined_TLBEntry tt) >>= fun w__62 : TLBEntry =>
write_reg TLBEntry50_ref w__62 >>
- undefined_TLBEntry tt >>= fun w__63 =>
+ (undefined_TLBEntry tt) >>= fun w__63 : TLBEntry =>
write_reg TLBEntry51_ref w__63 >>
- undefined_TLBEntry tt >>= fun w__64 =>
+ (undefined_TLBEntry tt) >>= fun w__64 : TLBEntry =>
write_reg TLBEntry52_ref w__64 >>
- undefined_TLBEntry tt >>= fun w__65 =>
+ (undefined_TLBEntry tt) >>= fun w__65 : TLBEntry =>
write_reg TLBEntry53_ref w__65 >>
- undefined_TLBEntry tt >>= fun w__66 =>
+ (undefined_TLBEntry tt) >>= fun w__66 : TLBEntry =>
write_reg TLBEntry54_ref w__66 >>
- undefined_TLBEntry tt >>= fun w__67 =>
+ (undefined_TLBEntry tt) >>= fun w__67 : TLBEntry =>
write_reg TLBEntry55_ref w__67 >>
- undefined_TLBEntry tt >>= fun w__68 =>
+ (undefined_TLBEntry tt) >>= fun w__68 : TLBEntry =>
write_reg TLBEntry56_ref w__68 >>
- undefined_TLBEntry tt >>= fun w__69 =>
+ (undefined_TLBEntry tt) >>= fun w__69 : TLBEntry =>
write_reg TLBEntry57_ref w__69 >>
- undefined_TLBEntry tt >>= fun w__70 =>
+ (undefined_TLBEntry tt) >>= fun w__70 : TLBEntry =>
write_reg TLBEntry58_ref w__70 >>
- undefined_TLBEntry tt >>= fun w__71 =>
+ (undefined_TLBEntry tt) >>= fun w__71 : TLBEntry =>
write_reg TLBEntry59_ref w__71 >>
- undefined_TLBEntry tt >>= fun w__72 =>
+ (undefined_TLBEntry tt) >>= fun w__72 : TLBEntry =>
write_reg TLBEntry60_ref w__72 >>
- undefined_TLBEntry tt >>= fun w__73 =>
+ (undefined_TLBEntry tt) >>= fun w__73 : TLBEntry =>
write_reg TLBEntry61_ref w__73 >>
- undefined_TLBEntry tt >>= fun w__74 =>
+ (undefined_TLBEntry tt) >>= fun w__74 : TLBEntry =>
write_reg TLBEntry62_ref w__74 >>
- undefined_TLBEntry tt >>= fun w__75 =>
+ (undefined_TLBEntry tt) >>= fun w__75 : TLBEntry =>
write_reg TLBEntry63_ref w__75 >>
- undefined_bitvector 32 >>= fun w__76 =>
+ (undefined_bitvector 32) >>= fun w__76 : mword 32 =>
write_reg CP0Compare_ref w__76 >>
- undefined_CauseReg tt >>= fun w__77 =>
+ (undefined_CauseReg tt) >>= fun w__77 : CauseReg =>
write_reg CP0Cause_ref w__77 >>
- undefined_bitvector 64 >>= fun w__78 =>
+ (undefined_bitvector 64) >>= fun w__78 : mword 64 =>
write_reg CP0EPC_ref w__78 >>
- undefined_bitvector 64 >>= fun w__79 =>
+ (undefined_bitvector 64) >>= fun w__79 : mword 64 =>
write_reg CP0ErrorEPC_ref w__79 >>
- undefined_bitvector 1 >>= fun w__80 =>
+ (undefined_bitvector 1) >>= fun w__80 : mword 1 =>
write_reg CP0LLBit_ref w__80 >>
- undefined_bitvector 64 >>= fun w__81 =>
+ (undefined_bitvector 64) >>= fun w__81 : mword 64 =>
write_reg CP0LLAddr_ref w__81 >>
- undefined_bitvector 64 >>= fun w__82 =>
+ (undefined_bitvector 64) >>= fun w__82 : mword 64 =>
write_reg CP0BadVAddr_ref w__82 >>
- undefined_bitvector 32 >>= fun w__83 =>
- write_reg CP0Count_ref w__83 >>
- undefined_bitvector 32 >>= fun w__84 =>
- write_reg CP0HWREna_ref w__84 >>
- undefined_bitvector 64 >>= fun w__85 =>
- write_reg CP0UserLocal_ref w__85 >>
- undefined_bitvector 3 >>= fun w__86 =>
- write_reg CP0ConfigK0_ref w__86 >>
- undefined_StatusReg tt >>= fun w__87 =>
- write_reg CP0Status_ref w__87 >>
- undefined_bitvector 1 >>= fun w__88 =>
- write_reg branchPending_ref w__88 >>
- undefined_bitvector 1 >>= fun w__89 =>
- write_reg inBranchDelay_ref w__89 >>
- undefined_bitvector 64 >>= fun w__90 =>
- write_reg delayedPC_ref w__90 >>
- undefined_bitvector 64 >>= fun w__91 =>
- write_reg HI_ref w__91 >>
- undefined_bitvector 64 >>= fun w__92 =>
- write_reg LO_ref w__92 >>
- undefined_bitvector 64 >>= fun w__93 =>
- undefined_vector 32 w__93 >>= fun w__94 =>
- write_reg GPR_ref w__94 >>
- undefined_bitvector 8 >>= fun w__95 =>
- write_reg UART_WDATA_ref w__95 >>
- undefined_bitvector 1 >>= fun w__96 =>
- write_reg UART_WRITTEN_ref w__96 >>
- undefined_bitvector 8 >>= fun w__97 =>
- write_reg UART_RDATA_ref w__97 >>
- undefined_bitvector 1 >>= fun w__98 => write_reg UART_RVALID_ref w__98 : M (unit).
+ (undefined_bitvector 32) >>= fun w__83 : mword 32 =>
+ write_reg CurrentInstrBits_ref w__83 >>
+ (undefined_bitvector 32) >>= fun w__84 : mword 32 =>
+ write_reg LastInstrBits_ref w__84 >>
+ (undefined_bitvector 32) >>= fun w__85 : mword 32 =>
+ write_reg CP0BadInstr_ref w__85 >>
+ (undefined_bitvector 32) >>= fun w__86 : mword 32 =>
+ write_reg CP0BadInstrP_ref w__86 >>
+ (undefined_bitvector 32) >>= fun w__87 : mword 32 =>
+ write_reg CP0Count_ref w__87 >>
+ (undefined_bitvector 32) >>= fun w__88 : mword 32 =>
+ write_reg CP0HWREna_ref w__88 >>
+ (undefined_bitvector 64) >>= fun w__89 : mword 64 =>
+ write_reg CP0UserLocal_ref w__89 >>
+ (undefined_bitvector 3) >>= fun w__90 : mword 3 =>
+ write_reg CP0ConfigK0_ref w__90 >>
+ (undefined_StatusReg tt) >>= fun w__91 : StatusReg =>
+ write_reg CP0Status_ref w__91 >>
+ (undefined_bitvector 1) >>= fun w__92 : mword 1 =>
+ write_reg NextInBranchDelay_ref w__92 >>
+ (undefined_bitvector 1) >>= fun w__93 : mword 1 =>
+ write_reg InBranchDelay_ref w__93 >>
+ (undefined_bitvector 1) >>= fun w__94 : mword 1 =>
+ write_reg BranchPending_ref w__94 >>
+ (undefined_bitvector 64) >>= fun w__95 : mword 64 =>
+ write_reg DelayedPC_ref w__95 >>
+ (undefined_bitvector 64) >>= fun w__96 : mword 64 =>
+ write_reg HI_ref w__96 >>
+ (undefined_bitvector 64) >>= fun w__97 : mword 64 =>
+ write_reg LO_ref w__97 >>
+ (undefined_bitvector 64) >>= fun w__98 : mword 64 =>
+ (undefined_vector 32 w__98) >>= fun w__99 : vec (mword 64) 32 =>
+ write_reg GPR_ref w__99 >>
+ (undefined_bitvector 8) >>= fun w__100 : mword 8 =>
+ write_reg UART_WDATA_ref w__100 >>
+ (undefined_bitvector 1) >>= fun w__101 : mword 1 =>
+ write_reg UART_WRITTEN_ref w__101 >>
+ (undefined_bitvector 8) >>= fun w__102 : mword 8 =>
+ write_reg UART_RDATA_ref w__102 >>
+ (undefined_bitvector 1) >>= fun w__103 : mword 1 => write_reg UART_RVALID_ref w__103 : M (unit).
Definition initial_regstate : regstate :=
{| UART_RVALID := (vec_of_bits [B0] : mword 1);
@@ -5003,14 +5842,15 @@ Definition initial_regstate : regstate :=
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64);
- delayedPC :=
+ DelayedPC :=
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64);
- inBranchDelay := (vec_of_bits [B0] : mword 1);
- branchPending := (vec_of_bits [B0] : mword 1);
+ BranchPending := (vec_of_bits [B0] : mword 1);
+ InBranchDelay := (vec_of_bits [B0] : mword 1);
+ NextInBranchDelay := (vec_of_bits [B0] : mword 1);
CP0Status :=
({| StatusReg_StatusReg_chunk_0 :=
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -5031,6 +5871,22 @@ Definition initial_regstate : regstate :=
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
: mword 32);
+ CP0BadInstrP :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CP0BadInstr :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ LastInstrBits :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
+ CurrentInstrBits :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32);
CP0BadVAddr :=
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -5873,7 +6729,7 @@ Definition initial_regstate : regstate :=
TLBRandom := (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6);
TLBIndex := (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6);
TLBProbe := (vec_of_bits [B0] : mword 1);
- nextPC :=
+ NextPC :=
(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
@@ -5885,6 +6741,6 @@ Definition initial_regstate : regstate :=
B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
B0]
: mword 64) |}.
-
+Hint Unfold initial_regstate : sail.
End Content.
diff --git a/snapshots/coq/mips/mips_extras.v b/snapshots/coq/cheri-mips/mips_extras.v
index cc905f11..cdb9956d 100644
--- a/snapshots/coq/mips/mips_extras.v
+++ b/snapshots/coq/cheri-mips/mips_extras.v
@@ -140,10 +140,10 @@ Definition eq_bit (x : bitU) (y : bitU) : bool :=
Require Import Zeuclid.
Definition euclid_modulo (m n : Z) `{ArithFact (n > 0)} : {z : Z & ArithFact (0 <= z <= n-1)}.
-refine (build_ex (ZEuclid.modulo m n)).
+refine (existT _ (ZEuclid.modulo m n) _).
constructor.
destruct H.
-assert (Zabs n = n). { rewrite Zabs_eq; auto with zarith. }
+assert (Z.abs n = n). { rewrite Z.abs_eq; auto with zarith. }
rewrite <- H at 3.
lapply (ZEuclid.mod_always_pos m n); omega.
Qed.
@@ -160,3 +160,32 @@ Definition prerr_string (_:string) : unit := tt.
Definition putchar {T} (_:T) : unit := tt.
Require DecimalString.
Definition string_of_int z := DecimalString.NilZero.string_of_int (Z.to_int z).
+
+Lemma __MIPS_read_lemma : forall width, 8 * width = 8 * (8 * width ÷ 8).
+intros.
+rewrite Z.mul_comm.
+rewrite Z.quot_mul; auto with zarith.
+Qed.
+Hint Resolve __MIPS_read_lemma : sail.
+
+Lemma MEMr_wrapper_lemma : forall size : Z, 8 * size = 8 * (8 * (8 * size ÷ 8) ÷ 8).
+intros.
+rewrite Z.mul_comm.
+rewrite Z.quot_mul; auto with zarith.
+rewrite Z.mul_comm with (m := size).
+rewrite Z.quot_mul; auto with zarith.
+Qed.
+Hint Resolve MEMr_wrapper_lemma : sail.
+
+Lemma getCapOffset_lemma {x0 x1 x2 x : Z} :
+ 0 <= x0 <= 18446744073709551616 - 1 ->
+ 0 <= x1 <= 18446744073709551616 - 1 ->
+ 18446744073709551616 <= x2 <= 18446744073709551616 ->
+ x = ZEuclid.modulo (x0 - x1) x2 ->
+ 0 <= x <= 18446744073709551616 - 1.
+intros.
+match goal with H:context [ZEuclid.modulo ?X ?Y] |- _ => pose proof (ZEuclid.mod_always_pos X Y) end.
+omega with Z.
+Qed.
+Hint Resolve getCapOffset_lemma : sail.
+
diff --git a/snapshots/coq/cheri-mips/mips_types.v b/snapshots/coq/cheri-mips/mips_types.v
new file mode 100644
index 00000000..36c5e40b
--- /dev/null
+++ b/snapshots/coq/cheri-mips/mips_types.v
@@ -0,0 +1,1549 @@
+(*Generated by Sail from mips.*)
+Require Import Sail2_instr_kinds.
+Require Import Sail2_values.
+Require Import Sail2_string.
+Require Import Sail2_real.
+Require Import Sail2_operators_mwords.
+Require Import Sail2_prompt_monad.
+Require Import Sail2_prompt.
+Require Import Sail2_state.
+
+
+Definition bits (n : Z) : Type := mword n.
+
+Inductive exception :=
+ ISAException : unit -> exception
+ | Error_not_implemented : string -> exception
+ | Error_misaligned_access : unit -> exception
+ | Error_EBREAK : unit -> exception
+ | Error_internal_error : unit -> exception.
+Arguments exception : clear implicits.
+
+
+
+Record CauseReg := { CauseReg_CauseReg_chunk_0 : mword 32; }.
+Notation "{[ r 'with' 'CauseReg_CauseReg_chunk_0' := e ]}" := ({| CauseReg_CauseReg_chunk_0 := e |}).
+
+Record StatusReg := { StatusReg_StatusReg_chunk_0 : mword 32; }.
+Notation "{[ r 'with' 'StatusReg_StatusReg_chunk_0' := e ]}" := ({| StatusReg_StatusReg_chunk_0 := e |}).
+
+Record TLBEntryLoReg := { TLBEntryLoReg_TLBEntryLoReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'TLBEntryLoReg_TLBEntryLoReg_chunk_0' := e ]}" := ({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := e |}).
+
+Record TLBEntryHiReg := { TLBEntryHiReg_TLBEntryHiReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'TLBEntryHiReg_TLBEntryHiReg_chunk_0' := e ]}" := ({| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := e |}).
+
+Record ContextReg := { ContextReg_ContextReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'ContextReg_ContextReg_chunk_0' := e ]}" := ({| ContextReg_ContextReg_chunk_0 := e |}).
+
+Record XContextReg := { XContextReg_XContextReg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'XContextReg_XContextReg_chunk_0' := e ]}" := ({| XContextReg_XContextReg_chunk_0 := e |}).
+
+Definition TLBIndexT : Type := bits 6.
+
+Record TLBEntry := { TLBEntry_TLBEntry_chunk_1 : mword 53; TLBEntry_TLBEntry_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'TLBEntry_TLBEntry_chunk_1' := e ]}" := ({| TLBEntry_TLBEntry_chunk_1 := e; TLBEntry_TLBEntry_chunk_0 := TLBEntry_TLBEntry_chunk_0 r |}).
+Notation "{[ r 'with' 'TLBEntry_TLBEntry_chunk_0' := e ]}" := ({| TLBEntry_TLBEntry_chunk_0 := e; TLBEntry_TLBEntry_chunk_1 := TLBEntry_TLBEntry_chunk_1 r |}).
+
+Inductive Exception :=
+ Interrupt
+ | TLBMod
+ | TLBL
+ | TLBS
+ | AdEL
+ | AdES
+ | Sys
+ | Bp
+ | ResI
+ | CpU
+ | Ov
+ | Tr
+ | C2E
+ | C2Trap
+ | XTLBRefillL
+ | XTLBRefillS
+ | XTLBInvL
+ | XTLBInvS
+ | MCheck.
+Scheme Equality for Exception.
+Instance Decidable_eq_Exception :
+forall (x y : Exception), Decidable (x = y) :=
+Decidable_eq_from_dec Exception_eq_dec.
+
+
+Inductive MemAccessType := Instruction | LoadData | StoreData.
+Scheme Equality for MemAccessType.
+Instance Decidable_eq_MemAccessType :
+forall (x y : MemAccessType), Decidable (x = y) :=
+Decidable_eq_from_dec MemAccessType_eq_dec.
+
+
+Inductive AccessLevel := User | Supervisor | Kernel.
+Scheme Equality for AccessLevel.
+Instance Decidable_eq_AccessLevel :
+forall (x y : AccessLevel), Decidable (x = y) :=
+Decidable_eq_from_dec AccessLevel_eq_dec.
+
+
+Definition regno : Type := bits 5.
+
+Definition imm16 : Type := bits 16.
+
+Definition regregreg : Type := (regno * regno * regno).
+
+Definition regregimm16 : Type := (regno * regno * imm16).
+
+Inductive decode_failure :=
+ no_matching_pattern | unsupported_instruction | illegal_instruction | internal_error.
+Scheme Equality for decode_failure.
+Instance Decidable_eq_decode_failure :
+forall (x y : decode_failure), Decidable (x = y) :=
+Decidable_eq_from_dec decode_failure_eq_dec.
+
+
+Inductive Comparison := EQ' | NE | GE | GEU | GT' | LE | LT' | LTU.
+Scheme Equality for Comparison.
+Instance Decidable_eq_Comparison :
+forall (x y : Comparison), Decidable (x = y) :=
+Decidable_eq_from_dec Comparison_eq_dec.
+
+
+Inductive WordType := B | H | W | D.
+Scheme Equality for WordType.
+Instance Decidable_eq_WordType :
+forall (x y : WordType), Decidable (x = y) :=
+Decidable_eq_from_dec WordType_eq_dec.
+
+
+Inductive WordTypeUnaligned := WL | WR | DL | DR.
+Scheme Equality for WordTypeUnaligned.
+Instance Decidable_eq_WordTypeUnaligned :
+forall (x y : WordTypeUnaligned), Decidable (x = y) :=
+Decidable_eq_from_dec WordTypeUnaligned_eq_dec.
+
+
+Inductive ast :=
+ DADDIU : (regno * regno * imm16) -> ast
+ | DADDU : (regno * regno * regno) -> ast
+ | DADDI : (regno * regno * bits 16) -> ast
+ | DADD : (regno * regno * regno) -> ast
+ | ADD : (regno * regno * regno) -> ast
+ | ADDI : (regno * regno * bits 16) -> ast
+ | ADDU : (regno * regno * regno) -> ast
+ | ADDIU : (regno * regno * bits 16) -> ast
+ | DSUBU : (regno * regno * regno) -> ast
+ | DSUB : (regno * regno * regno) -> ast
+ | SUB : (regno * regno * regno) -> ast
+ | SUBU : (regno * regno * regno) -> ast
+ | AND : (regno * regno * regno) -> ast
+ | ANDI : (regno * regno * bits 16) -> ast
+ | OR : (regno * regno * regno) -> ast
+ | ORI : (regno * regno * bits 16) -> ast
+ | NOR : (regno * regno * regno) -> ast
+ | XOR : (regno * regno * regno) -> ast
+ | XORI : (regno * regno * bits 16) -> ast
+ | LUI : (regno * imm16) -> ast
+ | DSLL : (regno * regno * regno) -> ast
+ | DSLL32 : (regno * regno * regno) -> ast
+ | DSLLV : (regno * regno * regno) -> ast
+ | DSRA : (regno * regno * regno) -> ast
+ | DSRA32 : (regno * regno * regno) -> ast
+ | DSRAV : (regno * regno * regno) -> ast
+ | DSRL : (regno * regno * regno) -> ast
+ | DSRL32 : (regno * regno * regno) -> ast
+ | DSRLV : (regno * regno * regno) -> ast
+ | SLL : (regno * regno * regno) -> ast
+ | SLLV : (regno * regno * regno) -> ast
+ | SRA : (regno * regno * regno) -> ast
+ | SRAV : (regno * regno * regno) -> ast
+ | SRL : (regno * regno * regno) -> ast
+ | SRLV : (regno * regno * regno) -> ast
+ | SLT : (regno * regno * regno) -> ast
+ | SLTI : (regno * regno * bits 16) -> ast
+ | SLTU : (regno * regno * regno) -> ast
+ | SLTIU : (regno * regno * bits 16) -> ast
+ | MOVN : (regno * regno * regno) -> ast
+ | MOVZ : (regno * regno * regno) -> ast
+ | MFHI : regno -> ast
+ | MFLO : regno -> ast
+ | MTHI : regno -> ast
+ | MTLO : regno -> ast
+ | MUL : (regno * regno * regno) -> ast
+ | MULT : (regno * regno) -> ast
+ | MULTU : (regno * regno) -> ast
+ | DMULT : (regno * regno) -> ast
+ | DMULTU : (regno * regno) -> ast
+ | MADD : (regno * regno) -> ast
+ | MADDU : (regno * regno) -> ast
+ | MSUB : (regno * regno) -> ast
+ | MSUBU : (regno * regno) -> ast
+ | DIV : (regno * regno) -> ast
+ | DIVU : (regno * regno) -> ast
+ | DDIV : (regno * regno) -> ast
+ | DDIVU : (regno * regno) -> ast
+ | J : bits 26 -> ast
+ | JAL : bits 26 -> ast
+ | JR : regno -> ast
+ | JALR : (regno * regno) -> ast
+ | BEQ : (regno * regno * imm16 * bool * bool) -> ast
+ | BCMPZ : (regno * imm16 * Comparison * bool * bool) -> ast
+ | SYSCALL : unit -> ast
+ | BREAK : unit -> ast
+ | WAIT : unit -> ast
+ | TRAPREG : (regno * regno * Comparison) -> ast
+ | TRAPIMM : (regno * imm16 * Comparison) -> ast
+ | Load : (WordType * bool * bool * regno * regno * imm16) -> ast
+ | Store : (WordType * bool * regno * regno * imm16) -> ast
+ | LWL : (regno * regno * bits 16) -> ast
+ | LWR : (regno * regno * bits 16) -> ast
+ | SWL : (regno * regno * bits 16) -> ast
+ | SWR : (regno * regno * bits 16) -> ast
+ | LDL : (regno * regno * bits 16) -> ast
+ | LDR : (regno * regno * bits 16) -> ast
+ | SDL : (regno * regno * bits 16) -> ast
+ | SDR : (regno * regno * bits 16) -> ast
+ | CACHE : (regno * regno * bits 16) -> ast
+ | SYNC : unit -> ast
+ | MFC0 : (regno * regno * bits 3 * bool) -> ast
+ | HCF : unit -> ast
+ | MTC0 : (regno * regno * bits 3 * bool) -> ast
+ | TLBWI : unit -> ast
+ | TLBWR : unit -> ast
+ | TLBR : unit -> ast
+ | TLBP : unit -> ast
+ | RDHWR : (regno * regno) -> ast
+ | ERET : unit -> ast
+ | RI : unit -> ast.
+Arguments ast : clear implicits.
+
+
+
+Inductive register_value :=
+ Regval_vector : (Z * bool * list register_value) -> register_value
+ | Regval_list : list register_value -> register_value
+ | Regval_option : option register_value -> register_value
+ | Regval_CauseReg : CauseReg -> register_value
+ | Regval_ContextReg : ContextReg -> register_value
+ | Regval_StatusReg : StatusReg -> register_value
+ | Regval_TLBEntry : TLBEntry -> register_value
+ | Regval_TLBEntryHiReg : TLBEntryHiReg -> register_value
+ | Regval_TLBEntryLoReg : TLBEntryLoReg -> register_value
+ | Regval_XContextReg : XContextReg -> register_value
+ | Regval_vector_16_dec_bit : mword 16 -> register_value
+ | Regval_vector_1_dec_bit : mword 1 -> register_value
+ | Regval_vector_32_dec_bit : mword 32 -> register_value
+ | Regval_vector_3_dec_bit : mword 3 -> register_value
+ | Regval_vector_64_dec_bit : mword 64 -> register_value
+ | Regval_vector_6_dec_bit : mword 6 -> register_value
+ | Regval_vector_8_dec_bit : mword 8 -> register_value.
+Arguments register_value : clear implicits.
+
+
+
+Record regstate :=
+ { UART_RVALID : mword 1;
+ UART_RDATA : mword 8;
+ UART_WRITTEN : mword 1;
+ UART_WDATA : mword 8;
+ GPR : vec (mword 64) 32;
+ LO : mword 64;
+ HI : mword 64;
+ DelayedPC : mword 64;
+ BranchPending : mword 1;
+ InBranchDelay : mword 1;
+ NextInBranchDelay : mword 1;
+ CP0Status : StatusReg;
+ CP0ConfigK0 : mword 3;
+ CP0UserLocal : mword 64;
+ CP0HWREna : mword 32;
+ CP0Count : mword 32;
+ CP0BadInstrP : mword 32;
+ CP0BadInstr : mword 32;
+ LastInstrBits : mword 32;
+ CurrentInstrBits : mword 32;
+ CP0BadVAddr : mword 64;
+ CP0LLAddr : mword 64;
+ CP0LLBit : mword 1;
+ CP0ErrorEPC : mword 64;
+ CP0EPC : mword 64;
+ CP0Cause : CauseReg;
+ CP0Compare : mword 32;
+ TLBEntry63 : TLBEntry;
+ TLBEntry62 : TLBEntry;
+ TLBEntry61 : TLBEntry;
+ TLBEntry60 : TLBEntry;
+ TLBEntry59 : TLBEntry;
+ TLBEntry58 : TLBEntry;
+ TLBEntry57 : TLBEntry;
+ TLBEntry56 : TLBEntry;
+ TLBEntry55 : TLBEntry;
+ TLBEntry54 : TLBEntry;
+ TLBEntry53 : TLBEntry;
+ TLBEntry52 : TLBEntry;
+ TLBEntry51 : TLBEntry;
+ TLBEntry50 : TLBEntry;
+ TLBEntry49 : TLBEntry;
+ TLBEntry48 : TLBEntry;
+ TLBEntry47 : TLBEntry;
+ TLBEntry46 : TLBEntry;
+ TLBEntry45 : TLBEntry;
+ TLBEntry44 : TLBEntry;
+ TLBEntry43 : TLBEntry;
+ TLBEntry42 : TLBEntry;
+ TLBEntry41 : TLBEntry;
+ TLBEntry40 : TLBEntry;
+ TLBEntry39 : TLBEntry;
+ TLBEntry38 : TLBEntry;
+ TLBEntry37 : TLBEntry;
+ TLBEntry36 : TLBEntry;
+ TLBEntry35 : TLBEntry;
+ TLBEntry34 : TLBEntry;
+ TLBEntry33 : TLBEntry;
+ TLBEntry32 : TLBEntry;
+ TLBEntry31 : TLBEntry;
+ TLBEntry30 : TLBEntry;
+ TLBEntry29 : TLBEntry;
+ TLBEntry28 : TLBEntry;
+ TLBEntry27 : TLBEntry;
+ TLBEntry26 : TLBEntry;
+ TLBEntry25 : TLBEntry;
+ TLBEntry24 : TLBEntry;
+ TLBEntry23 : TLBEntry;
+ TLBEntry22 : TLBEntry;
+ TLBEntry21 : TLBEntry;
+ TLBEntry20 : TLBEntry;
+ TLBEntry19 : TLBEntry;
+ TLBEntry18 : TLBEntry;
+ TLBEntry17 : TLBEntry;
+ TLBEntry16 : TLBEntry;
+ TLBEntry15 : TLBEntry;
+ TLBEntry14 : TLBEntry;
+ TLBEntry13 : TLBEntry;
+ TLBEntry12 : TLBEntry;
+ TLBEntry11 : TLBEntry;
+ TLBEntry10 : TLBEntry;
+ TLBEntry09 : TLBEntry;
+ TLBEntry08 : TLBEntry;
+ TLBEntry07 : TLBEntry;
+ TLBEntry06 : TLBEntry;
+ TLBEntry05 : TLBEntry;
+ TLBEntry04 : TLBEntry;
+ TLBEntry03 : TLBEntry;
+ TLBEntry02 : TLBEntry;
+ TLBEntry01 : TLBEntry;
+ TLBEntry00 : TLBEntry;
+ TLBXContext : XContextReg;
+ TLBEntryHi : TLBEntryHiReg;
+ TLBWired : mword 6;
+ TLBPageMask : mword 16;
+ TLBContext : ContextReg;
+ TLBEntryLo1 : TLBEntryLoReg;
+ TLBEntryLo0 : TLBEntryLoReg;
+ TLBRandom : mword 6;
+ TLBIndex : mword 6;
+ TLBProbe : mword 1;
+ NextPC : mword 64;
+ PC : mword 64; }.
+Notation "{[ r 'with' 'UART_RVALID' := e ]}" := ({| UART_RVALID := e; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_RDATA' := e ]}" := ({| UART_RDATA := e; UART_RVALID := UART_RVALID r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_WRITTEN' := e ]}" := ({| UART_WRITTEN := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'UART_WDATA' := e ]}" := ({| UART_WDATA := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'GPR' := e ]}" := ({| GPR := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'LO' := e ]}" := ({| LO := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'HI' := e ]}" := ({| HI := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'DelayedPC' := e ]}" := ({| DelayedPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'BranchPending' := e ]}" := ({| BranchPending := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'InBranchDelay' := e ]}" := ({| InBranchDelay := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'NextInBranchDelay' := e ]}" := ({| NextInBranchDelay := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Status' := e ]}" := ({| CP0Status := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0ConfigK0' := e ]}" := ({| CP0ConfigK0 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0UserLocal' := e ]}" := ({| CP0UserLocal := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0HWREna' := e ]}" := ({| CP0HWREna := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Count' := e ]}" := ({| CP0Count := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0BadInstrP' := e ]}" := ({| CP0BadInstrP := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0BadInstr' := e ]}" := ({| CP0BadInstr := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'LastInstrBits' := e ]}" := ({| LastInstrBits := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CurrentInstrBits' := e ]}" := ({| CurrentInstrBits := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0BadVAddr' := e ]}" := ({| CP0BadVAddr := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0LLAddr' := e ]}" := ({| CP0LLAddr := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0LLBit' := e ]}" := ({| CP0LLBit := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0ErrorEPC' := e ]}" := ({| CP0ErrorEPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0EPC' := e ]}" := ({| CP0EPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Cause' := e ]}" := ({| CP0Cause := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'CP0Compare' := e ]}" := ({| CP0Compare := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry63' := e ]}" := ({| TLBEntry63 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry62' := e ]}" := ({| TLBEntry62 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry61' := e ]}" := ({| TLBEntry61 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry60' := e ]}" := ({| TLBEntry60 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry59' := e ]}" := ({| TLBEntry59 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry58' := e ]}" := ({| TLBEntry58 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry57' := e ]}" := ({| TLBEntry57 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry56' := e ]}" := ({| TLBEntry56 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry55' := e ]}" := ({| TLBEntry55 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry54' := e ]}" := ({| TLBEntry54 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry53' := e ]}" := ({| TLBEntry53 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry52' := e ]}" := ({| TLBEntry52 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry51' := e ]}" := ({| TLBEntry51 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry50' := e ]}" := ({| TLBEntry50 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry49' := e ]}" := ({| TLBEntry49 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry48' := e ]}" := ({| TLBEntry48 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry47' := e ]}" := ({| TLBEntry47 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry46' := e ]}" := ({| TLBEntry46 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry45' := e ]}" := ({| TLBEntry45 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry44' := e ]}" := ({| TLBEntry44 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry43' := e ]}" := ({| TLBEntry43 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry42' := e ]}" := ({| TLBEntry42 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry41' := e ]}" := ({| TLBEntry41 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry40' := e ]}" := ({| TLBEntry40 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry39' := e ]}" := ({| TLBEntry39 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry38' := e ]}" := ({| TLBEntry38 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry37' := e ]}" := ({| TLBEntry37 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry36' := e ]}" := ({| TLBEntry36 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry35' := e ]}" := ({| TLBEntry35 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry34' := e ]}" := ({| TLBEntry34 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry33' := e ]}" := ({| TLBEntry33 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry32' := e ]}" := ({| TLBEntry32 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry31' := e ]}" := ({| TLBEntry31 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry30' := e ]}" := ({| TLBEntry30 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry29' := e ]}" := ({| TLBEntry29 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry28' := e ]}" := ({| TLBEntry28 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry27' := e ]}" := ({| TLBEntry27 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry26' := e ]}" := ({| TLBEntry26 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry25' := e ]}" := ({| TLBEntry25 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry24' := e ]}" := ({| TLBEntry24 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry23' := e ]}" := ({| TLBEntry23 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry22' := e ]}" := ({| TLBEntry22 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry21' := e ]}" := ({| TLBEntry21 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry20' := e ]}" := ({| TLBEntry20 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry19' := e ]}" := ({| TLBEntry19 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry18' := e ]}" := ({| TLBEntry18 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry17' := e ]}" := ({| TLBEntry17 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry16' := e ]}" := ({| TLBEntry16 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry15' := e ]}" := ({| TLBEntry15 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry14' := e ]}" := ({| TLBEntry14 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry13' := e ]}" := ({| TLBEntry13 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry12' := e ]}" := ({| TLBEntry12 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry11' := e ]}" := ({| TLBEntry11 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry10' := e ]}" := ({| TLBEntry10 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry09' := e ]}" := ({| TLBEntry09 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry08' := e ]}" := ({| TLBEntry08 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry07' := e ]}" := ({| TLBEntry07 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry06' := e ]}" := ({| TLBEntry06 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry05' := e ]}" := ({| TLBEntry05 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry04' := e ]}" := ({| TLBEntry04 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry03' := e ]}" := ({| TLBEntry03 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry02' := e ]}" := ({| TLBEntry02 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry01' := e ]}" := ({| TLBEntry01 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntry00' := e ]}" := ({| TLBEntry00 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBXContext' := e ]}" := ({| TLBXContext := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntryHi' := e ]}" := ({| TLBEntryHi := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBWired' := e ]}" := ({| TLBWired := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBPageMask' := e ]}" := ({| TLBPageMask := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBContext' := e ]}" := ({| TLBContext := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntryLo1' := e ]}" := ({| TLBEntryLo1 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBEntryLo0' := e ]}" := ({| TLBEntryLo0 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBRandom' := e ]}" := ({| TLBRandom := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBIndex' := e ]}" := ({| TLBIndex := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBProbe := TLBProbe r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'TLBProbe' := e ]}" := ({| TLBProbe := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; NextPC := NextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'NextPC' := e ]}" := ({| NextPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; PC := PC r |}).
+Notation "{[ r 'with' 'PC' := e ]}" := ({| PC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; DelayedPC := DelayedPC r; BranchPending := BranchPending r; InBranchDelay := InBranchDelay r; NextInBranchDelay := NextInBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadInstrP := CP0BadInstrP r; CP0BadInstr := CP0BadInstr r; LastInstrBits := LastInstrBits r; CurrentInstrBits := CurrentInstrBits r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; NextPC := NextPC r |}).
+
+
+
+Definition CauseReg_of_regval (merge_var : register_value)
+: option CauseReg :=
+
+ match merge_var with | Regval_CauseReg (v) => Some (v) | g__13 => None end.
+
+Definition regval_of_CauseReg (v : CauseReg) : register_value := Regval_CauseReg (v).
+
+Definition ContextReg_of_regval (merge_var : register_value)
+: option ContextReg :=
+
+ match merge_var with | Regval_ContextReg (v) => Some (v) | g__12 => None end.
+
+Definition regval_of_ContextReg (v : ContextReg) : register_value := Regval_ContextReg (v).
+
+Definition StatusReg_of_regval (merge_var : register_value)
+: option StatusReg :=
+
+ match merge_var with | Regval_StatusReg (v) => Some (v) | g__11 => None end.
+
+Definition regval_of_StatusReg (v : StatusReg) : register_value := Regval_StatusReg (v).
+
+Definition TLBEntry_of_regval (merge_var : register_value)
+: option TLBEntry :=
+
+ match merge_var with | Regval_TLBEntry (v) => Some (v) | g__10 => None end.
+
+Definition regval_of_TLBEntry (v : TLBEntry) : register_value := Regval_TLBEntry (v).
+
+Definition TLBEntryHiReg_of_regval (merge_var : register_value)
+: option TLBEntryHiReg :=
+
+ match merge_var with | Regval_TLBEntryHiReg (v) => Some (v) | g__9 => None end.
+
+Definition regval_of_TLBEntryHiReg (v : TLBEntryHiReg)
+: register_value :=
+
+ Regval_TLBEntryHiReg
+ (v).
+
+Definition TLBEntryLoReg_of_regval (merge_var : register_value)
+: option TLBEntryLoReg :=
+
+ match merge_var with | Regval_TLBEntryLoReg (v) => Some (v) | g__8 => None end.
+
+Definition regval_of_TLBEntryLoReg (v : TLBEntryLoReg)
+: register_value :=
+
+ Regval_TLBEntryLoReg
+ (v).
+
+Definition XContextReg_of_regval (merge_var : register_value)
+: option XContextReg :=
+
+ match merge_var with | Regval_XContextReg (v) => Some (v) | g__7 => None end.
+
+Definition regval_of_XContextReg (v : XContextReg) : register_value := Regval_XContextReg (v).
+
+Definition vector_16_dec_bit_of_regval (merge_var : register_value)
+: option (mword 16) :=
+
+ match merge_var with | Regval_vector_16_dec_bit (v) => Some (v) | g__6 => None end.
+
+Definition regval_of_vector_16_dec_bit (v : mword 16)
+: register_value :=
+
+ Regval_vector_16_dec_bit
+ (v).
+
+Definition vector_1_dec_bit_of_regval (merge_var : register_value)
+: option (mword 1) :=
+
+ match merge_var with | Regval_vector_1_dec_bit (v) => Some (v) | g__5 => None end.
+
+Definition regval_of_vector_1_dec_bit (v : mword 1)
+: register_value :=
+
+ Regval_vector_1_dec_bit
+ (v).
+
+Definition vector_32_dec_bit_of_regval (merge_var : register_value)
+: option (mword 32) :=
+
+ match merge_var with | Regval_vector_32_dec_bit (v) => Some (v) | g__4 => None end.
+
+Definition regval_of_vector_32_dec_bit (v : mword 32)
+: register_value :=
+
+ Regval_vector_32_dec_bit
+ (v).
+
+Definition vector_3_dec_bit_of_regval (merge_var : register_value)
+: option (mword 3) :=
+
+ match merge_var with | Regval_vector_3_dec_bit (v) => Some (v) | g__3 => None end.
+
+Definition regval_of_vector_3_dec_bit (v : mword 3)
+: register_value :=
+
+ Regval_vector_3_dec_bit
+ (v).
+
+Definition vector_64_dec_bit_of_regval (merge_var : register_value)
+: option (mword 64) :=
+
+ match merge_var with | Regval_vector_64_dec_bit (v) => Some (v) | g__2 => None end.
+
+Definition regval_of_vector_64_dec_bit (v : mword 64)
+: register_value :=
+
+ Regval_vector_64_dec_bit
+ (v).
+
+Definition vector_6_dec_bit_of_regval (merge_var : register_value)
+: option (mword 6) :=
+
+ match merge_var with | Regval_vector_6_dec_bit (v) => Some (v) | g__1 => None end.
+
+Definition regval_of_vector_6_dec_bit (v : mword 6)
+: register_value :=
+
+ Regval_vector_6_dec_bit
+ (v).
+
+Definition vector_8_dec_bit_of_regval (merge_var : register_value)
+: option (mword 8) :=
+
+ match merge_var with | Regval_vector_8_dec_bit (v) => Some (v) | g__0 => None end.
+
+Definition regval_of_vector_8_dec_bit (v : mword 8)
+: register_value :=
+
+ Regval_vector_8_dec_bit
+ (v).
+
+
+
+Definition vector_of_regval {a} n (of_regval : register_value -> option a) (rv : register_value) : option (vec a n) := match rv with
+ | Regval_vector (n', _, v) => if n =? n' then map_bind (vec_of_list n) (just_list (List.map of_regval v)) else None
+ | _ => None
+end.
+
+Definition regval_of_vector {a} (regval_of : a -> register_value) (size : Z) (is_inc : bool) (xs : vec a size) : register_value := Regval_vector (size, is_inc, List.map regval_of (list_of_vec xs)).
+
+Definition list_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (list a) := match rv with
+ | Regval_list v => just_list (List.map of_regval v)
+ | _ => None
+end.
+
+Definition regval_of_list {a} (regval_of : a -> register_value) (xs : list a) : register_value := Regval_list (List.map regval_of xs).
+
+Definition option_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (option a) := match rv with
+ | Regval_option v => option_map of_regval v
+ | _ => None
+end.
+
+Definition regval_of_option {a} (regval_of : a -> register_value) (v : option a) := Regval_option (option_map regval_of v).
+
+
+Definition UART_RVALID_ref := {|
+ name := "UART_RVALID";
+ read_from := (fun s => s.(UART_RVALID));
+ write_to := (fun v s => ({[ s with UART_RVALID := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition UART_RDATA_ref := {|
+ name := "UART_RDATA";
+ read_from := (fun s => s.(UART_RDATA));
+ write_to := (fun v s => ({[ s with UART_RDATA := v ]}));
+ of_regval := (fun v => vector_8_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_8_dec_bit v) |}.
+
+Definition UART_WRITTEN_ref := {|
+ name := "UART_WRITTEN";
+ read_from := (fun s => s.(UART_WRITTEN));
+ write_to := (fun v s => ({[ s with UART_WRITTEN := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition UART_WDATA_ref := {|
+ name := "UART_WDATA";
+ read_from := (fun s => s.(UART_WDATA));
+ write_to := (fun v s => ({[ s with UART_WDATA := v ]}));
+ of_regval := (fun v => vector_8_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_8_dec_bit v) |}.
+
+Definition GPR_ref := {|
+ name := "GPR";
+ read_from := (fun s => s.(GPR));
+ write_to := (fun v s => ({[ s with GPR := v ]}));
+ of_regval := (fun v => vector_of_regval 32 (fun v => vector_64_dec_bit_of_regval v) v);
+ regval_of := (fun v => regval_of_vector (fun v => regval_of_vector_64_dec_bit v) 32 false v) |}.
+
+Definition LO_ref := {|
+ name := "LO";
+ read_from := (fun s => s.(LO));
+ write_to := (fun v s => ({[ s with LO := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition HI_ref := {|
+ name := "HI";
+ read_from := (fun s => s.(HI));
+ write_to := (fun v s => ({[ s with HI := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition DelayedPC_ref := {|
+ name := "DelayedPC";
+ read_from := (fun s => s.(DelayedPC));
+ write_to := (fun v s => ({[ s with DelayedPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition BranchPending_ref := {|
+ name := "BranchPending";
+ read_from := (fun s => s.(BranchPending));
+ write_to := (fun v s => ({[ s with BranchPending := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition InBranchDelay_ref := {|
+ name := "InBranchDelay";
+ read_from := (fun s => s.(InBranchDelay));
+ write_to := (fun v s => ({[ s with InBranchDelay := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition NextInBranchDelay_ref := {|
+ name := "NextInBranchDelay";
+ read_from := (fun s => s.(NextInBranchDelay));
+ write_to := (fun v s => ({[ s with NextInBranchDelay := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition CP0Status_ref := {|
+ name := "CP0Status";
+ read_from := (fun s => s.(CP0Status));
+ write_to := (fun v s => ({[ s with CP0Status := v ]}));
+ of_regval := (fun v => StatusReg_of_regval v);
+ regval_of := (fun v => regval_of_StatusReg v) |}.
+
+Definition CP0ConfigK0_ref := {|
+ name := "CP0ConfigK0";
+ read_from := (fun s => s.(CP0ConfigK0));
+ write_to := (fun v s => ({[ s with CP0ConfigK0 := v ]}));
+ of_regval := (fun v => vector_3_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_3_dec_bit v) |}.
+
+Definition CP0UserLocal_ref := {|
+ name := "CP0UserLocal";
+ read_from := (fun s => s.(CP0UserLocal));
+ write_to := (fun v s => ({[ s with CP0UserLocal := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0HWREna_ref := {|
+ name := "CP0HWREna";
+ read_from := (fun s => s.(CP0HWREna));
+ write_to := (fun v s => ({[ s with CP0HWREna := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0Count_ref := {|
+ name := "CP0Count";
+ read_from := (fun s => s.(CP0Count));
+ write_to := (fun v s => ({[ s with CP0Count := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0BadInstrP_ref := {|
+ name := "CP0BadInstrP";
+ read_from := (fun s => s.(CP0BadInstrP));
+ write_to := (fun v s => ({[ s with CP0BadInstrP := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0BadInstr_ref := {|
+ name := "CP0BadInstr";
+ read_from := (fun s => s.(CP0BadInstr));
+ write_to := (fun v s => ({[ s with CP0BadInstr := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition LastInstrBits_ref := {|
+ name := "LastInstrBits";
+ read_from := (fun s => s.(LastInstrBits));
+ write_to := (fun v s => ({[ s with LastInstrBits := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CurrentInstrBits_ref := {|
+ name := "CurrentInstrBits";
+ read_from := (fun s => s.(CurrentInstrBits));
+ write_to := (fun v s => ({[ s with CurrentInstrBits := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition CP0BadVAddr_ref := {|
+ name := "CP0BadVAddr";
+ read_from := (fun s => s.(CP0BadVAddr));
+ write_to := (fun v s => ({[ s with CP0BadVAddr := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0LLAddr_ref := {|
+ name := "CP0LLAddr";
+ read_from := (fun s => s.(CP0LLAddr));
+ write_to := (fun v s => ({[ s with CP0LLAddr := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0LLBit_ref := {|
+ name := "CP0LLBit";
+ read_from := (fun s => s.(CP0LLBit));
+ write_to := (fun v s => ({[ s with CP0LLBit := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition CP0ErrorEPC_ref := {|
+ name := "CP0ErrorEPC";
+ read_from := (fun s => s.(CP0ErrorEPC));
+ write_to := (fun v s => ({[ s with CP0ErrorEPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0EPC_ref := {|
+ name := "CP0EPC";
+ read_from := (fun s => s.(CP0EPC));
+ write_to := (fun v s => ({[ s with CP0EPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition CP0Cause_ref := {|
+ name := "CP0Cause";
+ read_from := (fun s => s.(CP0Cause));
+ write_to := (fun v s => ({[ s with CP0Cause := v ]}));
+ of_regval := (fun v => CauseReg_of_regval v);
+ regval_of := (fun v => regval_of_CauseReg v) |}.
+
+Definition CP0Compare_ref := {|
+ name := "CP0Compare";
+ read_from := (fun s => s.(CP0Compare));
+ write_to := (fun v s => ({[ s with CP0Compare := v ]}));
+ of_regval := (fun v => vector_32_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
+
+Definition TLBEntry63_ref := {|
+ name := "TLBEntry63";
+ read_from := (fun s => s.(TLBEntry63));
+ write_to := (fun v s => ({[ s with TLBEntry63 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry62_ref := {|
+ name := "TLBEntry62";
+ read_from := (fun s => s.(TLBEntry62));
+ write_to := (fun v s => ({[ s with TLBEntry62 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry61_ref := {|
+ name := "TLBEntry61";
+ read_from := (fun s => s.(TLBEntry61));
+ write_to := (fun v s => ({[ s with TLBEntry61 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry60_ref := {|
+ name := "TLBEntry60";
+ read_from := (fun s => s.(TLBEntry60));
+ write_to := (fun v s => ({[ s with TLBEntry60 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry59_ref := {|
+ name := "TLBEntry59";
+ read_from := (fun s => s.(TLBEntry59));
+ write_to := (fun v s => ({[ s with TLBEntry59 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry58_ref := {|
+ name := "TLBEntry58";
+ read_from := (fun s => s.(TLBEntry58));
+ write_to := (fun v s => ({[ s with TLBEntry58 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry57_ref := {|
+ name := "TLBEntry57";
+ read_from := (fun s => s.(TLBEntry57));
+ write_to := (fun v s => ({[ s with TLBEntry57 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry56_ref := {|
+ name := "TLBEntry56";
+ read_from := (fun s => s.(TLBEntry56));
+ write_to := (fun v s => ({[ s with TLBEntry56 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry55_ref := {|
+ name := "TLBEntry55";
+ read_from := (fun s => s.(TLBEntry55));
+ write_to := (fun v s => ({[ s with TLBEntry55 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry54_ref := {|
+ name := "TLBEntry54";
+ read_from := (fun s => s.(TLBEntry54));
+ write_to := (fun v s => ({[ s with TLBEntry54 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry53_ref := {|
+ name := "TLBEntry53";
+ read_from := (fun s => s.(TLBEntry53));
+ write_to := (fun v s => ({[ s with TLBEntry53 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry52_ref := {|
+ name := "TLBEntry52";
+ read_from := (fun s => s.(TLBEntry52));
+ write_to := (fun v s => ({[ s with TLBEntry52 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry51_ref := {|
+ name := "TLBEntry51";
+ read_from := (fun s => s.(TLBEntry51));
+ write_to := (fun v s => ({[ s with TLBEntry51 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry50_ref := {|
+ name := "TLBEntry50";
+ read_from := (fun s => s.(TLBEntry50));
+ write_to := (fun v s => ({[ s with TLBEntry50 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry49_ref := {|
+ name := "TLBEntry49";
+ read_from := (fun s => s.(TLBEntry49));
+ write_to := (fun v s => ({[ s with TLBEntry49 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry48_ref := {|
+ name := "TLBEntry48";
+ read_from := (fun s => s.(TLBEntry48));
+ write_to := (fun v s => ({[ s with TLBEntry48 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry47_ref := {|
+ name := "TLBEntry47";
+ read_from := (fun s => s.(TLBEntry47));
+ write_to := (fun v s => ({[ s with TLBEntry47 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry46_ref := {|
+ name := "TLBEntry46";
+ read_from := (fun s => s.(TLBEntry46));
+ write_to := (fun v s => ({[ s with TLBEntry46 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry45_ref := {|
+ name := "TLBEntry45";
+ read_from := (fun s => s.(TLBEntry45));
+ write_to := (fun v s => ({[ s with TLBEntry45 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry44_ref := {|
+ name := "TLBEntry44";
+ read_from := (fun s => s.(TLBEntry44));
+ write_to := (fun v s => ({[ s with TLBEntry44 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry43_ref := {|
+ name := "TLBEntry43";
+ read_from := (fun s => s.(TLBEntry43));
+ write_to := (fun v s => ({[ s with TLBEntry43 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry42_ref := {|
+ name := "TLBEntry42";
+ read_from := (fun s => s.(TLBEntry42));
+ write_to := (fun v s => ({[ s with TLBEntry42 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry41_ref := {|
+ name := "TLBEntry41";
+ read_from := (fun s => s.(TLBEntry41));
+ write_to := (fun v s => ({[ s with TLBEntry41 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry40_ref := {|
+ name := "TLBEntry40";
+ read_from := (fun s => s.(TLBEntry40));
+ write_to := (fun v s => ({[ s with TLBEntry40 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry39_ref := {|
+ name := "TLBEntry39";
+ read_from := (fun s => s.(TLBEntry39));
+ write_to := (fun v s => ({[ s with TLBEntry39 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry38_ref := {|
+ name := "TLBEntry38";
+ read_from := (fun s => s.(TLBEntry38));
+ write_to := (fun v s => ({[ s with TLBEntry38 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry37_ref := {|
+ name := "TLBEntry37";
+ read_from := (fun s => s.(TLBEntry37));
+ write_to := (fun v s => ({[ s with TLBEntry37 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry36_ref := {|
+ name := "TLBEntry36";
+ read_from := (fun s => s.(TLBEntry36));
+ write_to := (fun v s => ({[ s with TLBEntry36 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry35_ref := {|
+ name := "TLBEntry35";
+ read_from := (fun s => s.(TLBEntry35));
+ write_to := (fun v s => ({[ s with TLBEntry35 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry34_ref := {|
+ name := "TLBEntry34";
+ read_from := (fun s => s.(TLBEntry34));
+ write_to := (fun v s => ({[ s with TLBEntry34 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry33_ref := {|
+ name := "TLBEntry33";
+ read_from := (fun s => s.(TLBEntry33));
+ write_to := (fun v s => ({[ s with TLBEntry33 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry32_ref := {|
+ name := "TLBEntry32";
+ read_from := (fun s => s.(TLBEntry32));
+ write_to := (fun v s => ({[ s with TLBEntry32 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry31_ref := {|
+ name := "TLBEntry31";
+ read_from := (fun s => s.(TLBEntry31));
+ write_to := (fun v s => ({[ s with TLBEntry31 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry30_ref := {|
+ name := "TLBEntry30";
+ read_from := (fun s => s.(TLBEntry30));
+ write_to := (fun v s => ({[ s with TLBEntry30 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry29_ref := {|
+ name := "TLBEntry29";
+ read_from := (fun s => s.(TLBEntry29));
+ write_to := (fun v s => ({[ s with TLBEntry29 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry28_ref := {|
+ name := "TLBEntry28";
+ read_from := (fun s => s.(TLBEntry28));
+ write_to := (fun v s => ({[ s with TLBEntry28 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry27_ref := {|
+ name := "TLBEntry27";
+ read_from := (fun s => s.(TLBEntry27));
+ write_to := (fun v s => ({[ s with TLBEntry27 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry26_ref := {|
+ name := "TLBEntry26";
+ read_from := (fun s => s.(TLBEntry26));
+ write_to := (fun v s => ({[ s with TLBEntry26 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry25_ref := {|
+ name := "TLBEntry25";
+ read_from := (fun s => s.(TLBEntry25));
+ write_to := (fun v s => ({[ s with TLBEntry25 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry24_ref := {|
+ name := "TLBEntry24";
+ read_from := (fun s => s.(TLBEntry24));
+ write_to := (fun v s => ({[ s with TLBEntry24 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry23_ref := {|
+ name := "TLBEntry23";
+ read_from := (fun s => s.(TLBEntry23));
+ write_to := (fun v s => ({[ s with TLBEntry23 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry22_ref := {|
+ name := "TLBEntry22";
+ read_from := (fun s => s.(TLBEntry22));
+ write_to := (fun v s => ({[ s with TLBEntry22 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry21_ref := {|
+ name := "TLBEntry21";
+ read_from := (fun s => s.(TLBEntry21));
+ write_to := (fun v s => ({[ s with TLBEntry21 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry20_ref := {|
+ name := "TLBEntry20";
+ read_from := (fun s => s.(TLBEntry20));
+ write_to := (fun v s => ({[ s with TLBEntry20 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry19_ref := {|
+ name := "TLBEntry19";
+ read_from := (fun s => s.(TLBEntry19));
+ write_to := (fun v s => ({[ s with TLBEntry19 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry18_ref := {|
+ name := "TLBEntry18";
+ read_from := (fun s => s.(TLBEntry18));
+ write_to := (fun v s => ({[ s with TLBEntry18 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry17_ref := {|
+ name := "TLBEntry17";
+ read_from := (fun s => s.(TLBEntry17));
+ write_to := (fun v s => ({[ s with TLBEntry17 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry16_ref := {|
+ name := "TLBEntry16";
+ read_from := (fun s => s.(TLBEntry16));
+ write_to := (fun v s => ({[ s with TLBEntry16 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry15_ref := {|
+ name := "TLBEntry15";
+ read_from := (fun s => s.(TLBEntry15));
+ write_to := (fun v s => ({[ s with TLBEntry15 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry14_ref := {|
+ name := "TLBEntry14";
+ read_from := (fun s => s.(TLBEntry14));
+ write_to := (fun v s => ({[ s with TLBEntry14 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry13_ref := {|
+ name := "TLBEntry13";
+ read_from := (fun s => s.(TLBEntry13));
+ write_to := (fun v s => ({[ s with TLBEntry13 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry12_ref := {|
+ name := "TLBEntry12";
+ read_from := (fun s => s.(TLBEntry12));
+ write_to := (fun v s => ({[ s with TLBEntry12 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry11_ref := {|
+ name := "TLBEntry11";
+ read_from := (fun s => s.(TLBEntry11));
+ write_to := (fun v s => ({[ s with TLBEntry11 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry10_ref := {|
+ name := "TLBEntry10";
+ read_from := (fun s => s.(TLBEntry10));
+ write_to := (fun v s => ({[ s with TLBEntry10 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry09_ref := {|
+ name := "TLBEntry09";
+ read_from := (fun s => s.(TLBEntry09));
+ write_to := (fun v s => ({[ s with TLBEntry09 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry08_ref := {|
+ name := "TLBEntry08";
+ read_from := (fun s => s.(TLBEntry08));
+ write_to := (fun v s => ({[ s with TLBEntry08 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry07_ref := {|
+ name := "TLBEntry07";
+ read_from := (fun s => s.(TLBEntry07));
+ write_to := (fun v s => ({[ s with TLBEntry07 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry06_ref := {|
+ name := "TLBEntry06";
+ read_from := (fun s => s.(TLBEntry06));
+ write_to := (fun v s => ({[ s with TLBEntry06 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry05_ref := {|
+ name := "TLBEntry05";
+ read_from := (fun s => s.(TLBEntry05));
+ write_to := (fun v s => ({[ s with TLBEntry05 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry04_ref := {|
+ name := "TLBEntry04";
+ read_from := (fun s => s.(TLBEntry04));
+ write_to := (fun v s => ({[ s with TLBEntry04 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry03_ref := {|
+ name := "TLBEntry03";
+ read_from := (fun s => s.(TLBEntry03));
+ write_to := (fun v s => ({[ s with TLBEntry03 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry02_ref := {|
+ name := "TLBEntry02";
+ read_from := (fun s => s.(TLBEntry02));
+ write_to := (fun v s => ({[ s with TLBEntry02 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry01_ref := {|
+ name := "TLBEntry01";
+ read_from := (fun s => s.(TLBEntry01));
+ write_to := (fun v s => ({[ s with TLBEntry01 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBEntry00_ref := {|
+ name := "TLBEntry00";
+ read_from := (fun s => s.(TLBEntry00));
+ write_to := (fun v s => ({[ s with TLBEntry00 := v ]}));
+ of_regval := (fun v => TLBEntry_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntry v) |}.
+
+Definition TLBXContext_ref := {|
+ name := "TLBXContext";
+ read_from := (fun s => s.(TLBXContext));
+ write_to := (fun v s => ({[ s with TLBXContext := v ]}));
+ of_regval := (fun v => XContextReg_of_regval v);
+ regval_of := (fun v => regval_of_XContextReg v) |}.
+
+Definition TLBEntryHi_ref := {|
+ name := "TLBEntryHi";
+ read_from := (fun s => s.(TLBEntryHi));
+ write_to := (fun v s => ({[ s with TLBEntryHi := v ]}));
+ of_regval := (fun v => TLBEntryHiReg_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntryHiReg v) |}.
+
+Definition TLBWired_ref := {|
+ name := "TLBWired";
+ read_from := (fun s => s.(TLBWired));
+ write_to := (fun v s => ({[ s with TLBWired := v ]}));
+ of_regval := (fun v => vector_6_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
+
+Definition TLBPageMask_ref := {|
+ name := "TLBPageMask";
+ read_from := (fun s => s.(TLBPageMask));
+ write_to := (fun v s => ({[ s with TLBPageMask := v ]}));
+ of_regval := (fun v => vector_16_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_16_dec_bit v) |}.
+
+Definition TLBContext_ref := {|
+ name := "TLBContext";
+ read_from := (fun s => s.(TLBContext));
+ write_to := (fun v s => ({[ s with TLBContext := v ]}));
+ of_regval := (fun v => ContextReg_of_regval v);
+ regval_of := (fun v => regval_of_ContextReg v) |}.
+
+Definition TLBEntryLo1_ref := {|
+ name := "TLBEntryLo1";
+ read_from := (fun s => s.(TLBEntryLo1));
+ write_to := (fun v s => ({[ s with TLBEntryLo1 := v ]}));
+ of_regval := (fun v => TLBEntryLoReg_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntryLoReg v) |}.
+
+Definition TLBEntryLo0_ref := {|
+ name := "TLBEntryLo0";
+ read_from := (fun s => s.(TLBEntryLo0));
+ write_to := (fun v s => ({[ s with TLBEntryLo0 := v ]}));
+ of_regval := (fun v => TLBEntryLoReg_of_regval v);
+ regval_of := (fun v => regval_of_TLBEntryLoReg v) |}.
+
+Definition TLBRandom_ref := {|
+ name := "TLBRandom";
+ read_from := (fun s => s.(TLBRandom));
+ write_to := (fun v s => ({[ s with TLBRandom := v ]}));
+ of_regval := (fun v => vector_6_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
+
+Definition TLBIndex_ref := {|
+ name := "TLBIndex";
+ read_from := (fun s => s.(TLBIndex));
+ write_to := (fun v s => ({[ s with TLBIndex := v ]}));
+ of_regval := (fun v => vector_6_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
+
+Definition TLBProbe_ref := {|
+ name := "TLBProbe";
+ read_from := (fun s => s.(TLBProbe));
+ write_to := (fun v s => ({[ s with TLBProbe := v ]}));
+ of_regval := (fun v => vector_1_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
+
+Definition NextPC_ref := {|
+ name := "NextPC";
+ read_from := (fun s => s.(NextPC));
+ write_to := (fun v s => ({[ s with NextPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition PC_ref := {|
+ name := "PC";
+ read_from := (fun s => s.(PC));
+ write_to := (fun v s => ({[ s with PC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Local Open Scope string.
+Definition get_regval (reg_name : string) (s : regstate) : option register_value :=
+ if string_dec reg_name "UART_RVALID" then Some (UART_RVALID_ref.(regval_of) (UART_RVALID_ref.(read_from) s)) else
+ if string_dec reg_name "UART_RDATA" then Some (UART_RDATA_ref.(regval_of) (UART_RDATA_ref.(read_from) s)) else
+ if string_dec reg_name "UART_WRITTEN" then Some (UART_WRITTEN_ref.(regval_of) (UART_WRITTEN_ref.(read_from) s)) else
+ if string_dec reg_name "UART_WDATA" then Some (UART_WDATA_ref.(regval_of) (UART_WDATA_ref.(read_from) s)) else
+ if string_dec reg_name "GPR" then Some (GPR_ref.(regval_of) (GPR_ref.(read_from) s)) else
+ if string_dec reg_name "LO" then Some (LO_ref.(regval_of) (LO_ref.(read_from) s)) else
+ if string_dec reg_name "HI" then Some (HI_ref.(regval_of) (HI_ref.(read_from) s)) else
+ if string_dec reg_name "DelayedPC" then Some (DelayedPC_ref.(regval_of) (DelayedPC_ref.(read_from) s)) else
+ if string_dec reg_name "BranchPending" then Some (BranchPending_ref.(regval_of) (BranchPending_ref.(read_from) s)) else
+ if string_dec reg_name "InBranchDelay" then Some (InBranchDelay_ref.(regval_of) (InBranchDelay_ref.(read_from) s)) else
+ if string_dec reg_name "NextInBranchDelay" then Some (NextInBranchDelay_ref.(regval_of) (NextInBranchDelay_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Status" then Some (CP0Status_ref.(regval_of) (CP0Status_ref.(read_from) s)) else
+ if string_dec reg_name "CP0ConfigK0" then Some (CP0ConfigK0_ref.(regval_of) (CP0ConfigK0_ref.(read_from) s)) else
+ if string_dec reg_name "CP0UserLocal" then Some (CP0UserLocal_ref.(regval_of) (CP0UserLocal_ref.(read_from) s)) else
+ if string_dec reg_name "CP0HWREna" then Some (CP0HWREna_ref.(regval_of) (CP0HWREna_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Count" then Some (CP0Count_ref.(regval_of) (CP0Count_ref.(read_from) s)) else
+ if string_dec reg_name "CP0BadInstrP" then Some (CP0BadInstrP_ref.(regval_of) (CP0BadInstrP_ref.(read_from) s)) else
+ if string_dec reg_name "CP0BadInstr" then Some (CP0BadInstr_ref.(regval_of) (CP0BadInstr_ref.(read_from) s)) else
+ if string_dec reg_name "LastInstrBits" then Some (LastInstrBits_ref.(regval_of) (LastInstrBits_ref.(read_from) s)) else
+ if string_dec reg_name "CurrentInstrBits" then Some (CurrentInstrBits_ref.(regval_of) (CurrentInstrBits_ref.(read_from) s)) else
+ if string_dec reg_name "CP0BadVAddr" then Some (CP0BadVAddr_ref.(regval_of) (CP0BadVAddr_ref.(read_from) s)) else
+ if string_dec reg_name "CP0LLAddr" then Some (CP0LLAddr_ref.(regval_of) (CP0LLAddr_ref.(read_from) s)) else
+ if string_dec reg_name "CP0LLBit" then Some (CP0LLBit_ref.(regval_of) (CP0LLBit_ref.(read_from) s)) else
+ if string_dec reg_name "CP0ErrorEPC" then Some (CP0ErrorEPC_ref.(regval_of) (CP0ErrorEPC_ref.(read_from) s)) else
+ if string_dec reg_name "CP0EPC" then Some (CP0EPC_ref.(regval_of) (CP0EPC_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Cause" then Some (CP0Cause_ref.(regval_of) (CP0Cause_ref.(read_from) s)) else
+ if string_dec reg_name "CP0Compare" then Some (CP0Compare_ref.(regval_of) (CP0Compare_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry63" then Some (TLBEntry63_ref.(regval_of) (TLBEntry63_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry62" then Some (TLBEntry62_ref.(regval_of) (TLBEntry62_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry61" then Some (TLBEntry61_ref.(regval_of) (TLBEntry61_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry60" then Some (TLBEntry60_ref.(regval_of) (TLBEntry60_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry59" then Some (TLBEntry59_ref.(regval_of) (TLBEntry59_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry58" then Some (TLBEntry58_ref.(regval_of) (TLBEntry58_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry57" then Some (TLBEntry57_ref.(regval_of) (TLBEntry57_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry56" then Some (TLBEntry56_ref.(regval_of) (TLBEntry56_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry55" then Some (TLBEntry55_ref.(regval_of) (TLBEntry55_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry54" then Some (TLBEntry54_ref.(regval_of) (TLBEntry54_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry53" then Some (TLBEntry53_ref.(regval_of) (TLBEntry53_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry52" then Some (TLBEntry52_ref.(regval_of) (TLBEntry52_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry51" then Some (TLBEntry51_ref.(regval_of) (TLBEntry51_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry50" then Some (TLBEntry50_ref.(regval_of) (TLBEntry50_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry49" then Some (TLBEntry49_ref.(regval_of) (TLBEntry49_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry48" then Some (TLBEntry48_ref.(regval_of) (TLBEntry48_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry47" then Some (TLBEntry47_ref.(regval_of) (TLBEntry47_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry46" then Some (TLBEntry46_ref.(regval_of) (TLBEntry46_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry45" then Some (TLBEntry45_ref.(regval_of) (TLBEntry45_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry44" then Some (TLBEntry44_ref.(regval_of) (TLBEntry44_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry43" then Some (TLBEntry43_ref.(regval_of) (TLBEntry43_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry42" then Some (TLBEntry42_ref.(regval_of) (TLBEntry42_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry41" then Some (TLBEntry41_ref.(regval_of) (TLBEntry41_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry40" then Some (TLBEntry40_ref.(regval_of) (TLBEntry40_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry39" then Some (TLBEntry39_ref.(regval_of) (TLBEntry39_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry38" then Some (TLBEntry38_ref.(regval_of) (TLBEntry38_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry37" then Some (TLBEntry37_ref.(regval_of) (TLBEntry37_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry36" then Some (TLBEntry36_ref.(regval_of) (TLBEntry36_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry35" then Some (TLBEntry35_ref.(regval_of) (TLBEntry35_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry34" then Some (TLBEntry34_ref.(regval_of) (TLBEntry34_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry33" then Some (TLBEntry33_ref.(regval_of) (TLBEntry33_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry32" then Some (TLBEntry32_ref.(regval_of) (TLBEntry32_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry31" then Some (TLBEntry31_ref.(regval_of) (TLBEntry31_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry30" then Some (TLBEntry30_ref.(regval_of) (TLBEntry30_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry29" then Some (TLBEntry29_ref.(regval_of) (TLBEntry29_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry28" then Some (TLBEntry28_ref.(regval_of) (TLBEntry28_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry27" then Some (TLBEntry27_ref.(regval_of) (TLBEntry27_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry26" then Some (TLBEntry26_ref.(regval_of) (TLBEntry26_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry25" then Some (TLBEntry25_ref.(regval_of) (TLBEntry25_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry24" then Some (TLBEntry24_ref.(regval_of) (TLBEntry24_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry23" then Some (TLBEntry23_ref.(regval_of) (TLBEntry23_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry22" then Some (TLBEntry22_ref.(regval_of) (TLBEntry22_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry21" then Some (TLBEntry21_ref.(regval_of) (TLBEntry21_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry20" then Some (TLBEntry20_ref.(regval_of) (TLBEntry20_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry19" then Some (TLBEntry19_ref.(regval_of) (TLBEntry19_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry18" then Some (TLBEntry18_ref.(regval_of) (TLBEntry18_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry17" then Some (TLBEntry17_ref.(regval_of) (TLBEntry17_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry16" then Some (TLBEntry16_ref.(regval_of) (TLBEntry16_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry15" then Some (TLBEntry15_ref.(regval_of) (TLBEntry15_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry14" then Some (TLBEntry14_ref.(regval_of) (TLBEntry14_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry13" then Some (TLBEntry13_ref.(regval_of) (TLBEntry13_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry12" then Some (TLBEntry12_ref.(regval_of) (TLBEntry12_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry11" then Some (TLBEntry11_ref.(regval_of) (TLBEntry11_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry10" then Some (TLBEntry10_ref.(regval_of) (TLBEntry10_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry09" then Some (TLBEntry09_ref.(regval_of) (TLBEntry09_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry08" then Some (TLBEntry08_ref.(regval_of) (TLBEntry08_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry07" then Some (TLBEntry07_ref.(regval_of) (TLBEntry07_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry06" then Some (TLBEntry06_ref.(regval_of) (TLBEntry06_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry05" then Some (TLBEntry05_ref.(regval_of) (TLBEntry05_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry04" then Some (TLBEntry04_ref.(regval_of) (TLBEntry04_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry03" then Some (TLBEntry03_ref.(regval_of) (TLBEntry03_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry02" then Some (TLBEntry02_ref.(regval_of) (TLBEntry02_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry01" then Some (TLBEntry01_ref.(regval_of) (TLBEntry01_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntry00" then Some (TLBEntry00_ref.(regval_of) (TLBEntry00_ref.(read_from) s)) else
+ if string_dec reg_name "TLBXContext" then Some (TLBXContext_ref.(regval_of) (TLBXContext_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntryHi" then Some (TLBEntryHi_ref.(regval_of) (TLBEntryHi_ref.(read_from) s)) else
+ if string_dec reg_name "TLBWired" then Some (TLBWired_ref.(regval_of) (TLBWired_ref.(read_from) s)) else
+ if string_dec reg_name "TLBPageMask" then Some (TLBPageMask_ref.(regval_of) (TLBPageMask_ref.(read_from) s)) else
+ if string_dec reg_name "TLBContext" then Some (TLBContext_ref.(regval_of) (TLBContext_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntryLo1" then Some (TLBEntryLo1_ref.(regval_of) (TLBEntryLo1_ref.(read_from) s)) else
+ if string_dec reg_name "TLBEntryLo0" then Some (TLBEntryLo0_ref.(regval_of) (TLBEntryLo0_ref.(read_from) s)) else
+ if string_dec reg_name "TLBRandom" then Some (TLBRandom_ref.(regval_of) (TLBRandom_ref.(read_from) s)) else
+ if string_dec reg_name "TLBIndex" then Some (TLBIndex_ref.(regval_of) (TLBIndex_ref.(read_from) s)) else
+ if string_dec reg_name "TLBProbe" then Some (TLBProbe_ref.(regval_of) (TLBProbe_ref.(read_from) s)) else
+ if string_dec reg_name "NextPC" then Some (NextPC_ref.(regval_of) (NextPC_ref.(read_from) s)) else
+ if string_dec reg_name "PC" then Some (PC_ref.(regval_of) (PC_ref.(read_from) s)) else
+ None.
+
+Definition set_regval (reg_name : string) (v : register_value) (s : regstate) : option regstate :=
+ if string_dec reg_name "UART_RVALID" then option_map (fun v => UART_RVALID_ref.(write_to) v s) (UART_RVALID_ref.(of_regval) v) else
+ if string_dec reg_name "UART_RDATA" then option_map (fun v => UART_RDATA_ref.(write_to) v s) (UART_RDATA_ref.(of_regval) v) else
+ if string_dec reg_name "UART_WRITTEN" then option_map (fun v => UART_WRITTEN_ref.(write_to) v s) (UART_WRITTEN_ref.(of_regval) v) else
+ if string_dec reg_name "UART_WDATA" then option_map (fun v => UART_WDATA_ref.(write_to) v s) (UART_WDATA_ref.(of_regval) v) else
+ if string_dec reg_name "GPR" then option_map (fun v => GPR_ref.(write_to) v s) (GPR_ref.(of_regval) v) else
+ if string_dec reg_name "LO" then option_map (fun v => LO_ref.(write_to) v s) (LO_ref.(of_regval) v) else
+ if string_dec reg_name "HI" then option_map (fun v => HI_ref.(write_to) v s) (HI_ref.(of_regval) v) else
+ if string_dec reg_name "DelayedPC" then option_map (fun v => DelayedPC_ref.(write_to) v s) (DelayedPC_ref.(of_regval) v) else
+ if string_dec reg_name "BranchPending" then option_map (fun v => BranchPending_ref.(write_to) v s) (BranchPending_ref.(of_regval) v) else
+ if string_dec reg_name "InBranchDelay" then option_map (fun v => InBranchDelay_ref.(write_to) v s) (InBranchDelay_ref.(of_regval) v) else
+ if string_dec reg_name "NextInBranchDelay" then option_map (fun v => NextInBranchDelay_ref.(write_to) v s) (NextInBranchDelay_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Status" then option_map (fun v => CP0Status_ref.(write_to) v s) (CP0Status_ref.(of_regval) v) else
+ if string_dec reg_name "CP0ConfigK0" then option_map (fun v => CP0ConfigK0_ref.(write_to) v s) (CP0ConfigK0_ref.(of_regval) v) else
+ if string_dec reg_name "CP0UserLocal" then option_map (fun v => CP0UserLocal_ref.(write_to) v s) (CP0UserLocal_ref.(of_regval) v) else
+ if string_dec reg_name "CP0HWREna" then option_map (fun v => CP0HWREna_ref.(write_to) v s) (CP0HWREna_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Count" then option_map (fun v => CP0Count_ref.(write_to) v s) (CP0Count_ref.(of_regval) v) else
+ if string_dec reg_name "CP0BadInstrP" then option_map (fun v => CP0BadInstrP_ref.(write_to) v s) (CP0BadInstrP_ref.(of_regval) v) else
+ if string_dec reg_name "CP0BadInstr" then option_map (fun v => CP0BadInstr_ref.(write_to) v s) (CP0BadInstr_ref.(of_regval) v) else
+ if string_dec reg_name "LastInstrBits" then option_map (fun v => LastInstrBits_ref.(write_to) v s) (LastInstrBits_ref.(of_regval) v) else
+ if string_dec reg_name "CurrentInstrBits" then option_map (fun v => CurrentInstrBits_ref.(write_to) v s) (CurrentInstrBits_ref.(of_regval) v) else
+ if string_dec reg_name "CP0BadVAddr" then option_map (fun v => CP0BadVAddr_ref.(write_to) v s) (CP0BadVAddr_ref.(of_regval) v) else
+ if string_dec reg_name "CP0LLAddr" then option_map (fun v => CP0LLAddr_ref.(write_to) v s) (CP0LLAddr_ref.(of_regval) v) else
+ if string_dec reg_name "CP0LLBit" then option_map (fun v => CP0LLBit_ref.(write_to) v s) (CP0LLBit_ref.(of_regval) v) else
+ if string_dec reg_name "CP0ErrorEPC" then option_map (fun v => CP0ErrorEPC_ref.(write_to) v s) (CP0ErrorEPC_ref.(of_regval) v) else
+ if string_dec reg_name "CP0EPC" then option_map (fun v => CP0EPC_ref.(write_to) v s) (CP0EPC_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Cause" then option_map (fun v => CP0Cause_ref.(write_to) v s) (CP0Cause_ref.(of_regval) v) else
+ if string_dec reg_name "CP0Compare" then option_map (fun v => CP0Compare_ref.(write_to) v s) (CP0Compare_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry63" then option_map (fun v => TLBEntry63_ref.(write_to) v s) (TLBEntry63_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry62" then option_map (fun v => TLBEntry62_ref.(write_to) v s) (TLBEntry62_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry61" then option_map (fun v => TLBEntry61_ref.(write_to) v s) (TLBEntry61_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry60" then option_map (fun v => TLBEntry60_ref.(write_to) v s) (TLBEntry60_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry59" then option_map (fun v => TLBEntry59_ref.(write_to) v s) (TLBEntry59_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry58" then option_map (fun v => TLBEntry58_ref.(write_to) v s) (TLBEntry58_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry57" then option_map (fun v => TLBEntry57_ref.(write_to) v s) (TLBEntry57_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry56" then option_map (fun v => TLBEntry56_ref.(write_to) v s) (TLBEntry56_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry55" then option_map (fun v => TLBEntry55_ref.(write_to) v s) (TLBEntry55_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry54" then option_map (fun v => TLBEntry54_ref.(write_to) v s) (TLBEntry54_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry53" then option_map (fun v => TLBEntry53_ref.(write_to) v s) (TLBEntry53_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry52" then option_map (fun v => TLBEntry52_ref.(write_to) v s) (TLBEntry52_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry51" then option_map (fun v => TLBEntry51_ref.(write_to) v s) (TLBEntry51_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry50" then option_map (fun v => TLBEntry50_ref.(write_to) v s) (TLBEntry50_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry49" then option_map (fun v => TLBEntry49_ref.(write_to) v s) (TLBEntry49_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry48" then option_map (fun v => TLBEntry48_ref.(write_to) v s) (TLBEntry48_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry47" then option_map (fun v => TLBEntry47_ref.(write_to) v s) (TLBEntry47_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry46" then option_map (fun v => TLBEntry46_ref.(write_to) v s) (TLBEntry46_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry45" then option_map (fun v => TLBEntry45_ref.(write_to) v s) (TLBEntry45_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry44" then option_map (fun v => TLBEntry44_ref.(write_to) v s) (TLBEntry44_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry43" then option_map (fun v => TLBEntry43_ref.(write_to) v s) (TLBEntry43_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry42" then option_map (fun v => TLBEntry42_ref.(write_to) v s) (TLBEntry42_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry41" then option_map (fun v => TLBEntry41_ref.(write_to) v s) (TLBEntry41_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry40" then option_map (fun v => TLBEntry40_ref.(write_to) v s) (TLBEntry40_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry39" then option_map (fun v => TLBEntry39_ref.(write_to) v s) (TLBEntry39_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry38" then option_map (fun v => TLBEntry38_ref.(write_to) v s) (TLBEntry38_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry37" then option_map (fun v => TLBEntry37_ref.(write_to) v s) (TLBEntry37_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry36" then option_map (fun v => TLBEntry36_ref.(write_to) v s) (TLBEntry36_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry35" then option_map (fun v => TLBEntry35_ref.(write_to) v s) (TLBEntry35_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry34" then option_map (fun v => TLBEntry34_ref.(write_to) v s) (TLBEntry34_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry33" then option_map (fun v => TLBEntry33_ref.(write_to) v s) (TLBEntry33_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry32" then option_map (fun v => TLBEntry32_ref.(write_to) v s) (TLBEntry32_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry31" then option_map (fun v => TLBEntry31_ref.(write_to) v s) (TLBEntry31_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry30" then option_map (fun v => TLBEntry30_ref.(write_to) v s) (TLBEntry30_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry29" then option_map (fun v => TLBEntry29_ref.(write_to) v s) (TLBEntry29_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry28" then option_map (fun v => TLBEntry28_ref.(write_to) v s) (TLBEntry28_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry27" then option_map (fun v => TLBEntry27_ref.(write_to) v s) (TLBEntry27_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry26" then option_map (fun v => TLBEntry26_ref.(write_to) v s) (TLBEntry26_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry25" then option_map (fun v => TLBEntry25_ref.(write_to) v s) (TLBEntry25_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry24" then option_map (fun v => TLBEntry24_ref.(write_to) v s) (TLBEntry24_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry23" then option_map (fun v => TLBEntry23_ref.(write_to) v s) (TLBEntry23_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry22" then option_map (fun v => TLBEntry22_ref.(write_to) v s) (TLBEntry22_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry21" then option_map (fun v => TLBEntry21_ref.(write_to) v s) (TLBEntry21_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry20" then option_map (fun v => TLBEntry20_ref.(write_to) v s) (TLBEntry20_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry19" then option_map (fun v => TLBEntry19_ref.(write_to) v s) (TLBEntry19_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry18" then option_map (fun v => TLBEntry18_ref.(write_to) v s) (TLBEntry18_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry17" then option_map (fun v => TLBEntry17_ref.(write_to) v s) (TLBEntry17_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry16" then option_map (fun v => TLBEntry16_ref.(write_to) v s) (TLBEntry16_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry15" then option_map (fun v => TLBEntry15_ref.(write_to) v s) (TLBEntry15_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry14" then option_map (fun v => TLBEntry14_ref.(write_to) v s) (TLBEntry14_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry13" then option_map (fun v => TLBEntry13_ref.(write_to) v s) (TLBEntry13_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry12" then option_map (fun v => TLBEntry12_ref.(write_to) v s) (TLBEntry12_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry11" then option_map (fun v => TLBEntry11_ref.(write_to) v s) (TLBEntry11_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry10" then option_map (fun v => TLBEntry10_ref.(write_to) v s) (TLBEntry10_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry09" then option_map (fun v => TLBEntry09_ref.(write_to) v s) (TLBEntry09_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry08" then option_map (fun v => TLBEntry08_ref.(write_to) v s) (TLBEntry08_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry07" then option_map (fun v => TLBEntry07_ref.(write_to) v s) (TLBEntry07_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry06" then option_map (fun v => TLBEntry06_ref.(write_to) v s) (TLBEntry06_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry05" then option_map (fun v => TLBEntry05_ref.(write_to) v s) (TLBEntry05_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry04" then option_map (fun v => TLBEntry04_ref.(write_to) v s) (TLBEntry04_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry03" then option_map (fun v => TLBEntry03_ref.(write_to) v s) (TLBEntry03_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry02" then option_map (fun v => TLBEntry02_ref.(write_to) v s) (TLBEntry02_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry01" then option_map (fun v => TLBEntry01_ref.(write_to) v s) (TLBEntry01_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntry00" then option_map (fun v => TLBEntry00_ref.(write_to) v s) (TLBEntry00_ref.(of_regval) v) else
+ if string_dec reg_name "TLBXContext" then option_map (fun v => TLBXContext_ref.(write_to) v s) (TLBXContext_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntryHi" then option_map (fun v => TLBEntryHi_ref.(write_to) v s) (TLBEntryHi_ref.(of_regval) v) else
+ if string_dec reg_name "TLBWired" then option_map (fun v => TLBWired_ref.(write_to) v s) (TLBWired_ref.(of_regval) v) else
+ if string_dec reg_name "TLBPageMask" then option_map (fun v => TLBPageMask_ref.(write_to) v s) (TLBPageMask_ref.(of_regval) v) else
+ if string_dec reg_name "TLBContext" then option_map (fun v => TLBContext_ref.(write_to) v s) (TLBContext_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntryLo1" then option_map (fun v => TLBEntryLo1_ref.(write_to) v s) (TLBEntryLo1_ref.(of_regval) v) else
+ if string_dec reg_name "TLBEntryLo0" then option_map (fun v => TLBEntryLo0_ref.(write_to) v s) (TLBEntryLo0_ref.(of_regval) v) else
+ if string_dec reg_name "TLBRandom" then option_map (fun v => TLBRandom_ref.(write_to) v s) (TLBRandom_ref.(of_regval) v) else
+ if string_dec reg_name "TLBIndex" then option_map (fun v => TLBIndex_ref.(write_to) v s) (TLBIndex_ref.(of_regval) v) else
+ if string_dec reg_name "TLBProbe" then option_map (fun v => TLBProbe_ref.(write_to) v s) (TLBProbe_ref.(of_regval) v) else
+ if string_dec reg_name "NextPC" then option_map (fun v => NextPC_ref.(write_to) v s) (NextPC_ref.(of_regval) v) else
+ if string_dec reg_name "PC" then option_map (fun v => PC_ref.(write_to) v s) (PC_ref.(of_regval) v) else
+ None.
+
+Definition register_accessors := (get_regval, set_regval).
+
+
+Definition MR a r := monadR register_value a r exception.
+Definition M a := monad register_value a exception.
diff --git a/snapshots/coq/clean b/snapshots/coq/clean
index 0d6f8785..c37bb40f 100755
--- a/snapshots/coq/clean
+++ b/snapshots/coq/clean
@@ -1,11 +1,12 @@
#!/bin/bash
-if [ ! -d mips ]; then
+if [ ! -d cheri-mips ]; then
echo Run clean from the coq directory
exit 1
fi
set -ex
-rm -f mips/*.vo
+rm -f cheri-mips/*.{vo,glob} cheri-mips/.*.aux
+rm -f riscv/*.{vo,glob} riscv/.*.aux
cd lib/coq
make clean
diff --git a/snapshots/coq/lib/coq/Makefile b/snapshots/coq/lib/coq/Makefile
index 97869e3c..a5f2874b 100644
--- a/snapshots/coq/lib/coq/Makefile
+++ b/snapshots/coq/lib/coq/Makefile
@@ -1,6 +1,6 @@
BBV_DIR=../../../bbv/theories
-SRC=Sail2_prompt_monad.v Sail2_prompt.v Sail2_impl_base.v Sail2_instr_kinds.v Sail2_operators_bitlists.v Sail2_operators_mwords.v Sail2_operators.v Sail2_values.v Sail2_state_monad.v Sail2_state.v
+SRC=Sail2_prompt_monad.v Sail2_prompt.v Sail2_impl_base.v Sail2_instr_kinds.v Sail2_operators_bitlists.v Sail2_operators_mwords.v Sail2_operators.v Sail2_values.v Sail2_state_monad.v Sail2_state.v Sail2_string.v Sail2_real.v
COQ_LIBS = -R . Sail -R "$(BBV_DIR)" bbv
diff --git a/snapshots/coq/lib/coq/Sail2_impl_base.v b/snapshots/coq/lib/coq/Sail2_impl_base.v
index 639083f6..464c2902 100644
--- a/snapshots/coq/lib/coq/Sail2_impl_base.v
+++ b/snapshots/coq/lib/coq/Sail2_impl_base.v
@@ -1,6 +1,51 @@
(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
+(* Sail *)
+(* *)
+(* Copyright (c) 2013-2017 *)
+(* Kathyrn Gray *)
+(* Shaked Flur *)
+(* Stephen Kell *)
+(* Gabriel Kerneis *)
+(* Robert Norton-Wright *)
+(* Christopher Pulte *)
+(* Peter Sewell *)
+(* Alasdair Armstrong *)
+(* Brian Campbell *)
+(* Thomas Bauereiss *)
+(* Anthony Fox *)
+(* Jon French *)
+(* Dominic Mulligan *)
+(* Stephen Kell *)
+(* Mark Wassell *)
+(* *)
+(* All rights reserved. *)
+(* *)
+(* This software was developed by the University of Cambridge Computer *)
+(* Laboratory as part of the Rigorous Engineering of Mainstream Systems *)
+(* (REMS) project, funded by EPSRC grant EP/K008528/1. *)
+(* *)
+(* Redistribution and use in source and binary forms, with or without *)
+(* modification, are permitted provided that the following conditions *)
+(* are met: *)
+(* 1. Redistributions of source code must retain the above copyright *)
+(* notice, this list of conditions and the following disclaimer. *)
+(* 2. Redistributions in binary form must reproduce the above copyright *)
+(* notice, this list of conditions and the following disclaimer in *)
+(* the documentation and/or other materials provided with the *)
+(* distribution. *)
+(* *)
+(* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' *)
+(* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *)
+(* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *)
+(* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR *)
+(* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *)
+(* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *)
+(* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF *)
+(* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *)
+(* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, *)
+(* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT *)
+(* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *)
+(* SUCH DAMAGE. *)
(*========================================================================*)
Require Import Sail2_instr_kinds.
diff --git a/snapshots/coq/lib/coq/Sail2_instr_kinds.v b/snapshots/coq/lib/coq/Sail2_instr_kinds.v
index 0145d8b3..c6fb866b 100644
--- a/snapshots/coq/lib/coq/Sail2_instr_kinds.v
+++ b/snapshots/coq/lib/coq/Sail2_instr_kinds.v
@@ -1,6 +1,51 @@
(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
+(* Sail *)
+(* *)
+(* Copyright (c) 2013-2017 *)
+(* Kathyrn Gray *)
+(* Shaked Flur *)
+(* Stephen Kell *)
+(* Gabriel Kerneis *)
+(* Robert Norton-Wright *)
+(* Christopher Pulte *)
+(* Peter Sewell *)
+(* Alasdair Armstrong *)
+(* Brian Campbell *)
+(* Thomas Bauereiss *)
+(* Anthony Fox *)
+(* Jon French *)
+(* Dominic Mulligan *)
+(* Stephen Kell *)
+(* Mark Wassell *)
+(* *)
+(* All rights reserved. *)
+(* *)
+(* This software was developed by the University of Cambridge Computer *)
+(* Laboratory as part of the Rigorous Engineering of Mainstream Systems *)
+(* (REMS) project, funded by EPSRC grant EP/K008528/1. *)
+(* *)
+(* Redistribution and use in source and binary forms, with or without *)
+(* modification, are permitted provided that the following conditions *)
+(* are met: *)
+(* 1. Redistributions of source code must retain the above copyright *)
+(* notice, this list of conditions and the following disclaimer. *)
+(* 2. Redistributions in binary form must reproduce the above copyright *)
+(* notice, this list of conditions and the following disclaimer in *)
+(* the documentation and/or other materials provided with the *)
+(* distribution. *)
+(* *)
+(* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' *)
+(* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *)
+(* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *)
+(* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR *)
+(* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *)
+(* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *)
+(* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF *)
+(* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *)
+(* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, *)
+(* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT *)
+(* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *)
+(* SUCH DAMAGE. *)
(*========================================================================*)
@@ -99,7 +144,7 @@ Inductive barrier_kind :=
(* AArch64 barriers *)
| Barrier_DMB | Barrier_DMB_ST | Barrier_DMB_LD | Barrier_DSB
| Barrier_DSB_ST | Barrier_DSB_LD | Barrier_ISB
- | Barrier_TM_COMMIT
+ (* | Barrier_TM_COMMIT*)
(* MIPS barriers *)
| Barrier_MIPS_SYNC
(* RISC-V barriers *)
@@ -108,6 +153,11 @@ Inductive barrier_kind :=
| Barrier_RISCV_r_r
| Barrier_RISCV_rw_w
| Barrier_RISCV_w_w
+ | Barrier_RISCV_w_rw
+ | Barrier_RISCV_rw_r
+ | Barrier_RISCV_r_w
+ | Barrier_RISCV_w_r
+ | Barrier_RISCV_tso
| Barrier_RISCV_i
(* X86 *)
| Barrier_x86_MFENCE.
@@ -133,6 +183,11 @@ instance (Show barrier_kind)
| Barrier_RISCV_r_r -> "Barrier_RISCV_r_r"
| Barrier_RISCV_rw_w -> "Barrier_RISCV_rw_w"
| Barrier_RISCV_w_w -> "Barrier_RISCV_w_w"
+ | Barrier_RISCV_w_rw -> "Barrier_RISCV_w_rw"
+ | Barrier_RISCV_rw_r -> "Barrier_RISCV_rw_r"
+ | Barrier_RISCV_r_w -> "Barrier_RISCV_r_w"
+ | Barrier_RISCV_w_r -> "Barrier_RISCV_w_r"
+ | Barrier_RISCV_tso -> "Barrier_RISCV_tso"
| Barrier_RISCV_i -> "Barrier_RISCV_i"
| Barrier_x86_MFENCE -> "Barrier_x86_MFENCE"
end
@@ -155,11 +210,11 @@ Inductive instruction_kind :=
| IK_mem_read : read_kind -> instruction_kind
| IK_mem_write : write_kind -> instruction_kind
| IK_mem_rmw : (read_kind * write_kind) -> instruction_kind
- | IK_branch (* this includes conditional-branch (multiple nias, none of which is NIA_indirect_address),
+ | IK_branch : unit -> instruction_kind (* this includes conditional-branch (multiple nias, none of which is NIA_indirect_address),
indirect/computed-branch (single nia of kind NIA_indirect_address)
and branch/jump (single nia of kind NIA_concrete_address) *)
| IK_trans : trans_kind -> instruction_kind
- | IK_simple : instruction_kind.
+ | IK_simple : unit -> instruction_kind.
(*
instance (Show instruction_kind)
@@ -246,8 +301,13 @@ instance (EnumerationType barrier_kind)
| Barrier_RISCV_r_r -> 15
| Barrier_RISCV_rw_w -> 16
| Barrier_RISCV_w_w -> 17
- | Barrier_RISCV_i -> 18
- | Barrier_x86_MFENCE -> 19
+ | Barrier_RISCV_w_rw -> 18
+ | Barrier_RISCV_rw_r -> 19
+ | Barrier_RISCV_r_w -> 20
+ | Barrier_RISCV_w_r -> 21
+ | Barrier_RISCV_tso -> 22
+ | Barrier_RISCV_i -> 23
+ | Barrier_x86_MFENCE -> 24
end
end
*)
diff --git a/snapshots/coq/lib/coq/Sail2_operators.v b/snapshots/coq/lib/coq/Sail2_operators.v
index 5a8b1119..ab02c4a8 100644
--- a/snapshots/coq/lib/coq/Sail2_operators.v
+++ b/snapshots/coq/lib/coq/Sail2_operators.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
Require Import Sail2_values.
Require List.
Import List.ListNotations.
diff --git a/snapshots/coq/lib/coq/Sail2_operators_bitlists.v b/snapshots/coq/lib/coq/Sail2_operators_bitlists.v
index b0240c4e..dbd8215c 100644
--- a/snapshots/coq/lib/coq/Sail2_operators_bitlists.v
+++ b/snapshots/coq/lib/coq/Sail2_operators_bitlists.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
Require Import Sail2_values.
Require Import Sail2_operators.
diff --git a/snapshots/coq/lib/coq/Sail2_operators_mwords.v b/snapshots/coq/lib/coq/Sail2_operators_mwords.v
index fba23071..7e4abe29 100644
--- a/snapshots/coq/lib/coq/Sail2_operators_mwords.v
+++ b/snapshots/coq/lib/coq/Sail2_operators_mwords.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
Require Import Sail2_values.
Require Import Sail2_operators.
Require Import Sail2_prompt_monad.
@@ -14,49 +9,71 @@ Require Import ZArith.
Require Import Omega.
Require Import Eqdep_dec.
-Module Z_eq_dec.
-Definition U := Z.
-Definition eq_dec := Z.eq_dec.
-End Z_eq_dec.
-Module ZEqdep := DecidableEqDep (Z_eq_dec).
+Fixpoint cast_positive (T : positive -> Type) (p q : positive) : T p -> p = q -> T q.
+refine (
+match p, q with
+| xH, xH => fun x _ => x
+| xO p', xO q' => fun x e => cast_positive (fun x => T (xO x)) p' q' x _
+| xI p', xI q' => fun x e => cast_positive (fun x => T (xI x)) p' q' x _
+| _, _ => _
+end); congruence.
+Defined.
-Definition cast_mword {m n} (x : mword m) (eq : m = n) : mword n.
-rewrite <- eq.
-exact x.
+Definition cast_T {T : Z -> Type} {m n} : forall (x : T m) (eq : m = n), T n.
+refine (match m,n with
+| Z0, Z0 => fun x _ => x
+| Zneg p1, Zneg p2 => fun x e => cast_positive (fun p => T (Zneg p)) p1 p2 x _
+| Zpos p1, Zpos p2 => fun x e => cast_positive (fun p => T (Zpos p)) p1 p2 x _
+| _,_ => _
+end); congruence.
Defined.
-Lemma cast_mword_refl {m} {H:m = m} (x : mword m) : cast_mword x H = x.
-rewrite (ZEqdep.UIP _ _ H eq_refl).
-reflexivity.
+Lemma cast_positive_refl : forall p T x (e : p = p),
+ cast_positive T p p x e = x.
+induction p.
+* intros. simpl. rewrite IHp; auto.
+* intros. simpl. rewrite IHp; auto.
+* reflexivity.
+Qed.
+
+Lemma cast_T_refl {T : Z -> Type} {m} {H:m = m} (x : T m) : cast_T x H = x.
+destruct m.
+* reflexivity.
+* simpl. rewrite cast_positive_refl. reflexivity.
+* simpl. rewrite cast_positive_refl. reflexivity.
Qed.
-Definition autocast {m n} (x : mword m) `{H:ArithFact (m = n)} : mword n :=
- cast_mword x (use_ArithFact H).
+Definition autocast {T : Z -> Type} {m n} (x : T m) `{H:ArithFact (m = n)} : T n :=
+ cast_T x (use_ArithFact H).
Definition autocast_m {rv e m n} (x : monad rv (mword m) e) `{H:ArithFact (m = n)} : monad rv (mword n) e :=
- x >>= fun x => returnm (cast_mword x (use_ArithFact H)).
+ x >>= fun x => returnm (cast_T x (use_ArithFact H)).
-Definition cast_word {m n} (x : Word.word m) (eq : m = n) : Word.word n.
-rewrite <- eq.
-exact x.
-Defined.
+Definition cast_word {m n} (x : Word.word m) (eq : m = n) : Word.word n :=
+ DepEqNat.nat_cast _ eq x.
Lemma cast_word_refl {m} {H:m = m} (x : word m) : cast_word x H = x.
rewrite (UIP_refl_nat _ H).
-reflexivity.
+apply nat_cast_same.
Qed.
-Definition mword_of_nat {m} (x : Word.word m) : mword (Z.of_nat m).
-destruct m.
-- exact x.
-- simpl. rewrite SuccNat2Pos.id_succ. exact x.
+Definition mword_of_nat {m} : Word.word m -> mword (Z.of_nat m).
+refine (match m return word m -> mword (Z.of_nat m) with
+| O => fun x => x
+| S m' => fun x => nat_cast _ _ x
+end).
+rewrite SuccNat2Pos.id_succ.
+reflexivity.
Defined.
-Definition cast_to_mword {m n} (x : Word.word m) (eq : Z.of_nat m = n) : mword n.
-destruct n.
-- constructor.
-- rewrite <- eq. exact (mword_of_nat x).
-- exfalso. destruct m; simpl in *; congruence.
+Definition cast_to_mword {m n} (x : Word.word m) : Z.of_nat m = n -> mword n.
+refine (match n return Z.of_nat m = n -> mword n with
+| Z0 => fun _ => WO
+| Zpos p => fun eq => cast_T (mword_of_nat x) eq
+| Zneg p => _
+end).
+intro eq.
+exfalso. destruct m; simpl in *; congruence.
Defined.
(*
@@ -155,16 +172,32 @@ Definition zero_extend {a} (v : mword a) (n : Z) `{ArithFact (n >= a)} : mword n
Definition sign_extend {a} (v : mword a) (n : Z) `{ArithFact (n >= a)} : mword n := exts_vec n v.
+Definition zeros (n : Z) `{ArithFact (n >= 0)} : mword n.
+refine (cast_to_mword (Word.wzero (Z.to_nat n)) _).
+unwrap_ArithFacts.
+apply Z2Nat.id.
+auto with zarith.
+Defined.
+
Lemma truncate_eq {m n} : m >= 0 -> m <= n -> (Z.to_nat n = Z.to_nat m + (Z.to_nat n - Z.to_nat m))%nat.
intros.
assert ((Z.to_nat m <= Z.to_nat n)%nat).
{ apply Z2Nat.inj_le; omega. }
omega.
Qed.
+Lemma truncateLSB_eq {m n} : m >= 0 -> m <= n -> (Z.to_nat n = (Z.to_nat n - Z.to_nat m) + Z.to_nat m)%nat.
+intros.
+assert ((Z.to_nat m <= Z.to_nat n)%nat).
+{ apply Z2Nat.inj_le; omega. }
+omega.
+Qed.
Definition vector_truncate {n} (v : mword n) (m : Z) `{ArithFact (m >= 0)} `{ArithFact (m <= n)} : mword m :=
cast_to_mword (Word.split1 _ _ (cast_word (get_word v) (ltac:(unwrap_ArithFacts; apply truncate_eq; auto) : Z.to_nat n = Z.to_nat m + (Z.to_nat n - Z.to_nat m))%nat)) (ltac:(unwrap_ArithFacts; apply Z2Nat.id; omega) : Z.of_nat (Z.to_nat m) = m).
+Definition vector_truncateLSB {n} (v : mword n) (m : Z) `{ArithFact (m >= 0)} `{ArithFact (m <= n)} : mword m :=
+ cast_to_mword (Word.split2 _ _ (cast_word (get_word v) (ltac:(unwrap_ArithFacts; apply truncateLSB_eq; auto) : Z.to_nat n = (Z.to_nat n - Z.to_nat m) + Z.to_nat m)%nat)) (ltac:(unwrap_ArithFacts; apply Z2Nat.id; omega) : Z.of_nat (Z.to_nat m) = m).
+
Lemma concat_eq {a b} : a >= 0 -> b >= 0 -> Z.of_nat (Z.to_nat b + Z.to_nat a)%nat = a + b.
intros.
rewrite Nat2Z.inj_add.
@@ -421,6 +454,20 @@ Definition sgteq_vec := sgteq_bv.
*)
+Definition eq_vec_dec {n} : forall (x y : mword n), {x = y} + {x <> y}.
+refine (match n with
+| Z0 => _
+| Zpos m => _
+| Zneg m => _
+end).
+* simpl. apply Word.weq.
+* simpl. apply Word.weq.
+* simpl. destruct x.
+Defined.
+
+Instance Decidable_eq_mword {n} : forall (x y : mword n), Decidable (x = y) :=
+ Decidable_eq_from_dec eq_vec_dec.
+
Program Fixpoint reverse_endianness_word {n} (bits : word n) : word n :=
match n with
| S (S (S (S (S (S (S (S m))))))) =>
@@ -436,3 +483,17 @@ Qed.
Definition reverse_endianness {n} (bits : mword n) := with_word (P := id) reverse_endianness_word bits.
Definition get_slice_int {a} `{ArithFact (a >= 0)} : Z -> Z -> Z -> mword a := get_slice_int_bv.
+
+Definition set_slice n m (v : mword n) x (w : mword m) : mword n :=
+ update_subrange_vec_dec v (x + m - 1) x v.
+
+Definition set_slice_int len n lo (v : mword len) : Z :=
+ let hi := lo + len - 1 in
+ (* We don't currently have a constraint on lo in the sail prelude, so let's
+ avoid one here. *)
+ if sumbool_of_bool (Z.gtb hi 0) then
+ let bs : mword (hi + 1) := mword_of_int n in
+ (int_of_mword true (update_subrange_vec_dec bs hi lo v))
+ else n.
+
+Definition prerr_bits {a} (s : string) (bs : mword a) : unit := tt.
diff --git a/snapshots/coq/lib/coq/Sail2_prompt.v b/snapshots/coq/lib/coq/Sail2_prompt.v
index ab7d5bac..bd0d7750 100644
--- a/snapshots/coq/lib/coq/Sail2_prompt.v
+++ b/snapshots/coq/lib/coq/Sail2_prompt.v
@@ -1,12 +1,7 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
(*Require Import Sail_impl_base*)
Require Import Sail2_values.
Require Import Sail2_prompt_monad.
-
+Require Export ZArith.Zwf.
Require Import List.
Import ListNotations.
(*
@@ -35,7 +30,7 @@ match l with
foreachM xs vars body
end.
-Fixpoint foreach_ZM_up' {rv e Vars} from to step off n `{ArithFact (from <= to)} `{ArithFact (0 < step)} `{ArithFact (0 <= off)} (vars : Vars) (body : forall (z : Z) `(ArithFact (from <= z <= to)), Vars -> monad rv Vars e) {struct n} : monad rv Vars e :=
+Fixpoint foreach_ZM_up' {rv e Vars} from to step off n `{ArithFact (0 < step)} `{ArithFact (0 <= off)} (vars : Vars) (body : forall (z : Z) `(ArithFact (from <= z <= to)), Vars -> monad rv Vars e) {struct n} : monad rv Vars e :=
if sumbool_of_bool (from + off <=? to) then
match n with
| O => returnm vars
@@ -43,7 +38,7 @@ Fixpoint foreach_ZM_up' {rv e Vars} from to step off n `{ArithFact (from <= to)}
end
else returnm vars.
-Fixpoint foreach_ZM_down' {rv e Vars} from to step off n `{ArithFact (to <= from)} `{ArithFact (0 < step)} `{ArithFact (off <= 0)} (vars : Vars) (body : forall (z : Z) `(ArithFact (to <= z <= from)), Vars -> monad rv Vars e) {struct n} : monad rv Vars e :=
+Fixpoint foreach_ZM_down' {rv e Vars} from to step off n `{ArithFact (0 < step)} `{ArithFact (off <= 0)} (vars : Vars) (body : forall (z : Z) `(ArithFact (to <= z <= from)), Vars -> monad rv Vars e) {struct n} : monad rv Vars e :=
if sumbool_of_bool (to <=? from + off) then
match n with
| O => returnm vars
@@ -51,9 +46,9 @@ Fixpoint foreach_ZM_down' {rv e Vars} from to step off n `{ArithFact (to <= from
end
else returnm vars.
-Definition foreach_ZM_up {rv e Vars} from to step vars body `{ArithFact (from <= to)} `{ArithFact (0 < step)} :=
+Definition foreach_ZM_up {rv e Vars} from to step vars body `{ArithFact (0 < step)} :=
foreach_ZM_up' (rv := rv) (e := e) (Vars := Vars) from to step 0 (S (Z.abs_nat (from - to))) vars body.
-Definition foreach_ZM_down {rv e Vars} from to step vars body `{ArithFact (to <= from)} `{ArithFact (0 < step)} :=
+Definition foreach_ZM_down {rv e Vars} from to step vars body `{ArithFact (0 < step)} :=
foreach_ZM_down' (rv := rv) (e := e) (Vars := Vars) from to step 0 (S (Z.abs_nat (from - to))) vars body.
(*declare {isabelle} termination_argument foreachM = automatic*)
@@ -82,6 +77,35 @@ match b with
| BU => undefined_bool tt
end.
+(* For termination of recursive functions. We don't name assertions, so use
+ the type class mechanism to find it. *)
+Definition _limit_reduces {_limit} (_acc:Acc (Zwf 0) _limit) `{ArithFact (_limit >= 0)} : Acc (Zwf 0) (_limit - 1).
+refine (Acc_inv _acc _).
+destruct H.
+red.
+omega.
+Defined.
+
+(* A version of well-foundedness of measures with a guard to ensure that
+ definitions can be reduced without inspecting proofs, based on a coq-club
+ thread featuring Barras, Gonthier and Gregoire, see
+ https://sympa.inria.fr/sympa/arc/coq-club/2007-07/msg00014.html *)
+
+Fixpoint pos_guard_wf {A:Type} {R:A -> A -> Prop} (p:positive) : well_founded R -> well_founded R :=
+ match p with
+ | xH => fun wfR x => Acc_intro x (fun y _ => wfR y)
+ | xO p' => fun wfR x => let F := pos_guard_wf p' in Acc_intro x (fun y _ => F (F
+wfR) y)
+ | xI p' => fun wfR x => let F := pos_guard_wf p' in Acc_intro x (fun y _ => F (F
+wfR) y)
+ end.
+
+Definition Zwf_guarded (z:Z) : Acc (Zwf 0) z :=
+ match z with
+ | Zpos p => pos_guard_wf p (Zwf_well_founded _) _
+ | _ => Zwf_well_founded _ _
+ end.
+
(*val whileM : forall 'rv 'vars 'e. 'vars -> ('vars -> monad 'rv bool 'e) ->
('vars -> monad 'rv 'vars 'e) -> monad 'rv 'vars 'e
@@ -120,3 +144,15 @@ let rec untilM vars cond body =
write_reg r1 r1_v >> write_reg r2 r2_v*)
*)
+
+(* If we need to build an existential after a monadic operation, assume that
+ we can do it entirely from the type. *)
+
+Definition build_ex_m {rv e} {T:Type} (x:monad rv T e) {P:T -> Prop} `{H:forall x, ArithFact (P x)} : monad rv {x : T & ArithFact (P x)} e :=
+ x >>= fun y => returnm (existT _ y (H y)).
+
+Definition projT1_m {rv e} {T:Type} {P:T -> Prop} (x: monad rv {x : T & P x} e) : monad rv T e :=
+ x >>= fun y => returnm (projT1 y).
+
+Definition derive_m {rv e} {T:Type} {P Q:T -> Prop} (x : monad rv {x : T & P x} e) `{forall x, ArithFact (P x) -> ArithFact (Q x)} : monad rv {x : T & (ArithFact (Q x))} e :=
+ x >>= fun y => returnm (build_ex (projT1 y)).
diff --git a/snapshots/coq/lib/coq/Sail2_prompt_monad.v b/snapshots/coq/lib/coq/Sail2_prompt_monad.v
index 43e873f7..2715b5e7 100644
--- a/snapshots/coq/lib/coq/Sail2_prompt_monad.v
+++ b/snapshots/coq/lib/coq/Sail2_prompt_monad.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
Require Import String.
(*Require Import Sail_impl_base*)
Require Import Sail2_instr_kinds.
diff --git a/snapshots/coq/lib/coq/Sail2_real.v b/snapshots/coq/lib/coq/Sail2_real.v
new file mode 100644
index 00000000..e4e4316e
--- /dev/null
+++ b/snapshots/coq/lib/coq/Sail2_real.v
@@ -0,0 +1,24 @@
+Require Export Rbase.
+Require Import Reals.
+Require Export ROrderedType.
+Require Import Sail2_values.
+
+(* "Decidable" in a classical sense... *)
+Instance Decidable_eq_real : forall (x y : R), Decidable (x = y) :=
+ Decidable_eq_from_dec Req_dec.
+
+Definition realFromFrac (num denom : Z) : R := Rdiv (IZR num) (IZR denom).
+
+Definition gteq_real (x y : R) : bool := if Rge_dec x y then true else false.
+Definition lteq_real (x y : R) : bool := if Rle_dec x y then true else false.
+Definition gt_real (x y : R) : bool := if Rgt_dec x y then true else false.
+Definition lt_real (x y : R) : bool := if Rlt_dec x y then true else false.
+
+(* Export select definitions from outside of Rbase *)
+Definition powerRZ := powerRZ.
+Definition Rabs := Rabs.
+Definition sqrt := sqrt.
+
+(* Use flocq definitions, but without making the whole library a dependency. *)
+Definition Zfloor (x : R) := (up x - 1)%Z.
+Definition Zceil (x : R) := (- Zfloor (- x))%Z.
diff --git a/snapshots/coq/lib/coq/Sail2_state.v b/snapshots/coq/lib/coq/Sail2_state.v
index 404309e0..1d5cb342 100644
--- a/snapshots/coq/lib/coq/Sail2_state.v
+++ b/snapshots/coq/lib/coq/Sail2_state.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
(*Require Import Sail_impl_base*)
Require Import Sail2_values.
Require Import Sail2_prompt_monad.
diff --git a/snapshots/coq/lib/coq/Sail2_state_monad.v b/snapshots/coq/lib/coq/Sail2_state_monad.v
index 5258c37a..c48db31b 100644
--- a/snapshots/coq/lib/coq/Sail2_state_monad.v
+++ b/snapshots/coq/lib/coq/Sail2_state_monad.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
Require Import Sail2_instr_kinds.
Require Import Sail2_values.
(*
diff --git a/snapshots/coq/lib/coq/Sail2_string.v b/snapshots/coq/lib/coq/Sail2_string.v
new file mode 100644
index 00000000..0a00f8d7
--- /dev/null
+++ b/snapshots/coq/lib/coq/Sail2_string.v
@@ -0,0 +1,190 @@
+Require Import Sail2_values.
+
+Definition string_sub (s : string) (start : Z) (len : Z) : string :=
+ String.substring (Z.to_nat start) (Z.to_nat len) s.
+
+Definition string_startswith s expected :=
+ let prefix := String.substring 0 (String.length expected) s in
+ generic_eq prefix expected.
+
+Definition string_drop s (n : Z) `{ArithFact (n >= 0)} :=
+ let n := Z.to_nat n in
+ String.substring n (String.length s - n) s.
+
+Definition string_take s (n : Z) `{ArithFact (n >= 0)} :=
+ let n := Z.to_nat n in
+ String.substring 0 n s.
+
+Definition string_length s : {n : Z & ArithFact (n >= 0)} :=
+ build_ex (Z.of_nat (String.length s)).
+
+Definition string_append := String.append.
+
+Local Open Scope char_scope.
+Local Definition hex_char (c : Ascii.ascii) : option Z :=
+match c with
+| "0" => Some 0
+| "1" => Some 1
+| "2" => Some 2
+| "3" => Some 3
+| "4" => Some 4
+| "5" => Some 5
+| "6" => Some 6
+| "7" => Some 7
+| "8" => Some 8
+| "9" => Some 9
+| "a" => Some 10
+| "b" => Some 11
+| "c" => Some 12
+| "d" => Some 13
+| "e" => Some 14
+| "f" => Some 15
+| _ => None
+end.
+Local Close Scope char_scope.
+Local Fixpoint more_digits (s : string) (base : Z) (acc : Z) (len : nat) : Z * nat :=
+match s with
+| EmptyString => (acc, len)
+| String "_" t => more_digits t base acc (S len)
+| String h t =>
+ match hex_char h with
+ | None => (acc, len)
+ | Some i =>
+ if i <? base
+ then more_digits t base (base * acc + i) (S len)
+ else (acc, len)
+ end
+end.
+Local Definition int_of (s : string) (base : Z) (len : nat) : option (Z * {n : Z & ArithFact (n >= 0)}) :=
+match s with
+| EmptyString => None
+| String h t =>
+ match hex_char h with
+ | None => None
+ | Some i =>
+ if i <? base
+ then
+ let (i, len') := more_digits t base i (S len) in
+ Some (i, build_ex (Z.of_nat len'))
+ else None
+ end
+end.
+
+(* I've stuck closely to OCaml's int_of_string, because that's what's currently
+ used elsewhere. *)
+
+Definition maybe_int_of_prefix (s : string) : option (Z * {n : Z & ArithFact (n >= 0)}) :=
+match s with
+| EmptyString => None
+| String "0" (String ("x"|"X") t) => int_of t 16 2
+| String "0" (String ("o"|"O") t) => int_of t 8 2
+| String "0" (String ("b"|"B") t) => int_of t 2 2
+| String "0" (String "u" t) => int_of t 10 2
+| String "-" t =>
+ match int_of t 10 1 with
+ | None => None
+ | Some (i,len) => Some (-i,len)
+ end
+| _ => int_of s 10 0
+end.
+
+Definition maybe_int_of_string (s : string) : option Z :=
+match maybe_int_of_prefix s with
+| None => None
+| Some (i,len) =>
+ if projT1 len =? projT1 (string_length s)
+ then Some i
+ else None
+end.
+
+Fixpoint n_leading_spaces (s:string) : nat :=
+ match s with
+ | EmptyString => 0
+ | String " " t => S (n_leading_spaces t)
+ | _ => 0
+ end.
+
+Definition opt_spc_matches_prefix s : option (unit * {n : Z & ArithFact (n >= 0)}) :=
+ Some (tt, build_ex (Z.of_nat (n_leading_spaces s))).
+
+Definition spc_matches_prefix s : option (unit * {n : Z & ArithFact (n >= 0)}) :=
+ match n_leading_spaces s with
+ | O => None
+ | S n => Some (tt, build_ex (Z.of_nat (S n)))
+ end.
+
+Definition hex_bits_n_matches_prefix sz `{ArithFact (sz >= 0)} s : option (mword sz * {n : Z & ArithFact (n >= 0)}) :=
+ match maybe_int_of_prefix s with
+ | None => None
+ | Some (n, len) =>
+ if andb (0 <=? n) (n <? pow 2 sz)
+ then Some (of_int sz n, len)
+ else None
+ end.
+
+Definition hex_bits_1_matches_prefix s := hex_bits_n_matches_prefix 1 s.
+Definition hex_bits_2_matches_prefix s := hex_bits_n_matches_prefix 2 s.
+Definition hex_bits_3_matches_prefix s := hex_bits_n_matches_prefix 3 s.
+Definition hex_bits_4_matches_prefix s := hex_bits_n_matches_prefix 4 s.
+Definition hex_bits_5_matches_prefix s := hex_bits_n_matches_prefix 5 s.
+Definition hex_bits_6_matches_prefix s := hex_bits_n_matches_prefix 6 s.
+Definition hex_bits_7_matches_prefix s := hex_bits_n_matches_prefix 7 s.
+Definition hex_bits_8_matches_prefix s := hex_bits_n_matches_prefix 8 s.
+Definition hex_bits_9_matches_prefix s := hex_bits_n_matches_prefix 9 s.
+Definition hex_bits_10_matches_prefix s := hex_bits_n_matches_prefix 10 s.
+Definition hex_bits_11_matches_prefix s := hex_bits_n_matches_prefix 11 s.
+Definition hex_bits_12_matches_prefix s := hex_bits_n_matches_prefix 12 s.
+Definition hex_bits_13_matches_prefix s := hex_bits_n_matches_prefix 13 s.
+Definition hex_bits_14_matches_prefix s := hex_bits_n_matches_prefix 14 s.
+Definition hex_bits_15_matches_prefix s := hex_bits_n_matches_prefix 15 s.
+Definition hex_bits_16_matches_prefix s := hex_bits_n_matches_prefix 16 s.
+Definition hex_bits_17_matches_prefix s := hex_bits_n_matches_prefix 17 s.
+Definition hex_bits_18_matches_prefix s := hex_bits_n_matches_prefix 18 s.
+Definition hex_bits_19_matches_prefix s := hex_bits_n_matches_prefix 19 s.
+Definition hex_bits_20_matches_prefix s := hex_bits_n_matches_prefix 20 s.
+Definition hex_bits_21_matches_prefix s := hex_bits_n_matches_prefix 21 s.
+Definition hex_bits_22_matches_prefix s := hex_bits_n_matches_prefix 22 s.
+Definition hex_bits_23_matches_prefix s := hex_bits_n_matches_prefix 23 s.
+Definition hex_bits_24_matches_prefix s := hex_bits_n_matches_prefix 24 s.
+Definition hex_bits_25_matches_prefix s := hex_bits_n_matches_prefix 25 s.
+Definition hex_bits_26_matches_prefix s := hex_bits_n_matches_prefix 26 s.
+Definition hex_bits_27_matches_prefix s := hex_bits_n_matches_prefix 27 s.
+Definition hex_bits_28_matches_prefix s := hex_bits_n_matches_prefix 28 s.
+Definition hex_bits_29_matches_prefix s := hex_bits_n_matches_prefix 29 s.
+Definition hex_bits_30_matches_prefix s := hex_bits_n_matches_prefix 30 s.
+Definition hex_bits_31_matches_prefix s := hex_bits_n_matches_prefix 31 s.
+Definition hex_bits_32_matches_prefix s := hex_bits_n_matches_prefix 32 s.
+Definition hex_bits_33_matches_prefix s := hex_bits_n_matches_prefix 33 s.
+Definition hex_bits_48_matches_prefix s := hex_bits_n_matches_prefix 48 s.
+Definition hex_bits_64_matches_prefix s := hex_bits_n_matches_prefix 64 s.
+
+Local Definition zero : N := Ascii.N_of_ascii "0".
+Local Fixpoint string_of_N (limit : nat) (n : N) (acc : string) : string :=
+match limit with
+| O => acc
+| S limit' =>
+ let (d,m) := N.div_eucl n 10 in
+ let acc := String (Ascii.ascii_of_N (m + zero)) acc in
+ if N.ltb 0 d then string_of_N limit' d acc else acc
+end.
+Local Fixpoint pos_limit p :=
+match p with
+| xH => S O
+| xI p | xO p => S (pos_limit p)
+end.
+Definition string_of_int (z : Z) : string :=
+match z with
+| Z0 => "0"
+| Zpos p => string_of_N (pos_limit p) (Npos p) ""
+| Zneg p => String "-" (string_of_N (pos_limit p) (Npos p) "")
+end.
+
+Definition decimal_string_of_bv {a} `{Bitvector a} (bv : a) : string :=
+ match unsigned bv with
+ | None => "?"
+ | Some i => string_of_int i
+ end.
+
+Definition decimal_string_of_bits {n} (bv : mword n) : string := decimal_string_of_bv bv.
+
+
diff --git a/snapshots/coq/lib/coq/Sail2_values.v b/snapshots/coq/lib/coq/Sail2_values.v
index f1f5f1de..219a6f84 100644
--- a/snapshots/coq/lib/coq/Sail2_values.v
+++ b/snapshots/coq/lib/coq/Sail2_values.v
@@ -1,8 +1,3 @@
-(*========================================================================*)
-(* Copyright (c) 2018 Sail contributors. *)
-(* This material is provided for anonymous review purposes only. *)
-(*========================================================================*)
-
(* Version of sail_values.lem that uses Lems machine words library *)
(*Require Import Sail_impl_base*)
@@ -13,10 +8,19 @@ Require Import bbv.Word.
Require Export List.
Require Export Sumbool.
Require Export DecidableClass.
+Require Import Eqdep_dec.
+Require Export Zeuclid.
Import ListNotations.
Open Scope Z.
+Module Z_eq_dec.
+Definition U := Z.
+Definition eq_dec := Z.eq_dec.
+End Z_eq_dec.
+Module ZEqdep := DecidableEqDep (Z_eq_dec).
+
+
(* Constraint solving basics. A HintDb which unfolding hints and lemmata
can be added to, and a typeclass to wrap constraint arguments in to
trigger automatic solving. *)
@@ -26,7 +30,19 @@ Lemma use_ArithFact {P} `(ArithFact P) : P.
apply fact.
Defined.
-Definition build_ex (n:Z) {P:Z -> Prop} `{H:ArithFact (P n)} : {x : Z & ArithFact (P x)} :=
+(* Allow setoid rewriting through ArithFact *)
+Require Import Coq.Classes.Morphisms.
+Require Import Coq.Program.Basics.
+Require Import Coq.Program.Tactics.
+Section Morphism.
+Local Obligation Tactic := try solve [simpl_relation | firstorder auto].
+
+Global Program Instance ArithFact_iff_morphism :
+ Proper (iff ==> iff) ArithFact.
+End Morphism.
+
+
+Definition build_ex {T:Type} (n:T) {P:T -> Prop} `{H:ArithFact (P n)} : {x : T & ArithFact (P x)} :=
existT _ n H.
Definition generic_eq {T:Type} (x y:T) `{Decidable (x = y)} := Decidable_witness.
@@ -59,18 +75,59 @@ Instance Decidable_eq_from_dec {T:Type} (eqdec: forall x y : T, {x = y} + {x <>
Decidable_witness := proj1_sig (bool_of_sumbool (eqdec x y))
}.
destruct (eqdec x y); simpl; split; congruence.
+Defined.
+
+Instance Decidable_eq_string : forall (x y : string), Decidable (x = y) :=
+ Decidable_eq_from_dec String.string_dec.
+
+Instance Decidable_eq_pair {A B : Type} `(DA : forall x y : A, Decidable (x = y), DB : forall x y : B, Decidable (x = y)) : forall x y : A*B, Decidable (x = y) :=
+{ Decidable_witness := andb (@Decidable_witness _ (DA (fst x) (fst y)))
+(@Decidable_witness _ (DB (snd x) (snd y))) }.
+destruct x as [x1 x2].
+destruct y as [y1 y2].
+simpl.
+destruct (DA x1 y1) as [b1 H1];
+destruct (DB x2 y2) as [b2 H2];
+simpl.
+split.
+* intro H.
+ apply Bool.andb_true_iff in H.
+ destruct H as [H1b H2b].
+ apply H1 in H1b.
+ apply H2 in H2b.
+ congruence.
+* intro. inversion H.
+ subst.
+ apply Bool.andb_true_iff.
+ tauto.
Qed.
+Definition generic_dec {T:Type} (x y:T) `{Decidable (x = y)} : {x = y} + {x <> y}.
+refine ((if Decidable_witness as b return (b = true <-> x = y -> _) then fun H' => _ else fun H' => _) Decidable_spec).
+* left. tauto.
+* right. intuition.
+Defined.
+
+(* Used by generated code that builds Decidable equality instances for records. *)
+Ltac cmp_record_field x y :=
+ let H := fresh "H" in
+ case (generic_dec x y);
+ intro H; [ |
+ refine (Build_Decidable _ false _);
+ split; [congruence | intros Z; destruct H; injection Z; auto]
+ ].
+
+
(* Project away range constraints in comparisons *)
-Definition ltb_range_l {P} (l : sigT P) r := Z.ltb (projT1 l) r.
-Definition leb_range_l {P} (l : sigT P) r := Z.leb (projT1 l) r.
-Definition gtb_range_l {P} (l : sigT P) r := Z.gtb (projT1 l) r.
-Definition geb_range_l {P} (l : sigT P) r := Z.geb (projT1 l) r.
-Definition ltb_range_r {P} l (r : sigT P) := Z.ltb l (projT1 r).
-Definition leb_range_r {P} l (r : sigT P) := Z.leb l (projT1 r).
-Definition gtb_range_r {P} l (r : sigT P) := Z.gtb l (projT1 r).
-Definition geb_range_r {P} l (r : sigT P) := Z.geb l (projT1 r).
+Definition ltb_range_l {lo hi} (l : {x & ArithFact (lo <= x /\ x <= hi)}) r := Z.ltb (projT1 l) r.
+Definition leb_range_l {lo hi} (l : {x & ArithFact (lo <= x /\ x <= hi)}) r := Z.leb (projT1 l) r.
+Definition gtb_range_l {lo hi} (l : {x & ArithFact (lo <= x /\ x <= hi)}) r := Z.gtb (projT1 l) r.
+Definition geb_range_l {lo hi} (l : {x & ArithFact (lo <= x /\ x <= hi)}) r := Z.geb (projT1 l) r.
+Definition ltb_range_r {lo hi} l (r : {x & ArithFact (lo <= x /\ x <= hi)}) := Z.ltb l (projT1 r).
+Definition leb_range_r {lo hi} l (r : {x & ArithFact (lo <= x /\ x <= hi)}) := Z.leb l (projT1 r).
+Definition gtb_range_r {lo hi} l (r : {x & ArithFact (lo <= x /\ x <= hi)}) := Z.gtb l (projT1 r).
+Definition geb_range_r {lo hi} l (r : {x & ArithFact (lo <= x /\ x <= hi)}) := Z.geb l (projT1 r).
Definition ii := Z.
Definition nn := nat.
@@ -78,7 +135,13 @@ Definition nn := nat.
(*val pow : Z -> Z -> Z*)
Definition pow m n := m ^ n.
-Definition pow2 n := pow 2 n.
+Program Definition pow2 n : {z : Z & ArithFact (2 ^ n <= z <= 2 ^ n)} := existT _ (pow 2 n) _.
+Next Obligation.
+constructor.
+unfold pow.
+auto using Z.le_refl.
+Qed.
+
(*
Definition inline lt := (<)
Definition inline gt := (>)
@@ -111,7 +174,15 @@ Definition negate_real r := realNegate r
Definition abs_real r := realAbs r
Definition power_real b e := realPowInteger b e*)
+Definition print_endline (_ : string) : unit := tt.
+Definition prerr_endline (_ : string) : unit := tt.
+Definition prerr (_ : string) : unit := tt.
Definition print_int (_ : string) (_ : Z) : unit := tt.
+Definition prerr_int (_ : string) (_ : Z) : unit := tt.
+Definition putchar (_ : Z) : unit := tt.
+
+Definition shl_int := Z.shiftl.
+Definition shr_int := Z.shiftr.
(*
Definition or_bool l r := (l || r)
@@ -238,9 +309,29 @@ f_equal.
auto using just_list_length.
Qed.
+Fixpoint member_Z_list (x : Z) (l : list Z) : bool :=
+match l with
+| [] => false
+| h::t => if x =? h then true else member_Z_list x t
+end.
+
+Lemma member_Z_list_In {x l} : member_Z_list x l = true <-> In x l.
+induction l.
+* simpl. split. congruence. tauto.
+* simpl. destruct (x =? a) eqn:H.
+ + rewrite Z.eqb_eq in H. subst. tauto.
+ + rewrite Z.eqb_neq in H. split.
+ - intro Heq. right. apply IHl. assumption.
+ - intros [bad | good]. congruence. apply IHl. assumption.
+Qed.
+
(*** Bits *)
Inductive bitU := B0 | B1 | BU.
+Scheme Equality for bitU.
+Instance Decidable_eq_bit : forall (x y : bitU), Decidable (x = y) :=
+ Decidable_eq_from_dec bitU_eq_dec.
+
Definition showBitU b :=
match b with
| B0 => "O"
@@ -829,42 +920,42 @@ val make_the_value : forall n. Z -> itself n
Definition inline make_the_value x := the_value
*)
-Fixpoint bitlistFromWord {n} w :=
+Fixpoint bitlistFromWord_rev {n} w :=
match w with
| WO => []
-| WS b w => b :: bitlistFromWord w
+| WS b w => b :: bitlistFromWord_rev w
end.
+Definition bitlistFromWord {n} w :=
+ List.rev (@bitlistFromWord_rev n w).
-Fixpoint wordFromBitlist l : word (length l) :=
+Fixpoint wordFromBitlist_rev l : word (length l) :=
match l with
| [] => WO
-| b::t => WS b (wordFromBitlist t)
+| b::t => WS b (wordFromBitlist_rev t)
end.
+Definition wordFromBitlist l : word (length l) :=
+ nat_cast _ (List.rev_length l) (wordFromBitlist_rev (List.rev l)).
Local Open Scope nat.
-Program Definition fit_bbv_word {n m} (w : word n) : word m :=
-match Nat.compare m n with
-| Gt => extz w (m - n)
-| Eq => w
-| Lt => split2 (n - m) m w
-end.
-Next Obligation.
-symmetry in Heq_anonymous.
-apply nat_compare_gt in Heq_anonymous.
-omega.
-Defined.
-Next Obligation.
-symmetry in Heq_anonymous.
-apply nat_compare_eq in Heq_anonymous.
-omega.
-Defined.
-Next Obligation.
+Fixpoint nat_diff {T : nat -> Type} n m {struct n} :
+forall
+ (lt : forall p, T n -> T (n + p))
+ (eq : T m -> T m)
+ (gt : forall p, T (m + p) -> T m), T n -> T m :=
+(match n, m return (forall p, T n -> T (n + p)) -> (T m -> T m) -> (forall p, T (m + p) -> T m) -> T n -> T m with
+| O, O => fun lt eq gt => eq
+| S n', O => fun lt eq gt => gt _
+| O, S m' => fun lt eq gt => lt _
+| S n', S m' => @nat_diff (fun x => T (S x)) n' m'
+end).
+
+Definition fit_bbv_word {n m} : word n -> word m :=
+nat_diff n m
+ (fun p w => nat_cast _ (Nat.add_comm _ _) (extz w p))
+ (fun w => w)
+ (fun p w => split2 _ _ (nat_cast _ (Nat.add_comm _ _) w)).
-symmetry in Heq_anonymous.
-apply nat_compare_lt in Heq_anonymous.
-omega.
-Defined.
Local Close Scope nat.
(*** Bitvectors *)
@@ -896,12 +987,10 @@ Class ReasonableSize (a : Z) : Prop := {
isPositive : a >= 0
}.
-Hint Resolve -> Z.gtb_lt Z.geb_le Z.ltb_lt Z.leb_le : zbool.
-Hint Resolve <- Z.ge_le_iff Z.gt_lt_iff : zbool.
-
(* Omega doesn't know about In, but can handle disjunctions. *)
Ltac unfold_In :=
repeat match goal with
+| H:context [member_Z_list _ _ = true] |- _ => rewrite member_Z_list_In in H
| H:context [In ?x (?y :: ?t)] |- _ => change (In x (y :: t)) with (y = x \/ In x t) in H
| H:context [In ?x []] |- _ => change (In x []) with False in H
end.
@@ -912,6 +1001,11 @@ end.
Ltac not_Z ty := match ty with Z => fail 1 | _ => idtac end.
Ltac clear_non_Z_defns :=
repeat match goal with H := _ : ?X |- _ => not_Z X; clearbody H end.
+Ltac clear_irrelevant_defns :=
+repeat match goal with X := _ |- _ =>
+ match goal with |- context[X] => idtac end ||
+ match goal with _ : context[X] |- _ => idtac end || clear X
+end.
Lemma ArithFact_mword (a : Z) (w : mword a) : ArithFact (a >= 0).
constructor.
@@ -921,7 +1015,7 @@ auto using Z.le_ge, Zle_0_pos.
destruct w.
Qed.
Ltac unwrap_ArithFacts :=
- repeat match goal with H:(ArithFact _) |- _ => let H' := fresh H in case H as [H'] end.
+ repeat match goal with H:(ArithFact _) |- _ => let H' := fresh H in case H as [H']; clear H end.
Ltac unbool_comparisons :=
repeat match goal with
| H:context [Z.geb _ _] |- _ => rewrite Z.geb_leb in H
@@ -933,23 +1027,50 @@ Ltac unbool_comparisons :=
| H:context [Z.ltb _ _ = false] |- _ => rewrite Z.ltb_ge in H
| H:context [Z.eqb _ _ = false] |- _ => rewrite Z.eqb_neq in H
| H:context [orb _ _ = true] |- _ => rewrite Bool.orb_true_iff in H
- | H:context [andb _ _ = true] |- _ => apply andb_prop in H
+ | H:context [orb _ _ = false] |- _ => rewrite Bool.orb_false_iff in H
+ | H:context [andb _ _ = true] |- _ => rewrite Bool.andb_true_iff in H
+ | H:context [andb _ _ = false] |- _ => rewrite Bool.andb_false_iff in H
+ | H:context [negb _ = true] |- _ => rewrite Bool.negb_true_iff in H
+ | H:context [negb _ = false] |- _ => rewrite Bool.negb_false_iff in H
| H:context [generic_eq _ _ = true] |- _ => apply generic_eq_true in H
| H:context [generic_eq _ _ = false] |- _ => apply generic_eq_false in H
| H:context [generic_neq _ _ = true] |- _ => apply generic_neq_true in H
| H:context [generic_neq _ _ = false] |- _ => apply generic_neq_false in H
end.
+
(* Split up dependent pairs to get at proofs of properties *)
Ltac extract_properties :=
+ (* Properties of local definitions *)
repeat match goal with H := (projT1 ?X) |- _ =>
let x := fresh "x" in
let Hx := fresh "Hx" in
destruct X as [x Hx] in *;
change (projT1 (existT _ x Hx)) with x in *; unfold H in * end;
+ (* Properties in the goal *)
repeat match goal with |- context [projT1 ?X] =>
let x := fresh "x" in
let Hx := fresh "Hx" in
destruct X as [x Hx] in *;
+ change (projT1 (existT _ x Hx)) with x in * end;
+ (* Properties with proofs embedded by build_ex; uses revert/generalize
+ rather than destruct because it seemed to be more efficient, but
+ some experimentation would be needed to be sure.
+ repeat (
+ match goal with H:context [@build_ex ?T ?n ?P ?prf] |- _ =>
+ let x := fresh "x" in
+ let zz := constr:(@build_ex T n P prf) in
+ revert dependent H(*; generalize zz; intros*)
+ end;
+ match goal with |- context [@build_ex ?T ?n ?P ?prf] =>
+ let x := fresh "x" in
+ let zz := constr:(@build_ex T n P prf) in
+ generalize zz as x
+ end;
+ intros).*)
+ repeat match goal with _:context [projT1 ?X] |- _ =>
+ let x := fresh "x" in
+ let Hx := fresh "Hx" in
+ destruct X as [x Hx] in *;
change (projT1 (existT _ x Hx)) with x in * end.
(* TODO: hyps, too? *)
Ltac reduce_list_lengths :=
@@ -972,26 +1093,110 @@ Ltac dump_context :=
| H:=?X |- _ => idtac H ":=" X; fail
| H:?X |- _ => idtac H ":" X; fail end;
match goal with |- ?X => idtac "Goal:" X end.
-Ltac solve_arithfact :=
+Ltac split_cases :=
+ repeat match goal with
+ |- context [match ?X with _ => _ end] => destruct X
+ end.
+Lemma True_left {P:Prop} : (True /\ P) <-> P.
+tauto.
+Qed.
+Lemma True_right {P:Prop} : (P /\ True) <-> P.
+tauto.
+Qed.
+
+(* Turn exists into metavariables like eexists, except put in dummy values when
+ the variable is unused. This is used so that we can use eauto with a low
+ search bound that doesn't include the exists. (Not terribly happy with
+ how this works...) *)
+Ltac drop_exists :=
+repeat
+ match goal with |- @ex Z ?p =>
+ let a := eval hnf in (p 0) in
+ let b := eval hnf in (p 1) in
+ match a with b => exists 0 | _ => eexists end
+ end.
+(*
+ match goal with |- @ex Z (fun x => @?p x) =>
+ let xx := fresh "x" in
+ evar (xx : Z);
+ let a := eval hnf in (p xx) in
+ match a with context [xx] => eexists | _ => exists 0 end;
+ instantiate (xx := 0);
+ clear xx
+ end.
+*)
+
+(* The linear solver doesn't like existentials. *)
+Ltac destruct_exists :=
+ repeat match goal with H:@ex Z _ |- _ => destruct H end.
+
+Ltac prepare_for_solver :=
(*dump_context;*)
+ clear_irrelevant_defns;
clear_non_Z_defns;
+ autounfold with sail in * |- *; (* You can add Hint Unfold ... : sail to let omega see through fns *)
+ split_cases;
extract_properties;
repeat match goal with w:mword ?n |- _ => apply ArithFact_mword in w end;
unwrap_ArithFacts;
- unfold_In;
- autounfold with sail in * |- *; (* You can add Hint Unfold ... : sail to let omega see through fns *)
+ destruct_exists;
unbool_comparisons;
+ unfold_In; (* after unbool_comparisons to deal with && and || *)
reduce_list_lengths;
reduce_pow;
+ (* omega doesn't cope well with extra "True"s in the goal *)
+ repeat setoid_rewrite True_left;
+ repeat setoid_rewrite True_right.
+
+Lemma trivial_range {x : Z} : ArithFact (x <= x /\ x <= x).
+constructor.
+auto with zarith.
+Qed.
+
+Lemma ArithFact_self_proof {P} : forall x : {y : Z & ArithFact (P y)}, ArithFact (P (projT1 x)).
+intros [x H].
+exact H.
+Qed.
+
+Ltac fill_in_evar_eq :=
+ match goal with |- ArithFact (?x = ?y) =>
+ (is_evar x || is_evar y);
+ (* compute to allow projections to remove proofs that might not be allowed in the evar *)
+(* Disabled because cbn may reduce definitions, even after clearbody
+ let x := eval cbn in x in
+ let y := eval cbn in y in*)
+ idtac "Warning: unknown equality constraint"; constructor; exact (eq_refl _ : x = y) end.
+
+Ltac solve_arithfact :=
+(* Attempt a simple proof first to avoid lengthy preparation steps (especially
+ as the large proof terms can upset subsequent proofs). *)
+intros; (* To solve implications for derive_m *)
+try (exact trivial_range);
+try fill_in_evar_eq;
+try match goal with |- context [projT1 ?X] => apply (ArithFact_self_proof X) end;
+try (constructor; omega);
+prepare_for_solver;
(*dump_context;*)
- solve [apply ArithFact_mword; assumption
- | constructor; omega with Z
- (* The datatypes hints give us some list handling, esp In *)
- | constructor; auto with datatypes zbool zarith sail].
-Hint Extern 0 (ArithFact _) => solve_arithfact : typeclass_instances.
+ solve
+ [ match goal with |- ArithFact (?x _) => is_evar x; idtac "Warning: unknown constraint"; constructor; exact (I : (fun _ => True) _) end
+ | apply ArithFact_mword; assumption
+ | constructor; omega with Z
+ (* Try sail hints before dropping the existential *)
+ | constructor; eauto 3 with zarith sail
+ (* The datatypes hints give us some list handling, esp In *)
+ | constructor; drop_exists; eauto 3 with datatypes zarith sail
+ | constructor; idtac "Unable to solve constraint"; dump_context; fail
+ ].
+(* Add an indirection so that you can redefine run_solver to fail to get
+ slow running constraints into proof mode. *)
+Ltac run_solver := solve_arithfact.
+Hint Extern 0 (ArithFact _) => run_solver : typeclass_instances.
Hint Unfold length_mword : sail.
+Definition neq_atom (x : Z) (y : Z) : bool := negb (Z.eqb x y).
+Hint Unfold neq_atom : sail.
+
Lemma ReasonableSize_witness (a : Z) (w : mword a) : ReasonableSize a.
constructor.
destruct a.
@@ -1002,6 +1207,10 @@ Qed.
Hint Extern 0 (ReasonableSize ?A) => (unwrap_ArithFacts; solve [apply ReasonableSize_witness; assumption | constructor; omega]) : typeclass_instances.
+Definition to_range (x : Z) : {y : Z & ArithFact (x <= y <= x)} := build_ex x.
+
+
+
Instance mword_Bitvector {a : Z} `{ArithFact (a >= 0)} : (Bitvector (mword a)) := {
bits_of v := List.map bitU_of_bool (bitlistFromWord (get_word v));
of_bits v := option_map (fun bl => to_word isPositive (fit_bbv_word (wordFromBitlist bl))) (just_list (List.map bool_of_bitU v));
@@ -1335,7 +1544,7 @@ Fixpoint foreach_Z' {Vars} from to step n (vars : Vars) (body : Z -> Vars -> Var
Definition foreach_Z {Vars} from to step vars body :=
foreach_Z' (Vars := Vars) from to step (S (Z.abs_nat (from - to))) vars body.
-Fixpoint foreach_Z_up' {Vars} from to step off n `{ArithFact (from <= to)} `{ArithFact (0 < step)} `{ArithFact (0 <= off)} (vars : Vars) (body : forall (z : Z) `(ArithFact (from <= z <= to)), Vars -> Vars) {struct n} : Vars :=
+Fixpoint foreach_Z_up' {Vars} from to step off n `{ArithFact (0 < step)} `{ArithFact (0 <= off)} (vars : Vars) (body : forall (z : Z) `(ArithFact (from <= z <= to)), Vars -> Vars) {struct n} : Vars :=
if sumbool_of_bool (from + off <=? to) then
match n with
| O => vars
@@ -1343,7 +1552,7 @@ Fixpoint foreach_Z_up' {Vars} from to step off n `{ArithFact (from <= to)} `{Ari
end
else vars.
-Fixpoint foreach_Z_down' {Vars} from to step off n `{ArithFact (to <= from)} `{ArithFact (0 < step)} `{ArithFact (off <= 0)} (vars : Vars) (body : forall (z : Z) `(ArithFact (to <= z <= from)), Vars -> Vars) {struct n} : Vars :=
+Fixpoint foreach_Z_down' {Vars} from to step off n `{ArithFact (0 < step)} `{ArithFact (off <= 0)} (vars : Vars) (body : forall (z : Z) `(ArithFact (to <= z <= from)), Vars -> Vars) {struct n} : Vars :=
if sumbool_of_bool (to <=? from + off) then
match n with
| O => vars
@@ -1351,9 +1560,9 @@ Fixpoint foreach_Z_down' {Vars} from to step off n `{ArithFact (to <= from)} `{A
end
else vars.
-Definition foreach_Z_up {Vars} from to step vars body `{ArithFact (from <= to)} `{ArithFact (0 < step)} :=
+Definition foreach_Z_up {Vars} from to step vars body `{ArithFact (0 < step)} :=
foreach_Z_up' (Vars := Vars) from to step 0 (S (Z.abs_nat (from - to))) vars body.
-Definition foreach_Z_down {Vars} from to step vars body `{ArithFact (to <= from)} `{ArithFact (0 < step)} :=
+Definition foreach_Z_down {Vars} from to step vars body `{ArithFact (0 < step)} :=
foreach_Z_down' (Vars := Vars) from to step 0 (S (Z.abs_nat (from - to))) vars body.
(*val while : forall vars. vars -> (vars -> bool) -> (vars -> vars) -> vars
@@ -1446,8 +1655,8 @@ end
(* Arithmetic functions which return proofs that match the expected Sail
types in smt.sail. *)
-Definition div_with_eq n m : {o : Z & ArithFact (o = Z.quot n m)} := build_ex (Z.quot n m).
-Definition mod_with_eq n m : {o : Z & ArithFact (o = Z.rem n m)} := build_ex (Z.rem n m).
+Definition ediv_with_eq n m : {o : Z & ArithFact (o = ZEuclid.div n m)} := build_ex (ZEuclid.div n m).
+Definition emod_with_eq n m : {o : Z & ArithFact (o = ZEuclid.modulo n m)} := build_ex (ZEuclid.modulo n m).
Definition abs_with_eq n : {o : Z & ArithFact (o = Z.abs n)} := build_ex (Z.abs n).
(* Similarly, for ranges (currently in MIPS) *)
@@ -1559,6 +1768,20 @@ Qed.
Definition list_of_vec {A n} (v : vec A n) : list A := projT1 v.
+Definition vec_eq_dec {T n} (D : forall x y : T, {x = y} + {x <> y}) (x y : vec T n) :
+ {x = y} + {x <> y}.
+refine (if List.list_eq_dec D (projT1 x) (projT1 y) then left _ else right _).
+* apply eq_sigT_hprop; auto using ZEqdep.UIP.
+* contradict n0. rewrite n0. reflexivity.
+Defined.
+
+Instance Decidable_eq_vec {T : Type} {n} `(DT : forall x y : T, Decidable (x = y)) :
+ forall x y : vec T n, Decidable (x = y) := {
+ Decidable_witness := proj1_sig (bool_of_sumbool (vec_eq_dec (fun x y => generic_dec x y) x y))
+}.
+destruct (vec_eq_dec _ x y); simpl; split; congruence.
+Defined.
+
Program Definition vec_of_list {A} n (l : list A) : option (vec A n) :=
if sumbool_of_bool (n =? length_list l) then Some (existT _ l _) else None.
Next Obligation.
@@ -1573,4 +1796,17 @@ Definition map_bind {A B} (f : A -> option B) (a : option A) : option B :=
match a with
| Some a' => f a'
| None => None
-end. \ No newline at end of file
+end.
+
+Definition sub_nat (x : Z) `{ArithFact (x >= 0)} (y : Z) `{ArithFact (y >= 0)} :
+ {z : Z & ArithFact (z >= 0)} :=
+ let z := x - y in
+ if sumbool_of_bool (z >=? 0) then build_ex z else build_ex 0.
+
+Definition min_nat (x : Z) `{ArithFact (x >= 0)} (y : Z) `{ArithFact (y >= 0)} :
+ {z : Z & ArithFact (z >= 0)} :=
+ build_ex (Z.min x y).
+
+Definition max_nat (x : Z) `{ArithFact (x >= 0)} (y : Z) `{ArithFact (y >= 0)} :
+ {z : Z & ArithFact (z >= 0)} :=
+ build_ex (Z.max x y).
diff --git a/snapshots/coq/mips/mips_types.v b/snapshots/coq/mips/mips_types.v
deleted file mode 100644
index 12d7d6cd..00000000
--- a/snapshots/coq/mips/mips_types.v
+++ /dev/null
@@ -1,1441 +0,0 @@
-(*Generated by Sail from mips.*)
-Require Import Sail2_instr_kinds.
-Require Import Sail2_values.
-Require Import Sail2_operators_mwords.
-Require Import Sail2_prompt_monad.
-Require Import Sail2_prompt.
-Require Import Sail2_state.
-Definition bits (n : Z) : Type := mword n.
-
-
-
-Inductive exception :=
- ISAException : unit -> exception
- | Error_not_implemented : string -> exception
- | Error_misaligned_access : unit -> exception
- | Error_EBREAK : unit -> exception
- | Error_internal_error : unit -> exception.
-Arguments exception : clear implicits.
-
-
-
-Record CauseReg := { CauseReg_CauseReg_chunk_0 : mword 32; }.
-Notation "{[ r 'with' 'CauseReg_CauseReg_chunk_0' := e ]}" := ({| CauseReg_CauseReg_chunk_0 := e |}).
-
-Record StatusReg := { StatusReg_StatusReg_chunk_0 : mword 32; }.
-Notation "{[ r 'with' 'StatusReg_StatusReg_chunk_0' := e ]}" := ({| StatusReg_StatusReg_chunk_0 := e |}).
-
-Record TLBEntryLoReg := { TLBEntryLoReg_TLBEntryLoReg_chunk_0 : mword 64; }.
-Notation "{[ r 'with' 'TLBEntryLoReg_TLBEntryLoReg_chunk_0' := e ]}" := ({| TLBEntryLoReg_TLBEntryLoReg_chunk_0 := e |}).
-
-Record TLBEntryHiReg := { TLBEntryHiReg_TLBEntryHiReg_chunk_0 : mword 64; }.
-Notation "{[ r 'with' 'TLBEntryHiReg_TLBEntryHiReg_chunk_0' := e ]}" := ({| TLBEntryHiReg_TLBEntryHiReg_chunk_0 := e |}).
-
-Record ContextReg := { ContextReg_ContextReg_chunk_0 : mword 64; }.
-Notation "{[ r 'with' 'ContextReg_ContextReg_chunk_0' := e ]}" := ({| ContextReg_ContextReg_chunk_0 := e |}).
-
-Record XContextReg := { XContextReg_XContextReg_chunk_0 : mword 64; }.
-Notation "{[ r 'with' 'XContextReg_XContextReg_chunk_0' := e ]}" := ({| XContextReg_XContextReg_chunk_0 := e |}).
-
-Definition TLBIndexT : Type := bits 6.
-
-Record TLBEntry := { TLBEntry_TLBEntry_chunk_1 : mword 53; TLBEntry_TLBEntry_chunk_0 : mword 64; }.
-Notation "{[ r 'with' 'TLBEntry_TLBEntry_chunk_1' := e ]}" := ({| TLBEntry_TLBEntry_chunk_1 := e; TLBEntry_TLBEntry_chunk_0 := TLBEntry_TLBEntry_chunk_0 r |}).
-Notation "{[ r 'with' 'TLBEntry_TLBEntry_chunk_0' := e ]}" := ({| TLBEntry_TLBEntry_chunk_0 := e; TLBEntry_TLBEntry_chunk_1 := TLBEntry_TLBEntry_chunk_1 r |}).
-
-Inductive Exception :=
- Interrupt
- | TLBMod
- | TLBL
- | TLBS
- | AdEL
- | AdES
- | Sys
- | Bp
- | ResI
- | CpU
- | Ov
- | Tr
- | C2E
- | C2Trap
- | XTLBRefillL
- | XTLBRefillS
- | XTLBInvL
- | XTLBInvS
- | MCheck.
-Scheme Equality for Exception.
-Instance Decidable_eq_Exception : forall (x y : Exception), Decidable (x = y) :=
-Decidable_eq_from_dec Exception_eq_dec.
-
-
-Inductive MemAccessType := Instruction | LoadData | StoreData.
-Scheme Equality for MemAccessType.
-Instance Decidable_eq_MemAccessType : forall (x y : MemAccessType), Decidable (x = y) :=
-Decidable_eq_from_dec MemAccessType_eq_dec.
-
-
-Inductive AccessLevel := User | Supervisor | Kernel.
-Scheme Equality for AccessLevel.
-Instance Decidable_eq_AccessLevel : forall (x y : AccessLevel), Decidable (x = y) :=
-Decidable_eq_from_dec AccessLevel_eq_dec.
-
-
-Definition regno : Type := bits 5.
-
-Definition imm16 : Type := bits 16.
-
-Definition regregreg : Type := (regno * regno * regno).
-
-Definition regregimm16 : Type := (regno * regno * imm16).
-
-Inductive decode_failure :=
- no_matching_pattern | unsupported_instruction | illegal_instruction | internal_error.
-Scheme Equality for decode_failure.
-Instance Decidable_eq_decode_failure : forall (x y : decode_failure), Decidable (x = y) :=
-Decidable_eq_from_dec decode_failure_eq_dec.
-
-
-Inductive Comparison := EQ' | NE | GE | GEU | GT' | LE | LT' | LTU.
-Scheme Equality for Comparison.
-Instance Decidable_eq_Comparison : forall (x y : Comparison), Decidable (x = y) :=
-Decidable_eq_from_dec Comparison_eq_dec.
-
-
-Inductive WordType := B | H | W | D.
-Scheme Equality for WordType.
-Instance Decidable_eq_WordType : forall (x y : WordType), Decidable (x = y) :=
-Decidable_eq_from_dec WordType_eq_dec.
-
-
-Inductive WordTypeUnaligned := WL | WR | DL | DR.
-Scheme Equality for WordTypeUnaligned.
-Instance Decidable_eq_WordTypeUnaligned : forall (x y : WordTypeUnaligned), Decidable (x = y) :=
-Decidable_eq_from_dec WordTypeUnaligned_eq_dec.
-
-
-Inductive ast :=
- DADDIU : (regno * regno * imm16) -> ast
- | DADDU : (regno * regno * regno) -> ast
- | DADDI : (regno * regno * bits 16) -> ast
- | DADD : (regno * regno * regno) -> ast
- | ADD : (regno * regno * regno) -> ast
- | ADDI : (regno * regno * bits 16) -> ast
- | ADDU : (regno * regno * regno) -> ast
- | ADDIU : (regno * regno * bits 16) -> ast
- | DSUBU : (regno * regno * regno) -> ast
- | DSUB : (regno * regno * regno) -> ast
- | SUB : (regno * regno * regno) -> ast
- | SUBU : (regno * regno * regno) -> ast
- | AND : (regno * regno * regno) -> ast
- | ANDI : (regno * regno * bits 16) -> ast
- | OR : (regno * regno * regno) -> ast
- | ORI : (regno * regno * bits 16) -> ast
- | NOR : (regno * regno * regno) -> ast
- | XOR : (regno * regno * regno) -> ast
- | XORI : (regno * regno * bits 16) -> ast
- | LUI : (regno * imm16) -> ast
- | DSLL : (regno * regno * regno) -> ast
- | DSLL32 : (regno * regno * regno) -> ast
- | DSLLV : (regno * regno * regno) -> ast
- | DSRA : (regno * regno * regno) -> ast
- | DSRA32 : (regno * regno * regno) -> ast
- | DSRAV : (regno * regno * regno) -> ast
- | DSRL : (regno * regno * regno) -> ast
- | DSRL32 : (regno * regno * regno) -> ast
- | DSRLV : (regno * regno * regno) -> ast
- | SLL : (regno * regno * regno) -> ast
- | SLLV : (regno * regno * regno) -> ast
- | SRA : (regno * regno * regno) -> ast
- | SRAV : (regno * regno * regno) -> ast
- | SRL : (regno * regno * regno) -> ast
- | SRLV : (regno * regno * regno) -> ast
- | SLT : (regno * regno * regno) -> ast
- | SLTI : (regno * regno * bits 16) -> ast
- | SLTU : (regno * regno * regno) -> ast
- | SLTIU : (regno * regno * bits 16) -> ast
- | MOVN : (regno * regno * regno) -> ast
- | MOVZ : (regno * regno * regno) -> ast
- | MFHI : regno -> ast
- | MFLO : regno -> ast
- | MTHI : regno -> ast
- | MTLO : regno -> ast
- | MUL : (regno * regno * regno) -> ast
- | MULT : (regno * regno) -> ast
- | MULTU : (regno * regno) -> ast
- | DMULT : (regno * regno) -> ast
- | DMULTU : (regno * regno) -> ast
- | MADD : (regno * regno) -> ast
- | MADDU : (regno * regno) -> ast
- | MSUB : (regno * regno) -> ast
- | MSUBU : (regno * regno) -> ast
- | DIV : (regno * regno) -> ast
- | DIVU : (regno * regno) -> ast
- | DDIV : (regno * regno) -> ast
- | DDIVU : (regno * regno) -> ast
- | J : bits 26 -> ast
- | JAL : bits 26 -> ast
- | JR : regno -> ast
- | JALR : (regno * regno) -> ast
- | BEQ : (regno * regno * imm16 * bool * bool) -> ast
- | BCMPZ : (regno * imm16 * Comparison * bool * bool) -> ast
- | SYSCALL : unit -> ast
- | BREAK : unit -> ast
- | WAIT : unit -> ast
- | TRAPREG : (regno * regno * Comparison) -> ast
- | TRAPIMM : (regno * imm16 * Comparison) -> ast
- | Load : (WordType * bool * bool * regno * regno * imm16) -> ast
- | Store : (WordType * bool * regno * regno * imm16) -> ast
- | LWL : (regno * regno * bits 16) -> ast
- | LWR : (regno * regno * bits 16) -> ast
- | SWL : (regno * regno * bits 16) -> ast
- | SWR : (regno * regno * bits 16) -> ast
- | LDL : (regno * regno * bits 16) -> ast
- | LDR : (regno * regno * bits 16) -> ast
- | SDL : (regno * regno * bits 16) -> ast
- | SDR : (regno * regno * bits 16) -> ast
- | CACHE : (regno * regno * bits 16) -> ast
- | SYNC : unit -> ast
- | MFC0 : (regno * regno * bits 3 * bool) -> ast
- | HCF : unit -> ast
- | MTC0 : (regno * regno * bits 3 * bool) -> ast
- | TLBWI : unit -> ast
- | TLBWR : unit -> ast
- | TLBR : unit -> ast
- | TLBP : unit -> ast
- | RDHWR : (regno * regno) -> ast
- | ERET : unit -> ast
- | RI : unit -> ast.
-Arguments ast : clear implicits.
-
-
-
-Inductive register_value :=
- Regval_vector : (Z * bool * list register_value) -> register_value
- | Regval_list : list register_value -> register_value
- | Regval_option : option register_value -> register_value
- | Regval_CauseReg : CauseReg -> register_value
- | Regval_ContextReg : ContextReg -> register_value
- | Regval_StatusReg : StatusReg -> register_value
- | Regval_TLBEntry : TLBEntry -> register_value
- | Regval_TLBEntryHiReg : TLBEntryHiReg -> register_value
- | Regval_TLBEntryLoReg : TLBEntryLoReg -> register_value
- | Regval_XContextReg : XContextReg -> register_value
- | Regval_vector_16_dec_bit : mword 16 -> register_value
- | Regval_vector_1_dec_bit : mword 1 -> register_value
- | Regval_vector_32_dec_bit : mword 32 -> register_value
- | Regval_vector_3_dec_bit : mword 3 -> register_value
- | Regval_vector_64_dec_bit : mword 64 -> register_value
- | Regval_vector_6_dec_bit : mword 6 -> register_value
- | Regval_vector_8_dec_bit : mword 8 -> register_value.
-Arguments register_value : clear implicits.
-
-
-
-Record regstate :=
- { UART_RVALID : mword 1;
- UART_RDATA : mword 8;
- UART_WRITTEN : mword 1;
- UART_WDATA : mword 8;
- GPR : vec (mword 64) 32;
- LO : mword 64;
- HI : mword 64;
- delayedPC : mword 64;
- inBranchDelay : mword 1;
- branchPending : mword 1;
- CP0Status : StatusReg;
- CP0ConfigK0 : mword 3;
- CP0UserLocal : mword 64;
- CP0HWREna : mword 32;
- CP0Count : mword 32;
- CP0BadVAddr : mword 64;
- CP0LLAddr : mword 64;
- CP0LLBit : mword 1;
- CP0ErrorEPC : mword 64;
- CP0EPC : mword 64;
- CP0Cause : CauseReg;
- CP0Compare : mword 32;
- TLBEntry63 : TLBEntry;
- TLBEntry62 : TLBEntry;
- TLBEntry61 : TLBEntry;
- TLBEntry60 : TLBEntry;
- TLBEntry59 : TLBEntry;
- TLBEntry58 : TLBEntry;
- TLBEntry57 : TLBEntry;
- TLBEntry56 : TLBEntry;
- TLBEntry55 : TLBEntry;
- TLBEntry54 : TLBEntry;
- TLBEntry53 : TLBEntry;
- TLBEntry52 : TLBEntry;
- TLBEntry51 : TLBEntry;
- TLBEntry50 : TLBEntry;
- TLBEntry49 : TLBEntry;
- TLBEntry48 : TLBEntry;
- TLBEntry47 : TLBEntry;
- TLBEntry46 : TLBEntry;
- TLBEntry45 : TLBEntry;
- TLBEntry44 : TLBEntry;
- TLBEntry43 : TLBEntry;
- TLBEntry42 : TLBEntry;
- TLBEntry41 : TLBEntry;
- TLBEntry40 : TLBEntry;
- TLBEntry39 : TLBEntry;
- TLBEntry38 : TLBEntry;
- TLBEntry37 : TLBEntry;
- TLBEntry36 : TLBEntry;
- TLBEntry35 : TLBEntry;
- TLBEntry34 : TLBEntry;
- TLBEntry33 : TLBEntry;
- TLBEntry32 : TLBEntry;
- TLBEntry31 : TLBEntry;
- TLBEntry30 : TLBEntry;
- TLBEntry29 : TLBEntry;
- TLBEntry28 : TLBEntry;
- TLBEntry27 : TLBEntry;
- TLBEntry26 : TLBEntry;
- TLBEntry25 : TLBEntry;
- TLBEntry24 : TLBEntry;
- TLBEntry23 : TLBEntry;
- TLBEntry22 : TLBEntry;
- TLBEntry21 : TLBEntry;
- TLBEntry20 : TLBEntry;
- TLBEntry19 : TLBEntry;
- TLBEntry18 : TLBEntry;
- TLBEntry17 : TLBEntry;
- TLBEntry16 : TLBEntry;
- TLBEntry15 : TLBEntry;
- TLBEntry14 : TLBEntry;
- TLBEntry13 : TLBEntry;
- TLBEntry12 : TLBEntry;
- TLBEntry11 : TLBEntry;
- TLBEntry10 : TLBEntry;
- TLBEntry09 : TLBEntry;
- TLBEntry08 : TLBEntry;
- TLBEntry07 : TLBEntry;
- TLBEntry06 : TLBEntry;
- TLBEntry05 : TLBEntry;
- TLBEntry04 : TLBEntry;
- TLBEntry03 : TLBEntry;
- TLBEntry02 : TLBEntry;
- TLBEntry01 : TLBEntry;
- TLBEntry00 : TLBEntry;
- TLBXContext : XContextReg;
- TLBEntryHi : TLBEntryHiReg;
- TLBWired : mword 6;
- TLBPageMask : mword 16;
- TLBContext : ContextReg;
- TLBEntryLo1 : TLBEntryLoReg;
- TLBEntryLo0 : TLBEntryLoReg;
- TLBRandom : mword 6;
- TLBIndex : mword 6;
- TLBProbe : mword 1;
- nextPC : mword 64;
- PC : mword 64; }.
-Notation "{[ r 'with' 'UART_RVALID' := e ]}" := ({| UART_RVALID := e; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'UART_RDATA' := e ]}" := ({| UART_RDATA := e; UART_RVALID := UART_RVALID r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'UART_WRITTEN' := e ]}" := ({| UART_WRITTEN := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'UART_WDATA' := e ]}" := ({| UART_WDATA := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'GPR' := e ]}" := ({| GPR := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'LO' := e ]}" := ({| LO := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'HI' := e ]}" := ({| HI := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'delayedPC' := e ]}" := ({| delayedPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'inBranchDelay' := e ]}" := ({| inBranchDelay := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'branchPending' := e ]}" := ({| branchPending := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0Status' := e ]}" := ({| CP0Status := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0ConfigK0' := e ]}" := ({| CP0ConfigK0 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0UserLocal' := e ]}" := ({| CP0UserLocal := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0HWREna' := e ]}" := ({| CP0HWREna := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0Count' := e ]}" := ({| CP0Count := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0BadVAddr' := e ]}" := ({| CP0BadVAddr := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0LLAddr' := e ]}" := ({| CP0LLAddr := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0LLBit' := e ]}" := ({| CP0LLBit := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0ErrorEPC' := e ]}" := ({| CP0ErrorEPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0EPC' := e ]}" := ({| CP0EPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0Cause' := e ]}" := ({| CP0Cause := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'CP0Compare' := e ]}" := ({| CP0Compare := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry63' := e ]}" := ({| TLBEntry63 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry62' := e ]}" := ({| TLBEntry62 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry61' := e ]}" := ({| TLBEntry61 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry60' := e ]}" := ({| TLBEntry60 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry59' := e ]}" := ({| TLBEntry59 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry58' := e ]}" := ({| TLBEntry58 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry57' := e ]}" := ({| TLBEntry57 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry56' := e ]}" := ({| TLBEntry56 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry55' := e ]}" := ({| TLBEntry55 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry54' := e ]}" := ({| TLBEntry54 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry53' := e ]}" := ({| TLBEntry53 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry52' := e ]}" := ({| TLBEntry52 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry51' := e ]}" := ({| TLBEntry51 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry50' := e ]}" := ({| TLBEntry50 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry49' := e ]}" := ({| TLBEntry49 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry48' := e ]}" := ({| TLBEntry48 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry47' := e ]}" := ({| TLBEntry47 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry46' := e ]}" := ({| TLBEntry46 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry45' := e ]}" := ({| TLBEntry45 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry44' := e ]}" := ({| TLBEntry44 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry43' := e ]}" := ({| TLBEntry43 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry42' := e ]}" := ({| TLBEntry42 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry41' := e ]}" := ({| TLBEntry41 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry40' := e ]}" := ({| TLBEntry40 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry39' := e ]}" := ({| TLBEntry39 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry38' := e ]}" := ({| TLBEntry38 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry37' := e ]}" := ({| TLBEntry37 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry36' := e ]}" := ({| TLBEntry36 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry35' := e ]}" := ({| TLBEntry35 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry34' := e ]}" := ({| TLBEntry34 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry33' := e ]}" := ({| TLBEntry33 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry32' := e ]}" := ({| TLBEntry32 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry31' := e ]}" := ({| TLBEntry31 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry30' := e ]}" := ({| TLBEntry30 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry29' := e ]}" := ({| TLBEntry29 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry28' := e ]}" := ({| TLBEntry28 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry27' := e ]}" := ({| TLBEntry27 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry26' := e ]}" := ({| TLBEntry26 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry25' := e ]}" := ({| TLBEntry25 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry24' := e ]}" := ({| TLBEntry24 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry23' := e ]}" := ({| TLBEntry23 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry22' := e ]}" := ({| TLBEntry22 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry21' := e ]}" := ({| TLBEntry21 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry20' := e ]}" := ({| TLBEntry20 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry19' := e ]}" := ({| TLBEntry19 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry18' := e ]}" := ({| TLBEntry18 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry17' := e ]}" := ({| TLBEntry17 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry16' := e ]}" := ({| TLBEntry16 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry15' := e ]}" := ({| TLBEntry15 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry14' := e ]}" := ({| TLBEntry14 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry13' := e ]}" := ({| TLBEntry13 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry12' := e ]}" := ({| TLBEntry12 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry11' := e ]}" := ({| TLBEntry11 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry10' := e ]}" := ({| TLBEntry10 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry09' := e ]}" := ({| TLBEntry09 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry08' := e ]}" := ({| TLBEntry08 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry07' := e ]}" := ({| TLBEntry07 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry06' := e ]}" := ({| TLBEntry06 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry05' := e ]}" := ({| TLBEntry05 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry04' := e ]}" := ({| TLBEntry04 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry03' := e ]}" := ({| TLBEntry03 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry02' := e ]}" := ({| TLBEntry02 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry01' := e ]}" := ({| TLBEntry01 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntry00' := e ]}" := ({| TLBEntry00 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBXContext' := e ]}" := ({| TLBXContext := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntryHi' := e ]}" := ({| TLBEntryHi := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBWired' := e ]}" := ({| TLBWired := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBPageMask' := e ]}" := ({| TLBPageMask := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBContext' := e ]}" := ({| TLBContext := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntryLo1' := e ]}" := ({| TLBEntryLo1 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBEntryLo0' := e ]}" := ({| TLBEntryLo0 := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBRandom' := e ]}" := ({| TLBRandom := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBIndex' := e ]}" := ({| TLBIndex := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBProbe := TLBProbe r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'TLBProbe' := e ]}" := ({| TLBProbe := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; nextPC := nextPC r; PC := PC r |}).
-Notation "{[ r 'with' 'nextPC' := e ]}" := ({| nextPC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; PC := PC r |}).
-Notation "{[ r 'with' 'PC' := e ]}" := ({| PC := e; UART_RVALID := UART_RVALID r; UART_RDATA := UART_RDATA r; UART_WRITTEN := UART_WRITTEN r; UART_WDATA := UART_WDATA r; GPR := GPR r; LO := LO r; HI := HI r; delayedPC := delayedPC r; inBranchDelay := inBranchDelay r; branchPending := branchPending r; CP0Status := CP0Status r; CP0ConfigK0 := CP0ConfigK0 r; CP0UserLocal := CP0UserLocal r; CP0HWREna := CP0HWREna r; CP0Count := CP0Count r; CP0BadVAddr := CP0BadVAddr r; CP0LLAddr := CP0LLAddr r; CP0LLBit := CP0LLBit r; CP0ErrorEPC := CP0ErrorEPC r; CP0EPC := CP0EPC r; CP0Cause := CP0Cause r; CP0Compare := CP0Compare r; TLBEntry63 := TLBEntry63 r; TLBEntry62 := TLBEntry62 r; TLBEntry61 := TLBEntry61 r; TLBEntry60 := TLBEntry60 r; TLBEntry59 := TLBEntry59 r; TLBEntry58 := TLBEntry58 r; TLBEntry57 := TLBEntry57 r; TLBEntry56 := TLBEntry56 r; TLBEntry55 := TLBEntry55 r; TLBEntry54 := TLBEntry54 r; TLBEntry53 := TLBEntry53 r; TLBEntry52 := TLBEntry52 r; TLBEntry51 := TLBEntry51 r; TLBEntry50 := TLBEntry50 r; TLBEntry49 := TLBEntry49 r; TLBEntry48 := TLBEntry48 r; TLBEntry47 := TLBEntry47 r; TLBEntry46 := TLBEntry46 r; TLBEntry45 := TLBEntry45 r; TLBEntry44 := TLBEntry44 r; TLBEntry43 := TLBEntry43 r; TLBEntry42 := TLBEntry42 r; TLBEntry41 := TLBEntry41 r; TLBEntry40 := TLBEntry40 r; TLBEntry39 := TLBEntry39 r; TLBEntry38 := TLBEntry38 r; TLBEntry37 := TLBEntry37 r; TLBEntry36 := TLBEntry36 r; TLBEntry35 := TLBEntry35 r; TLBEntry34 := TLBEntry34 r; TLBEntry33 := TLBEntry33 r; TLBEntry32 := TLBEntry32 r; TLBEntry31 := TLBEntry31 r; TLBEntry30 := TLBEntry30 r; TLBEntry29 := TLBEntry29 r; TLBEntry28 := TLBEntry28 r; TLBEntry27 := TLBEntry27 r; TLBEntry26 := TLBEntry26 r; TLBEntry25 := TLBEntry25 r; TLBEntry24 := TLBEntry24 r; TLBEntry23 := TLBEntry23 r; TLBEntry22 := TLBEntry22 r; TLBEntry21 := TLBEntry21 r; TLBEntry20 := TLBEntry20 r; TLBEntry19 := TLBEntry19 r; TLBEntry18 := TLBEntry18 r; TLBEntry17 := TLBEntry17 r; TLBEntry16 := TLBEntry16 r; TLBEntry15 := TLBEntry15 r; TLBEntry14 := TLBEntry14 r; TLBEntry13 := TLBEntry13 r; TLBEntry12 := TLBEntry12 r; TLBEntry11 := TLBEntry11 r; TLBEntry10 := TLBEntry10 r; TLBEntry09 := TLBEntry09 r; TLBEntry08 := TLBEntry08 r; TLBEntry07 := TLBEntry07 r; TLBEntry06 := TLBEntry06 r; TLBEntry05 := TLBEntry05 r; TLBEntry04 := TLBEntry04 r; TLBEntry03 := TLBEntry03 r; TLBEntry02 := TLBEntry02 r; TLBEntry01 := TLBEntry01 r; TLBEntry00 := TLBEntry00 r; TLBXContext := TLBXContext r; TLBEntryHi := TLBEntryHi r; TLBWired := TLBWired r; TLBPageMask := TLBPageMask r; TLBContext := TLBContext r; TLBEntryLo1 := TLBEntryLo1 r; TLBEntryLo0 := TLBEntryLo0 r; TLBRandom := TLBRandom r; TLBIndex := TLBIndex r; TLBProbe := TLBProbe r; nextPC := nextPC r |}).
-
-
-
-Definition CauseReg_of_regval (merge_var : register_value)
-: option CauseReg :=
- match merge_var with | Regval_CauseReg (v) => Some v | g__13 => None end.
-
-Definition regval_of_CauseReg (v : CauseReg) : register_value := Regval_CauseReg v.
-
-Definition ContextReg_of_regval (merge_var : register_value)
-: option ContextReg :=
- match merge_var with | Regval_ContextReg (v) => Some v | g__12 => None end.
-
-Definition regval_of_ContextReg (v : ContextReg) : register_value := Regval_ContextReg v.
-
-Definition StatusReg_of_regval (merge_var : register_value)
-: option StatusReg :=
- match merge_var with | Regval_StatusReg (v) => Some v | g__11 => None end.
-
-Definition regval_of_StatusReg (v : StatusReg) : register_value := Regval_StatusReg v.
-
-Definition TLBEntry_of_regval (merge_var : register_value)
-: option TLBEntry :=
- match merge_var with | Regval_TLBEntry (v) => Some v | g__10 => None end.
-
-Definition regval_of_TLBEntry (v : TLBEntry) : register_value := Regval_TLBEntry v.
-
-Definition TLBEntryHiReg_of_regval (merge_var : register_value)
-: option TLBEntryHiReg :=
- match merge_var with | Regval_TLBEntryHiReg (v) => Some v | g__9 => None end.
-
-Definition regval_of_TLBEntryHiReg (v : TLBEntryHiReg) : register_value := Regval_TLBEntryHiReg v.
-
-Definition TLBEntryLoReg_of_regval (merge_var : register_value)
-: option TLBEntryLoReg :=
- match merge_var with | Regval_TLBEntryLoReg (v) => Some v | g__8 => None end.
-
-Definition regval_of_TLBEntryLoReg (v : TLBEntryLoReg) : register_value := Regval_TLBEntryLoReg v.
-
-Definition XContextReg_of_regval (merge_var : register_value)
-: option XContextReg :=
- match merge_var with | Regval_XContextReg (v) => Some v | g__7 => None end.
-
-Definition regval_of_XContextReg (v : XContextReg) : register_value := Regval_XContextReg v.
-
-Definition vector_16_dec_bit_of_regval (merge_var : register_value)
-: option (mword 16) :=
- match merge_var with | Regval_vector_16_dec_bit (v) => Some v | g__6 => None end.
-
-Definition regval_of_vector_16_dec_bit (v : mword 16)
-: register_value :=
- Regval_vector_16_dec_bit v.
-
-Definition vector_1_dec_bit_of_regval (merge_var : register_value)
-: option (mword 1) :=
- match merge_var with | Regval_vector_1_dec_bit (v) => Some v | g__5 => None end.
-
-Definition regval_of_vector_1_dec_bit (v : mword 1) : register_value := Regval_vector_1_dec_bit v.
-
-Definition vector_32_dec_bit_of_regval (merge_var : register_value)
-: option (mword 32) :=
- match merge_var with | Regval_vector_32_dec_bit (v) => Some v | g__4 => None end.
-
-Definition regval_of_vector_32_dec_bit (v : mword 32)
-: register_value :=
- Regval_vector_32_dec_bit v.
-
-Definition vector_3_dec_bit_of_regval (merge_var : register_value)
-: option (mword 3) :=
- match merge_var with | Regval_vector_3_dec_bit (v) => Some v | g__3 => None end.
-
-Definition regval_of_vector_3_dec_bit (v : mword 3) : register_value := Regval_vector_3_dec_bit v.
-
-Definition vector_64_dec_bit_of_regval (merge_var : register_value)
-: option (mword 64) :=
- match merge_var with | Regval_vector_64_dec_bit (v) => Some v | g__2 => None end.
-
-Definition regval_of_vector_64_dec_bit (v : mword 64)
-: register_value :=
- Regval_vector_64_dec_bit v.
-
-Definition vector_6_dec_bit_of_regval (merge_var : register_value)
-: option (mword 6) :=
- match merge_var with | Regval_vector_6_dec_bit (v) => Some v | g__1 => None end.
-
-Definition regval_of_vector_6_dec_bit (v : mword 6) : register_value := Regval_vector_6_dec_bit v.
-
-Definition vector_8_dec_bit_of_regval (merge_var : register_value)
-: option (mword 8) :=
- match merge_var with | Regval_vector_8_dec_bit (v) => Some v | g__0 => None end.
-
-Definition regval_of_vector_8_dec_bit (v : mword 8) : register_value := Regval_vector_8_dec_bit v.
-
-
-
-Definition vector_of_regval {a} n (of_regval : register_value -> option a) (rv : register_value) : option (vec a n) := match rv with
- | Regval_vector (n', _, v) => if n =? n' then map_bind (vec_of_list n) (just_list (List.map of_regval v)) else None
- | _ => None
-end.
-
-Definition regval_of_vector {a} (regval_of : a -> register_value) (size : Z) (is_inc : bool) (xs : vec a size) : register_value := Regval_vector (size, is_inc, List.map regval_of (list_of_vec xs)).
-
-Definition list_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (list a) := match rv with
- | Regval_list v => just_list (List.map of_regval v)
- | _ => None
-end.
-
-Definition regval_of_list {a} (regval_of : a -> register_value) (xs : list a) : register_value := Regval_list (List.map regval_of xs).
-
-Definition option_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (option a) := match rv with
- | Regval_option v => option_map of_regval v
- | _ => None
-end.
-
-Definition regval_of_option {a} (regval_of : a -> register_value) (v : option a) := Regval_option (option_map regval_of v).
-
-
-Definition UART_RVALID_ref := {|
- name := "UART_RVALID";
- read_from := (fun s => s.(UART_RVALID));
- write_to := (fun v s => ({[ s with UART_RVALID := v ]}));
- of_regval := (fun v => vector_1_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
-
-Definition UART_RDATA_ref := {|
- name := "UART_RDATA";
- read_from := (fun s => s.(UART_RDATA));
- write_to := (fun v s => ({[ s with UART_RDATA := v ]}));
- of_regval := (fun v => vector_8_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_8_dec_bit v) |}.
-
-Definition UART_WRITTEN_ref := {|
- name := "UART_WRITTEN";
- read_from := (fun s => s.(UART_WRITTEN));
- write_to := (fun v s => ({[ s with UART_WRITTEN := v ]}));
- of_regval := (fun v => vector_1_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
-
-Definition UART_WDATA_ref := {|
- name := "UART_WDATA";
- read_from := (fun s => s.(UART_WDATA));
- write_to := (fun v s => ({[ s with UART_WDATA := v ]}));
- of_regval := (fun v => vector_8_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_8_dec_bit v) |}.
-
-Definition GPR_ref := {|
- name := "GPR";
- read_from := (fun s => s.(GPR));
- write_to := (fun v s => ({[ s with GPR := v ]}));
- of_regval := (fun v => vector_of_regval 32 (fun v => vector_64_dec_bit_of_regval v) v);
- regval_of := (fun v => regval_of_vector (fun v => regval_of_vector_64_dec_bit v) 32 false v) |}.
-
-Definition LO_ref := {|
- name := "LO";
- read_from := (fun s => s.(LO));
- write_to := (fun v s => ({[ s with LO := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition HI_ref := {|
- name := "HI";
- read_from := (fun s => s.(HI));
- write_to := (fun v s => ({[ s with HI := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition delayedPC_ref := {|
- name := "delayedPC";
- read_from := (fun s => s.(delayedPC));
- write_to := (fun v s => ({[ s with delayedPC := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition inBranchDelay_ref := {|
- name := "inBranchDelay";
- read_from := (fun s => s.(inBranchDelay));
- write_to := (fun v s => ({[ s with inBranchDelay := v ]}));
- of_regval := (fun v => vector_1_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
-
-Definition branchPending_ref := {|
- name := "branchPending";
- read_from := (fun s => s.(branchPending));
- write_to := (fun v s => ({[ s with branchPending := v ]}));
- of_regval := (fun v => vector_1_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
-
-Definition CP0Status_ref := {|
- name := "CP0Status";
- read_from := (fun s => s.(CP0Status));
- write_to := (fun v s => ({[ s with CP0Status := v ]}));
- of_regval := (fun v => StatusReg_of_regval v);
- regval_of := (fun v => regval_of_StatusReg v) |}.
-
-Definition CP0ConfigK0_ref := {|
- name := "CP0ConfigK0";
- read_from := (fun s => s.(CP0ConfigK0));
- write_to := (fun v s => ({[ s with CP0ConfigK0 := v ]}));
- of_regval := (fun v => vector_3_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_3_dec_bit v) |}.
-
-Definition CP0UserLocal_ref := {|
- name := "CP0UserLocal";
- read_from := (fun s => s.(CP0UserLocal));
- write_to := (fun v s => ({[ s with CP0UserLocal := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition CP0HWREna_ref := {|
- name := "CP0HWREna";
- read_from := (fun s => s.(CP0HWREna));
- write_to := (fun v s => ({[ s with CP0HWREna := v ]}));
- of_regval := (fun v => vector_32_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
-
-Definition CP0Count_ref := {|
- name := "CP0Count";
- read_from := (fun s => s.(CP0Count));
- write_to := (fun v s => ({[ s with CP0Count := v ]}));
- of_regval := (fun v => vector_32_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
-
-Definition CP0BadVAddr_ref := {|
- name := "CP0BadVAddr";
- read_from := (fun s => s.(CP0BadVAddr));
- write_to := (fun v s => ({[ s with CP0BadVAddr := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition CP0LLAddr_ref := {|
- name := "CP0LLAddr";
- read_from := (fun s => s.(CP0LLAddr));
- write_to := (fun v s => ({[ s with CP0LLAddr := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition CP0LLBit_ref := {|
- name := "CP0LLBit";
- read_from := (fun s => s.(CP0LLBit));
- write_to := (fun v s => ({[ s with CP0LLBit := v ]}));
- of_regval := (fun v => vector_1_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
-
-Definition CP0ErrorEPC_ref := {|
- name := "CP0ErrorEPC";
- read_from := (fun s => s.(CP0ErrorEPC));
- write_to := (fun v s => ({[ s with CP0ErrorEPC := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition CP0EPC_ref := {|
- name := "CP0EPC";
- read_from := (fun s => s.(CP0EPC));
- write_to := (fun v s => ({[ s with CP0EPC := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition CP0Cause_ref := {|
- name := "CP0Cause";
- read_from := (fun s => s.(CP0Cause));
- write_to := (fun v s => ({[ s with CP0Cause := v ]}));
- of_regval := (fun v => CauseReg_of_regval v);
- regval_of := (fun v => regval_of_CauseReg v) |}.
-
-Definition CP0Compare_ref := {|
- name := "CP0Compare";
- read_from := (fun s => s.(CP0Compare));
- write_to := (fun v s => ({[ s with CP0Compare := v ]}));
- of_regval := (fun v => vector_32_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_32_dec_bit v) |}.
-
-Definition TLBEntry63_ref := {|
- name := "TLBEntry63";
- read_from := (fun s => s.(TLBEntry63));
- write_to := (fun v s => ({[ s with TLBEntry63 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry62_ref := {|
- name := "TLBEntry62";
- read_from := (fun s => s.(TLBEntry62));
- write_to := (fun v s => ({[ s with TLBEntry62 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry61_ref := {|
- name := "TLBEntry61";
- read_from := (fun s => s.(TLBEntry61));
- write_to := (fun v s => ({[ s with TLBEntry61 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry60_ref := {|
- name := "TLBEntry60";
- read_from := (fun s => s.(TLBEntry60));
- write_to := (fun v s => ({[ s with TLBEntry60 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry59_ref := {|
- name := "TLBEntry59";
- read_from := (fun s => s.(TLBEntry59));
- write_to := (fun v s => ({[ s with TLBEntry59 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry58_ref := {|
- name := "TLBEntry58";
- read_from := (fun s => s.(TLBEntry58));
- write_to := (fun v s => ({[ s with TLBEntry58 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry57_ref := {|
- name := "TLBEntry57";
- read_from := (fun s => s.(TLBEntry57));
- write_to := (fun v s => ({[ s with TLBEntry57 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry56_ref := {|
- name := "TLBEntry56";
- read_from := (fun s => s.(TLBEntry56));
- write_to := (fun v s => ({[ s with TLBEntry56 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry55_ref := {|
- name := "TLBEntry55";
- read_from := (fun s => s.(TLBEntry55));
- write_to := (fun v s => ({[ s with TLBEntry55 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry54_ref := {|
- name := "TLBEntry54";
- read_from := (fun s => s.(TLBEntry54));
- write_to := (fun v s => ({[ s with TLBEntry54 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry53_ref := {|
- name := "TLBEntry53";
- read_from := (fun s => s.(TLBEntry53));
- write_to := (fun v s => ({[ s with TLBEntry53 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry52_ref := {|
- name := "TLBEntry52";
- read_from := (fun s => s.(TLBEntry52));
- write_to := (fun v s => ({[ s with TLBEntry52 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry51_ref := {|
- name := "TLBEntry51";
- read_from := (fun s => s.(TLBEntry51));
- write_to := (fun v s => ({[ s with TLBEntry51 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry50_ref := {|
- name := "TLBEntry50";
- read_from := (fun s => s.(TLBEntry50));
- write_to := (fun v s => ({[ s with TLBEntry50 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry49_ref := {|
- name := "TLBEntry49";
- read_from := (fun s => s.(TLBEntry49));
- write_to := (fun v s => ({[ s with TLBEntry49 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry48_ref := {|
- name := "TLBEntry48";
- read_from := (fun s => s.(TLBEntry48));
- write_to := (fun v s => ({[ s with TLBEntry48 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry47_ref := {|
- name := "TLBEntry47";
- read_from := (fun s => s.(TLBEntry47));
- write_to := (fun v s => ({[ s with TLBEntry47 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry46_ref := {|
- name := "TLBEntry46";
- read_from := (fun s => s.(TLBEntry46));
- write_to := (fun v s => ({[ s with TLBEntry46 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry45_ref := {|
- name := "TLBEntry45";
- read_from := (fun s => s.(TLBEntry45));
- write_to := (fun v s => ({[ s with TLBEntry45 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry44_ref := {|
- name := "TLBEntry44";
- read_from := (fun s => s.(TLBEntry44));
- write_to := (fun v s => ({[ s with TLBEntry44 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry43_ref := {|
- name := "TLBEntry43";
- read_from := (fun s => s.(TLBEntry43));
- write_to := (fun v s => ({[ s with TLBEntry43 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry42_ref := {|
- name := "TLBEntry42";
- read_from := (fun s => s.(TLBEntry42));
- write_to := (fun v s => ({[ s with TLBEntry42 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry41_ref := {|
- name := "TLBEntry41";
- read_from := (fun s => s.(TLBEntry41));
- write_to := (fun v s => ({[ s with TLBEntry41 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry40_ref := {|
- name := "TLBEntry40";
- read_from := (fun s => s.(TLBEntry40));
- write_to := (fun v s => ({[ s with TLBEntry40 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry39_ref := {|
- name := "TLBEntry39";
- read_from := (fun s => s.(TLBEntry39));
- write_to := (fun v s => ({[ s with TLBEntry39 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry38_ref := {|
- name := "TLBEntry38";
- read_from := (fun s => s.(TLBEntry38));
- write_to := (fun v s => ({[ s with TLBEntry38 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry37_ref := {|
- name := "TLBEntry37";
- read_from := (fun s => s.(TLBEntry37));
- write_to := (fun v s => ({[ s with TLBEntry37 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry36_ref := {|
- name := "TLBEntry36";
- read_from := (fun s => s.(TLBEntry36));
- write_to := (fun v s => ({[ s with TLBEntry36 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry35_ref := {|
- name := "TLBEntry35";
- read_from := (fun s => s.(TLBEntry35));
- write_to := (fun v s => ({[ s with TLBEntry35 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry34_ref := {|
- name := "TLBEntry34";
- read_from := (fun s => s.(TLBEntry34));
- write_to := (fun v s => ({[ s with TLBEntry34 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry33_ref := {|
- name := "TLBEntry33";
- read_from := (fun s => s.(TLBEntry33));
- write_to := (fun v s => ({[ s with TLBEntry33 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry32_ref := {|
- name := "TLBEntry32";
- read_from := (fun s => s.(TLBEntry32));
- write_to := (fun v s => ({[ s with TLBEntry32 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry31_ref := {|
- name := "TLBEntry31";
- read_from := (fun s => s.(TLBEntry31));
- write_to := (fun v s => ({[ s with TLBEntry31 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry30_ref := {|
- name := "TLBEntry30";
- read_from := (fun s => s.(TLBEntry30));
- write_to := (fun v s => ({[ s with TLBEntry30 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry29_ref := {|
- name := "TLBEntry29";
- read_from := (fun s => s.(TLBEntry29));
- write_to := (fun v s => ({[ s with TLBEntry29 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry28_ref := {|
- name := "TLBEntry28";
- read_from := (fun s => s.(TLBEntry28));
- write_to := (fun v s => ({[ s with TLBEntry28 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry27_ref := {|
- name := "TLBEntry27";
- read_from := (fun s => s.(TLBEntry27));
- write_to := (fun v s => ({[ s with TLBEntry27 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry26_ref := {|
- name := "TLBEntry26";
- read_from := (fun s => s.(TLBEntry26));
- write_to := (fun v s => ({[ s with TLBEntry26 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry25_ref := {|
- name := "TLBEntry25";
- read_from := (fun s => s.(TLBEntry25));
- write_to := (fun v s => ({[ s with TLBEntry25 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry24_ref := {|
- name := "TLBEntry24";
- read_from := (fun s => s.(TLBEntry24));
- write_to := (fun v s => ({[ s with TLBEntry24 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry23_ref := {|
- name := "TLBEntry23";
- read_from := (fun s => s.(TLBEntry23));
- write_to := (fun v s => ({[ s with TLBEntry23 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry22_ref := {|
- name := "TLBEntry22";
- read_from := (fun s => s.(TLBEntry22));
- write_to := (fun v s => ({[ s with TLBEntry22 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry21_ref := {|
- name := "TLBEntry21";
- read_from := (fun s => s.(TLBEntry21));
- write_to := (fun v s => ({[ s with TLBEntry21 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry20_ref := {|
- name := "TLBEntry20";
- read_from := (fun s => s.(TLBEntry20));
- write_to := (fun v s => ({[ s with TLBEntry20 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry19_ref := {|
- name := "TLBEntry19";
- read_from := (fun s => s.(TLBEntry19));
- write_to := (fun v s => ({[ s with TLBEntry19 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry18_ref := {|
- name := "TLBEntry18";
- read_from := (fun s => s.(TLBEntry18));
- write_to := (fun v s => ({[ s with TLBEntry18 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry17_ref := {|
- name := "TLBEntry17";
- read_from := (fun s => s.(TLBEntry17));
- write_to := (fun v s => ({[ s with TLBEntry17 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry16_ref := {|
- name := "TLBEntry16";
- read_from := (fun s => s.(TLBEntry16));
- write_to := (fun v s => ({[ s with TLBEntry16 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry15_ref := {|
- name := "TLBEntry15";
- read_from := (fun s => s.(TLBEntry15));
- write_to := (fun v s => ({[ s with TLBEntry15 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry14_ref := {|
- name := "TLBEntry14";
- read_from := (fun s => s.(TLBEntry14));
- write_to := (fun v s => ({[ s with TLBEntry14 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry13_ref := {|
- name := "TLBEntry13";
- read_from := (fun s => s.(TLBEntry13));
- write_to := (fun v s => ({[ s with TLBEntry13 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry12_ref := {|
- name := "TLBEntry12";
- read_from := (fun s => s.(TLBEntry12));
- write_to := (fun v s => ({[ s with TLBEntry12 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry11_ref := {|
- name := "TLBEntry11";
- read_from := (fun s => s.(TLBEntry11));
- write_to := (fun v s => ({[ s with TLBEntry11 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry10_ref := {|
- name := "TLBEntry10";
- read_from := (fun s => s.(TLBEntry10));
- write_to := (fun v s => ({[ s with TLBEntry10 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry09_ref := {|
- name := "TLBEntry09";
- read_from := (fun s => s.(TLBEntry09));
- write_to := (fun v s => ({[ s with TLBEntry09 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry08_ref := {|
- name := "TLBEntry08";
- read_from := (fun s => s.(TLBEntry08));
- write_to := (fun v s => ({[ s with TLBEntry08 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry07_ref := {|
- name := "TLBEntry07";
- read_from := (fun s => s.(TLBEntry07));
- write_to := (fun v s => ({[ s with TLBEntry07 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry06_ref := {|
- name := "TLBEntry06";
- read_from := (fun s => s.(TLBEntry06));
- write_to := (fun v s => ({[ s with TLBEntry06 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry05_ref := {|
- name := "TLBEntry05";
- read_from := (fun s => s.(TLBEntry05));
- write_to := (fun v s => ({[ s with TLBEntry05 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry04_ref := {|
- name := "TLBEntry04";
- read_from := (fun s => s.(TLBEntry04));
- write_to := (fun v s => ({[ s with TLBEntry04 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry03_ref := {|
- name := "TLBEntry03";
- read_from := (fun s => s.(TLBEntry03));
- write_to := (fun v s => ({[ s with TLBEntry03 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry02_ref := {|
- name := "TLBEntry02";
- read_from := (fun s => s.(TLBEntry02));
- write_to := (fun v s => ({[ s with TLBEntry02 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry01_ref := {|
- name := "TLBEntry01";
- read_from := (fun s => s.(TLBEntry01));
- write_to := (fun v s => ({[ s with TLBEntry01 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBEntry00_ref := {|
- name := "TLBEntry00";
- read_from := (fun s => s.(TLBEntry00));
- write_to := (fun v s => ({[ s with TLBEntry00 := v ]}));
- of_regval := (fun v => TLBEntry_of_regval v);
- regval_of := (fun v => regval_of_TLBEntry v) |}.
-
-Definition TLBXContext_ref := {|
- name := "TLBXContext";
- read_from := (fun s => s.(TLBXContext));
- write_to := (fun v s => ({[ s with TLBXContext := v ]}));
- of_regval := (fun v => XContextReg_of_regval v);
- regval_of := (fun v => regval_of_XContextReg v) |}.
-
-Definition TLBEntryHi_ref := {|
- name := "TLBEntryHi";
- read_from := (fun s => s.(TLBEntryHi));
- write_to := (fun v s => ({[ s with TLBEntryHi := v ]}));
- of_regval := (fun v => TLBEntryHiReg_of_regval v);
- regval_of := (fun v => regval_of_TLBEntryHiReg v) |}.
-
-Definition TLBWired_ref := {|
- name := "TLBWired";
- read_from := (fun s => s.(TLBWired));
- write_to := (fun v s => ({[ s with TLBWired := v ]}));
- of_regval := (fun v => vector_6_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
-
-Definition TLBPageMask_ref := {|
- name := "TLBPageMask";
- read_from := (fun s => s.(TLBPageMask));
- write_to := (fun v s => ({[ s with TLBPageMask := v ]}));
- of_regval := (fun v => vector_16_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_16_dec_bit v) |}.
-
-Definition TLBContext_ref := {|
- name := "TLBContext";
- read_from := (fun s => s.(TLBContext));
- write_to := (fun v s => ({[ s with TLBContext := v ]}));
- of_regval := (fun v => ContextReg_of_regval v);
- regval_of := (fun v => regval_of_ContextReg v) |}.
-
-Definition TLBEntryLo1_ref := {|
- name := "TLBEntryLo1";
- read_from := (fun s => s.(TLBEntryLo1));
- write_to := (fun v s => ({[ s with TLBEntryLo1 := v ]}));
- of_regval := (fun v => TLBEntryLoReg_of_regval v);
- regval_of := (fun v => regval_of_TLBEntryLoReg v) |}.
-
-Definition TLBEntryLo0_ref := {|
- name := "TLBEntryLo0";
- read_from := (fun s => s.(TLBEntryLo0));
- write_to := (fun v s => ({[ s with TLBEntryLo0 := v ]}));
- of_regval := (fun v => TLBEntryLoReg_of_regval v);
- regval_of := (fun v => regval_of_TLBEntryLoReg v) |}.
-
-Definition TLBRandom_ref := {|
- name := "TLBRandom";
- read_from := (fun s => s.(TLBRandom));
- write_to := (fun v s => ({[ s with TLBRandom := v ]}));
- of_regval := (fun v => vector_6_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
-
-Definition TLBIndex_ref := {|
- name := "TLBIndex";
- read_from := (fun s => s.(TLBIndex));
- write_to := (fun v s => ({[ s with TLBIndex := v ]}));
- of_regval := (fun v => vector_6_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_6_dec_bit v) |}.
-
-Definition TLBProbe_ref := {|
- name := "TLBProbe";
- read_from := (fun s => s.(TLBProbe));
- write_to := (fun v s => ({[ s with TLBProbe := v ]}));
- of_regval := (fun v => vector_1_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_1_dec_bit v) |}.
-
-Definition nextPC_ref := {|
- name := "nextPC";
- read_from := (fun s => s.(nextPC));
- write_to := (fun v s => ({[ s with nextPC := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Definition PC_ref := {|
- name := "PC";
- read_from := (fun s => s.(PC));
- write_to := (fun v s => ({[ s with PC := v ]}));
- of_regval := (fun v => vector_64_dec_bit_of_regval v);
- regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
-
-Local Open Scope string.
-Definition get_regval (reg_name : string) (s : regstate) : option register_value :=
- if string_dec reg_name "UART_RVALID" then Some (UART_RVALID_ref.(regval_of) (UART_RVALID_ref.(read_from) s)) else
- if string_dec reg_name "UART_RDATA" then Some (UART_RDATA_ref.(regval_of) (UART_RDATA_ref.(read_from) s)) else
- if string_dec reg_name "UART_WRITTEN" then Some (UART_WRITTEN_ref.(regval_of) (UART_WRITTEN_ref.(read_from) s)) else
- if string_dec reg_name "UART_WDATA" then Some (UART_WDATA_ref.(regval_of) (UART_WDATA_ref.(read_from) s)) else
- if string_dec reg_name "GPR" then Some (GPR_ref.(regval_of) (GPR_ref.(read_from) s)) else
- if string_dec reg_name "LO" then Some (LO_ref.(regval_of) (LO_ref.(read_from) s)) else
- if string_dec reg_name "HI" then Some (HI_ref.(regval_of) (HI_ref.(read_from) s)) else
- if string_dec reg_name "delayedPC" then Some (delayedPC_ref.(regval_of) (delayedPC_ref.(read_from) s)) else
- if string_dec reg_name "inBranchDelay" then Some (inBranchDelay_ref.(regval_of) (inBranchDelay_ref.(read_from) s)) else
- if string_dec reg_name "branchPending" then Some (branchPending_ref.(regval_of) (branchPending_ref.(read_from) s)) else
- if string_dec reg_name "CP0Status" then Some (CP0Status_ref.(regval_of) (CP0Status_ref.(read_from) s)) else
- if string_dec reg_name "CP0ConfigK0" then Some (CP0ConfigK0_ref.(regval_of) (CP0ConfigK0_ref.(read_from) s)) else
- if string_dec reg_name "CP0UserLocal" then Some (CP0UserLocal_ref.(regval_of) (CP0UserLocal_ref.(read_from) s)) else
- if string_dec reg_name "CP0HWREna" then Some (CP0HWREna_ref.(regval_of) (CP0HWREna_ref.(read_from) s)) else
- if string_dec reg_name "CP0Count" then Some (CP0Count_ref.(regval_of) (CP0Count_ref.(read_from) s)) else
- if string_dec reg_name "CP0BadVAddr" then Some (CP0BadVAddr_ref.(regval_of) (CP0BadVAddr_ref.(read_from) s)) else
- if string_dec reg_name "CP0LLAddr" then Some (CP0LLAddr_ref.(regval_of) (CP0LLAddr_ref.(read_from) s)) else
- if string_dec reg_name "CP0LLBit" then Some (CP0LLBit_ref.(regval_of) (CP0LLBit_ref.(read_from) s)) else
- if string_dec reg_name "CP0ErrorEPC" then Some (CP0ErrorEPC_ref.(regval_of) (CP0ErrorEPC_ref.(read_from) s)) else
- if string_dec reg_name "CP0EPC" then Some (CP0EPC_ref.(regval_of) (CP0EPC_ref.(read_from) s)) else
- if string_dec reg_name "CP0Cause" then Some (CP0Cause_ref.(regval_of) (CP0Cause_ref.(read_from) s)) else
- if string_dec reg_name "CP0Compare" then Some (CP0Compare_ref.(regval_of) (CP0Compare_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry63" then Some (TLBEntry63_ref.(regval_of) (TLBEntry63_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry62" then Some (TLBEntry62_ref.(regval_of) (TLBEntry62_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry61" then Some (TLBEntry61_ref.(regval_of) (TLBEntry61_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry60" then Some (TLBEntry60_ref.(regval_of) (TLBEntry60_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry59" then Some (TLBEntry59_ref.(regval_of) (TLBEntry59_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry58" then Some (TLBEntry58_ref.(regval_of) (TLBEntry58_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry57" then Some (TLBEntry57_ref.(regval_of) (TLBEntry57_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry56" then Some (TLBEntry56_ref.(regval_of) (TLBEntry56_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry55" then Some (TLBEntry55_ref.(regval_of) (TLBEntry55_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry54" then Some (TLBEntry54_ref.(regval_of) (TLBEntry54_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry53" then Some (TLBEntry53_ref.(regval_of) (TLBEntry53_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry52" then Some (TLBEntry52_ref.(regval_of) (TLBEntry52_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry51" then Some (TLBEntry51_ref.(regval_of) (TLBEntry51_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry50" then Some (TLBEntry50_ref.(regval_of) (TLBEntry50_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry49" then Some (TLBEntry49_ref.(regval_of) (TLBEntry49_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry48" then Some (TLBEntry48_ref.(regval_of) (TLBEntry48_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry47" then Some (TLBEntry47_ref.(regval_of) (TLBEntry47_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry46" then Some (TLBEntry46_ref.(regval_of) (TLBEntry46_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry45" then Some (TLBEntry45_ref.(regval_of) (TLBEntry45_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry44" then Some (TLBEntry44_ref.(regval_of) (TLBEntry44_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry43" then Some (TLBEntry43_ref.(regval_of) (TLBEntry43_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry42" then Some (TLBEntry42_ref.(regval_of) (TLBEntry42_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry41" then Some (TLBEntry41_ref.(regval_of) (TLBEntry41_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry40" then Some (TLBEntry40_ref.(regval_of) (TLBEntry40_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry39" then Some (TLBEntry39_ref.(regval_of) (TLBEntry39_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry38" then Some (TLBEntry38_ref.(regval_of) (TLBEntry38_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry37" then Some (TLBEntry37_ref.(regval_of) (TLBEntry37_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry36" then Some (TLBEntry36_ref.(regval_of) (TLBEntry36_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry35" then Some (TLBEntry35_ref.(regval_of) (TLBEntry35_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry34" then Some (TLBEntry34_ref.(regval_of) (TLBEntry34_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry33" then Some (TLBEntry33_ref.(regval_of) (TLBEntry33_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry32" then Some (TLBEntry32_ref.(regval_of) (TLBEntry32_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry31" then Some (TLBEntry31_ref.(regval_of) (TLBEntry31_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry30" then Some (TLBEntry30_ref.(regval_of) (TLBEntry30_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry29" then Some (TLBEntry29_ref.(regval_of) (TLBEntry29_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry28" then Some (TLBEntry28_ref.(regval_of) (TLBEntry28_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry27" then Some (TLBEntry27_ref.(regval_of) (TLBEntry27_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry26" then Some (TLBEntry26_ref.(regval_of) (TLBEntry26_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry25" then Some (TLBEntry25_ref.(regval_of) (TLBEntry25_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry24" then Some (TLBEntry24_ref.(regval_of) (TLBEntry24_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry23" then Some (TLBEntry23_ref.(regval_of) (TLBEntry23_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry22" then Some (TLBEntry22_ref.(regval_of) (TLBEntry22_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry21" then Some (TLBEntry21_ref.(regval_of) (TLBEntry21_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry20" then Some (TLBEntry20_ref.(regval_of) (TLBEntry20_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry19" then Some (TLBEntry19_ref.(regval_of) (TLBEntry19_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry18" then Some (TLBEntry18_ref.(regval_of) (TLBEntry18_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry17" then Some (TLBEntry17_ref.(regval_of) (TLBEntry17_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry16" then Some (TLBEntry16_ref.(regval_of) (TLBEntry16_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry15" then Some (TLBEntry15_ref.(regval_of) (TLBEntry15_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry14" then Some (TLBEntry14_ref.(regval_of) (TLBEntry14_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry13" then Some (TLBEntry13_ref.(regval_of) (TLBEntry13_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry12" then Some (TLBEntry12_ref.(regval_of) (TLBEntry12_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry11" then Some (TLBEntry11_ref.(regval_of) (TLBEntry11_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry10" then Some (TLBEntry10_ref.(regval_of) (TLBEntry10_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry09" then Some (TLBEntry09_ref.(regval_of) (TLBEntry09_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry08" then Some (TLBEntry08_ref.(regval_of) (TLBEntry08_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry07" then Some (TLBEntry07_ref.(regval_of) (TLBEntry07_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry06" then Some (TLBEntry06_ref.(regval_of) (TLBEntry06_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry05" then Some (TLBEntry05_ref.(regval_of) (TLBEntry05_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry04" then Some (TLBEntry04_ref.(regval_of) (TLBEntry04_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry03" then Some (TLBEntry03_ref.(regval_of) (TLBEntry03_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry02" then Some (TLBEntry02_ref.(regval_of) (TLBEntry02_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry01" then Some (TLBEntry01_ref.(regval_of) (TLBEntry01_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntry00" then Some (TLBEntry00_ref.(regval_of) (TLBEntry00_ref.(read_from) s)) else
- if string_dec reg_name "TLBXContext" then Some (TLBXContext_ref.(regval_of) (TLBXContext_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntryHi" then Some (TLBEntryHi_ref.(regval_of) (TLBEntryHi_ref.(read_from) s)) else
- if string_dec reg_name "TLBWired" then Some (TLBWired_ref.(regval_of) (TLBWired_ref.(read_from) s)) else
- if string_dec reg_name "TLBPageMask" then Some (TLBPageMask_ref.(regval_of) (TLBPageMask_ref.(read_from) s)) else
- if string_dec reg_name "TLBContext" then Some (TLBContext_ref.(regval_of) (TLBContext_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntryLo1" then Some (TLBEntryLo1_ref.(regval_of) (TLBEntryLo1_ref.(read_from) s)) else
- if string_dec reg_name "TLBEntryLo0" then Some (TLBEntryLo0_ref.(regval_of) (TLBEntryLo0_ref.(read_from) s)) else
- if string_dec reg_name "TLBRandom" then Some (TLBRandom_ref.(regval_of) (TLBRandom_ref.(read_from) s)) else
- if string_dec reg_name "TLBIndex" then Some (TLBIndex_ref.(regval_of) (TLBIndex_ref.(read_from) s)) else
- if string_dec reg_name "TLBProbe" then Some (TLBProbe_ref.(regval_of) (TLBProbe_ref.(read_from) s)) else
- if string_dec reg_name "nextPC" then Some (nextPC_ref.(regval_of) (nextPC_ref.(read_from) s)) else
- if string_dec reg_name "PC" then Some (PC_ref.(regval_of) (PC_ref.(read_from) s)) else
- None.
-
-Definition set_regval (reg_name : string) (v : register_value) (s : regstate) : option regstate :=
- if string_dec reg_name "UART_RVALID" then option_map (fun v => UART_RVALID_ref.(write_to) v s) (UART_RVALID_ref.(of_regval) v) else
- if string_dec reg_name "UART_RDATA" then option_map (fun v => UART_RDATA_ref.(write_to) v s) (UART_RDATA_ref.(of_regval) v) else
- if string_dec reg_name "UART_WRITTEN" then option_map (fun v => UART_WRITTEN_ref.(write_to) v s) (UART_WRITTEN_ref.(of_regval) v) else
- if string_dec reg_name "UART_WDATA" then option_map (fun v => UART_WDATA_ref.(write_to) v s) (UART_WDATA_ref.(of_regval) v) else
- if string_dec reg_name "GPR" then option_map (fun v => GPR_ref.(write_to) v s) (GPR_ref.(of_regval) v) else
- if string_dec reg_name "LO" then option_map (fun v => LO_ref.(write_to) v s) (LO_ref.(of_regval) v) else
- if string_dec reg_name "HI" then option_map (fun v => HI_ref.(write_to) v s) (HI_ref.(of_regval) v) else
- if string_dec reg_name "delayedPC" then option_map (fun v => delayedPC_ref.(write_to) v s) (delayedPC_ref.(of_regval) v) else
- if string_dec reg_name "inBranchDelay" then option_map (fun v => inBranchDelay_ref.(write_to) v s) (inBranchDelay_ref.(of_regval) v) else
- if string_dec reg_name "branchPending" then option_map (fun v => branchPending_ref.(write_to) v s) (branchPending_ref.(of_regval) v) else
- if string_dec reg_name "CP0Status" then option_map (fun v => CP0Status_ref.(write_to) v s) (CP0Status_ref.(of_regval) v) else
- if string_dec reg_name "CP0ConfigK0" then option_map (fun v => CP0ConfigK0_ref.(write_to) v s) (CP0ConfigK0_ref.(of_regval) v) else
- if string_dec reg_name "CP0UserLocal" then option_map (fun v => CP0UserLocal_ref.(write_to) v s) (CP0UserLocal_ref.(of_regval) v) else
- if string_dec reg_name "CP0HWREna" then option_map (fun v => CP0HWREna_ref.(write_to) v s) (CP0HWREna_ref.(of_regval) v) else
- if string_dec reg_name "CP0Count" then option_map (fun v => CP0Count_ref.(write_to) v s) (CP0Count_ref.(of_regval) v) else
- if string_dec reg_name "CP0BadVAddr" then option_map (fun v => CP0BadVAddr_ref.(write_to) v s) (CP0BadVAddr_ref.(of_regval) v) else
- if string_dec reg_name "CP0LLAddr" then option_map (fun v => CP0LLAddr_ref.(write_to) v s) (CP0LLAddr_ref.(of_regval) v) else
- if string_dec reg_name "CP0LLBit" then option_map (fun v => CP0LLBit_ref.(write_to) v s) (CP0LLBit_ref.(of_regval) v) else
- if string_dec reg_name "CP0ErrorEPC" then option_map (fun v => CP0ErrorEPC_ref.(write_to) v s) (CP0ErrorEPC_ref.(of_regval) v) else
- if string_dec reg_name "CP0EPC" then option_map (fun v => CP0EPC_ref.(write_to) v s) (CP0EPC_ref.(of_regval) v) else
- if string_dec reg_name "CP0Cause" then option_map (fun v => CP0Cause_ref.(write_to) v s) (CP0Cause_ref.(of_regval) v) else
- if string_dec reg_name "CP0Compare" then option_map (fun v => CP0Compare_ref.(write_to) v s) (CP0Compare_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry63" then option_map (fun v => TLBEntry63_ref.(write_to) v s) (TLBEntry63_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry62" then option_map (fun v => TLBEntry62_ref.(write_to) v s) (TLBEntry62_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry61" then option_map (fun v => TLBEntry61_ref.(write_to) v s) (TLBEntry61_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry60" then option_map (fun v => TLBEntry60_ref.(write_to) v s) (TLBEntry60_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry59" then option_map (fun v => TLBEntry59_ref.(write_to) v s) (TLBEntry59_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry58" then option_map (fun v => TLBEntry58_ref.(write_to) v s) (TLBEntry58_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry57" then option_map (fun v => TLBEntry57_ref.(write_to) v s) (TLBEntry57_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry56" then option_map (fun v => TLBEntry56_ref.(write_to) v s) (TLBEntry56_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry55" then option_map (fun v => TLBEntry55_ref.(write_to) v s) (TLBEntry55_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry54" then option_map (fun v => TLBEntry54_ref.(write_to) v s) (TLBEntry54_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry53" then option_map (fun v => TLBEntry53_ref.(write_to) v s) (TLBEntry53_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry52" then option_map (fun v => TLBEntry52_ref.(write_to) v s) (TLBEntry52_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry51" then option_map (fun v => TLBEntry51_ref.(write_to) v s) (TLBEntry51_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry50" then option_map (fun v => TLBEntry50_ref.(write_to) v s) (TLBEntry50_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry49" then option_map (fun v => TLBEntry49_ref.(write_to) v s) (TLBEntry49_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry48" then option_map (fun v => TLBEntry48_ref.(write_to) v s) (TLBEntry48_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry47" then option_map (fun v => TLBEntry47_ref.(write_to) v s) (TLBEntry47_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry46" then option_map (fun v => TLBEntry46_ref.(write_to) v s) (TLBEntry46_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry45" then option_map (fun v => TLBEntry45_ref.(write_to) v s) (TLBEntry45_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry44" then option_map (fun v => TLBEntry44_ref.(write_to) v s) (TLBEntry44_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry43" then option_map (fun v => TLBEntry43_ref.(write_to) v s) (TLBEntry43_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry42" then option_map (fun v => TLBEntry42_ref.(write_to) v s) (TLBEntry42_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry41" then option_map (fun v => TLBEntry41_ref.(write_to) v s) (TLBEntry41_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry40" then option_map (fun v => TLBEntry40_ref.(write_to) v s) (TLBEntry40_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry39" then option_map (fun v => TLBEntry39_ref.(write_to) v s) (TLBEntry39_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry38" then option_map (fun v => TLBEntry38_ref.(write_to) v s) (TLBEntry38_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry37" then option_map (fun v => TLBEntry37_ref.(write_to) v s) (TLBEntry37_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry36" then option_map (fun v => TLBEntry36_ref.(write_to) v s) (TLBEntry36_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry35" then option_map (fun v => TLBEntry35_ref.(write_to) v s) (TLBEntry35_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry34" then option_map (fun v => TLBEntry34_ref.(write_to) v s) (TLBEntry34_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry33" then option_map (fun v => TLBEntry33_ref.(write_to) v s) (TLBEntry33_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry32" then option_map (fun v => TLBEntry32_ref.(write_to) v s) (TLBEntry32_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry31" then option_map (fun v => TLBEntry31_ref.(write_to) v s) (TLBEntry31_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry30" then option_map (fun v => TLBEntry30_ref.(write_to) v s) (TLBEntry30_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry29" then option_map (fun v => TLBEntry29_ref.(write_to) v s) (TLBEntry29_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry28" then option_map (fun v => TLBEntry28_ref.(write_to) v s) (TLBEntry28_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry27" then option_map (fun v => TLBEntry27_ref.(write_to) v s) (TLBEntry27_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry26" then option_map (fun v => TLBEntry26_ref.(write_to) v s) (TLBEntry26_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry25" then option_map (fun v => TLBEntry25_ref.(write_to) v s) (TLBEntry25_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry24" then option_map (fun v => TLBEntry24_ref.(write_to) v s) (TLBEntry24_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry23" then option_map (fun v => TLBEntry23_ref.(write_to) v s) (TLBEntry23_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry22" then option_map (fun v => TLBEntry22_ref.(write_to) v s) (TLBEntry22_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry21" then option_map (fun v => TLBEntry21_ref.(write_to) v s) (TLBEntry21_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry20" then option_map (fun v => TLBEntry20_ref.(write_to) v s) (TLBEntry20_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry19" then option_map (fun v => TLBEntry19_ref.(write_to) v s) (TLBEntry19_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry18" then option_map (fun v => TLBEntry18_ref.(write_to) v s) (TLBEntry18_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry17" then option_map (fun v => TLBEntry17_ref.(write_to) v s) (TLBEntry17_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry16" then option_map (fun v => TLBEntry16_ref.(write_to) v s) (TLBEntry16_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry15" then option_map (fun v => TLBEntry15_ref.(write_to) v s) (TLBEntry15_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry14" then option_map (fun v => TLBEntry14_ref.(write_to) v s) (TLBEntry14_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry13" then option_map (fun v => TLBEntry13_ref.(write_to) v s) (TLBEntry13_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry12" then option_map (fun v => TLBEntry12_ref.(write_to) v s) (TLBEntry12_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry11" then option_map (fun v => TLBEntry11_ref.(write_to) v s) (TLBEntry11_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry10" then option_map (fun v => TLBEntry10_ref.(write_to) v s) (TLBEntry10_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry09" then option_map (fun v => TLBEntry09_ref.(write_to) v s) (TLBEntry09_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry08" then option_map (fun v => TLBEntry08_ref.(write_to) v s) (TLBEntry08_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry07" then option_map (fun v => TLBEntry07_ref.(write_to) v s) (TLBEntry07_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry06" then option_map (fun v => TLBEntry06_ref.(write_to) v s) (TLBEntry06_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry05" then option_map (fun v => TLBEntry05_ref.(write_to) v s) (TLBEntry05_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry04" then option_map (fun v => TLBEntry04_ref.(write_to) v s) (TLBEntry04_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry03" then option_map (fun v => TLBEntry03_ref.(write_to) v s) (TLBEntry03_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry02" then option_map (fun v => TLBEntry02_ref.(write_to) v s) (TLBEntry02_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry01" then option_map (fun v => TLBEntry01_ref.(write_to) v s) (TLBEntry01_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntry00" then option_map (fun v => TLBEntry00_ref.(write_to) v s) (TLBEntry00_ref.(of_regval) v) else
- if string_dec reg_name "TLBXContext" then option_map (fun v => TLBXContext_ref.(write_to) v s) (TLBXContext_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntryHi" then option_map (fun v => TLBEntryHi_ref.(write_to) v s) (TLBEntryHi_ref.(of_regval) v) else
- if string_dec reg_name "TLBWired" then option_map (fun v => TLBWired_ref.(write_to) v s) (TLBWired_ref.(of_regval) v) else
- if string_dec reg_name "TLBPageMask" then option_map (fun v => TLBPageMask_ref.(write_to) v s) (TLBPageMask_ref.(of_regval) v) else
- if string_dec reg_name "TLBContext" then option_map (fun v => TLBContext_ref.(write_to) v s) (TLBContext_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntryLo1" then option_map (fun v => TLBEntryLo1_ref.(write_to) v s) (TLBEntryLo1_ref.(of_regval) v) else
- if string_dec reg_name "TLBEntryLo0" then option_map (fun v => TLBEntryLo0_ref.(write_to) v s) (TLBEntryLo0_ref.(of_regval) v) else
- if string_dec reg_name "TLBRandom" then option_map (fun v => TLBRandom_ref.(write_to) v s) (TLBRandom_ref.(of_regval) v) else
- if string_dec reg_name "TLBIndex" then option_map (fun v => TLBIndex_ref.(write_to) v s) (TLBIndex_ref.(of_regval) v) else
- if string_dec reg_name "TLBProbe" then option_map (fun v => TLBProbe_ref.(write_to) v s) (TLBProbe_ref.(of_regval) v) else
- if string_dec reg_name "nextPC" then option_map (fun v => nextPC_ref.(write_to) v s) (nextPC_ref.(of_regval) v) else
- if string_dec reg_name "PC" then option_map (fun v => PC_ref.(write_to) v s) (PC_ref.(of_regval) v) else
- None.
-
-Definition register_accessors := (get_regval, set_regval).
-
-
-Definition MR a r := monadR register_value a r exception.
-Definition M a := monad register_value a exception.
diff --git a/snapshots/coq/riscv/riscv.v b/snapshots/coq/riscv/riscv.v
new file mode 100644
index 00000000..620e5c37
--- /dev/null
+++ b/snapshots/coq/riscv/riscv.v
@@ -0,0 +1,37814 @@
+(*Generated by Sail from riscv.*)
+Require Import Sail2_instr_kinds.
+Require Import Sail2_values.
+Require Import Sail2_string.
+Require Import Sail2_real.
+Require Import Sail2_operators_mwords.
+Require Import Sail2_prompt_monad.
+Require Import Sail2_prompt.
+Require Import Sail2_state.
+Require Import riscv_types.
+Require Import riscv_extras.
+Import ListNotations.
+Open Scope string.
+Open Scope bool.
+Section Content.
+
+Definition eq_unit (g__147 : unit) (g__148 : unit) : bool := true.
+
+Definition neq_int (x : Z) (y : Z) : bool := negb (Z.eqb x y).
+
+Definition neq_bool (x : bool) (y : bool) : bool := negb (Bool.eqb x y).
+
+Axiom eq_real : forall (_ : R) (_ : R) , bool.
+
+Axiom lteq_real : forall (_ : R) (_ : R) , bool.
+
+Axiom lt_real : forall (_ : R) (_ : R) , bool.
+
+Axiom gteq_real : forall (_ : R) (_ : R) , bool.
+
+Axiom gt_real : forall (_ : R) (_ : R) , bool.
+
+Definition hex_bits_1_forwards_matches (bv : mword 1) : bool := true.
+
+Definition hex_bits_1_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_1_matches_prefix s) with
+ | Some (g__144,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__145 := Some ((g__144, n)) in
+ false
+ | g__145 => false
+ end)) then
+ true
+ else
+ let g__146 := s in
+ false
+ end.
+
+Definition hex_bits_1_backwards (s : string)
+: M (mword 1) :=
+
+ (match (hex_bits_1_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 1)
+ | _ => exit tt : M (mword 1)
+ end)
+ : M (mword 1).
+
+Definition hex_bits_2_forwards_matches (bv : mword 2) : bool := true.
+
+Definition hex_bits_2_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_2_matches_prefix s) with
+ | Some (g__141,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__142 := Some ((g__141, n)) in
+ false
+ | g__142 => false
+ end)) then
+ true
+ else
+ let g__143 := s in
+ false
+ end.
+
+Definition hex_bits_2_backwards (s : string)
+: M (mword 2) :=
+
+ (match (hex_bits_2_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 2)
+ | _ => exit tt : M (mword 2)
+ end)
+ : M (mword 2).
+
+Definition hex_bits_3_forwards_matches (bv : mword 3) : bool := true.
+
+Definition hex_bits_3_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_3_matches_prefix s) with
+ | Some (g__138,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__139 := Some ((g__138, n)) in
+ false
+ | g__139 => false
+ end)) then
+ true
+ else
+ let g__140 := s in
+ false
+ end.
+
+Definition hex_bits_3_backwards (s : string)
+: M (mword 3) :=
+
+ (match (hex_bits_3_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 3)
+ | _ => exit tt : M (mword 3)
+ end)
+ : M (mword 3).
+
+Definition hex_bits_4_forwards_matches (bv : mword 4) : bool := true.
+
+Definition hex_bits_4_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_4_matches_prefix s) with
+ | Some (g__135,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__136 := Some ((g__135, n)) in
+ false
+ | g__136 => false
+ end)) then
+ true
+ else
+ let g__137 := s in
+ false
+ end.
+
+Definition hex_bits_4_backwards (s : string)
+: M (mword 4) :=
+
+ (match (hex_bits_4_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 4)
+ | _ => exit tt : M (mword 4)
+ end)
+ : M (mword 4).
+
+Definition hex_bits_5_forwards_matches (bv : mword 5) : bool := true.
+
+Definition hex_bits_5_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_5_matches_prefix s) with
+ | Some (g__132,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__133 := Some ((g__132, n)) in
+ false
+ | g__133 => false
+ end)) then
+ true
+ else
+ let g__134 := s in
+ false
+ end.
+
+Definition hex_bits_5_backwards (s : string)
+: M (mword 5) :=
+
+ (match (hex_bits_5_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 5)
+ | _ => exit tt : M (mword 5)
+ end)
+ : M (mword 5).
+
+Definition hex_bits_6_forwards_matches (bv : mword 6) : bool := true.
+
+Definition hex_bits_6_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_6_matches_prefix s) with
+ | Some (g__129,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__130 := Some ((g__129, n)) in
+ false
+ | g__130 => false
+ end)) then
+ true
+ else
+ let g__131 := s in
+ false
+ end.
+
+Definition hex_bits_6_backwards (s : string)
+: M (mword 6) :=
+
+ (match (hex_bits_6_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 6)
+ | _ => exit tt : M (mword 6)
+ end)
+ : M (mword 6).
+
+Definition hex_bits_7_forwards_matches (bv : mword 7) : bool := true.
+
+Definition hex_bits_7_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_7_matches_prefix s) with
+ | Some (g__126,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__127 := Some ((g__126, n)) in
+ false
+ | g__127 => false
+ end)) then
+ true
+ else
+ let g__128 := s in
+ false
+ end.
+
+Definition hex_bits_7_backwards (s : string)
+: M (mword 7) :=
+
+ (match (hex_bits_7_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 7)
+ | _ => exit tt : M (mword 7)
+ end)
+ : M (mword 7).
+
+Definition hex_bits_8_forwards_matches (bv : mword 8) : bool := true.
+
+Definition hex_bits_8_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_8_matches_prefix s) with
+ | Some (g__123,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__124 := Some ((g__123, n)) in
+ false
+ | g__124 => false
+ end)) then
+ true
+ else
+ let g__125 := s in
+ false
+ end.
+
+Definition hex_bits_8_backwards (s : string)
+: M (mword 8) :=
+
+ (match (hex_bits_8_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 8)
+ | _ => exit tt : M (mword 8)
+ end)
+ : M (mword 8).
+
+Definition hex_bits_9_forwards_matches (bv : mword 9) : bool := true.
+
+Definition hex_bits_9_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_9_matches_prefix s) with
+ | Some (g__120,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__121 := Some ((g__120, n)) in
+ false
+ | g__121 => false
+ end)) then
+ true
+ else
+ let g__122 := s in
+ false
+ end.
+
+Definition hex_bits_9_backwards (s : string)
+: M (mword 9) :=
+
+ (match (hex_bits_9_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 9)
+ | _ => exit tt : M (mword 9)
+ end)
+ : M (mword 9).
+
+Definition hex_bits_10_forwards_matches (bv : mword 10) : bool := true.
+
+Definition hex_bits_10_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_10_matches_prefix s) with
+ | Some (g__117,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__118 := Some ((g__117, n)) in
+ false
+ | g__118 => false
+ end)) then
+ true
+ else
+ let g__119 := s in
+ false
+ end.
+
+Definition hex_bits_10_backwards (s : string)
+: M (mword 10) :=
+
+ (match (hex_bits_10_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 10)
+ | _ => exit tt : M (mword 10)
+ end)
+ : M (mword 10).
+
+Definition hex_bits_11_forwards_matches (bv : mword 11) : bool := true.
+
+Definition hex_bits_11_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_11_matches_prefix s) with
+ | Some (g__114,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__115 := Some ((g__114, n)) in
+ false
+ | g__115 => false
+ end)) then
+ true
+ else
+ let g__116 := s in
+ false
+ end.
+
+Definition hex_bits_11_backwards (s : string)
+: M (mword 11) :=
+
+ (match (hex_bits_11_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 11)
+ | _ => exit tt : M (mword 11)
+ end)
+ : M (mword 11).
+
+Definition hex_bits_12_forwards_matches (bv : mword 12) : bool := true.
+
+Definition hex_bits_12_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_12_matches_prefix s) with
+ | Some (g__111,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__112 := Some ((g__111, n)) in
+ false
+ | g__112 => false
+ end)) then
+ true
+ else
+ let g__113 := s in
+ false
+ end.
+
+Definition hex_bits_12_backwards (s : string)
+: M (mword 12) :=
+
+ (match (hex_bits_12_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 12)
+ | _ => exit tt : M (mword 12)
+ end)
+ : M (mword 12).
+
+Definition hex_bits_13_forwards_matches (bv : mword 13) : bool := true.
+
+Definition hex_bits_13_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_13_matches_prefix s) with
+ | Some (g__108,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__109 := Some ((g__108, n)) in
+ false
+ | g__109 => false
+ end)) then
+ true
+ else
+ let g__110 := s in
+ false
+ end.
+
+Definition hex_bits_13_backwards (s : string)
+: M (mword 13) :=
+
+ (match (hex_bits_13_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 13)
+ | _ => exit tt : M (mword 13)
+ end)
+ : M (mword 13).
+
+Definition hex_bits_14_forwards_matches (bv : mword 14) : bool := true.
+
+Definition hex_bits_14_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_14_matches_prefix s) with
+ | Some (g__105,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__106 := Some ((g__105, n)) in
+ false
+ | g__106 => false
+ end)) then
+ true
+ else
+ let g__107 := s in
+ false
+ end.
+
+Definition hex_bits_14_backwards (s : string)
+: M (mword 14) :=
+
+ (match (hex_bits_14_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 14)
+ | _ => exit tt : M (mword 14)
+ end)
+ : M (mword 14).
+
+Definition hex_bits_15_forwards_matches (bv : mword 15) : bool := true.
+
+Definition hex_bits_15_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_15_matches_prefix s) with
+ | Some (g__102,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__103 := Some ((g__102, n)) in
+ false
+ | g__103 => false
+ end)) then
+ true
+ else
+ let g__104 := s in
+ false
+ end.
+
+Definition hex_bits_15_backwards (s : string)
+: M (mword 15) :=
+
+ (match (hex_bits_15_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 15)
+ | _ => exit tt : M (mword 15)
+ end)
+ : M (mword 15).
+
+Definition hex_bits_16_forwards_matches (bv : mword 16) : bool := true.
+
+Definition hex_bits_16_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_16_matches_prefix s) with
+ | Some (g__99,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__100 := Some ((g__99, n)) in
+ false
+ | g__100 => false
+ end)) then
+ true
+ else
+ let g__101 := s in
+ false
+ end.
+
+Definition hex_bits_16_backwards (s : string)
+: M (mword 16) :=
+
+ (match (hex_bits_16_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 16)
+ | _ => exit tt : M (mword 16)
+ end)
+ : M (mword 16).
+
+Definition hex_bits_17_forwards_matches (bv : mword 17) : bool := true.
+
+Definition hex_bits_17_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_17_matches_prefix s) with
+ | Some (g__96,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__97 := Some ((g__96, n)) in
+ false
+ | g__97 => false
+ end)) then
+ true
+ else
+ let g__98 := s in
+ false
+ end.
+
+Definition hex_bits_17_backwards (s : string)
+: M (mword 17) :=
+
+ (match (hex_bits_17_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 17)
+ | _ => exit tt : M (mword 17)
+ end)
+ : M (mword 17).
+
+Definition hex_bits_18_forwards_matches (bv : mword 18) : bool := true.
+
+Definition hex_bits_18_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_18_matches_prefix s) with
+ | Some (g__93,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__94 := Some ((g__93, n)) in
+ false
+ | g__94 => false
+ end)) then
+ true
+ else
+ let g__95 := s in
+ false
+ end.
+
+Definition hex_bits_18_backwards (s : string)
+: M (mword 18) :=
+
+ (match (hex_bits_18_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 18)
+ | _ => exit tt : M (mword 18)
+ end)
+ : M (mword 18).
+
+Definition hex_bits_19_forwards_matches (bv : mword 19) : bool := true.
+
+Definition hex_bits_19_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_19_matches_prefix s) with
+ | Some (g__90,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__91 := Some ((g__90, n)) in
+ false
+ | g__91 => false
+ end)) then
+ true
+ else
+ let g__92 := s in
+ false
+ end.
+
+Definition hex_bits_19_backwards (s : string)
+: M (mword 19) :=
+
+ (match (hex_bits_19_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 19)
+ | _ => exit tt : M (mword 19)
+ end)
+ : M (mword 19).
+
+Definition hex_bits_20_forwards_matches (bv : mword 20) : bool := true.
+
+Definition hex_bits_20_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_20_matches_prefix s) with
+ | Some (g__87,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__88 := Some ((g__87, n)) in
+ false
+ | g__88 => false
+ end)) then
+ true
+ else
+ let g__89 := s in
+ false
+ end.
+
+Definition hex_bits_20_backwards (s : string)
+: M (mword 20) :=
+
+ (match (hex_bits_20_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 20)
+ | _ => exit tt : M (mword 20)
+ end)
+ : M (mword 20).
+
+Definition hex_bits_21_forwards_matches (bv : mword 21) : bool := true.
+
+Definition hex_bits_21_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_21_matches_prefix s) with
+ | Some (g__84,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__85 := Some ((g__84, n)) in
+ false
+ | g__85 => false
+ end)) then
+ true
+ else
+ let g__86 := s in
+ false
+ end.
+
+Definition hex_bits_21_backwards (s : string)
+: M (mword 21) :=
+
+ (match (hex_bits_21_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 21)
+ | _ => exit tt : M (mword 21)
+ end)
+ : M (mword 21).
+
+Definition hex_bits_22_forwards_matches (bv : mword 22) : bool := true.
+
+Definition hex_bits_22_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_22_matches_prefix s) with
+ | Some (g__81,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__82 := Some ((g__81, n)) in
+ false
+ | g__82 => false
+ end)) then
+ true
+ else
+ let g__83 := s in
+ false
+ end.
+
+Definition hex_bits_22_backwards (s : string)
+: M (mword 22) :=
+
+ (match (hex_bits_22_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 22)
+ | _ => exit tt : M (mword 22)
+ end)
+ : M (mword 22).
+
+Definition hex_bits_23_forwards_matches (bv : mword 23) : bool := true.
+
+Definition hex_bits_23_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_23_matches_prefix s) with
+ | Some (g__78,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__79 := Some ((g__78, n)) in
+ false
+ | g__79 => false
+ end)) then
+ true
+ else
+ let g__80 := s in
+ false
+ end.
+
+Definition hex_bits_23_backwards (s : string)
+: M (mword 23) :=
+
+ (match (hex_bits_23_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 23)
+ | _ => exit tt : M (mword 23)
+ end)
+ : M (mword 23).
+
+Definition hex_bits_24_forwards_matches (bv : mword 24) : bool := true.
+
+Definition hex_bits_24_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_24_matches_prefix s) with
+ | Some (g__75,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__76 := Some ((g__75, n)) in
+ false
+ | g__76 => false
+ end)) then
+ true
+ else
+ let g__77 := s in
+ false
+ end.
+
+Definition hex_bits_24_backwards (s : string)
+: M (mword 24) :=
+
+ (match (hex_bits_24_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 24)
+ | _ => exit tt : M (mword 24)
+ end)
+ : M (mword 24).
+
+Definition hex_bits_25_forwards_matches (bv : mword 25) : bool := true.
+
+Definition hex_bits_25_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_25_matches_prefix s) with
+ | Some (g__72,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__73 := Some ((g__72, n)) in
+ false
+ | g__73 => false
+ end)) then
+ true
+ else
+ let g__74 := s in
+ false
+ end.
+
+Definition hex_bits_25_backwards (s : string)
+: M (mword 25) :=
+
+ (match (hex_bits_25_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 25)
+ | _ => exit tt : M (mword 25)
+ end)
+ : M (mword 25).
+
+Definition hex_bits_26_forwards_matches (bv : mword 26) : bool := true.
+
+Definition hex_bits_26_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_26_matches_prefix s) with
+ | Some (g__69,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__70 := Some ((g__69, n)) in
+ false
+ | g__70 => false
+ end)) then
+ true
+ else
+ let g__71 := s in
+ false
+ end.
+
+Definition hex_bits_26_backwards (s : string)
+: M (mword 26) :=
+
+ (match (hex_bits_26_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 26)
+ | _ => exit tt : M (mword 26)
+ end)
+ : M (mword 26).
+
+Definition hex_bits_27_forwards_matches (bv : mword 27) : bool := true.
+
+Definition hex_bits_27_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_27_matches_prefix s) with
+ | Some (g__66,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__67 := Some ((g__66, n)) in
+ false
+ | g__67 => false
+ end)) then
+ true
+ else
+ let g__68 := s in
+ false
+ end.
+
+Definition hex_bits_27_backwards (s : string)
+: M (mword 27) :=
+
+ (match (hex_bits_27_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 27)
+ | _ => exit tt : M (mword 27)
+ end)
+ : M (mword 27).
+
+Definition hex_bits_28_forwards_matches (bv : mword 28) : bool := true.
+
+Definition hex_bits_28_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_28_matches_prefix s) with
+ | Some (g__63,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__64 := Some ((g__63, n)) in
+ false
+ | g__64 => false
+ end)) then
+ true
+ else
+ let g__65 := s in
+ false
+ end.
+
+Definition hex_bits_28_backwards (s : string)
+: M (mword 28) :=
+
+ (match (hex_bits_28_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 28)
+ | _ => exit tt : M (mword 28)
+ end)
+ : M (mword 28).
+
+Definition hex_bits_29_forwards_matches (bv : mword 29) : bool := true.
+
+Definition hex_bits_29_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_29_matches_prefix s) with
+ | Some (g__60,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__61 := Some ((g__60, n)) in
+ false
+ | g__61 => false
+ end)) then
+ true
+ else
+ let g__62 := s in
+ false
+ end.
+
+Definition hex_bits_29_backwards (s : string)
+: M (mword 29) :=
+
+ (match (hex_bits_29_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 29)
+ | _ => exit tt : M (mword 29)
+ end)
+ : M (mword 29).
+
+Definition hex_bits_30_forwards_matches (bv : mword 30) : bool := true.
+
+Definition hex_bits_30_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_30_matches_prefix s) with
+ | Some (g__57,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__58 := Some ((g__57, n)) in
+ false
+ | g__58 => false
+ end)) then
+ true
+ else
+ let g__59 := s in
+ false
+ end.
+
+Definition hex_bits_30_backwards (s : string)
+: M (mword 30) :=
+
+ (match (hex_bits_30_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 30)
+ | _ => exit tt : M (mword 30)
+ end)
+ : M (mword 30).
+
+Definition hex_bits_31_forwards_matches (bv : mword 31) : bool := true.
+
+Definition hex_bits_31_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_31_matches_prefix s) with
+ | Some (g__54,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__55 := Some ((g__54, n)) in
+ false
+ | g__55 => false
+ end)) then
+ true
+ else
+ let g__56 := s in
+ false
+ end.
+
+Definition hex_bits_31_backwards (s : string)
+: M (mword 31) :=
+
+ (match (hex_bits_31_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 31)
+ | _ => exit tt : M (mword 31)
+ end)
+ : M (mword 31).
+
+Definition hex_bits_32_forwards_matches (bv : mword 32) : bool := true.
+
+Definition hex_bits_32_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_32_matches_prefix s) with
+ | Some (g__51,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__52 := Some ((g__51, n)) in
+ false
+ | g__52 => false
+ end)) then
+ true
+ else
+ let g__53 := s in
+ false
+ end.
+
+Definition hex_bits_32_backwards (s : string)
+: M (mword 32) :=
+
+ (match (hex_bits_32_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 32)
+ | _ => exit tt : M (mword 32)
+ end)
+ : M (mword 32).
+
+Definition hex_bits_33_forwards_matches (bv : mword 33) : bool := true.
+
+Definition hex_bits_33_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_33_matches_prefix s) with
+ | Some (g__48,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__49 := Some ((g__48, n)) in
+ false
+ | g__49 => false
+ end)) then
+ true
+ else
+ let g__50 := s in
+ false
+ end.
+
+Definition hex_bits_33_backwards (s : string)
+: M (mword 33) :=
+
+ (match (hex_bits_33_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 33)
+ | _ => exit tt : M (mword 33)
+ end)
+ : M (mword 33).
+
+Definition hex_bits_48_forwards_matches (bv : mword 48) : bool := true.
+
+Definition hex_bits_48_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_48_matches_prefix s) with
+ | Some (g__45,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__46 := Some ((g__45, n)) in
+ false
+ | g__46 => false
+ end)) then
+ true
+ else
+ let g__47 := s in
+ false
+ end.
+
+Definition hex_bits_48_backwards (s : string)
+: M (mword 48) :=
+
+ (match (hex_bits_48_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 48)
+ | _ => exit tt : M (mword 48)
+ end)
+ : M (mword 48).
+
+Definition hex_bits_64_forwards_matches (bv : mword 64) : bool := true.
+
+Definition hex_bits_64_backwards_matches (s : string)
+: bool :=
+
+ match s with
+ | s =>
+ if sumbool_of_bool ((match (hex_bits_64_matches_prefix s) with
+ | Some (g__42,(existT _ n _)) =>
+ if sumbool_of_bool ((Z.eqb n (projT1 (string_length s)))) then true
+ else
+ let g__43 := Some ((g__42, n)) in
+ false
+ | g__43 => false
+ end)) then
+ true
+ else
+ let g__44 := s in
+ false
+ end.
+
+Definition hex_bits_64_backwards (s : string)
+: M (mword 64) :=
+
+ (match (hex_bits_64_matches_prefix s) with
+ | Some (bv,(existT _ n _)) => returnm (bv : mword 64)
+ | _ => exit tt : M (mword 64)
+ end)
+ : M (mword 64).
+
+Axiom vcons : forall {n : Z} {a : Type} (_ : a) (_ : vec a n) , vec a (n + 1).
+
+Axiom vector_concat : forall {n : Z} {m : Z} {a : Type} (_ : vec a n) (_ : vec a m) , vec a (n + m).
+
+Definition neq_vec {n : Z} (x : mword n) (y : mword n) : bool := negb (eq_vec x y).
+
+
+
+Axiom __raw_SetSlice_int : forall (w : Z) (_ : Z) (_ : Z) (_ : mword w) , Z.
+
+Definition __GetSlice_int (n : Z) (m : Z) (o : Z) `{ArithFact (n >= 0)}
+: mword n :=
+
+ get_slice_int n m o.
+
+Axiom __raw_SetSlice_bits : forall (n : Z) (w : Z) (_ : mword n) (_ : Z) (_ : mword w) , mword n.
+
+Axiom __raw_GetSlice_bits : forall
+
+(n : Z) (w : Z) (_ : mword n) (_ : Z)
+`{ArithFact (w >= 0)},
+mword w.
+
+Axiom __SignExtendSlice : forall {m : Z} (_ : mword m) (_ : Z) (_ : Z) , mword m.
+
+Axiom __ZeroExtendSlice : forall {m : Z} (_ : mword m) (_ : Z) (_ : Z) , mword m.
+
+Definition cast_unit_vec (b : bitU)
+: M (mword 1) :=
+
+ (match b with
+ | B0 => returnm ((vec_of_bits [B0] : mword 1) : mword 1)
+ | B1 => returnm ((vec_of_bits [B1] : mword 1) : mword 1)
+ | _ => exit tt : M (mword 1)
+ end)
+ : M (mword 1).
+
+Axiom DecStr : forall (_ : Z) , string.
+
+Axiom HexStr : forall (_ : Z) , string.
+
+Axiom real_power : forall (_ : R) (_ : Z) , R.
+
+Axiom add_real : forall (_ : R) (_ : R) , R.
+
+Axiom sub_real : forall (_ : R) (_ : R) , R.
+
+Axiom negate_real : forall (_ : R) , R.
+
+Axiom mult_real : forall (_ : R) (_ : R) , R.
+
+Axiom Sqrt : forall (_ : R) , R.
+
+Axiom RoundDown : forall (_ : R) , Z.
+
+Axiom RoundUp : forall (_ : R) , Z.
+
+Axiom abs_real : forall (_ : R) , R.
+
+Axiom quotient_nat : forall
+
+(_ : {n : Z & ArithFact (n >= 0)}) (_ : {n : Z & ArithFact (n >= 0)})
+,
+{n : Z & ArithFact (n >= 0)}.
+
+Axiom quotient_real : forall (_ : R) (_ : R) , R.
+
+Axiom quotient : forall (_ : Z) (_ : Z) , Z.
+
+Axiom quot_round_zero : forall (_ : Z) (_ : Z) , Z.
+
+Axiom rem_round_zero : forall (_ : Z) (_ : Z) , Z.
+
+Axiom modulus : forall (_ : Z) (_ : Z) , Z.
+
+Axiom Real : forall (_ : Z) , R.
+
+Definition __RISCV_write (addr : mword 64) (width : Z) (data : mword (8 * width))
+: M (bool) :=
+
+ (write_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr data)
+ : M (bool).
+
+Axiom __TraceMemoryWrite : forall {m : Z} (n : Z) (_ : mword m) (_ : mword (8 * n)) , unit.
+
+Definition __RISCV_read (addr : mword 64) (width : Z) (aq : bool) (rl : bool) (res : bool)
+`{ArithFact (width >= 0)}
+: M (option (mword (8 * width))) :=
+
+ (match (aq, rl, res) with
+ | (false, false, false) =>
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr) >>= fun w__0 : mword (8 * width) =>
+ returnm ((Some
+ (w__0))
+ : option (mword (8 * width)))
+ | (true, false, false) =>
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr) >>= fun w__1 : mword (8 * width) =>
+ returnm ((Some
+ (w__1))
+ : option (mword (8 * width)))
+ | (true, true, false) =>
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr) >>= fun w__2 : mword (8 * width) =>
+ returnm ((Some
+ (w__2))
+ : option (mword (8 * width)))
+ | (false, false, true) =>
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr) >>= fun w__3 : mword (8 * width) =>
+ returnm ((Some
+ (w__3))
+ : option (mword (8 * width)))
+ | (true, false, true) =>
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr) >>= fun w__4 : mword (8 * width) =>
+ returnm ((Some
+ (w__4))
+ : option (mword (8 * width)))
+ | (true, true, true) =>
+ (read_ram 64 width
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) addr) >>= fun w__5 : mword (8 * width) =>
+ returnm ((Some
+ (w__5))
+ : option (mword (8 * width)))
+ | (false, true, false) => returnm (None : option (mword (8 * width)))
+ | (false, true, true) => returnm (None : option (mword (8 * width)))
+ end)
+ : M (option (mword (8 * width))).
+
+Axiom __TraceMemoryRead : forall {m : Z} (n : Z) (_ : mword m) (_ : mword (8 * n)) , unit.
+
+Definition ex_nat {ex30597_ : Z} (n : Z) `{ArithFact (0 <= ex30597_)} `{ArithFact (n = ex30597_)}
+: {syn_n : Z & ArithFact (syn_n >= 0)} :=
+
+ build_ex(n).
+
+Definition ex_int {ex30599_ : Z} (n : Z) `{ArithFact (n = ex30599_)}
+: {syn_n : Z & ArithFact (True)} :=
+
+ build_ex(n).
+
+Definition coerce_int_nat {ex30601_ : Z} (x : Z) `{ArithFact (x = ex30601_)}
+: M ({n : Z & ArithFact (n >= 0)}) :=
+
+ assert_exp' (x >=? 0) "file ""prelude.sail"", line 1034, character 29 to line 1034, character 29: constraint('x >= 0)" >>= fun _ =>
+ returnm (build_ex (x
+ : Z)).
+
+Definition EXTS {n : Z} (m__tv : Z) (v : mword n) `{ArithFact (m__tv >= n)}
+: mword m__tv :=
+
+ sign_extend v m__tv.
+
+Definition EXTZ {n : Z} (m__tv : Z) (v : mword n) `{ArithFact (m__tv >= n)}
+: mword m__tv :=
+
+ zero_extend v m__tv.
+
+Definition zopz0zI_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= (0 + 1))}
+: bool :=
+
+ Z.ltb (projT1 (sint x)) (projT1 (sint y)).
+
+Definition zopz0zKzJ_s {n : Z} (x : mword n) (y : mword n) `{ArithFact (n >= (0 + 1))}
+: bool :=
+
+ Z.geb (projT1 (sint x)) (projT1 (sint y)).
+
+Definition zopz0zI_u {n : Z} (x : mword n) (y : mword n)
+: bool :=
+
+ Z.ltb (projT1 (uint x)) (projT1 (uint y)).
+
+Definition zopz0zKzJ_u {n : Z} (x : mword n) (y : mword n)
+: bool :=
+
+ Z.geb (projT1 (uint x)) (projT1 (uint y)).
+
+Definition zopz0zIzJ_u {n : Z} (x : mword n) (y : mword n)
+: bool :=
+
+ Z.leb (projT1 (uint x)) (projT1 (uint y)).
+
+Definition bool_to_bits (x : bool)
+: mword 1 :=
+
+ if (x) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1).
+
+Definition bit_to_bool (b : bitU)
+: M (bool) :=
+
+ (match b with
+ | B1 => returnm (true : bool)
+ | B0 => returnm (false : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool).
+
+Definition vector64 (n : Z) : mword 64 := get_slice_int 64 n 0.
+
+Definition to_bits (l : Z) (n : Z) `{ArithFact (l >= 0)} : mword l := get_slice_int l n 0.
+
+Axiom vector_update_subrange_inc : forall
+{n : Z}
+(_ : mword n) (m : Z) (o : Z) (_ : mword (o - (m - 1)))
+,
+mword n.
+
+Definition shift_right_arith64 (v : mword 64) (shift : mword 6)
+: mword 64 :=
+
+ let v128 : bits 128 := EXTS 128 v in
+ subrange_vec_dec (shift_bits_right v128 shift) 63 0.
+
+Definition shift_right_arith32 (v : mword 32) (shift : mword 5)
+: mword 32 :=
+
+ let v64 : bits 64 := EXTS 64 v in
+ subrange_vec_dec (shift_bits_right v64 shift) 31 0.
+
+Fixpoint _rec_n_leading_spaces (s : string) (_reclimit : Z) (_acc : Acc (Zwf 0) _reclimit)
+{struct _acc} : M ({n : Z & ArithFact (n >= 0)}) :=
+
+ assert_exp' (Z.geb _reclimit 0) "recursion limit reached" >>= fun _ =>
+ let p0_ := s in
+ (if ((generic_eq p0_ "")) then returnm (build_ex (0 : Z))
+ else
+ let p0_ := string_take s 1 in
+ (if ((generic_eq p0_ " ")) then
+ (_rec_n_leading_spaces (string_drop s 1) (Z.sub _reclimit 1) (_limit_reduces _acc)) >>= fun '(existT _ w__0 _ : {n : Z & ArithFact (n >=
+ 0)}) =>
+ returnm (build_ex (projT1 (build_ex (Z.add 1 w__0)
+ : {_atom : Z & ArithFact (exists ex21215_ , _atom = (1 + ex21215_) /\ 0 <= ex21215_)})))
+ else returnm (build_ex (0 : Z)))
+ : M ({n : Z & ArithFact (n >= 0)}))
+ : M ({n : Z & ArithFact (n >= 0)}).
+
+Definition n_leading_spaces (s : string)
+: M ({n : Z & ArithFact (n >= 0)}) :=
+
+ (_rec_n_leading_spaces s ((projT1 (string_length s)) : Z) (Zwf_guarded _))
+ : M ({n : Z & ArithFact (n >= 0)}).
+
+Definition spc_forwards '(tt : unit) : string := " ".
+
+Definition spc_backwards (s : string) : unit := tt.
+
+Definition spc_matches_prefix (s : string)
+: M (option ((unit * {n : Z & ArithFact (n >= 0)}))) :=
+
+ (n_leading_spaces s) >>= fun '(existT _ n _) =>
+ let p0_ := n in
+ returnm ((if sumbool_of_bool ((Z.eqb p0_ 0)) then None
+ else Some ((tt, build_ex n)))
+ : option ((unit * {n : Z & ArithFact (n >= 0)}))).
+
+Definition opt_spc_forwards '(tt : unit) : string := "".
+
+Definition opt_spc_backwards (s : string) : unit := tt.
+
+Definition opt_spc_matches_prefix (s : string)
+: M (option ((unit * {n : Z & ArithFact (n >= 0)}))) :=
+
+ (n_leading_spaces s) >>= fun '(existT _ w__0 _ : {n : Z & ArithFact (n >= 0)}) =>
+ returnm ((Some
+ ((tt, build_ex w__0)))
+ : option ((unit * {n : Z & ArithFact (n >= 0)}))).
+
+Definition def_spc_forwards '(tt : unit) : string := " ".
+
+Definition def_spc_backwards (s : string) : unit := tt.
+
+Definition def_spc_matches_prefix (s : string)
+: M (option ((unit * {n : Z & ArithFact (n >= 0)}))) :=
+
+ (opt_spc_matches_prefix s)
+ : M (option ((unit * {n : Z & ArithFact (n >= 0)}))).
+
+Definition xlen := 64.
+Hint Unfold xlen : sail.
+Definition xlen_max_unsigned := Z.sub (projT1 (pow2 xlen)) 1.
+Hint Unfold xlen_max_unsigned : sail.
+Definition xlen_max_signed := Z.sub (projT1 (pow2 (Z.sub xlen 1))) 1.
+Hint Unfold xlen_max_signed : sail.
+Definition xlen_min_signed := Z.sub 0 (projT1 (pow2 (Z.sub xlen 1))).
+Hint Unfold xlen_min_signed : sail.
+Definition regbits_to_regno (b : mword 5)
+: {n : Z & ArithFact (0 <= n /\ (n + 1) <= 32)} :=
+
+ build_ex(let 'r := projT1 (uint b) in
+ r).
+
+Definition creg2reg_bits (creg : mword 3)
+: mword 5 :=
+
+ concat_vec (vec_of_bits [B0;B1] : mword 2) creg.
+
+Definition zreg : regbits := (vec_of_bits [B0;B0;B0;B0;B0] : mword 5).
+Hint Unfold zreg : sail.
+Definition ra : regbits := (vec_of_bits [B0;B0;B0;B0;B1] : mword 5).
+Hint Unfold ra : sail.
+Definition sp : regbits := (vec_of_bits [B0;B0;B0;B1;B0] : mword 5).
+Hint Unfold sp : sail.
+Definition rX (r : Z) `{ArithFact (0 <= r /\ (r + 1) <= 32)}
+: M (mword 64) :=
+
+ let p0_ := r in
+ (if sumbool_of_bool ((Z.eqb p0_ 0)) then
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then ((read_reg x1_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then ((read_reg x2_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then ((read_reg x3_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then ((read_reg x4_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then ((read_reg x5_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then ((read_reg x6_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then ((read_reg x7_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then ((read_reg x8_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then ((read_reg x9_ref) : M (mword 64)) : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then
+ ((read_reg x10_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 11)) then
+ ((read_reg x11_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 12)) then
+ ((read_reg x12_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 13)) then
+ ((read_reg x13_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 14)) then
+ ((read_reg x14_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 15)) then
+ ((read_reg x15_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 16)) then
+ ((read_reg x16_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 17)) then
+ ((read_reg x17_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 18)) then
+ ((read_reg x18_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 19)) then
+ ((read_reg x19_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 20)) then
+ ((read_reg x20_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 21)) then
+ ((read_reg x21_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then
+ ((read_reg x22_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 23)) then
+ ((read_reg x23_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 24)) then
+ ((read_reg x24_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 25)) then
+ ((read_reg x25_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 26)) then
+ ((read_reg x26_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 27)) then
+ ((read_reg x27_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 28)) then
+ ((read_reg x28_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 29)) then
+ ((read_reg x29_ref) : M (mword 64))
+ : M (xlenbits)
+ else if sumbool_of_bool ((Z.eqb p0_ 30)) then
+ ((read_reg x30_ref) : M (mword 64))
+ : M (xlenbits)
+ else ((read_reg x31_ref) : M (mword 64)) : M (xlenbits))
+ : M (mword 64).
+
+Definition rvfi_wX (r : Z) (v : mword 64) `{ArithFact (0 <= r /\ (r + 1) <= 32)} : unit := tt.
+
+Definition wX (r : Z) (v : mword 64) `{ArithFact (0 <= r /\ (r + 1) <= 32)}
+: M (unit) :=
+
+ let p0_ := r in
+ (if sumbool_of_bool ((Z.eqb p0_ 0)) then returnm (tt : unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then write_reg x1_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then write_reg x2_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then write_reg x3_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then write_reg x4_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then write_reg x5_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then write_reg x6_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then write_reg x7_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then write_reg x8_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then write_reg x9_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then write_reg x10_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 11)) then write_reg x11_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 12)) then write_reg x12_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 13)) then write_reg x13_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 14)) then write_reg x14_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 15)) then write_reg x15_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 16)) then write_reg x16_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 17)) then write_reg x17_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 18)) then write_reg x18_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 19)) then write_reg x19_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 20)) then write_reg x20_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 21)) then write_reg x21_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then write_reg x22_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 23)) then write_reg x23_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 24)) then write_reg x24_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 25)) then write_reg x25_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 26)) then write_reg x26_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 27)) then write_reg x27_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 28)) then write_reg x28_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 29)) then write_reg x29_ref v : M (unit)
+ else if sumbool_of_bool ((Z.eqb p0_ 30)) then write_reg x30_ref v : M (unit)
+ else write_reg x31_ref v : M (unit)) >>
+ returnm ((if ((neq_int r 0)) then
+ let '_ := (rvfi_wX r v) : unit in
+ print_endline
+ (String.append "x"
+ (String.append (string_of_int r) (String.append " <- " (string_of_bits v))))
+ else tt)
+ : unit).
+
+Definition reg_name_abi (r : mword 5)
+: string :=
+
+ let b__0 := r in
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)))))
+ then
+ "zero"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)))))
+ then
+ "ra"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)))))
+ then
+ "sp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B1;B1] : mword 5)))))
+ then
+ "gp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)))))
+ then
+ "tp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B1] : mword 5)))))
+ then
+ "t0"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B1;B0] : mword 5)))))
+ then
+ "t1"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B1;B1] : mword 5)))))
+ then
+ "t2"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)))))
+ then
+ "fp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B1] : mword 5)))))
+ then
+ "s1"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B1;B0] : mword 5)))))
+ then
+ "a0"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B1;B1] : mword 5)))))
+ then
+ "a1"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)))))
+ then
+ "a2"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B1] : mword 5)))))
+ then
+ "a3"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B1;B0] : mword 5)))))
+ then
+ "a4"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B1;B1] : mword 5)))))
+ then
+ "a5"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)))))
+ then
+ "a6"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B1] : mword 5)))))
+ then
+ "a7"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B1;B0] : mword 5)))))
+ then
+ "s2"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B1;B1] : mword 5)))))
+ then
+ "s3"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)))))
+ then
+ "s4"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B1] : mword 5)))))
+ then
+ "s5"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B1;B0] : mword 5)))))
+ then
+ "s6"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B1;B1] : mword 5)))))
+ then
+ "s7"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)))))
+ then
+ "s8"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B1] : mword 5)))))
+ then
+ "s9"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B1;B0] : mword 5)))))
+ then
+ "s10"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B1;B1] : mword 5)))))
+ then
+ "s11"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B0] : mword 5)))))
+ then
+ "t3"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B1] : mword 5)))))
+ then
+ "t4"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B1;B0] : mword 5)))))
+ then
+ "t5"
+ else "t6".
+
+Definition Architecture_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: Architecture :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RV32
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RV64
+ else RV128.
+
+Definition num_of_Architecture (arg_ : Architecture)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | RV32 => 0 | RV64 => 1 | RV128 => 2 end).
+
+Definition architecture (a : mword 2)
+: option Architecture :=
+
+ let b__0 := a in
+ if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then Some (RV32)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then Some (RV64)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1] : mword 2))) then Some (RV128)
+ else None.
+
+Definition arch_to_bits (a : Architecture)
+: mword 2 :=
+
+ match a with
+ | RV32 => (vec_of_bits [B0;B1] : mword 2)
+ | RV64 => (vec_of_bits [B1;B0] : mword 2)
+ | RV128 => (vec_of_bits [B1;B1] : mword 2)
+ end.
+
+Definition Privilege_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: Privilege :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then User
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Supervisor
+ else Machine.
+
+Definition num_of_Privilege (arg_ : Privilege)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | User => 0 | Supervisor => 1 | Machine => 2 end).
+
+Definition privLevel_to_bits (p : Privilege)
+: mword 2 :=
+
+ match p with
+ | User => (vec_of_bits [B0;B0] : mword 2)
+ | Supervisor => (vec_of_bits [B0;B1] : mword 2)
+ | Machine => (vec_of_bits [B1;B1] : mword 2)
+ end.
+
+Definition privLevel_of_bits (p : mword 2)
+: Privilege :=
+
+ let b__0 := p in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then User
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then Supervisor
+ else Machine.
+
+Definition privLevel_to_str (p : Privilege)
+: string :=
+
+ match p with | User => "U" | Supervisor => "S" | Machine => "M" end.
+
+Definition AccessType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: AccessType :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Read
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Write
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then ReadWrite
+ else Execute.
+
+Definition num_of_AccessType (arg_ : AccessType)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with | Read => 0 | Write => 1 | ReadWrite => 2 | Execute => 3 end).
+
+Definition accessType_to_str (a : AccessType)
+: string :=
+
+ match a with | Read => "R" | Write => "W" | ReadWrite => "RW" | Execute => "X" end.
+
+Definition ReadType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 1)}
+: ReadType :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Instruction
+ else Data.
+
+Definition num_of_ReadType (arg_ : ReadType)
+: {e : Z & ArithFact (0 <= e /\ e <= 1)} :=
+
+ build_ex(match arg_ with | Instruction => 0 | Data => 1 end).
+
+Definition readType_to_str (r : ReadType)
+: string :=
+
+ match r with | Instruction => "I" | Data => "D" end.
+
+Definition word_width_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: word_width :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then BYTE
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then HALF
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then WORD
+ else DOUBLE.
+
+Definition num_of_word_width (arg_ : word_width)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with | BYTE => 0 | HALF => 1 | WORD => 2 | DOUBLE => 3 end).
+
+Definition InterruptType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 8)}
+: InterruptType :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then I_U_Software
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then I_S_Software
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then I_M_Software
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then I_U_Timer
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then I_S_Timer
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then I_M_Timer
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then I_U_External
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then I_S_External
+ else I_M_External.
+
+Definition num_of_InterruptType (arg_ : InterruptType)
+: {e : Z & ArithFact (0 <= e /\ e <= 8)} :=
+
+ build_ex(match arg_ with
+ | I_U_Software => 0
+ | I_S_Software => 1
+ | I_M_Software => 2
+ | I_U_Timer => 3
+ | I_S_Timer => 4
+ | I_M_Timer => 5
+ | I_U_External => 6
+ | I_S_External => 7
+ | I_M_External => 8
+ end).
+
+Definition interruptType_to_bits (i : InterruptType)
+: mword 4 :=
+
+ match i with
+ | I_U_Software => (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ | I_S_Software => (vec_of_bits [B0;B0;B0;B1] : mword 4)
+ | I_M_Software => (vec_of_bits [B0;B0;B1;B1] : mword 4)
+ | I_U_Timer => (vec_of_bits [B0;B1;B0;B0] : mword 4)
+ | I_S_Timer => (vec_of_bits [B0;B1;B0;B1] : mword 4)
+ | I_M_Timer => (vec_of_bits [B0;B1;B1;B1] : mword 4)
+ | I_U_External => (vec_of_bits [B1;B0;B0;B0] : mword 4)
+ | I_S_External => (vec_of_bits [B1;B0;B0;B1] : mword 4)
+ | I_M_External => (vec_of_bits [B1;B0;B1;B1] : mword 4)
+ end.
+
+Definition ExceptionType_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 15)}
+: ExceptionType :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then E_Fetch_Addr_Align
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then E_Fetch_Access_Fault
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then E_Illegal_Instr
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then E_Breakpoint
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then E_Load_Addr_Align
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then E_Load_Access_Fault
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then E_SAMO_Addr_Align
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then E_SAMO_Access_Fault
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then E_U_EnvCall
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then E_S_EnvCall
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then E_Reserved_10
+ else if sumbool_of_bool ((Z.eqb p0_ 11)) then E_M_EnvCall
+ else if sumbool_of_bool ((Z.eqb p0_ 12)) then E_Fetch_Page_Fault
+ else if sumbool_of_bool ((Z.eqb p0_ 13)) then E_Load_Page_Fault
+ else if sumbool_of_bool ((Z.eqb p0_ 14)) then E_Reserved_14
+ else E_SAMO_Page_Fault.
+
+Definition num_of_ExceptionType (arg_ : ExceptionType)
+: {e : Z & ArithFact (0 <= e /\ e <= 15)} :=
+
+ build_ex(match arg_ with
+ | E_Fetch_Addr_Align => 0
+ | E_Fetch_Access_Fault => 1
+ | E_Illegal_Instr => 2
+ | E_Breakpoint => 3
+ | E_Load_Addr_Align => 4
+ | E_Load_Access_Fault => 5
+ | E_SAMO_Addr_Align => 6
+ | E_SAMO_Access_Fault => 7
+ | E_U_EnvCall => 8
+ | E_S_EnvCall => 9
+ | E_Reserved_10 => 10
+ | E_M_EnvCall => 11
+ | E_Fetch_Page_Fault => 12
+ | E_Load_Page_Fault => 13
+ | E_Reserved_14 => 14
+ | E_SAMO_Page_Fault => 15
+ end).
+
+Definition exceptionType_to_bits (e : ExceptionType)
+: mword 4 :=
+
+ match e with
+ | E_Fetch_Addr_Align => (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ | E_Fetch_Access_Fault => (vec_of_bits [B0;B0;B0;B1] : mword 4)
+ | E_Illegal_Instr => (vec_of_bits [B0;B0;B1;B0] : mword 4)
+ | E_Breakpoint => (vec_of_bits [B0;B0;B1;B1] : mword 4)
+ | E_Load_Addr_Align => (vec_of_bits [B0;B1;B0;B0] : mword 4)
+ | E_Load_Access_Fault => (vec_of_bits [B0;B1;B0;B1] : mword 4)
+ | E_SAMO_Addr_Align => (vec_of_bits [B0;B1;B1;B0] : mword 4)
+ | E_SAMO_Access_Fault => (vec_of_bits [B0;B1;B1;B1] : mword 4)
+ | E_U_EnvCall => (vec_of_bits [B1;B0;B0;B0] : mword 4)
+ | E_S_EnvCall => (vec_of_bits [B1;B0;B0;B1] : mword 4)
+ | E_Reserved_10 => (vec_of_bits [B1;B0;B1;B0] : mword 4)
+ | E_M_EnvCall => (vec_of_bits [B1;B0;B1;B1] : mword 4)
+ | E_Fetch_Page_Fault => (vec_of_bits [B1;B1;B0;B0] : mword 4)
+ | E_Load_Page_Fault => (vec_of_bits [B1;B1;B0;B1] : mword 4)
+ | E_Reserved_14 => (vec_of_bits [B1;B1;B1;B0] : mword 4)
+ | E_SAMO_Page_Fault => (vec_of_bits [B1;B1;B1;B1] : mword 4)
+ end.
+
+Definition exceptionType_to_str (e : ExceptionType)
+: string :=
+
+ match e with
+ | E_Fetch_Addr_Align => "misaligned-fetch"
+ | E_Fetch_Access_Fault => "fetch-access-fault"
+ | E_Illegal_Instr => "illegal-instruction"
+ | E_Breakpoint => "breakpoint"
+ | E_Load_Addr_Align => "misaligned-load"
+ | E_Load_Access_Fault => "load-access-fault"
+ | E_SAMO_Addr_Align => "misaliged-store/amo"
+ | E_SAMO_Access_Fault => "store/amo-access-fault"
+ | E_U_EnvCall => "u-call"
+ | E_S_EnvCall => "s-call"
+ | E_Reserved_10 => "reserved-0"
+ | E_M_EnvCall => "m-call"
+ | E_Fetch_Page_Fault => "fetch-page-fault"
+ | E_Load_Page_Fault => "load-page-fault"
+ | E_Reserved_14 => "reserved-1"
+ | E_SAMO_Page_Fault => "store/amo-page-fault"
+ end.
+
+Definition not_implemented {a : Type} (message : string)
+: M (a) :=
+
+ (throw (Error_not_implemented
+ (message)))
+ : M (a).
+
+Definition internal_error {a : Type} (s : string)
+: M (a) :=
+
+ assert_exp' false s >>= fun _ => (throw (Error_internal_error (tt))) : M (a).
+
+Definition TrapVectorMode_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: TrapVectorMode :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then TV_Direct
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then TV_Vector
+ else TV_Reserved.
+
+Definition num_of_TrapVectorMode (arg_ : TrapVectorMode)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | TV_Direct => 0 | TV_Vector => 1 | TV_Reserved => 2 end).
+
+Definition trapVectorMode_of_bits (m : mword 2)
+: TrapVectorMode :=
+
+ let b__0 := m in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then TV_Direct
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then TV_Vector
+ else TV_Reserved.
+
+Definition ExtStatus_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 3)}
+: ExtStatus :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Off
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Initial
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then Clean
+ else Dirty.
+
+Definition num_of_ExtStatus (arg_ : ExtStatus)
+: {e : Z & ArithFact (0 <= e /\ e <= 3)} :=
+
+ build_ex(match arg_ with | Off => 0 | Initial => 1 | Clean => 2 | Dirty => 3 end).
+
+Definition extStatus_to_bits (e : ExtStatus)
+: mword 2 :=
+
+ match e with
+ | Off => (vec_of_bits [B0;B0] : mword 2)
+ | Initial => (vec_of_bits [B0;B1] : mword 2)
+ | Clean => (vec_of_bits [B1;B0] : mword 2)
+ | Dirty => (vec_of_bits [B1;B1] : mword 2)
+ end.
+
+Definition extStatus_of_bits (e : mword 2)
+: ExtStatus :=
+
+ let b__0 := e in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then Off
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then Initial
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then Clean
+ else Dirty.
+
+Definition SATPMode_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: SATPMode :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Sbare
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Sv32
+ else Sv39.
+
+Definition num_of_SATPMode (arg_ : SATPMode)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | Sbare => 0 | Sv32 => 1 | Sv39 => 2 end).
+
+Definition satpMode_of_bits (a : Architecture) (m : mword 4)
+: option SATPMode :=
+
+ match (a, m) with
+ | (g__39, b__0) =>
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0] : mword 4))) then Some (Sbare)
+ else
+ match (g__39, b__0) with
+ | (RV32, b__0) =>
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1] : mword 4))) then Some (Sv32)
+ else match (RV32, b__0) with | (g__40, g__41) => None end
+ | (RV64, b__0) =>
+ if ((eq_vec b__0 (vec_of_bits [B1;B0;B0;B0] : mword 4))) then Some (Sv39)
+ else match (RV64, b__0) with | (g__40, g__41) => None end
+ | (g__40, g__41) => None
+ end
+ end.
+
+Definition uop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 1)}
+: uop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_LUI
+ else RISCV_AUIPC.
+
+Definition num_of_uop (arg_ : uop)
+: {e : Z & ArithFact (0 <= e /\ e <= 1)} :=
+
+ build_ex(match arg_ with | RISCV_LUI => 0 | RISCV_AUIPC => 1 end).
+
+Definition bop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 5)}
+: bop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_BEQ
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RISCV_BNE
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then RISCV_BLT
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then RISCV_BGE
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then RISCV_BLTU
+ else RISCV_BGEU.
+
+Definition num_of_bop (arg_ : bop)
+: {e : Z & ArithFact (0 <= e /\ e <= 5)} :=
+
+ build_ex(match arg_ with
+ | RISCV_BEQ => 0
+ | RISCV_BNE => 1
+ | RISCV_BLT => 2
+ | RISCV_BGE => 3
+ | RISCV_BLTU => 4
+ | RISCV_BGEU => 5
+ end).
+
+Definition iop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 5)}
+: iop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_ADDI
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RISCV_SLTI
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then RISCV_SLTIU
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then RISCV_XORI
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then RISCV_ORI
+ else RISCV_ANDI.
+
+Definition num_of_iop (arg_ : iop)
+: {e : Z & ArithFact (0 <= e /\ e <= 5)} :=
+
+ build_ex(match arg_ with
+ | RISCV_ADDI => 0
+ | RISCV_SLTI => 1
+ | RISCV_SLTIU => 2
+ | RISCV_XORI => 3
+ | RISCV_ORI => 4
+ | RISCV_ANDI => 5
+ end).
+
+Definition sop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: sop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_SLLI
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RISCV_SRLI
+ else RISCV_SRAI.
+
+Definition num_of_sop (arg_ : sop)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | RISCV_SLLI => 0 | RISCV_SRLI => 1 | RISCV_SRAI => 2 end).
+
+Definition rop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 9)}
+: rop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_ADD
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RISCV_SUB
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then RISCV_SLL
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then RISCV_SLT
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then RISCV_SLTU
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then RISCV_XOR
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then RISCV_SRL
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then RISCV_SRA
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then RISCV_OR
+ else RISCV_AND.
+
+Definition num_of_rop (arg_ : rop)
+: {e : Z & ArithFact (0 <= e /\ e <= 9)} :=
+
+ build_ex(match arg_ with
+ | RISCV_ADD => 0
+ | RISCV_SUB => 1
+ | RISCV_SLL => 2
+ | RISCV_SLT => 3
+ | RISCV_SLTU => 4
+ | RISCV_XOR => 5
+ | RISCV_SRL => 6
+ | RISCV_SRA => 7
+ | RISCV_OR => 8
+ | RISCV_AND => 9
+ end).
+
+Definition ropw_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 4)}
+: ropw :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_ADDW
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RISCV_SUBW
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then RISCV_SLLW
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then RISCV_SRLW
+ else RISCV_SRAW.
+
+Definition num_of_ropw (arg_ : ropw)
+: {e : Z & ArithFact (0 <= e /\ e <= 4)} :=
+
+ build_ex(match arg_ with
+ | RISCV_ADDW => 0
+ | RISCV_SUBW => 1
+ | RISCV_SLLW => 2
+ | RISCV_SRLW => 3
+ | RISCV_SRAW => 4
+ end).
+
+Definition sopw_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: sopw :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then RISCV_SLLIW
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then RISCV_SRLIW
+ else RISCV_SRAIW.
+
+Definition num_of_sopw (arg_ : sopw)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | RISCV_SLLIW => 0 | RISCV_SRLIW => 1 | RISCV_SRAIW => 2 end).
+
+Definition amoop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 8)}
+: amoop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then AMOSWAP
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then AMOADD
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then AMOXOR
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then AMOAND
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then AMOOR
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then AMOMIN
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then AMOMAX
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then AMOMINU
+ else AMOMAXU.
+
+Definition num_of_amoop (arg_ : amoop)
+: {e : Z & ArithFact (0 <= e /\ e <= 8)} :=
+
+ build_ex(match arg_ with
+ | AMOSWAP => 0
+ | AMOADD => 1
+ | AMOXOR => 2
+ | AMOAND => 3
+ | AMOOR => 4
+ | AMOMIN => 5
+ | AMOMAX => 6
+ | AMOMINU => 7
+ | AMOMAXU => 8
+ end).
+
+Definition csrop_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: csrop :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then CSRRW
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then CSRRS
+ else CSRRC.
+
+Definition num_of_csrop (arg_ : csrop)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with | CSRRW => 0 | CSRRS => 1 | CSRRC => 2 end).
+
+Definition reg_name_forwards (arg_ : mword 5)
+: string :=
+
+ let b__0 := arg_ in
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)))))
+ then
+ "zero"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)))))
+ then
+ "ra"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)))))
+ then
+ "sp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B1;B1] : mword 5)))))
+ then
+ "gp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)))))
+ then
+ "tp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B1] : mword 5)))))
+ then
+ "t0"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B1;B0] : mword 5)))))
+ then
+ "t1"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B1;B1] : mword 5)))))
+ then
+ "t2"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)))))
+ then
+ "fp"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B1] : mword 5)))))
+ then
+ "s1"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B1;B0] : mword 5)))))
+ then
+ "a0"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B1;B1] : mword 5)))))
+ then
+ "a1"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)))))
+ then
+ "a2"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B1] : mword 5)))))
+ then
+ "a3"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B1;B0] : mword 5)))))
+ then
+ "a4"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B1;B1] : mword 5)))))
+ then
+ "a5"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)))))
+ then
+ "a6"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B1] : mword 5)))))
+ then
+ "a7"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B1;B0] : mword 5)))))
+ then
+ "s2"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B1;B1] : mword 5)))))
+ then
+ "s3"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)))))
+ then
+ "s4"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B1] : mword 5)))))
+ then
+ "s5"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B1;B0] : mword 5)))))
+ then
+ "s6"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B1;B1] : mword 5)))))
+ then
+ "s7"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)))))
+ then
+ "s8"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B1] : mword 5)))))
+ then
+ "s9"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B1;B0] : mword 5)))))
+ then
+ "s10"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B1;B1] : mword 5)))))
+ then
+ "s11"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B0] : mword 5)))))
+ then
+ "t3"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B1] : mword 5)))))
+ then
+ "t4"
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B1;B0] : mword 5)))))
+ then
+ "t5"
+ else "t6".
+
+Definition reg_name_backwards (arg_ : string)
+: mword 5 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "zero")) then (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "ra")) then (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "sp")) then (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "gp")) then (vec_of_bits [B0;B0;B0;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "tp")) then (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "t0")) then (vec_of_bits [B0;B0;B1;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "t1")) then (vec_of_bits [B0;B0;B1;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "t2")) then (vec_of_bits [B0;B0;B1;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "fp")) then (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "s1")) then (vec_of_bits [B0;B1;B0;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "a0")) then (vec_of_bits [B0;B1;B0;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "a1")) then (vec_of_bits [B0;B1;B0;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "a2")) then (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "a3")) then (vec_of_bits [B0;B1;B1;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "a4")) then (vec_of_bits [B0;B1;B1;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "a5")) then (vec_of_bits [B0;B1;B1;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "a6")) then (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "a7")) then (vec_of_bits [B1;B0;B0;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "s2")) then (vec_of_bits [B1;B0;B0;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "s3")) then (vec_of_bits [B1;B0;B0;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "s4")) then (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "s5")) then (vec_of_bits [B1;B0;B1;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "s6")) then (vec_of_bits [B1;B0;B1;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "s7")) then (vec_of_bits [B1;B0;B1;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "s8")) then (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "s9")) then (vec_of_bits [B1;B1;B0;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "s10")) then (vec_of_bits [B1;B1;B0;B1;B0] : mword 5)
+ else if ((generic_eq p0_ "s11")) then (vec_of_bits [B1;B1;B0;B1;B1] : mword 5)
+ else if ((generic_eq p0_ "t3")) then (vec_of_bits [B1;B1;B1;B0;B0] : mword 5)
+ else if ((generic_eq p0_ "t4")) then (vec_of_bits [B1;B1;B1;B0;B1] : mword 5)
+ else if ((generic_eq p0_ "t5")) then (vec_of_bits [B1;B1;B1;B1;B0] : mword 5)
+ else (vec_of_bits [B1;B1;B1;B1;B1] : mword 5).
+
+Definition reg_name_forwards_matches (arg_ : mword 5)
+: bool :=
+
+ let b__0 := arg_ in
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B1;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B1;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B1;B1] : mword 5)))))
+ then
+ true
+ else false.
+
+Definition reg_name_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "zero")) then true
+ else if ((generic_eq p0_ "ra")) then true
+ else if ((generic_eq p0_ "sp")) then true
+ else if ((generic_eq p0_ "gp")) then true
+ else if ((generic_eq p0_ "tp")) then true
+ else if ((generic_eq p0_ "t0")) then true
+ else if ((generic_eq p0_ "t1")) then true
+ else if ((generic_eq p0_ "t2")) then true
+ else if ((generic_eq p0_ "fp")) then true
+ else if ((generic_eq p0_ "s1")) then true
+ else if ((generic_eq p0_ "a0")) then true
+ else if ((generic_eq p0_ "a1")) then true
+ else if ((generic_eq p0_ "a2")) then true
+ else if ((generic_eq p0_ "a3")) then true
+ else if ((generic_eq p0_ "a4")) then true
+ else if ((generic_eq p0_ "a5")) then true
+ else if ((generic_eq p0_ "a6")) then true
+ else if ((generic_eq p0_ "a7")) then true
+ else if ((generic_eq p0_ "s2")) then true
+ else if ((generic_eq p0_ "s3")) then true
+ else if ((generic_eq p0_ "s4")) then true
+ else if ((generic_eq p0_ "s5")) then true
+ else if ((generic_eq p0_ "s6")) then true
+ else if ((generic_eq p0_ "s7")) then true
+ else if ((generic_eq p0_ "s8")) then true
+ else if ((generic_eq p0_ "s9")) then true
+ else if ((generic_eq p0_ "s10")) then true
+ else if ((generic_eq p0_ "s11")) then true
+ else if ((generic_eq p0_ "t3")) then true
+ else if ((generic_eq p0_ "t4")) then true
+ else if ((generic_eq p0_ "t5")) then true
+ else if ((generic_eq p0_ "t6")) then true
+ else false.
+
+Definition _s124_ (_s125_ : string)
+: option string :=
+
+ let _s126_ := _s125_ in
+ if ((string_startswith _s126_ "t6")) then
+ match (string_drop _s126_ (projT1 (string_length "t6"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s120_ (_s121_ : string)
+: option string :=
+
+ let _s122_ := _s121_ in
+ if ((string_startswith _s122_ "t5")) then
+ match (string_drop _s122_ (projT1 (string_length "t5"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s116_ (_s117_ : string)
+: option string :=
+
+ let _s118_ := _s117_ in
+ if ((string_startswith _s118_ "t4")) then
+ match (string_drop _s118_ (projT1 (string_length "t4"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s112_ (_s113_ : string)
+: option string :=
+
+ let _s114_ := _s113_ in
+ if ((string_startswith _s114_ "t3")) then
+ match (string_drop _s114_ (projT1 (string_length "t3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s108_ (_s109_ : string)
+: option string :=
+
+ let _s110_ := _s109_ in
+ if ((string_startswith _s110_ "s11")) then
+ match (string_drop _s110_ (projT1 (string_length "s11"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s104_ (_s105_ : string)
+: option string :=
+
+ let _s106_ := _s105_ in
+ if ((string_startswith _s106_ "s10")) then
+ match (string_drop _s106_ (projT1 (string_length "s10"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s100_ (_s101_ : string)
+: option string :=
+
+ let _s102_ := _s101_ in
+ if ((string_startswith _s102_ "s9")) then
+ match (string_drop _s102_ (projT1 (string_length "s9"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s96_ (_s97_ : string)
+: option string :=
+
+ let _s98_ := _s97_ in
+ if ((string_startswith _s98_ "s8")) then
+ match (string_drop _s98_ (projT1 (string_length "s8"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s92_ (_s93_ : string)
+: option string :=
+
+ let _s94_ := _s93_ in
+ if ((string_startswith _s94_ "s7")) then
+ match (string_drop _s94_ (projT1 (string_length "s7"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s88_ (_s89_ : string)
+: option string :=
+
+ let _s90_ := _s89_ in
+ if ((string_startswith _s90_ "s6")) then
+ match (string_drop _s90_ (projT1 (string_length "s6"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s84_ (_s85_ : string)
+: option string :=
+
+ let _s86_ := _s85_ in
+ if ((string_startswith _s86_ "s5")) then
+ match (string_drop _s86_ (projT1 (string_length "s5"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s80_ (_s81_ : string)
+: option string :=
+
+ let _s82_ := _s81_ in
+ if ((string_startswith _s82_ "s4")) then
+ match (string_drop _s82_ (projT1 (string_length "s4"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s76_ (_s77_ : string)
+: option string :=
+
+ let _s78_ := _s77_ in
+ if ((string_startswith _s78_ "s3")) then
+ match (string_drop _s78_ (projT1 (string_length "s3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s72_ (_s73_ : string)
+: option string :=
+
+ let _s74_ := _s73_ in
+ if ((string_startswith _s74_ "s2")) then
+ match (string_drop _s74_ (projT1 (string_length "s2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s68_ (_s69_ : string)
+: option string :=
+
+ let _s70_ := _s69_ in
+ if ((string_startswith _s70_ "a7")) then
+ match (string_drop _s70_ (projT1 (string_length "a7"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s64_ (_s65_ : string)
+: option string :=
+
+ let _s66_ := _s65_ in
+ if ((string_startswith _s66_ "a6")) then
+ match (string_drop _s66_ (projT1 (string_length "a6"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s60_ (_s61_ : string)
+: option string :=
+
+ let _s62_ := _s61_ in
+ if ((string_startswith _s62_ "a5")) then
+ match (string_drop _s62_ (projT1 (string_length "a5"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s56_ (_s57_ : string)
+: option string :=
+
+ let _s58_ := _s57_ in
+ if ((string_startswith _s58_ "a4")) then
+ match (string_drop _s58_ (projT1 (string_length "a4"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s52_ (_s53_ : string)
+: option string :=
+
+ let _s54_ := _s53_ in
+ if ((string_startswith _s54_ "a3")) then
+ match (string_drop _s54_ (projT1 (string_length "a3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s48_ (_s49_ : string)
+: option string :=
+
+ let _s50_ := _s49_ in
+ if ((string_startswith _s50_ "a2")) then
+ match (string_drop _s50_ (projT1 (string_length "a2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s44_ (_s45_ : string)
+: option string :=
+
+ let _s46_ := _s45_ in
+ if ((string_startswith _s46_ "a1")) then
+ match (string_drop _s46_ (projT1 (string_length "a1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s40_ (_s41_ : string)
+: option string :=
+
+ let _s42_ := _s41_ in
+ if ((string_startswith _s42_ "a0")) then
+ match (string_drop _s42_ (projT1 (string_length "a0"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s36_ (_s37_ : string)
+: option string :=
+
+ let _s38_ := _s37_ in
+ if ((string_startswith _s38_ "s1")) then
+ match (string_drop _s38_ (projT1 (string_length "s1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s32_ (_s33_ : string)
+: option string :=
+
+ let _s34_ := _s33_ in
+ if ((string_startswith _s34_ "fp")) then
+ match (string_drop _s34_ (projT1 (string_length "fp"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s28_ (_s29_ : string)
+: option string :=
+
+ let _s30_ := _s29_ in
+ if ((string_startswith _s30_ "t2")) then
+ match (string_drop _s30_ (projT1 (string_length "t2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s24_ (_s25_ : string)
+: option string :=
+
+ let _s26_ := _s25_ in
+ if ((string_startswith _s26_ "t1")) then
+ match (string_drop _s26_ (projT1 (string_length "t1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s20_ (_s21_ : string)
+: option string :=
+
+ let _s22_ := _s21_ in
+ if ((string_startswith _s22_ "t0")) then
+ match (string_drop _s22_ (projT1 (string_length "t0"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s16_ (_s17_ : string)
+: option string :=
+
+ let _s18_ := _s17_ in
+ if ((string_startswith _s18_ "tp")) then
+ match (string_drop _s18_ (projT1 (string_length "tp"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s12_ (_s13_ : string)
+: option string :=
+
+ let _s14_ := _s13_ in
+ if ((string_startswith _s14_ "gp")) then
+ match (string_drop _s14_ (projT1 (string_length "gp"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s8_ (_s9_ : string)
+: option string :=
+
+ let _s10_ := _s9_ in
+ if ((string_startswith _s10_ "sp")) then
+ match (string_drop _s10_ (projT1 (string_length "sp"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s4_ (_s5_ : string)
+: option string :=
+
+ let _s6_ := _s5_ in
+ if ((string_startswith _s6_ "ra")) then
+ match (string_drop _s6_ (projT1 (string_length "ra"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s0_ (_s1_ : string)
+: option string :=
+
+ let _s2_ := _s1_ in
+ if ((string_startswith _s2_ "zero")) then
+ match (string_drop _s2_ (projT1 (string_length "zero"))) with | s_ => Some (s_) end
+ else None.
+
+Definition reg_name_matches_prefix (arg_ : string)
+: M (option ((mword 5 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s3_ := arg_ in
+ (if ((match (_s0_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s0_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s4_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s4_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s8_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s8_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s12_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s12_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s16_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s16_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s20_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s20_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s24_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s24_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s28_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s28_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s32_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s32_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B0;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s36_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s36_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B0;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s40_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s40_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B0;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s44_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s44_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B0;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s48_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s48_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s52_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s52_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s56_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s56_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s60_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s60_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s64_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s64_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B0;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s68_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s68_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B0;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s72_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s72_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B0;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s76_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s76_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B0;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s80_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s80_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s84_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s84_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s88_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s88_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s92_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s92_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s96_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s96_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s100_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s100_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s104_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s104_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s108_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s108_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s112_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s112_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B0;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s116_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s116_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B0;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s120_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s120_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B1;B0] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s124_ _s3_) with | Some (s_) => true | _ => false end)) then
+ (match (_s124_ _s3_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B1;B1] : mword 5), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 5 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 5 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition creg_name_forwards (arg_ : mword 3)
+: string :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then "s0"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then "s1"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B0] : mword 3))) then "a0"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1] : mword 3))) then "a1"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B0] : mword 3))) then "a2"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then "a3"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0] : mword 3))) then "a4"
+ else "a5".
+
+Definition creg_name_backwards (arg_ : string)
+: mword 3 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "s0")) then (vec_of_bits [B0;B0;B0] : mword 3)
+ else if ((generic_eq p0_ "s1")) then (vec_of_bits [B0;B0;B1] : mword 3)
+ else if ((generic_eq p0_ "a0")) then (vec_of_bits [B0;B1;B0] : mword 3)
+ else if ((generic_eq p0_ "a1")) then (vec_of_bits [B0;B1;B1] : mword 3)
+ else if ((generic_eq p0_ "a2")) then (vec_of_bits [B1;B0;B0] : mword 3)
+ else if ((generic_eq p0_ "a3")) then (vec_of_bits [B1;B0;B1] : mword 3)
+ else if ((generic_eq p0_ "a4")) then (vec_of_bits [B1;B1;B0] : mword 3)
+ else (vec_of_bits [B1;B1;B1] : mword 3).
+
+Definition creg_name_forwards_matches (arg_ : mword 3)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1] : mword 3))) then true
+ else false.
+
+Definition creg_name_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "s0")) then true
+ else if ((generic_eq p0_ "s1")) then true
+ else if ((generic_eq p0_ "a0")) then true
+ else if ((generic_eq p0_ "a1")) then true
+ else if ((generic_eq p0_ "a2")) then true
+ else if ((generic_eq p0_ "a3")) then true
+ else if ((generic_eq p0_ "a4")) then true
+ else if ((generic_eq p0_ "a5")) then true
+ else false.
+
+Definition _s156_ (_s157_ : string)
+: option string :=
+
+ let _s158_ := _s157_ in
+ if ((string_startswith _s158_ "a5")) then
+ match (string_drop _s158_ (projT1 (string_length "a5"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s152_ (_s153_ : string)
+: option string :=
+
+ let _s154_ := _s153_ in
+ if ((string_startswith _s154_ "a4")) then
+ match (string_drop _s154_ (projT1 (string_length "a4"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s148_ (_s149_ : string)
+: option string :=
+
+ let _s150_ := _s149_ in
+ if ((string_startswith _s150_ "a3")) then
+ match (string_drop _s150_ (projT1 (string_length "a3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s144_ (_s145_ : string)
+: option string :=
+
+ let _s146_ := _s145_ in
+ if ((string_startswith _s146_ "a2")) then
+ match (string_drop _s146_ (projT1 (string_length "a2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s140_ (_s141_ : string)
+: option string :=
+
+ let _s142_ := _s141_ in
+ if ((string_startswith _s142_ "a1")) then
+ match (string_drop _s142_ (projT1 (string_length "a1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s136_ (_s137_ : string)
+: option string :=
+
+ let _s138_ := _s137_ in
+ if ((string_startswith _s138_ "a0")) then
+ match (string_drop _s138_ (projT1 (string_length "a0"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s132_ (_s133_ : string)
+: option string :=
+
+ let _s134_ := _s133_ in
+ if ((string_startswith _s134_ "s1")) then
+ match (string_drop _s134_ (projT1 (string_length "s1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s128_ (_s129_ : string)
+: option string :=
+
+ let _s130_ := _s129_ in
+ if ((string_startswith _s130_ "s0")) then
+ match (string_drop _s130_ (projT1 (string_length "s0"))) with | s_ => Some (s_) end
+ else None.
+
+Definition creg_name_matches_prefix (arg_ : string)
+: M (option ((mword 3 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s131_ := arg_ in
+ (if ((match (_s128_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s128_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s132_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s132_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s136_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s136_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B0] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s140_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s140_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s144_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s144_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B0] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s148_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s148_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s152_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s152_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s156_ _s131_) with | Some (s_) => true | _ => false end)) then
+ (match (_s156_ _s131_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1] : mword 3), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 3 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 3 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition sep_forwards (arg_ : unit)
+: string :=
+
+ match arg_ with
+ | tt =>
+ string_append (opt_spc_forwards tt)
+ (string_append "," (string_append (def_spc_forwards tt) ""))
+ end.
+
+Definition _s160_ (_s161_ : string)
+: M (option unit) :=
+
+ (match _s161_ with
+ | _s162_ =>
+ (opt_spc_matches_prefix _s162_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s163_ _)) =>
+ let _s164_ := string_drop _s162_ _s163_ in
+ (if ((string_startswith _s164_ ",")) then
+ (match (string_drop _s164_ (projT1 (string_length ","))) with
+ | _s165_ =>
+ (def_spc_matches_prefix _s165_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (tt,(existT _ _s166_ _)) =>
+ let p0_ := string_drop _s165_ _s166_ in
+ if ((generic_eq p0_ "")) then Some (tt)
+ else None
+ | _ => None
+ end)
+ : option unit)
+ end)
+ : M (option unit)
+ else returnm (None : option unit))
+ : M (option unit)
+ | _ => returnm (None : option unit)
+ end)
+ : M (option unit)
+ end)
+ : M (option unit).
+
+Definition sep_backwards (arg_ : string)
+: M (unit) :=
+
+ let _s167_ := arg_ in
+ (_s160_ _s167_) >>= fun w__0 : option unit =>
+ (match w__0 with | Some (tt) => returnm (tt : unit) | _ => exit tt : M (unit) end)
+ : M (unit).
+
+Definition sep_forwards_matches (arg_ : unit) : bool := match arg_ with | tt => true end.
+
+Definition _s168_ (_s169_ : string)
+: M (option unit) :=
+
+ (match _s169_ with
+ | _s170_ =>
+ (opt_spc_matches_prefix _s170_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s171_ _)) =>
+ let _s172_ := string_drop _s170_ _s171_ in
+ (if ((string_startswith _s172_ ",")) then
+ (match (string_drop _s172_ (projT1 (string_length ","))) with
+ | _s173_ =>
+ (def_spc_matches_prefix _s173_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (tt,(existT _ _s174_ _)) =>
+ let p0_ := string_drop _s173_ _s174_ in
+ if ((generic_eq p0_ "")) then Some (tt)
+ else None
+ | _ => None
+ end)
+ : option unit)
+ end)
+ : M (option unit)
+ else returnm (None : option unit))
+ : M (option unit)
+ | _ => returnm (None : option unit)
+ end)
+ : M (option unit)
+ end)
+ : M (option unit).
+
+Definition sep_backwards_matches (arg_ : string)
+: M (bool) :=
+
+ let _s175_ := arg_ in
+ (_s168_ _s175_) >>= fun w__0 : option unit =>
+ (if ((match w__0 with | Some (tt) => true | _ => false end)) then
+ (_s168_ _s175_) >>= fun w__1 : option unit =>
+ (match w__1 with | Some (tt) => returnm (true : bool) | _ => exit tt : M (bool) end)
+ : M (bool)
+ else returnm (false : bool))
+ : M (bool).
+
+Definition _s176_ (_s177_ : string)
+: M (option string) :=
+
+ (match _s177_ with
+ | _s178_ =>
+ (opt_spc_matches_prefix _s178_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s179_ _)) =>
+ let _s180_ := string_drop _s178_ _s179_ in
+ (if ((string_startswith _s180_ ",")) then
+ (match (string_drop _s180_ (projT1 (string_length ","))) with
+ | _s181_ =>
+ (def_spc_matches_prefix _s181_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (tt,(existT _ _s182_ _)) =>
+ match (string_drop _s181_ _s182_) with | s_ => Some (s_) end
+ | _ => None
+ end)
+ : option string)
+ end)
+ : M (option string)
+ else returnm (None : option string))
+ : M (option string)
+ | _ => returnm (None : option string)
+ end)
+ : M (option string)
+ end)
+ : M (option string).
+
+Definition sep_matches_prefix (arg_ : string)
+: M (option ((unit * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s183_ := arg_ in
+ (_s176_ _s183_) >>= fun w__0 : option string =>
+ (if ((match w__0 with | Some (s_) => true | _ => false end)) then
+ (_s176_ _s183_) >>= fun w__1 : option string =>
+ (match w__1 with
+ | Some (s_) =>
+ returnm ((Some
+ ((tt, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((unit * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((unit * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((unit * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((unit * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((unit * {n : Z & ArithFact (n >= 0)}))).
+
+Definition bool_bits_forwards (arg_ : bool)
+: mword 1 :=
+
+ match arg_ with
+ | true => (vec_of_bits [B1] : mword 1)
+ | false => (vec_of_bits [B0] : mword 1)
+ end.
+
+Definition bool_bits_backwards (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else false.
+
+Definition bool_bits_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | true => true | false => true end.
+
+Definition bool_bits_backwards_matches (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else false.
+
+Definition bool_not_bits_forwards (arg_ : bool)
+: mword 1 :=
+
+ match arg_ with
+ | true => (vec_of_bits [B0] : mword 1)
+ | false => (vec_of_bits [B1] : mword 1)
+ end.
+
+Definition bool_not_bits_backwards (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else false.
+
+Definition bool_not_bits_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | true => true | false => true end.
+
+Definition bool_not_bits_backwards_matches (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else false.
+
+Definition size_bits_forwards (arg_ : word_width)
+: mword 2 :=
+
+ match arg_ with
+ | BYTE => (vec_of_bits [B0;B0] : mword 2)
+ | HALF => (vec_of_bits [B0;B1] : mword 2)
+ | WORD => (vec_of_bits [B1;B0] : mword 2)
+ | DOUBLE => (vec_of_bits [B1;B1] : mword 2)
+ end.
+
+Definition size_bits_backwards (arg_ : mword 2)
+: word_width :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then BYTE
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then HALF
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then WORD
+ else DOUBLE.
+
+Definition size_bits_forwards_matches (arg_ : word_width)
+: bool :=
+
+ match arg_ with | BYTE => true | HALF => true | WORD => true | DOUBLE => true end.
+
+Definition size_bits_backwards_matches (arg_ : mword 2)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0] : mword 2))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1] : mword 2))) then true
+ else false.
+
+Definition size_mnemonic_forwards (arg_ : word_width)
+: string :=
+
+ match arg_ with | BYTE => "b" | HALF => "h" | WORD => "w" | DOUBLE => "d" end.
+
+Definition size_mnemonic_backwards (arg_ : string)
+: word_width :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "b")) then BYTE
+ else if ((generic_eq p0_ "h")) then HALF
+ else if ((generic_eq p0_ "w")) then WORD
+ else DOUBLE.
+
+Definition size_mnemonic_forwards_matches (arg_ : word_width)
+: bool :=
+
+ match arg_ with | BYTE => true | HALF => true | WORD => true | DOUBLE => true end.
+
+Definition size_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "b")) then true
+ else if ((generic_eq p0_ "h")) then true
+ else if ((generic_eq p0_ "w")) then true
+ else if ((generic_eq p0_ "d")) then true
+ else false.
+
+Definition _s196_ (_s197_ : string)
+: option string :=
+
+ let _s198_ := _s197_ in
+ if ((string_startswith _s198_ "d")) then
+ match (string_drop _s198_ (projT1 (string_length "d"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s192_ (_s193_ : string)
+: option string :=
+
+ let _s194_ := _s193_ in
+ if ((string_startswith _s194_ "w")) then
+ match (string_drop _s194_ (projT1 (string_length "w"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s188_ (_s189_ : string)
+: option string :=
+
+ let _s190_ := _s189_ in
+ if ((string_startswith _s190_ "h")) then
+ match (string_drop _s190_ (projT1 (string_length "h"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s184_ (_s185_ : string)
+: option string :=
+
+ let _s186_ := _s185_ in
+ if ((string_startswith _s186_ "b")) then
+ match (string_drop _s186_ (projT1 (string_length "b"))) with | s_ => Some (s_) end
+ else None.
+
+Definition size_mnemonic_matches_prefix (arg_ : string)
+: M (option ((word_width * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s187_ := arg_ in
+ (if ((match (_s184_ _s187_) with | Some (s_) => true | _ => false end)) then
+ (match (_s184_ _s187_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((BYTE, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s188_ _s187_) with | Some (s_) => true | _ => false end)) then
+ (match (_s188_ _s187_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((HALF, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s192_ _s187_) with | Some (s_) => true | _ => false end)) then
+ (match (_s192_ _s187_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((WORD, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s196_ _s187_) with | Some (s_) => true | _ => false end)) then
+ (match (_s196_ _s187_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((DOUBLE, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((word_width * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((word_width * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((word_width * {n : Z & ArithFact (n >= 0)}))).
+
+Definition Mk_Misa (v : mword 64) : Misa := {| Misa_Misa_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Misa_bits (v : Misa) : mword 64 := subrange_vec_dec v.(Misa_Misa_chunk_0) 63 0.
+
+Definition _set_Misa_bits (r_ref : register_ref regstate register_value Misa) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_bits (v : Misa) (x : mword 64)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Misa_MXL (v : Misa) : mword 2 := subrange_vec_dec v.(Misa_Misa_chunk_0) 63 62.
+
+Definition _set_Misa_MXL (r_ref : register_ref regstate register_value Misa) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 63 62 (subrange_vec_dec v 1 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_MXL (v : Misa) (x : mword 2)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 63 62 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Misa_Z (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 25 25.
+
+Definition _set_Misa_Z (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 25 25 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_Z (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 25 25 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_Y (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 24 24.
+
+Definition _set_Misa_Y (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 24 24 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_Y (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 24 24 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_X (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 23 23.
+
+Definition _set_Misa_X (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 23 23 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_X (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 23 23 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_W (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 22 22.
+
+Definition _set_Misa_W (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 22 22 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_W (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 22 22 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_V (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 21 21.
+
+Definition _set_Misa_V (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 21 21 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_V (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 21 21 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_U (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 20 20.
+
+Definition _set_Misa_U (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 20 20 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_U (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 20 20 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_T (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 19 19.
+
+Definition _set_Misa_T (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 19 19 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_T (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 19 19 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_S (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 18 18.
+
+Definition _set_Misa_S (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 18 18 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_S (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 18 18 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_R (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 17 17.
+
+Definition _set_Misa_R (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 17 17 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_R (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 17 17 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_Q (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 16 16.
+
+Definition _set_Misa_Q (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 16 16 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_Q (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 16 16 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_P (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 15 15.
+
+Definition _set_Misa_P (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 15 15 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_P (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 15 15 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_O (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 14 14.
+
+Definition _set_Misa_O (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 14 14 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_O (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 14 14 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_N (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 13 13.
+
+Definition _set_Misa_N (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 13 13 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_N (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 13 13 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_M (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 12 12.
+
+Definition _set_Misa_M (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 12 12 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_M (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 12 12 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_L (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 11 11.
+
+Definition _set_Misa_L (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 11 11 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_L (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 11 11 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_K (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 10 10.
+
+Definition _set_Misa_K (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 10 10 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_K (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 10 10 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_J (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 9 9.
+
+Definition _set_Misa_J (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 9 9 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_J (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 9 9 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_I (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 8 8.
+
+Definition _set_Misa_I (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_I (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_H (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 7 7.
+
+Definition _set_Misa_H (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_H (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_G (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 6 6.
+
+Definition _set_Misa_G (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 6 6 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_G (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 6 6 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_F (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 5 5.
+
+Definition _set_Misa_F (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_F (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_E (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 4 4.
+
+Definition _set_Misa_E (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_E (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_D (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 3 3.
+
+Definition _set_Misa_D (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 3 3 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_D (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 3 3 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_C (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 2 2.
+
+Definition _set_Misa_C (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 2 2 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_C (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_B (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 1 1.
+
+Definition _set_Misa_B (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_B (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Misa_A (v : Misa) : mword 1 := subrange_vec_dec v.(Misa_Misa_chunk_0) 0 0.
+
+Definition _set_Misa_A (r_ref : register_ref regstate register_value Misa) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec r.(Misa_Misa_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Misa in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Misa_A (v : Misa) (x : mword 1)
+: Misa :=
+
+ {[ v with
+ Misa_Misa_chunk_0 :=
+ (update_subrange_vec_dec v.(Misa_Misa_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition legalize_misa (m : Misa) (v : mword 64)
+: M (Misa) :=
+
+ let v := Mk_Misa v in
+ (and_boolM (returnm ((eq_vec (_get_Misa_C v) ((bool_to_bits false) : mword 1)) : bool))
+ (((read_reg nextPC_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ (bit_to_bool (access_vec_dec w__0 1)) >>= fun w__1 : bool =>
+ returnm ((Bool.eqb (w__1 : bool) true)
+ : bool))) >>= fun w__2 : bool =>
+ returnm ((if (w__2) then m
+ else _update_Misa_C m (_get_Misa_C v))
+ : Misa).
+
+Definition Mk_Mstatus (v : mword 64)
+: Mstatus :=
+
+ {| Mstatus_Mstatus_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Mstatus_bits (v : Mstatus)
+: mword 64 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 63 0.
+
+Definition _set_Mstatus_bits (r_ref : register_ref regstate register_value Mstatus) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_bits (v : Mstatus) (x : mword 64)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Mstatus_SD (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 63 63.
+
+Definition _set_Mstatus_SD (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 63 63 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_SD (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 63 63 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_SXL (v : Mstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 35 34.
+
+Definition _set_Mstatus_SXL (r_ref : register_ref regstate register_value Mstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 35 34 (subrange_vec_dec v 1 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_SXL (v : Mstatus) (x : mword 2)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 35 34 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Mstatus_UXL (v : Mstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 33 32.
+
+Definition _set_Mstatus_UXL (r_ref : register_ref regstate register_value Mstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 33 32 (subrange_vec_dec v 1 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_UXL (v : Mstatus) (x : mword 2)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 33 32 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Mstatus_TSR (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 22 22.
+
+Definition _set_Mstatus_TSR (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 22 22 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_TSR (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 22 22 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_TW (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 21 21.
+
+Definition _set_Mstatus_TW (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 21 21 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_TW (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 21 21 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_TVM (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 20 20.
+
+Definition _set_Mstatus_TVM (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 20 20 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_TVM (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 20 20 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_MXR (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 19 19.
+
+Definition _set_Mstatus_MXR (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 19 19 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_MXR (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 19 19 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_SUM (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 18 18.
+
+Definition _set_Mstatus_SUM (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 18 18 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_SUM (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 18 18 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_MPRV (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 17 17.
+
+Definition _set_Mstatus_MPRV (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 17 17 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_MPRV (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 17 17 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_XS (v : Mstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 16 15.
+
+Definition _set_Mstatus_XS (r_ref : register_ref regstate register_value Mstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 16 15 (subrange_vec_dec v 1 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_XS (v : Mstatus) (x : mword 2)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 16 15 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Mstatus_FS (v : Mstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 14 13.
+
+Definition _set_Mstatus_FS (r_ref : register_ref regstate register_value Mstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 14 13 (subrange_vec_dec v 1 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_FS (v : Mstatus) (x : mword 2)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 14 13 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Mstatus_MPP (v : Mstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 12 11.
+
+Definition _set_Mstatus_MPP (r_ref : register_ref regstate register_value Mstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 12 11 (subrange_vec_dec v 1 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_MPP (v : Mstatus) (x : mword 2)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 12 11 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Mstatus_SPP (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 8 8.
+
+Definition _set_Mstatus_SPP (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_SPP (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_MPIE (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 7 7.
+
+Definition _set_Mstatus_MPIE (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_MPIE (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_SPIE (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 5 5.
+
+Definition _set_Mstatus_SPIE (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_SPIE (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_UPIE (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 4 4.
+
+Definition _set_Mstatus_UPIE (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_UPIE (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_MIE (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 3 3.
+
+Definition _set_Mstatus_MIE (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 3 3 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_MIE (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 3 3 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_SIE (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 1 1.
+
+Definition _set_Mstatus_SIE (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_SIE (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mstatus_UIE (v : Mstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 0 0.
+
+Definition _set_Mstatus_UIE (r_ref : register_ref regstate register_value Mstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Mstatus_Mstatus_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Mstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mstatus_UIE (v : Mstatus) (x : mword 1)
+: Mstatus :=
+
+ {[ v with
+ Mstatus_Mstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Mstatus_Mstatus_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition legalize_mstatus (o : Mstatus) (v : mword 64)
+: Mstatus :=
+
+ let m : Mstatus := Mk_Mstatus v in
+ let m := _update_Mstatus_XS m (extStatus_to_bits Off) in
+ let m := _update_Mstatus_FS m (extStatus_to_bits Off) in
+ let m :=
+ _update_Mstatus_SD m
+ ((bool_to_bits
+ (orb
+ (eq_vec (extStatus_to_bits (extStatus_of_bits (_get_Mstatus_FS m)))
+ ((extStatus_to_bits Dirty)
+ : mword 2))
+ (eq_vec (extStatus_to_bits (extStatus_of_bits (_get_Mstatus_XS m)))
+ ((extStatus_to_bits Dirty)
+ : mword 2))))
+ : mword 1) in
+ let m := _update_Mstatus_SXL m (_get_Mstatus_SXL o) in
+ let m := _update_Mstatus_UXL m (_get_Mstatus_UXL o) in
+ let m := _update_Mstatus_UPIE m ((bool_to_bits false) : mword 1) in
+ _update_Mstatus_UIE m ((bool_to_bits false) : mword 1).
+
+Definition cur_Architecture '(tt : unit)
+: M (Architecture) :=
+
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ (match w__0 with
+ | Machine => read_reg misa_ref >>= fun w__1 : Misa => returnm ((_get_Misa_MXL w__1) : mword 2)
+ | Supervisor =>
+ read_reg mstatus_ref >>= fun w__2 : Mstatus => returnm ((_get_Mstatus_SXL w__2) : mword 2)
+ | User =>
+ read_reg mstatus_ref >>= fun w__3 : Mstatus => returnm ((_get_Mstatus_UXL w__3) : mword 2)
+ end) >>= fun a : arch_xlen =>
+ (match (architecture a) with
+ | Some (a) => returnm (a : Architecture)
+ | None => (internal_error "Invalid current architecture") : M (Architecture)
+ end)
+ : M (Architecture).
+
+Definition in32BitMode '(tt : unit)
+: M (bool) :=
+
+ (cur_Architecture tt) >>= fun w__0 : Architecture => returnm ((generic_eq w__0 RV32) : bool).
+
+Definition haveAtomics '(tt : unit)
+: M (bool) :=
+
+ read_reg misa_ref >>= fun w__0 : Misa =>
+ returnm ((eq_vec (_get_Misa_A w__0) ((bool_to_bits true) : mword 1))
+ : bool).
+
+Definition haveRVC '(tt : unit)
+: M (bool) :=
+
+ read_reg misa_ref >>= fun w__0 : Misa =>
+ returnm ((eq_vec (_get_Misa_C w__0) ((bool_to_bits true) : mword 1))
+ : bool).
+
+Definition haveMulDiv '(tt : unit)
+: M (bool) :=
+
+ read_reg misa_ref >>= fun w__0 : Misa =>
+ returnm ((eq_vec (_get_Misa_M w__0) ((bool_to_bits true) : mword 1))
+ : bool).
+
+Definition haveFP '(tt : unit)
+: M (bool) :=
+
+ (or_boolM
+ (read_reg misa_ref >>= fun w__0 : Misa =>
+ returnm ((eq_vec (_get_Misa_F w__0) ((bool_to_bits true) : mword 1))
+ : bool))
+ (read_reg misa_ref >>= fun w__1 : Misa =>
+ returnm ((eq_vec (_get_Misa_D w__1) ((bool_to_bits true) : mword 1))
+ : bool)))
+ : M (bool).
+
+Definition Mk_Minterrupts (v : mword 64)
+: Minterrupts :=
+
+ {| Minterrupts_Minterrupts_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Minterrupts_bits (v : Minterrupts)
+: mword 64 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 63 0.
+
+Definition _set_Minterrupts_bits
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_bits (v : Minterrupts) (x : mword 64)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Minterrupts_MEI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 11 11.
+
+Definition _set_Minterrupts_MEI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 11 11 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_MEI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 11 11 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_SEI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 9 9.
+
+Definition _set_Minterrupts_SEI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 9 9 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_SEI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 9 9 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_UEI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 8 8.
+
+Definition _set_Minterrupts_UEI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_UEI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_MTI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 7 7.
+
+Definition _set_Minterrupts_MTI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_MTI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_STI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 5 5.
+
+Definition _set_Minterrupts_STI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_STI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_UTI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 4 4.
+
+Definition _set_Minterrupts_UTI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_UTI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_MSI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 3 3.
+
+Definition _set_Minterrupts_MSI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 3 3 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_MSI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 3 3 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_SSI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 1 1.
+
+Definition _set_Minterrupts_SSI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_SSI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Minterrupts_USI (v : Minterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 0 0.
+
+Definition _set_Minterrupts_USI
+(r_ref : register_ref regstate register_value Minterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Minterrupts_Minterrupts_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Minterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Minterrupts_USI (v : Minterrupts) (x : mword 1)
+: Minterrupts :=
+
+ {[ v with
+ Minterrupts_Minterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Minterrupts_Minterrupts_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition legalize_mip (o : Minterrupts) (v : mword 64)
+: Minterrupts :=
+
+ let v := Mk_Minterrupts v in
+ let m := _update_Minterrupts_SEI o (_get_Minterrupts_SEI v) in
+ let m := _update_Minterrupts_STI m (_get_Minterrupts_STI v) in
+ _update_Minterrupts_SSI m (_get_Minterrupts_SSI v).
+
+Definition legalize_mie (o : Minterrupts) (v : mword 64)
+: Minterrupts :=
+
+ let v := Mk_Minterrupts v in
+ let m := _update_Minterrupts_MEI o (_get_Minterrupts_MEI v) in
+ let m := _update_Minterrupts_MTI m (_get_Minterrupts_MTI v) in
+ let m := _update_Minterrupts_MSI m (_get_Minterrupts_MSI v) in
+ let m := _update_Minterrupts_SEI m (_get_Minterrupts_SEI v) in
+ let m := _update_Minterrupts_STI m (_get_Minterrupts_STI v) in
+ _update_Minterrupts_SSI m (_get_Minterrupts_SSI v).
+
+Definition legalize_mideleg (o : Minterrupts) (v : mword 64)
+: Minterrupts :=
+
+ let m := Mk_Minterrupts v in
+ let m := _update_Minterrupts_MEI m ((bool_to_bits false) : mword 1) in
+ let m := _update_Minterrupts_MTI m ((bool_to_bits false) : mword 1) in
+ _update_Minterrupts_MSI m ((bool_to_bits false) : mword 1).
+
+Definition Mk_Medeleg (v : mword 64)
+: Medeleg :=
+
+ {| Medeleg_Medeleg_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Medeleg_bits (v : Medeleg)
+: mword 64 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 63 0.
+
+Definition _set_Medeleg_bits (r_ref : register_ref regstate register_value Medeleg) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_bits (v : Medeleg) (x : mword 64)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Medeleg_SAMO_Page_Fault (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 15 15.
+
+Definition _set_Medeleg_SAMO_Page_Fault
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 15 15 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_SAMO_Page_Fault (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 15 15 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Load_Page_Fault (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 13 13.
+
+Definition _set_Medeleg_Load_Page_Fault
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 13 13 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Load_Page_Fault (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 13 13 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Fetch_Page_Fault (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 12 12.
+
+Definition _set_Medeleg_Fetch_Page_Fault
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 12 12 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Fetch_Page_Fault (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 12 12 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_MEnvCall (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 10 10.
+
+Definition _set_Medeleg_MEnvCall
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 10 10 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_MEnvCall (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 10 10 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_SEnvCall (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 9 9.
+
+Definition _set_Medeleg_SEnvCall
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 9 9 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_SEnvCall (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 9 9 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_UEnvCall (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 8 8.
+
+Definition _set_Medeleg_UEnvCall
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_UEnvCall (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_SAMO_Access_Fault (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 7 7.
+
+Definition _set_Medeleg_SAMO_Access_Fault
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_SAMO_Access_Fault (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_SAMO_Addr_Align (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 6 6.
+
+Definition _set_Medeleg_SAMO_Addr_Align
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 6 6 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_SAMO_Addr_Align (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 6 6 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Load_Access_Fault (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 5 5.
+
+Definition _set_Medeleg_Load_Access_Fault
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Load_Access_Fault (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Load_Addr_Align (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 4 4.
+
+Definition _set_Medeleg_Load_Addr_Align
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Load_Addr_Align (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Breakpoint (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 3 3.
+
+Definition _set_Medeleg_Breakpoint
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 3 3 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Breakpoint (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 3 3 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Illegal_Instr (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 2 2.
+
+Definition _set_Medeleg_Illegal_Instr
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 2 2 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Illegal_Instr (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Fetch_Access_Fault (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 1 1.
+
+Definition _set_Medeleg_Fetch_Access_Fault
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Fetch_Access_Fault (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Medeleg_Fetch_Addr_Align (v : Medeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 0 0.
+
+Definition _set_Medeleg_Fetch_Addr_Align
+(r_ref : register_ref regstate register_value Medeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Medeleg_Medeleg_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Medeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Medeleg_Fetch_Addr_Align (v : Medeleg) (x : mword 1)
+: Medeleg :=
+
+ {[ v with
+ Medeleg_Medeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Medeleg_Medeleg_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition legalize_medeleg (o : Medeleg) (v : mword 64)
+: Medeleg :=
+
+ let m := Mk_Medeleg v in
+ _update_Medeleg_MEnvCall m ((bool_to_bits false) : mword 1).
+
+Definition Mk_Mtvec (v : mword 64)
+: Mtvec :=
+
+ {| Mtvec_Mtvec_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Mtvec_bits (v : Mtvec)
+: mword 64 :=
+
+ subrange_vec_dec v.(Mtvec_Mtvec_chunk_0) 63 0.
+
+Definition _set_Mtvec_bits (r_ref : register_ref regstate register_value Mtvec) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mtvec_Mtvec_chunk_0 :=
+ (update_subrange_vec_dec r.(Mtvec_Mtvec_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Mtvec in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mtvec_bits (v : Mtvec) (x : mword 64)
+: Mtvec :=
+
+ {[ v with
+ Mtvec_Mtvec_chunk_0 :=
+ (update_subrange_vec_dec v.(Mtvec_Mtvec_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Mtvec_Base (v : Mtvec)
+: mword 62 :=
+
+ subrange_vec_dec v.(Mtvec_Mtvec_chunk_0) 63 2.
+
+Definition _set_Mtvec_Base (r_ref : register_ref regstate register_value Mtvec) (v : mword 62)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mtvec_Mtvec_chunk_0 :=
+ (update_subrange_vec_dec r.(Mtvec_Mtvec_chunk_0) 63 2 (subrange_vec_dec v 61 0)) ]}
+ : Mtvec in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mtvec_Base (v : Mtvec) (x : mword 62)
+: Mtvec :=
+
+ {[ v with
+ Mtvec_Mtvec_chunk_0 :=
+ (update_subrange_vec_dec v.(Mtvec_Mtvec_chunk_0) 63 2 (subrange_vec_dec x 61 0)) ]}.
+
+Definition _get_Mtvec_Mode (v : Mtvec) : mword 2 := subrange_vec_dec v.(Mtvec_Mtvec_chunk_0) 1 0.
+
+Definition _set_Mtvec_Mode (r_ref : register_ref regstate register_value Mtvec) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mtvec_Mtvec_chunk_0 :=
+ (update_subrange_vec_dec r.(Mtvec_Mtvec_chunk_0) 1 0 (subrange_vec_dec v 1 0)) ]}
+ : Mtvec in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mtvec_Mode (v : Mtvec) (x : mword 2)
+: Mtvec :=
+
+ {[ v with
+ Mtvec_Mtvec_chunk_0 :=
+ (update_subrange_vec_dec v.(Mtvec_Mtvec_chunk_0) 1 0 (subrange_vec_dec x 1 0)) ]}.
+
+Definition legalize_tvec (o : Mtvec) (v : mword 64)
+: Mtvec :=
+
+ let v := Mk_Mtvec v in
+ match (trapVectorMode_of_bits (_get_Mtvec_Mode v)) with
+ | TV_Direct => v
+ | TV_Vector => v
+ | _ => _update_Mtvec_Mode v (_get_Mtvec_Mode o)
+ end.
+
+Definition Mk_Mcause (v : mword 64)
+: Mcause :=
+
+ {| Mcause_Mcause_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Mcause_bits (v : Mcause)
+: mword 64 :=
+
+ subrange_vec_dec v.(Mcause_Mcause_chunk_0) 63 0.
+
+Definition _set_Mcause_bits (r_ref : register_ref regstate register_value Mcause) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mcause_Mcause_chunk_0 :=
+ (update_subrange_vec_dec r.(Mcause_Mcause_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Mcause in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mcause_bits (v : Mcause) (x : mword 64)
+: Mcause :=
+
+ {[ v with
+ Mcause_Mcause_chunk_0 :=
+ (update_subrange_vec_dec v.(Mcause_Mcause_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Mcause_IsInterrupt (v : Mcause)
+: mword 1 :=
+
+ subrange_vec_dec v.(Mcause_Mcause_chunk_0) 63 63.
+
+Definition _set_Mcause_IsInterrupt
+(r_ref : register_ref regstate register_value Mcause) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mcause_Mcause_chunk_0 :=
+ (update_subrange_vec_dec r.(Mcause_Mcause_chunk_0) 63 63 (subrange_vec_dec v 0 0)) ]}
+ : Mcause in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mcause_IsInterrupt (v : Mcause) (x : mword 1)
+: Mcause :=
+
+ {[ v with
+ Mcause_Mcause_chunk_0 :=
+ (update_subrange_vec_dec v.(Mcause_Mcause_chunk_0) 63 63 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Mcause_Cause (v : Mcause)
+: mword 63 :=
+
+ subrange_vec_dec v.(Mcause_Mcause_chunk_0) 62 0.
+
+Definition _set_Mcause_Cause (r_ref : register_ref regstate register_value Mcause) (v : mword 63)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Mcause_Mcause_chunk_0 :=
+ (update_subrange_vec_dec r.(Mcause_Mcause_chunk_0) 62 0 (subrange_vec_dec v 62 0)) ]}
+ : Mcause in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Mcause_Cause (v : Mcause) (x : mword 63)
+: Mcause :=
+
+ {[ v with
+ Mcause_Mcause_chunk_0 :=
+ (update_subrange_vec_dec v.(Mcause_Mcause_chunk_0) 62 0 (subrange_vec_dec x 62 0)) ]}.
+
+Definition tvec_addr (m : Mtvec) (c : Mcause)
+: option (mword 64) :=
+
+ let base : xlenbits := concat_vec (_get_Mtvec_Base m) (vec_of_bits [B0;B0] : mword 2) in
+ match (trapVectorMode_of_bits (_get_Mtvec_Mode m)) with
+ | TV_Direct => Some (base)
+ | TV_Vector =>
+ if ((eq_vec (_get_Mcause_IsInterrupt c) ((bool_to_bits true) : mword 1))) then
+ Some
+ (add_vec base
+ (shift_bits_left (EXTZ 64 (_get_Mcause_Cause c)) (vec_of_bits [B1;B0] : mword 2)))
+ else Some (base)
+ | TV_Reserved => None
+ end.
+
+Definition legalize_xepc (v : mword 64)
+: M (mword 64) :=
+
+ (haveRVC tt) >>= fun w__0 : bool =>
+ returnm ((and_vec v
+ (EXTS 64
+ (if (w__0) then (vec_of_bits [B1;B1;B0] : mword 3)
+ else (vec_of_bits [B1;B0;B0] : mword 3))))
+ : mword 64).
+
+Definition pc_alignment_mask '(tt : unit)
+: M (mword 64) :=
+
+ read_reg misa_ref >>= fun w__0 : Misa =>
+ returnm ((not_vec
+ (EXTZ 64
+ (if ((eq_vec (_get_Misa_C w__0) ((bool_to_bits true) : mword 1))) then
+ (vec_of_bits [B0;B0] : mword 2)
+ else (vec_of_bits [B1;B0] : mword 2))))
+ : mword 64).
+
+Definition Mk_Counteren (v : mword 32)
+: Counteren :=
+
+ {| Counteren_Counteren_chunk_0 := (subrange_vec_dec v 31 0) |}.
+
+Definition _get_Counteren_bits (v : Counteren)
+: mword 32 :=
+
+ subrange_vec_dec v.(Counteren_Counteren_chunk_0) 31 0.
+
+Definition _set_Counteren_bits
+(r_ref : register_ref regstate register_value Counteren) (v : mword 32)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec r.(Counteren_Counteren_chunk_0) 31 0 (subrange_vec_dec v 31 0)) ]}
+ : Counteren in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Counteren_bits (v : Counteren) (x : mword 32)
+: Counteren :=
+
+ {[ v with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec v.(Counteren_Counteren_chunk_0) 31 0 (subrange_vec_dec x 31 0)) ]}.
+
+Definition _get_Counteren_HPM (v : Counteren)
+: mword 29 :=
+
+ subrange_vec_dec v.(Counteren_Counteren_chunk_0) 31 3.
+
+Definition _set_Counteren_HPM
+(r_ref : register_ref regstate register_value Counteren) (v : mword 29)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec r.(Counteren_Counteren_chunk_0) 31 3 (subrange_vec_dec v 28 0)) ]}
+ : Counteren in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Counteren_HPM (v : Counteren) (x : mword 29)
+: Counteren :=
+
+ {[ v with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec v.(Counteren_Counteren_chunk_0) 31 3 (subrange_vec_dec x 28 0)) ]}.
+
+Definition _get_Counteren_IR (v : Counteren)
+: mword 1 :=
+
+ subrange_vec_dec v.(Counteren_Counteren_chunk_0) 2 2.
+
+Definition _set_Counteren_IR (r_ref : register_ref regstate register_value Counteren) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec r.(Counteren_Counteren_chunk_0) 2 2 (subrange_vec_dec v 0 0)) ]}
+ : Counteren in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Counteren_IR (v : Counteren) (x : mword 1)
+: Counteren :=
+
+ {[ v with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec v.(Counteren_Counteren_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Counteren_TM (v : Counteren)
+: mword 1 :=
+
+ subrange_vec_dec v.(Counteren_Counteren_chunk_0) 1 1.
+
+Definition _set_Counteren_TM (r_ref : register_ref regstate register_value Counteren) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec r.(Counteren_Counteren_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Counteren in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Counteren_TM (v : Counteren) (x : mword 1)
+: Counteren :=
+
+ {[ v with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec v.(Counteren_Counteren_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Counteren_CY (v : Counteren)
+: mword 1 :=
+
+ subrange_vec_dec v.(Counteren_Counteren_chunk_0) 0 0.
+
+Definition _set_Counteren_CY (r_ref : register_ref regstate register_value Counteren) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec r.(Counteren_Counteren_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Counteren in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Counteren_CY (v : Counteren) (x : mword 1)
+: Counteren :=
+
+ {[ v with
+ Counteren_Counteren_chunk_0 :=
+ (update_subrange_vec_dec v.(Counteren_Counteren_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition legalize_mcounteren (c : Counteren) (v : mword 64)
+: M (Counteren) :=
+
+ (cast_unit_vec (access_vec_dec v 2)) >>= fun w__0 : mword 1 =>
+ let c := _update_Counteren_IR c (w__0 : mword 1) in
+ (cast_unit_vec (access_vec_dec v 1)) >>= fun w__1 : mword 1 =>
+ let c := _update_Counteren_TM c (w__1 : mword 1) in
+ (cast_unit_vec (access_vec_dec v 0)) >>= fun w__2 : mword 1 =>
+ let c := _update_Counteren_CY c (w__2 : mword 1) in
+ returnm (c
+ : Counteren).
+
+Definition legalize_scounteren (c : Counteren) (v : mword 64)
+: M (Counteren) :=
+
+ (cast_unit_vec (access_vec_dec v 2)) >>= fun w__0 : mword 1 =>
+ let c := _update_Counteren_IR c (w__0 : mword 1) in
+ (cast_unit_vec (access_vec_dec v 1)) >>= fun w__1 : mword 1 =>
+ let c := _update_Counteren_TM c (w__1 : mword 1) in
+ (cast_unit_vec (access_vec_dec v 0)) >>= fun w__2 : mword 1 =>
+ let c := _update_Counteren_CY c (w__2 : mword 1) in
+ returnm (c
+ : Counteren).
+
+Definition retire_instruction '(tt : unit)
+: M (unit) :=
+
+ read_reg minstret_written_ref >>= fun w__0 : bool =>
+ (if ((Bool.eqb w__0 true)) then write_reg minstret_written_ref false : M (unit)
+ else
+ ((read_reg minstret_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ write_reg minstret_ref (add_vec_int w__1 1)
+ : M (unit))
+ : M (unit).
+
+Definition Mk_Sstatus (v : mword 64)
+: Sstatus :=
+
+ {| Sstatus_Sstatus_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Sstatus_bits (v : Sstatus)
+: mword 64 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 63 0.
+
+Definition _set_Sstatus_bits (r_ref : register_ref regstate register_value Sstatus) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_bits (v : Sstatus) (x : mword 64)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Sstatus_SD (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 63 63.
+
+Definition _set_Sstatus_SD (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 63 63 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_SD (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 63 63 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_UXL (v : Sstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 33 32.
+
+Definition _set_Sstatus_UXL (r_ref : register_ref regstate register_value Sstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 33 32 (subrange_vec_dec v 1 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_UXL (v : Sstatus) (x : mword 2)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 33 32 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Sstatus_MXR (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 19 19.
+
+Definition _set_Sstatus_MXR (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 19 19 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_MXR (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 19 19 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_SUM (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 18 18.
+
+Definition _set_Sstatus_SUM (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 18 18 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_SUM (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 18 18 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_XS (v : Sstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 16 15.
+
+Definition _set_Sstatus_XS (r_ref : register_ref regstate register_value Sstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 16 15 (subrange_vec_dec v 1 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_XS (v : Sstatus) (x : mword 2)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 16 15 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Sstatus_FS (v : Sstatus)
+: mword 2 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 14 13.
+
+Definition _set_Sstatus_FS (r_ref : register_ref regstate register_value Sstatus) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 14 13 (subrange_vec_dec v 1 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_FS (v : Sstatus) (x : mword 2)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 14 13 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_Sstatus_SPP (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 8 8.
+
+Definition _set_Sstatus_SPP (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_SPP (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_SPIE (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 5 5.
+
+Definition _set_Sstatus_SPIE (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_SPIE (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_UPIE (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 4 4.
+
+Definition _set_Sstatus_UPIE (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_UPIE (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_SIE (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 1 1.
+
+Definition _set_Sstatus_SIE (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_SIE (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sstatus_UIE (v : Sstatus)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 0 0.
+
+Definition _set_Sstatus_UIE (r_ref : register_ref regstate register_value Sstatus) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec r.(Sstatus_Sstatus_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Sstatus in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sstatus_UIE (v : Sstatus) (x : mword 1)
+: Sstatus :=
+
+ {[ v with
+ Sstatus_Sstatus_chunk_0 :=
+ (update_subrange_vec_dec v.(Sstatus_Sstatus_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition lower_mstatus (m : Mstatus)
+: Sstatus :=
+
+ let s := Mk_Sstatus (EXTZ 64 (vec_of_bits [B0] : mword 1)) in
+ let s := _update_Sstatus_SD s (_get_Mstatus_SD m) in
+ let s := _update_Sstatus_UXL s (_get_Mstatus_UXL m) in
+ let s := _update_Sstatus_MXR s (_get_Mstatus_MXR m) in
+ let s := _update_Sstatus_SUM s (_get_Mstatus_SUM m) in
+ let s := _update_Sstatus_XS s (_get_Mstatus_XS m) in
+ let s := _update_Sstatus_FS s (_get_Mstatus_FS m) in
+ let s := _update_Sstatus_SPP s (_get_Mstatus_SPP m) in
+ let s := _update_Sstatus_SPIE s (_get_Mstatus_SPIE m) in
+ let s := _update_Sstatus_UPIE s (_get_Mstatus_UPIE m) in
+ let s := _update_Sstatus_SIE s (_get_Mstatus_SIE m) in
+ _update_Sstatus_UIE s (_get_Mstatus_UIE m).
+
+Definition lift_sstatus (m : Mstatus) (s : Sstatus)
+: Mstatus :=
+
+ let m := _update_Mstatus_MXR m (_get_Sstatus_MXR s) in
+ let m := _update_Mstatus_SUM m (_get_Sstatus_SUM s) in
+ let m := _update_Mstatus_XS m (_get_Sstatus_XS s) in
+ let m := _update_Mstatus_FS m (_get_Sstatus_FS s) in
+ let m :=
+ _update_Mstatus_SD m
+ ((bool_to_bits
+ (orb
+ (eq_vec (extStatus_to_bits (extStatus_of_bits (_get_Mstatus_FS m)))
+ ((extStatus_to_bits Dirty)
+ : mword 2))
+ (eq_vec (extStatus_to_bits (extStatus_of_bits (_get_Mstatus_XS m)))
+ ((extStatus_to_bits Dirty)
+ : mword 2))))
+ : mword 1) in
+ let m := _update_Mstatus_SPP m (_get_Sstatus_SPP s) in
+ let m := _update_Mstatus_SPIE m (_get_Sstatus_SPIE s) in
+ let m := _update_Mstatus_UPIE m (_get_Sstatus_UPIE s) in
+ let m := _update_Mstatus_SIE m (_get_Sstatus_SIE s) in
+ _update_Mstatus_UIE m (_get_Sstatus_UIE s).
+
+Definition legalize_sstatus (m : Mstatus) (v : mword 64)
+: Mstatus :=
+
+ lift_sstatus m (Mk_Sstatus v).
+
+Definition Mk_Sedeleg (v : mword 64)
+: Sedeleg :=
+
+ {| Sedeleg_Sedeleg_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Sedeleg_bits (v : Sedeleg)
+: mword 64 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 63 0.
+
+Definition _set_Sedeleg_bits (r_ref : register_ref regstate register_value Sedeleg) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_bits (v : Sedeleg) (x : mword 64)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Sedeleg_UEnvCall (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 8 8.
+
+Definition _set_Sedeleg_UEnvCall
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_UEnvCall (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_SAMO_Access_Fault (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 7 7.
+
+Definition _set_Sedeleg_SAMO_Access_Fault
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_SAMO_Access_Fault (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_SAMO_Addr_Align (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 6 6.
+
+Definition _set_Sedeleg_SAMO_Addr_Align
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 6 6 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_SAMO_Addr_Align (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 6 6 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_Load_Access_Fault (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 5 5.
+
+Definition _set_Sedeleg_Load_Access_Fault
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_Load_Access_Fault (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_Load_Addr_Align (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 4 4.
+
+Definition _set_Sedeleg_Load_Addr_Align
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_Load_Addr_Align (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_Breakpoint (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 3 3.
+
+Definition _set_Sedeleg_Breakpoint
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 3 3 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_Breakpoint (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 3 3 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_Illegal_Instr (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 2 2.
+
+Definition _set_Sedeleg_Illegal_Instr
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 2 2 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_Illegal_Instr (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_Fetch_Access_Fault (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 1 1.
+
+Definition _set_Sedeleg_Fetch_Access_Fault
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_Fetch_Access_Fault (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sedeleg_Fetch_Addr_Align (v : Sedeleg)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 0 0.
+
+Definition _set_Sedeleg_Fetch_Addr_Align
+(r_ref : register_ref regstate register_value Sedeleg) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec r.(Sedeleg_Sedeleg_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Sedeleg in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sedeleg_Fetch_Addr_Align (v : Sedeleg) (x : mword 1)
+: Sedeleg :=
+
+ {[ v with
+ Sedeleg_Sedeleg_chunk_0 :=
+ (update_subrange_vec_dec v.(Sedeleg_Sedeleg_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition legalize_sedeleg (s : Sedeleg) (v : mword 64)
+: Sedeleg :=
+
+ Mk_Sedeleg (EXTZ 64 (subrange_vec_dec v 8 0)).
+
+Definition Mk_Sinterrupts (v : mword 64)
+: Sinterrupts :=
+
+ {| Sinterrupts_Sinterrupts_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Sinterrupts_bits (v : Sinterrupts)
+: mword 64 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 63 0.
+
+Definition _set_Sinterrupts_bits
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_bits (v : Sinterrupts) (x : mword 64)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Sinterrupts_SEI (v : Sinterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 9 9.
+
+Definition _set_Sinterrupts_SEI
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 9 9 (subrange_vec_dec v 0 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_SEI (v : Sinterrupts) (x : mword 1)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 9 9 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sinterrupts_UEI (v : Sinterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 8 8.
+
+Definition _set_Sinterrupts_UEI
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 8 8 (subrange_vec_dec v 0 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_UEI (v : Sinterrupts) (x : mword 1)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 8 8 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sinterrupts_STI (v : Sinterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 5 5.
+
+Definition _set_Sinterrupts_STI
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_STI (v : Sinterrupts) (x : mword 1)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sinterrupts_UTI (v : Sinterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 4 4.
+
+Definition _set_Sinterrupts_UTI
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_UTI (v : Sinterrupts) (x : mword 1)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sinterrupts_SSI (v : Sinterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 1 1.
+
+Definition _set_Sinterrupts_SSI
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_SSI (v : Sinterrupts) (x : mword 1)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_Sinterrupts_USI (v : Sinterrupts)
+: mword 1 :=
+
+ subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 0 0.
+
+Definition _set_Sinterrupts_USI
+(r_ref : register_ref regstate register_value Sinterrupts) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec r.(Sinterrupts_Sinterrupts_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : Sinterrupts in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Sinterrupts_USI (v : Sinterrupts) (x : mword 1)
+: Sinterrupts :=
+
+ {[ v with
+ Sinterrupts_Sinterrupts_chunk_0 :=
+ (update_subrange_vec_dec v.(Sinterrupts_Sinterrupts_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition lower_mip (m : Minterrupts) (d : Minterrupts)
+: Sinterrupts :=
+
+ let s : Sinterrupts := Mk_Sinterrupts (EXTZ 64 (vec_of_bits [B0] : mword 1)) in
+ let s := _update_Sinterrupts_SEI s (and_vec (_get_Minterrupts_SEI m) (_get_Minterrupts_SEI d)) in
+ let s := _update_Sinterrupts_STI s (and_vec (_get_Minterrupts_STI m) (_get_Minterrupts_STI d)) in
+ let s := _update_Sinterrupts_SSI s (and_vec (_get_Minterrupts_SSI m) (_get_Minterrupts_SSI d)) in
+ let s := _update_Sinterrupts_UEI s (and_vec (_get_Minterrupts_UEI m) (_get_Minterrupts_UEI d)) in
+ let s := _update_Sinterrupts_UTI s (and_vec (_get_Minterrupts_UTI m) (_get_Minterrupts_UTI d)) in
+ _update_Sinterrupts_USI s (and_vec (_get_Minterrupts_USI m) (_get_Minterrupts_USI d)).
+
+Definition lower_mie (m : Minterrupts) (d : Minterrupts)
+: Sinterrupts :=
+
+ let s : Sinterrupts := Mk_Sinterrupts (EXTZ 64 (vec_of_bits [B0] : mword 1)) in
+ let s := _update_Sinterrupts_SEI s (and_vec (_get_Minterrupts_SEI m) (_get_Minterrupts_SEI d)) in
+ let s := _update_Sinterrupts_STI s (and_vec (_get_Minterrupts_STI m) (_get_Minterrupts_STI d)) in
+ let s := _update_Sinterrupts_SSI s (and_vec (_get_Minterrupts_SSI m) (_get_Minterrupts_SSI d)) in
+ let s := _update_Sinterrupts_UEI s (and_vec (_get_Minterrupts_UEI m) (_get_Minterrupts_UEI d)) in
+ let s := _update_Sinterrupts_UTI s (and_vec (_get_Minterrupts_UTI m) (_get_Minterrupts_UTI d)) in
+ _update_Sinterrupts_USI s (and_vec (_get_Minterrupts_USI m) (_get_Minterrupts_USI d)).
+
+Definition lift_sip (o : Minterrupts) (d : Minterrupts) (s : Sinterrupts)
+: Minterrupts :=
+
+ let m : Minterrupts := o in
+ let m := _update_Minterrupts_SSI m (and_vec (_get_Sinterrupts_SSI s) (_get_Minterrupts_SSI d)) in
+ let m := _update_Minterrupts_UEI m (and_vec (_get_Minterrupts_UEI m) (_get_Minterrupts_UEI d)) in
+ _update_Minterrupts_USI m (and_vec (_get_Minterrupts_USI m) (_get_Minterrupts_USI d)).
+
+Definition legalize_sip (m : Minterrupts) (d : Minterrupts) (v : mword 64)
+: Minterrupts :=
+
+ lift_sip m d (Mk_Sinterrupts v).
+
+Definition lift_sie (o : Minterrupts) (d : Minterrupts) (s : Sinterrupts)
+: Minterrupts :=
+
+ let m : Minterrupts := o in
+ let m :=
+ if ((eq_vec (_get_Minterrupts_SEI d) ((bool_to_bits true) : mword 1))) then
+ _update_Minterrupts_SEI m (_get_Sinterrupts_SEI s)
+ else m in
+ let m :=
+ if ((eq_vec (_get_Minterrupts_STI d) ((bool_to_bits true) : mword 1))) then
+ _update_Minterrupts_STI m (_get_Sinterrupts_STI s)
+ else m in
+ let m :=
+ if ((eq_vec (_get_Minterrupts_SSI d) ((bool_to_bits true) : mword 1))) then
+ _update_Minterrupts_SSI m (_get_Sinterrupts_SSI s)
+ else m in
+ let m :=
+ if ((eq_vec (_get_Minterrupts_UEI d) ((bool_to_bits true) : mword 1))) then
+ _update_Minterrupts_UEI m (_get_Sinterrupts_UEI s)
+ else m in
+ let m :=
+ if ((eq_vec (_get_Minterrupts_UTI d) ((bool_to_bits true) : mword 1))) then
+ _update_Minterrupts_UTI m (_get_Sinterrupts_UTI s)
+ else m in
+ if ((eq_vec (_get_Minterrupts_USI d) ((bool_to_bits true) : mword 1))) then
+ _update_Minterrupts_USI m (_get_Sinterrupts_USI s)
+ else m.
+
+Definition legalize_sie (m : Minterrupts) (d : Minterrupts) (v : mword 64)
+: Minterrupts :=
+
+ lift_sie m d (Mk_Sinterrupts v).
+
+Definition Mk_Satp64 (v : mword 64)
+: Satp64 :=
+
+ {| Satp64_Satp64_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_Satp64_bits (v : Satp64)
+: mword 64 :=
+
+ subrange_vec_dec v.(Satp64_Satp64_chunk_0) 63 0.
+
+Definition _set_Satp64_bits (r_ref : register_ref regstate register_value Satp64) (v : mword 64)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec r.(Satp64_Satp64_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : Satp64 in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Satp64_bits (v : Satp64) (x : mword 64)
+: Satp64 :=
+
+ {[ v with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec v.(Satp64_Satp64_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_Satp64_Mode (v : Satp64)
+: mword 4 :=
+
+ subrange_vec_dec v.(Satp64_Satp64_chunk_0) 63 60.
+
+Definition _set_Satp64_Mode (r_ref : register_ref regstate register_value Satp64) (v : mword 4)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec r.(Satp64_Satp64_chunk_0) 63 60 (subrange_vec_dec v 3 0)) ]}
+ : Satp64 in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Satp64_Mode (v : Satp64) (x : mword 4)
+: Satp64 :=
+
+ {[ v with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec v.(Satp64_Satp64_chunk_0) 63 60 (subrange_vec_dec x 3 0)) ]}.
+
+Definition _get_Satp64_Asid (v : Satp64)
+: mword 16 :=
+
+ subrange_vec_dec v.(Satp64_Satp64_chunk_0) 59 44.
+
+Definition _set_Satp64_Asid (r_ref : register_ref regstate register_value Satp64) (v : mword 16)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec r.(Satp64_Satp64_chunk_0) 59 44 (subrange_vec_dec v 15 0)) ]}
+ : Satp64 in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Satp64_Asid (v : Satp64) (x : mword 16)
+: Satp64 :=
+
+ {[ v with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec v.(Satp64_Satp64_chunk_0) 59 44 (subrange_vec_dec x 15 0)) ]}.
+
+Definition _get_Satp64_PPN (v : Satp64)
+: mword 44 :=
+
+ subrange_vec_dec v.(Satp64_Satp64_chunk_0) 43 0.
+
+Definition _set_Satp64_PPN (r_ref : register_ref regstate register_value Satp64) (v : mword 44)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec r.(Satp64_Satp64_chunk_0) 43 0 (subrange_vec_dec v 43 0)) ]}
+ : Satp64 in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_Satp64_PPN (v : Satp64) (x : mword 44)
+: Satp64 :=
+
+ {[ v with
+ Satp64_Satp64_chunk_0 :=
+ (update_subrange_vec_dec v.(Satp64_Satp64_chunk_0) 43 0 (subrange_vec_dec x 43 0)) ]}.
+
+Definition legalize_satp (a : Architecture) (o : mword 64) (v : mword 64)
+: mword 64 :=
+
+ let s := Mk_Satp64 v in
+ match (satpMode_of_bits a (_get_Satp64_Mode s)) with
+ | None => o
+ | Some (Sv32) => o
+ | Some (_) => _get_Satp64_bits s
+ end.
+
+Definition csr_name (csr : mword 12)
+: string :=
+
+ let b__0 := csr in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then "ustatus"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "uie"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ "utvec"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "fflags"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "frm"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "fcsr"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "cycle"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "time"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "instret"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "cycleh"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "timeh"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "instreth"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "sstatus"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "sedeleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "sideleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "sie"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ "stvec"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ "scounteren"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "sscratch"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "sepc"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "scause"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "stval"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "sip"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "satp"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12))) then
+ "mvendorid"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12))) then
+ "marchid"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12))) then
+ "mimpid"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12))) then
+ "mhartid"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mstatus"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "misa"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "medeleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "mideleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "mie"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ "mtvec"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ "mcounteren"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mscratch"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "mepc"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "mcause"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "mtval"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "mip"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ "pmpcfg0"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12))) then
+ "pmpaddr0"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mcycle"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "minstret"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mcycleh"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "minstreth"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ "tselect"
+ else "UNKNOWN".
+
+Definition csr_name_map_forwards (arg_ : mword 12)
+: string :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then "ustatus"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "uie"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ "utvec"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "uscratch"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "uepc"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "ucause"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "utval"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "uip"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "fflags"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "frm"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "fcsr"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "cycle"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "time"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "instret"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "cycleh"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "timeh"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "instreth"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "sstatus"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "sedeleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "sideleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "sie"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ "stvec"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ "scounteren"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "sscratch"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "sepc"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "scause"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "stval"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "sip"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "satp"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12))) then
+ "mvendorid"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12))) then
+ "marchid"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12))) then
+ "mimpid"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12))) then
+ "mhartid"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mstatus"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "misa"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "medeleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "mideleg"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "mie"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ "mtvec"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ "mcounteren"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mscratch"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ "mepc"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "mcause"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ "mtval"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ "mip"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ "pmpcfg0"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12))) then
+ "pmpcfg1"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12))) then
+ "pmpcfg2"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12))) then
+ "pmpcfg3"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12))) then
+ "pmpaddr0"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B1] : mword 12))) then
+ "pmpaddr1"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B0] : mword 12))) then
+ "pmpaddr2"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B1] : mword 12))) then
+ "pmpaddr3"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B0] : mword 12))) then
+ "pmpaddr4"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B1] : mword 12))) then
+ "pmpaddr5"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B0] : mword 12))) then
+ "pmpaddr6"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B1] : mword 12))) then
+ "pmpaddr7"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B0] : mword 12))) then
+ "pmpaddr8"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B1] : mword 12))) then
+ "pmpaddr9"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B0] : mword 12))) then
+ "pmpaddr10"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B1] : mword 12))) then
+ "pmpaddr11"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B0] : mword 12))) then
+ "pmpaddr12"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B1] : mword 12))) then
+ "pmpaddr13"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B0] : mword 12))) then
+ "pmpaddr14"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword 12))) then
+ "pmpaddr15"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mcycle"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "minstret"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ "mcycleh"
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ "minstreth"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ "tselect"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12))) then
+ "tdata1"
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12))) then
+ "tdata2"
+ else "tdata3".
+
+Definition csr_name_map_backwards (arg_ : string)
+: mword 12 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "ustatus")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "uie")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "utvec")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "uscratch")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "uepc")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "ucause")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "utval")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "uip")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "fflags")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "frm")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "fcsr")) then
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "cycle")) then
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "time")) then
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "instret")) then
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "cycleh")) then
+ (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "timeh")) then
+ (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "instreth")) then
+ (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "sstatus")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "sedeleg")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "sideleg")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "sie")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "stvec")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "scounteren")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "sscratch")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "sepc")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "scause")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "stval")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "sip")) then
+ (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "satp")) then
+ (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "mvendorid")) then
+ (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "marchid")) then
+ (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "mimpid")) then
+ (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "mhartid")) then
+ (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "mstatus")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "misa")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "medeleg")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "mideleg")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "mie")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "mtvec")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "mcounteren")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "mscratch")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "mepc")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "mcause")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "mtval")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "mip")) then
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpcfg0")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpcfg1")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpcfg2")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpcfg3")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr0")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr1")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr2")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr3")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr4")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr5")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr6")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr7")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr8")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr9")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr10")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr11")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr12")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr13")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr14")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "pmpaddr15")) then
+ (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword 12)
+ else if ((generic_eq p0_ "mcycle")) then
+ (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "minstret")) then
+ (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "mcycleh")) then
+ (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "minstreth")) then
+ (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12)
+ else if ((generic_eq p0_ "tselect")) then
+ (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12)
+ else if ((generic_eq p0_ "tdata1")) then
+ (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12)
+ else if ((generic_eq p0_ "tdata2")) then
+ (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12)
+ else (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12).
+
+Definition csr_name_map_forwards_matches (arg_ : mword 12)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12))) then true
+ else false.
+
+Definition csr_name_map_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "ustatus")) then true
+ else if ((generic_eq p0_ "uie")) then true
+ else if ((generic_eq p0_ "utvec")) then true
+ else if ((generic_eq p0_ "uscratch")) then true
+ else if ((generic_eq p0_ "uepc")) then true
+ else if ((generic_eq p0_ "ucause")) then true
+ else if ((generic_eq p0_ "utval")) then true
+ else if ((generic_eq p0_ "uip")) then true
+ else if ((generic_eq p0_ "fflags")) then true
+ else if ((generic_eq p0_ "frm")) then true
+ else if ((generic_eq p0_ "fcsr")) then true
+ else if ((generic_eq p0_ "cycle")) then true
+ else if ((generic_eq p0_ "time")) then true
+ else if ((generic_eq p0_ "instret")) then true
+ else if ((generic_eq p0_ "cycleh")) then true
+ else if ((generic_eq p0_ "timeh")) then true
+ else if ((generic_eq p0_ "instreth")) then true
+ else if ((generic_eq p0_ "sstatus")) then true
+ else if ((generic_eq p0_ "sedeleg")) then true
+ else if ((generic_eq p0_ "sideleg")) then true
+ else if ((generic_eq p0_ "sie")) then true
+ else if ((generic_eq p0_ "stvec")) then true
+ else if ((generic_eq p0_ "scounteren")) then true
+ else if ((generic_eq p0_ "sscratch")) then true
+ else if ((generic_eq p0_ "sepc")) then true
+ else if ((generic_eq p0_ "scause")) then true
+ else if ((generic_eq p0_ "stval")) then true
+ else if ((generic_eq p0_ "sip")) then true
+ else if ((generic_eq p0_ "satp")) then true
+ else if ((generic_eq p0_ "mvendorid")) then true
+ else if ((generic_eq p0_ "marchid")) then true
+ else if ((generic_eq p0_ "mimpid")) then true
+ else if ((generic_eq p0_ "mhartid")) then true
+ else if ((generic_eq p0_ "mstatus")) then true
+ else if ((generic_eq p0_ "misa")) then true
+ else if ((generic_eq p0_ "medeleg")) then true
+ else if ((generic_eq p0_ "mideleg")) then true
+ else if ((generic_eq p0_ "mie")) then true
+ else if ((generic_eq p0_ "mtvec")) then true
+ else if ((generic_eq p0_ "mcounteren")) then true
+ else if ((generic_eq p0_ "mscratch")) then true
+ else if ((generic_eq p0_ "mepc")) then true
+ else if ((generic_eq p0_ "mcause")) then true
+ else if ((generic_eq p0_ "mtval")) then true
+ else if ((generic_eq p0_ "mip")) then true
+ else if ((generic_eq p0_ "pmpcfg0")) then true
+ else if ((generic_eq p0_ "pmpcfg1")) then true
+ else if ((generic_eq p0_ "pmpcfg2")) then true
+ else if ((generic_eq p0_ "pmpcfg3")) then true
+ else if ((generic_eq p0_ "pmpaddr0")) then true
+ else if ((generic_eq p0_ "pmpaddr1")) then true
+ else if ((generic_eq p0_ "pmpaddr2")) then true
+ else if ((generic_eq p0_ "pmpaddr3")) then true
+ else if ((generic_eq p0_ "pmpaddr4")) then true
+ else if ((generic_eq p0_ "pmpaddr5")) then true
+ else if ((generic_eq p0_ "pmpaddr6")) then true
+ else if ((generic_eq p0_ "pmpaddr7")) then true
+ else if ((generic_eq p0_ "pmpaddr8")) then true
+ else if ((generic_eq p0_ "pmpaddr9")) then true
+ else if ((generic_eq p0_ "pmpaddr10")) then true
+ else if ((generic_eq p0_ "pmpaddr11")) then true
+ else if ((generic_eq p0_ "pmpaddr12")) then true
+ else if ((generic_eq p0_ "pmpaddr13")) then true
+ else if ((generic_eq p0_ "pmpaddr14")) then true
+ else if ((generic_eq p0_ "pmpaddr15")) then true
+ else if ((generic_eq p0_ "mcycle")) then true
+ else if ((generic_eq p0_ "minstret")) then true
+ else if ((generic_eq p0_ "mcycleh")) then true
+ else if ((generic_eq p0_ "minstreth")) then true
+ else if ((generic_eq p0_ "tselect")) then true
+ else if ((generic_eq p0_ "tdata1")) then true
+ else if ((generic_eq p0_ "tdata2")) then true
+ else if ((generic_eq p0_ "tdata3")) then true
+ else false.
+
+Definition _s488_ (_s489_ : string)
+: option string :=
+
+ let _s490_ := _s489_ in
+ if ((string_startswith _s490_ "tdata3")) then
+ match (string_drop _s490_ (projT1 (string_length "tdata3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s484_ (_s485_ : string)
+: option string :=
+
+ let _s486_ := _s485_ in
+ if ((string_startswith _s486_ "tdata2")) then
+ match (string_drop _s486_ (projT1 (string_length "tdata2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s480_ (_s481_ : string)
+: option string :=
+
+ let _s482_ := _s481_ in
+ if ((string_startswith _s482_ "tdata1")) then
+ match (string_drop _s482_ (projT1 (string_length "tdata1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s476_ (_s477_ : string)
+: option string :=
+
+ let _s478_ := _s477_ in
+ if ((string_startswith _s478_ "tselect")) then
+ match (string_drop _s478_ (projT1 (string_length "tselect"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s472_ (_s473_ : string)
+: option string :=
+
+ let _s474_ := _s473_ in
+ if ((string_startswith _s474_ "minstreth")) then
+ match (string_drop _s474_ (projT1 (string_length "minstreth"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s468_ (_s469_ : string)
+: option string :=
+
+ let _s470_ := _s469_ in
+ if ((string_startswith _s470_ "mcycleh")) then
+ match (string_drop _s470_ (projT1 (string_length "mcycleh"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s464_ (_s465_ : string)
+: option string :=
+
+ let _s466_ := _s465_ in
+ if ((string_startswith _s466_ "minstret")) then
+ match (string_drop _s466_ (projT1 (string_length "minstret"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s460_ (_s461_ : string)
+: option string :=
+
+ let _s462_ := _s461_ in
+ if ((string_startswith _s462_ "mcycle")) then
+ match (string_drop _s462_ (projT1 (string_length "mcycle"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s456_ (_s457_ : string)
+: option string :=
+
+ let _s458_ := _s457_ in
+ if ((string_startswith _s458_ "pmpaddr15")) then
+ match (string_drop _s458_ (projT1 (string_length "pmpaddr15"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s452_ (_s453_ : string)
+: option string :=
+
+ let _s454_ := _s453_ in
+ if ((string_startswith _s454_ "pmpaddr14")) then
+ match (string_drop _s454_ (projT1 (string_length "pmpaddr14"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s448_ (_s449_ : string)
+: option string :=
+
+ let _s450_ := _s449_ in
+ if ((string_startswith _s450_ "pmpaddr13")) then
+ match (string_drop _s450_ (projT1 (string_length "pmpaddr13"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s444_ (_s445_ : string)
+: option string :=
+
+ let _s446_ := _s445_ in
+ if ((string_startswith _s446_ "pmpaddr12")) then
+ match (string_drop _s446_ (projT1 (string_length "pmpaddr12"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s440_ (_s441_ : string)
+: option string :=
+
+ let _s442_ := _s441_ in
+ if ((string_startswith _s442_ "pmpaddr11")) then
+ match (string_drop _s442_ (projT1 (string_length "pmpaddr11"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s436_ (_s437_ : string)
+: option string :=
+
+ let _s438_ := _s437_ in
+ if ((string_startswith _s438_ "pmpaddr10")) then
+ match (string_drop _s438_ (projT1 (string_length "pmpaddr10"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s432_ (_s433_ : string)
+: option string :=
+
+ let _s434_ := _s433_ in
+ if ((string_startswith _s434_ "pmpaddr9")) then
+ match (string_drop _s434_ (projT1 (string_length "pmpaddr9"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s428_ (_s429_ : string)
+: option string :=
+
+ let _s430_ := _s429_ in
+ if ((string_startswith _s430_ "pmpaddr8")) then
+ match (string_drop _s430_ (projT1 (string_length "pmpaddr8"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s424_ (_s425_ : string)
+: option string :=
+
+ let _s426_ := _s425_ in
+ if ((string_startswith _s426_ "pmpaddr7")) then
+ match (string_drop _s426_ (projT1 (string_length "pmpaddr7"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s420_ (_s421_ : string)
+: option string :=
+
+ let _s422_ := _s421_ in
+ if ((string_startswith _s422_ "pmpaddr6")) then
+ match (string_drop _s422_ (projT1 (string_length "pmpaddr6"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s416_ (_s417_ : string)
+: option string :=
+
+ let _s418_ := _s417_ in
+ if ((string_startswith _s418_ "pmpaddr5")) then
+ match (string_drop _s418_ (projT1 (string_length "pmpaddr5"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s412_ (_s413_ : string)
+: option string :=
+
+ let _s414_ := _s413_ in
+ if ((string_startswith _s414_ "pmpaddr4")) then
+ match (string_drop _s414_ (projT1 (string_length "pmpaddr4"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s408_ (_s409_ : string)
+: option string :=
+
+ let _s410_ := _s409_ in
+ if ((string_startswith _s410_ "pmpaddr3")) then
+ match (string_drop _s410_ (projT1 (string_length "pmpaddr3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s404_ (_s405_ : string)
+: option string :=
+
+ let _s406_ := _s405_ in
+ if ((string_startswith _s406_ "pmpaddr2")) then
+ match (string_drop _s406_ (projT1 (string_length "pmpaddr2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s400_ (_s401_ : string)
+: option string :=
+
+ let _s402_ := _s401_ in
+ if ((string_startswith _s402_ "pmpaddr1")) then
+ match (string_drop _s402_ (projT1 (string_length "pmpaddr1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s396_ (_s397_ : string)
+: option string :=
+
+ let _s398_ := _s397_ in
+ if ((string_startswith _s398_ "pmpaddr0")) then
+ match (string_drop _s398_ (projT1 (string_length "pmpaddr0"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s392_ (_s393_ : string)
+: option string :=
+
+ let _s394_ := _s393_ in
+ if ((string_startswith _s394_ "pmpcfg3")) then
+ match (string_drop _s394_ (projT1 (string_length "pmpcfg3"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s388_ (_s389_ : string)
+: option string :=
+
+ let _s390_ := _s389_ in
+ if ((string_startswith _s390_ "pmpcfg2")) then
+ match (string_drop _s390_ (projT1 (string_length "pmpcfg2"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s384_ (_s385_ : string)
+: option string :=
+
+ let _s386_ := _s385_ in
+ if ((string_startswith _s386_ "pmpcfg1")) then
+ match (string_drop _s386_ (projT1 (string_length "pmpcfg1"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s380_ (_s381_ : string)
+: option string :=
+
+ let _s382_ := _s381_ in
+ if ((string_startswith _s382_ "pmpcfg0")) then
+ match (string_drop _s382_ (projT1 (string_length "pmpcfg0"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s376_ (_s377_ : string)
+: option string :=
+
+ let _s378_ := _s377_ in
+ if ((string_startswith _s378_ "mip")) then
+ match (string_drop _s378_ (projT1 (string_length "mip"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s372_ (_s373_ : string)
+: option string :=
+
+ let _s374_ := _s373_ in
+ if ((string_startswith _s374_ "mtval")) then
+ match (string_drop _s374_ (projT1 (string_length "mtval"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s368_ (_s369_ : string)
+: option string :=
+
+ let _s370_ := _s369_ in
+ if ((string_startswith _s370_ "mcause")) then
+ match (string_drop _s370_ (projT1 (string_length "mcause"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s364_ (_s365_ : string)
+: option string :=
+
+ let _s366_ := _s365_ in
+ if ((string_startswith _s366_ "mepc")) then
+ match (string_drop _s366_ (projT1 (string_length "mepc"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s360_ (_s361_ : string)
+: option string :=
+
+ let _s362_ := _s361_ in
+ if ((string_startswith _s362_ "mscratch")) then
+ match (string_drop _s362_ (projT1 (string_length "mscratch"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s356_ (_s357_ : string)
+: option string :=
+
+ let _s358_ := _s357_ in
+ if ((string_startswith _s358_ "mcounteren")) then
+ match (string_drop _s358_ (projT1 (string_length "mcounteren"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s352_ (_s353_ : string)
+: option string :=
+
+ let _s354_ := _s353_ in
+ if ((string_startswith _s354_ "mtvec")) then
+ match (string_drop _s354_ (projT1 (string_length "mtvec"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s348_ (_s349_ : string)
+: option string :=
+
+ let _s350_ := _s349_ in
+ if ((string_startswith _s350_ "mie")) then
+ match (string_drop _s350_ (projT1 (string_length "mie"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s344_ (_s345_ : string)
+: option string :=
+
+ let _s346_ := _s345_ in
+ if ((string_startswith _s346_ "mideleg")) then
+ match (string_drop _s346_ (projT1 (string_length "mideleg"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s340_ (_s341_ : string)
+: option string :=
+
+ let _s342_ := _s341_ in
+ if ((string_startswith _s342_ "medeleg")) then
+ match (string_drop _s342_ (projT1 (string_length "medeleg"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s336_ (_s337_ : string)
+: option string :=
+
+ let _s338_ := _s337_ in
+ if ((string_startswith _s338_ "misa")) then
+ match (string_drop _s338_ (projT1 (string_length "misa"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s332_ (_s333_ : string)
+: option string :=
+
+ let _s334_ := _s333_ in
+ if ((string_startswith _s334_ "mstatus")) then
+ match (string_drop _s334_ (projT1 (string_length "mstatus"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s328_ (_s329_ : string)
+: option string :=
+
+ let _s330_ := _s329_ in
+ if ((string_startswith _s330_ "mhartid")) then
+ match (string_drop _s330_ (projT1 (string_length "mhartid"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s324_ (_s325_ : string)
+: option string :=
+
+ let _s326_ := _s325_ in
+ if ((string_startswith _s326_ "mimpid")) then
+ match (string_drop _s326_ (projT1 (string_length "mimpid"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s320_ (_s321_ : string)
+: option string :=
+
+ let _s322_ := _s321_ in
+ if ((string_startswith _s322_ "marchid")) then
+ match (string_drop _s322_ (projT1 (string_length "marchid"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s316_ (_s317_ : string)
+: option string :=
+
+ let _s318_ := _s317_ in
+ if ((string_startswith _s318_ "mvendorid")) then
+ match (string_drop _s318_ (projT1 (string_length "mvendorid"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s312_ (_s313_ : string)
+: option string :=
+
+ let _s314_ := _s313_ in
+ if ((string_startswith _s314_ "satp")) then
+ match (string_drop _s314_ (projT1 (string_length "satp"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s308_ (_s309_ : string)
+: option string :=
+
+ let _s310_ := _s309_ in
+ if ((string_startswith _s310_ "sip")) then
+ match (string_drop _s310_ (projT1 (string_length "sip"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s304_ (_s305_ : string)
+: option string :=
+
+ let _s306_ := _s305_ in
+ if ((string_startswith _s306_ "stval")) then
+ match (string_drop _s306_ (projT1 (string_length "stval"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s300_ (_s301_ : string)
+: option string :=
+
+ let _s302_ := _s301_ in
+ if ((string_startswith _s302_ "scause")) then
+ match (string_drop _s302_ (projT1 (string_length "scause"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s296_ (_s297_ : string)
+: option string :=
+
+ let _s298_ := _s297_ in
+ if ((string_startswith _s298_ "sepc")) then
+ match (string_drop _s298_ (projT1 (string_length "sepc"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s292_ (_s293_ : string)
+: option string :=
+
+ let _s294_ := _s293_ in
+ if ((string_startswith _s294_ "sscratch")) then
+ match (string_drop _s294_ (projT1 (string_length "sscratch"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s288_ (_s289_ : string)
+: option string :=
+
+ let _s290_ := _s289_ in
+ if ((string_startswith _s290_ "scounteren")) then
+ match (string_drop _s290_ (projT1 (string_length "scounteren"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s284_ (_s285_ : string)
+: option string :=
+
+ let _s286_ := _s285_ in
+ if ((string_startswith _s286_ "stvec")) then
+ match (string_drop _s286_ (projT1 (string_length "stvec"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s280_ (_s281_ : string)
+: option string :=
+
+ let _s282_ := _s281_ in
+ if ((string_startswith _s282_ "sie")) then
+ match (string_drop _s282_ (projT1 (string_length "sie"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s276_ (_s277_ : string)
+: option string :=
+
+ let _s278_ := _s277_ in
+ if ((string_startswith _s278_ "sideleg")) then
+ match (string_drop _s278_ (projT1 (string_length "sideleg"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s272_ (_s273_ : string)
+: option string :=
+
+ let _s274_ := _s273_ in
+ if ((string_startswith _s274_ "sedeleg")) then
+ match (string_drop _s274_ (projT1 (string_length "sedeleg"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s268_ (_s269_ : string)
+: option string :=
+
+ let _s270_ := _s269_ in
+ if ((string_startswith _s270_ "sstatus")) then
+ match (string_drop _s270_ (projT1 (string_length "sstatus"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s264_ (_s265_ : string)
+: option string :=
+
+ let _s266_ := _s265_ in
+ if ((string_startswith _s266_ "instreth")) then
+ match (string_drop _s266_ (projT1 (string_length "instreth"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s260_ (_s261_ : string)
+: option string :=
+
+ let _s262_ := _s261_ in
+ if ((string_startswith _s262_ "timeh")) then
+ match (string_drop _s262_ (projT1 (string_length "timeh"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s256_ (_s257_ : string)
+: option string :=
+
+ let _s258_ := _s257_ in
+ if ((string_startswith _s258_ "cycleh")) then
+ match (string_drop _s258_ (projT1 (string_length "cycleh"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s252_ (_s253_ : string)
+: option string :=
+
+ let _s254_ := _s253_ in
+ if ((string_startswith _s254_ "instret")) then
+ match (string_drop _s254_ (projT1 (string_length "instret"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s248_ (_s249_ : string)
+: option string :=
+
+ let _s250_ := _s249_ in
+ if ((string_startswith _s250_ "time")) then
+ match (string_drop _s250_ (projT1 (string_length "time"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s244_ (_s245_ : string)
+: option string :=
+
+ let _s246_ := _s245_ in
+ if ((string_startswith _s246_ "cycle")) then
+ match (string_drop _s246_ (projT1 (string_length "cycle"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s240_ (_s241_ : string)
+: option string :=
+
+ let _s242_ := _s241_ in
+ if ((string_startswith _s242_ "fcsr")) then
+ match (string_drop _s242_ (projT1 (string_length "fcsr"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s236_ (_s237_ : string)
+: option string :=
+
+ let _s238_ := _s237_ in
+ if ((string_startswith _s238_ "frm")) then
+ match (string_drop _s238_ (projT1 (string_length "frm"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s232_ (_s233_ : string)
+: option string :=
+
+ let _s234_ := _s233_ in
+ if ((string_startswith _s234_ "fflags")) then
+ match (string_drop _s234_ (projT1 (string_length "fflags"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s228_ (_s229_ : string)
+: option string :=
+
+ let _s230_ := _s229_ in
+ if ((string_startswith _s230_ "uip")) then
+ match (string_drop _s230_ (projT1 (string_length "uip"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s224_ (_s225_ : string)
+: option string :=
+
+ let _s226_ := _s225_ in
+ if ((string_startswith _s226_ "utval")) then
+ match (string_drop _s226_ (projT1 (string_length "utval"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s220_ (_s221_ : string)
+: option string :=
+
+ let _s222_ := _s221_ in
+ if ((string_startswith _s222_ "ucause")) then
+ match (string_drop _s222_ (projT1 (string_length "ucause"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s216_ (_s217_ : string)
+: option string :=
+
+ let _s218_ := _s217_ in
+ if ((string_startswith _s218_ "uepc")) then
+ match (string_drop _s218_ (projT1 (string_length "uepc"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s212_ (_s213_ : string)
+: option string :=
+
+ let _s214_ := _s213_ in
+ if ((string_startswith _s214_ "uscratch")) then
+ match (string_drop _s214_ (projT1 (string_length "uscratch"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s208_ (_s209_ : string)
+: option string :=
+
+ let _s210_ := _s209_ in
+ if ((string_startswith _s210_ "utvec")) then
+ match (string_drop _s210_ (projT1 (string_length "utvec"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s204_ (_s205_ : string)
+: option string :=
+
+ let _s206_ := _s205_ in
+ if ((string_startswith _s206_ "uie")) then
+ match (string_drop _s206_ (projT1 (string_length "uie"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s200_ (_s201_ : string)
+: option string :=
+
+ let _s202_ := _s201_ in
+ if ((string_startswith _s202_ "ustatus")) then
+ match (string_drop _s202_ (projT1 (string_length "ustatus"))) with | s_ => Some (s_) end
+ else None.
+
+Definition csr_name_map_matches_prefix (arg_ : string)
+: M (option ((mword 12 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s203_ := arg_ in
+ (if ((match (_s200_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s200_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s204_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s204_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s208_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s208_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s212_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s212_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s216_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s216_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s220_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s220_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s224_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s224_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s228_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s228_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s232_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s232_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s236_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s236_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s240_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s240_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s244_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s244_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s248_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s248_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s252_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s252_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s256_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s256_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s260_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s260_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s264_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s264_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s268_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s268_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s272_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s272_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s276_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s276_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s280_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s280_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s284_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s284_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s288_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s288_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s292_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s292_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s296_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s296_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s300_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s300_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s304_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s304_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s308_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s308_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s312_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s312_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s316_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s316_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s320_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s320_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s324_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s324_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s328_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s328_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s332_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s332_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s336_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s336_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s340_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s340_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s344_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s344_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s348_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s348_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s352_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s352_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s356_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s356_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s360_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s360_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s364_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s364_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s368_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s368_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s372_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s372_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s376_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s376_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s380_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s380_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s384_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s384_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s388_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s388_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s392_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s392_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s396_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s396_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s400_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s400_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s404_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s404_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s408_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s408_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s412_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s412_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s416_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s416_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s420_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s420_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s424_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s424_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B1;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s428_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s428_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s432_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s432_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s436_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s436_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s440_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s440_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s444_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s444_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s448_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s448_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s452_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s452_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s456_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s456_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B1;B1;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s460_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s460_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s464_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s464_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s468_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s468_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s472_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s472_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1;B0;B1;B1;B1;B0;B0;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s476_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s476_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s480_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s480_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s484_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s484_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B0] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s488_ _s203_) with | Some (s_) => true | _ => false end)) then
+ (match (_s488_ _s203_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B1;B1] : mword 12), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 12 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 12 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition csrAccess (csr : mword 12) : mword 2 := subrange_vec_dec csr 11 10.
+
+Definition csrPriv (csr : mword 12) : mword 2 := subrange_vec_dec csr 9 8.
+
+Definition is_CSR_defined (csr : mword 12) (p : Privilege)
+: bool :=
+
+ let b__0 := csr in
+ if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12))) then
+ false
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ orb (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2))
+ (eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ eq_vec (privLevel_to_bits p) ((privLevel_to_bits Machine) : mword 2)
+ else false.
+
+Definition check_CSR_access (csrrw : mword 2) (csrpr : mword 2) (p : Privilege) (isWrite : bool)
+: bool :=
+
+ andb (negb (andb (Bool.eqb isWrite true) (eq_vec csrrw (vec_of_bits [B1;B1] : mword 2))))
+ (zopz0zKzJ_u (privLevel_to_bits p) csrpr).
+
+Definition check_TVM_SATP (csr : mword 12) (p : Privilege)
+: M (bool) :=
+
+ (and_boolM
+ (returnm ((eq_vec csr (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))
+ : bool))
+ ((and_boolM
+ (returnm ((eq_vec (privLevel_to_bits p) ((privLevel_to_bits Supervisor) : mword 2))
+ : bool))
+ (read_reg mstatus_ref >>= fun w__0 : Mstatus =>
+ returnm ((eq_vec (_get_Mstatus_TVM w__0) ((bool_to_bits true) : mword 1))
+ : bool)))
+ : M (bool))) >>= fun w__2 : bool =>
+ returnm ((negb w__2)
+ : bool).
+
+Definition check_Counteren (csr : mword 12) (p : Privilege)
+: M (bool) :=
+
+ (match (csr, p) with
+ | (b__0, Supervisor) =>
+ (if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ read_reg mcounteren_ref >>= fun w__0 : Counteren =>
+ returnm ((eq_vec (_get_Counteren_CY w__0) ((bool_to_bits true) : mword 1))
+ : bool)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ read_reg mcounteren_ref >>= fun w__1 : Counteren =>
+ returnm ((eq_vec (_get_Counteren_TM w__1) ((bool_to_bits true) : mword 1))
+ : bool)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg mcounteren_ref >>= fun w__2 : Counteren =>
+ returnm ((eq_vec (_get_Counteren_IR w__2) ((bool_to_bits true) : mword 1))
+ : bool)
+ else
+ returnm ((match (b__0, Supervisor) with
+ | (g__37, g__38) =>
+ if ((andb
+ (zopz0zIzJ_u
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12) csr)
+ (zopz0zIzJ_u csr
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1] : mword 12))))
+ then
+ false
+ else true
+ end)
+ : bool))
+ : M (bool)
+ | (b__3, User) =>
+ (if ((eq_vec b__3 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ read_reg scounteren_ref >>= fun w__6 : Counteren =>
+ returnm ((eq_vec (_get_Counteren_CY w__6) ((bool_to_bits true) : mword 1))
+ : bool)
+ else if ((eq_vec b__3 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ read_reg scounteren_ref >>= fun w__7 : Counteren =>
+ returnm ((eq_vec (_get_Counteren_TM w__7) ((bool_to_bits true) : mword 1))
+ : bool)
+ else if ((eq_vec b__3 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg scounteren_ref >>= fun w__8 : Counteren =>
+ returnm ((eq_vec (_get_Counteren_IR w__8) ((bool_to_bits true) : mword 1))
+ : bool)
+ else
+ returnm ((match (b__3, User) with
+ | (g__37, g__38) =>
+ if ((andb
+ (zopz0zIzJ_u
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12) csr)
+ (zopz0zIzJ_u csr
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1] : mword 12))))
+ then
+ false
+ else true
+ end)
+ : bool))
+ : M (bool)
+ | (g__37, g__38) =>
+ returnm ((if ((andb
+ (zopz0zIzJ_u (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12)
+ csr)
+ (zopz0zIzJ_u csr
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B1;B1;B1;B1;B1] : mword 12)))) then
+ false
+ else true)
+ : bool)
+ end)
+ : M (bool).
+
+Definition check_CSR (csr : mword 12) (p : Privilege) (isWrite : bool)
+: M (bool) :=
+
+ (and_boolM (returnm ((is_CSR_defined csr p) : bool))
+ ((and_boolM (returnm ((check_CSR_access (csrAccess csr) (csrPriv csr) p isWrite) : bool))
+ ((and_boolM ((check_TVM_SATP csr p) : M (bool)) ((check_Counteren csr p) : M (bool)))
+ : M (bool)))
+ : M (bool)))
+ : M (bool).
+
+Axiom speculate_conditional : forall (_ : unit) , M (bool).
+
+Axiom load_reservation : forall (_ : mword 64) , unit.
+
+Axiom match_reservation : forall (_ : mword 64) , bool.
+
+Axiom cancel_reservation : forall (_ : unit) , unit.
+
+Definition exception_delegatee (e : ExceptionType) (p : Privilege)
+: M (Privilege) :=
+
+ let 'idx := projT1 (num_of_ExceptionType e) in
+ read_reg medeleg_ref >>= fun w__0 : Medeleg =>
+ let super := access_vec_dec (_get_Medeleg_bits w__0) idx in
+ read_reg sedeleg_ref >>= fun w__1 : Sedeleg =>
+ let user := access_vec_dec (_get_Sedeleg_bits w__1) idx in
+ (and_boolM
+ (read_reg misa_ref >>= fun w__2 : Misa =>
+ returnm ((eq_vec (_get_Misa_S w__2) ((bool_to_bits true) : mword 1))
+ : bool)) ((bit_to_bool super) : M (bool))) >>= fun w__4 : bool =>
+ let deleg := if (w__4) then Supervisor else Machine in
+ returnm ((if ((zopz0zI_u (privLevel_to_bits deleg) (privLevel_to_bits p))) then p
+ else deleg)
+ : Privilege).
+
+Definition findPendingInterrupt (ip : mword 64)
+: option InterruptType :=
+
+ let ip := Mk_Minterrupts ip in
+ if ((eq_vec (_get_Minterrupts_MEI ip) ((bool_to_bits true) : mword 1))) then Some (I_M_External)
+ else if ((eq_vec (_get_Minterrupts_MSI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_M_Software)
+ else if ((eq_vec (_get_Minterrupts_MTI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_M_Timer)
+ else if ((eq_vec (_get_Minterrupts_SEI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_S_External)
+ else if ((eq_vec (_get_Minterrupts_SSI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_S_Software)
+ else if ((eq_vec (_get_Minterrupts_STI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_S_Timer)
+ else if ((eq_vec (_get_Minterrupts_UEI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_U_External)
+ else if ((eq_vec (_get_Minterrupts_USI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_U_Software)
+ else if ((eq_vec (_get_Minterrupts_UTI ip) ((bool_to_bits true) : mword 1))) then
+ Some
+ (I_U_Timer)
+ else None.
+
+Definition curInterrupt
+(priv : Privilege) (pend : Minterrupts) (enbl : Minterrupts) (delg : Minterrupts)
+: M (option ((InterruptType * Privilege))) :=
+
+ let en_mip : xlenbits := and_vec (_get_Minterrupts_bits pend) (_get_Minterrupts_bits enbl) in
+ (if ((eq_vec en_mip (EXTZ 64 (vec_of_bits [B0] : mword 1)))) then
+ returnm (None
+ : option ((InterruptType * Privilege)))
+ else
+ (or_boolM
+ (returnm ((neq_vec (privLevel_to_bits priv) ((privLevel_to_bits Machine) : mword 2))
+ : bool))
+ ((and_boolM
+ (returnm ((eq_vec (privLevel_to_bits priv) ((privLevel_to_bits Machine) : mword 2))
+ : bool))
+ (read_reg mstatus_ref >>= fun w__0 : Mstatus =>
+ returnm ((eq_vec (_get_Mstatus_MIE w__0) ((bool_to_bits true) : mword 1))
+ : bool)))
+ : M (bool))) >>= fun eff_mie =>
+ (or_boolM
+ (returnm ((eq_vec (privLevel_to_bits priv) ((privLevel_to_bits User) : mword 2))
+ : bool))
+ ((and_boolM
+ (returnm ((eq_vec (privLevel_to_bits priv) ((privLevel_to_bits Supervisor) : mword 2))
+ : bool))
+ (read_reg mstatus_ref >>= fun w__2 : Mstatus =>
+ returnm ((eq_vec (_get_Mstatus_SIE w__2) ((bool_to_bits true) : mword 1))
+ : bool)))
+ : M (bool))) >>= fun eff_sie =>
+ let eff_mip := and_vec en_mip (not_vec (_get_Minterrupts_bits delg)) in
+ let eff_sip := and_vec en_mip (_get_Minterrupts_bits delg) in
+ (if ((andb eff_mie (neq_vec eff_mip (EXTZ 64 (vec_of_bits [B0] : mword 1))))) then
+ (match (findPendingInterrupt eff_mip) with
+ | Some (i) =>
+ let r := (i, Machine) in
+ returnm ((Some
+ (r))
+ : option ((InterruptType * Privilege)))
+ | None =>
+ (internal_error
+ (String.append "non-zero eff_mip="
+ (String.append (string_of_bits eff_mip) ", but nothing pending")))
+ : M (option ((InterruptType * Privilege)))
+ end)
+ : M (option ((InterruptType * Privilege)))
+ else if ((andb eff_sie (neq_vec eff_sip (EXTZ 64 (vec_of_bits [B0] : mword 1))))) then
+ (match (findPendingInterrupt eff_sip) with
+ | Some (i) =>
+ let r := (i, Supervisor) in
+ returnm ((Some
+ (r))
+ : option ((InterruptType * Privilege)))
+ | None =>
+ (internal_error
+ (String.append "non-zero eff_sip="
+ (String.append (string_of_bits eff_sip) ", but nothing pending")))
+ : M (option ((InterruptType * Privilege)))
+ end)
+ : M (option ((InterruptType * Privilege)))
+ else
+ let p :=
+ if ((eq_vec (_get_Minterrupts_MTI pend) ((bool_to_bits true) : mword 1))) then "1"
+ else "0" in
+ let e :=
+ if ((eq_vec (_get_Minterrupts_MTI enbl) ((bool_to_bits true) : mword 1))) then "1"
+ else "0" in
+ let d :=
+ if ((eq_vec (_get_Minterrupts_MTI delg) ((bool_to_bits true) : mword 1))) then "1"
+ else "0" in
+ let '_ :=
+ (print_endline
+ (String.append " MTI: pend="
+ (String.append p
+ (String.append " enbl=" (String.append e (String.append " delg=" d))))))
+ : unit in
+ let eff_mip := and_vec en_mip (not_vec (_get_Minterrupts_bits delg)) in
+ let eff_sip := and_vec en_mip (_get_Minterrupts_bits delg) in
+ read_reg mstatus_ref >>= fun w__8 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__9 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__10 : Mstatus =>
+ let '_ :=
+ (print_endline
+ (String.append "mstatus="
+ (String.append (string_of_bits (_get_Mstatus_bits w__8))
+ (String.append " mie,sie="
+ (String.append (string_of_bits (_get_Mstatus_MIE w__9))
+ (String.append ","
+ (String.append (string_of_bits (_get_Mstatus_SIE w__10))
+ (String.append " en_mip="
+ (String.append (string_of_bits en_mip)
+ (String.append " eff_mip="
+ (String.append (string_of_bits eff_mip)
+ (String.append " eff_sip=" (string_of_bits eff_sip)))))))))))))
+ : unit in
+ returnm (None
+ : option ((InterruptType * Privilege))))
+ : M (option ((InterruptType * Privilege))))
+ : M (option ((InterruptType * Privilege))).
+
+Definition tval (excinfo : option (mword 64))
+: mword 64 :=
+
+ match excinfo with | Some (e) => e | None => EXTZ 64 (vec_of_bits [B0] : mword 1) end.
+
+Definition rvfi_trap '(tt : unit) : unit := tt.
+
+Definition handle_trap
+(del_priv : Privilege) (intr : bool) (c : mword 4) (pc : mword 64) (info : option (mword 64))
+: M (mword 64) :=
+
+ let '_ := (rvfi_trap tt) : unit in
+ let '_ :=
+ (print_endline
+ (String.append "handling "
+ (String.append (if (intr) then "int#" else "exc#")
+ (String.append (string_of_bits c)
+ (String.append " at priv "
+ (String.append ((privLevel_to_str del_priv) : string)
+ (String.append " with tval " (string_of_bits (tval info)))))))))
+ : unit in
+ (match del_priv with
+ | Machine =>
+ (_set_Mcause_IsInterrupt mcause_ref ((bool_to_bits intr) : mword 1)) >>
+ (_set_Mcause_Cause mcause_ref (EXTZ 63 c)) >>
+ read_reg mstatus_ref >>= fun w__0 : Mstatus =>
+ (_set_Mstatus_MPIE mstatus_ref (_get_Mstatus_MIE w__0)) >>
+ (_set_Mstatus_MIE mstatus_ref ((bool_to_bits false) : mword 1)) >>
+ read_reg cur_privilege_ref >>= fun w__1 : Privilege =>
+ (_set_Mstatus_MPP mstatus_ref (privLevel_to_bits w__1)) >>
+ write_reg mtval_ref (tval info) >>
+ write_reg mepc_ref pc >>
+ write_reg cur_privilege_ref del_priv >>
+ read_reg mstatus_ref >>= fun w__2 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__3 : Mstatus =>
+ let '_ :=
+ (print_endline
+ (String.append "CSR mstatus <- "
+ (String.append (string_of_bits (_get_Mstatus_bits w__2))
+ (String.append " (input: "
+ (String.append (string_of_bits (_get_Mstatus_bits w__3)) ")")))))
+ : unit in
+ let '_ := (cancel_reservation tt) : unit in
+ read_reg mtvec_ref >>= fun w__4 : Mtvec =>
+ read_reg mcause_ref >>= fun w__5 : Mcause =>
+ (match (tvec_addr w__4 w__5) with
+ | Some (epc) => returnm (epc : mword 64)
+ | None => (internal_error "Invalid mtvec mode") : M (mword 64)
+ end)
+ : M (mword 64)
+ | Supervisor =>
+ (_set_Mcause_IsInterrupt scause_ref ((bool_to_bits intr) : mword 1)) >>
+ (_set_Mcause_Cause scause_ref (EXTZ 63 c)) >>
+ read_reg mstatus_ref >>= fun w__8 : Mstatus =>
+ (_set_Mstatus_SPIE mstatus_ref (_get_Mstatus_SIE w__8)) >>
+ (_set_Mstatus_SIE mstatus_ref ((bool_to_bits false) : mword 1)) >>
+ read_reg cur_privilege_ref >>= fun w__9 : Privilege =>
+ (match w__9 with
+ | User => returnm ((bool_to_bits false) : mword 1)
+ | Supervisor => returnm ((bool_to_bits true) : mword 1)
+ | Machine => (internal_error "invalid privilege for s-mode trap") : M (mword 1)
+ end) >>= fun w__11 : mword 1 =>
+ (_set_Mstatus_SPP mstatus_ref w__11) >>
+ write_reg stval_ref (tval info) >>
+ write_reg sepc_ref pc >>
+ write_reg cur_privilege_ref del_priv >>
+ read_reg mstatus_ref >>= fun w__12 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__13 : Mstatus =>
+ let '_ :=
+ (print_endline
+ (String.append "CSR mstatus <- "
+ (String.append (string_of_bits (_get_Mstatus_bits w__12))
+ (String.append " (input: "
+ (String.append (string_of_bits (_get_Mstatus_bits w__13)) ")")))))
+ : unit in
+ let '_ := (cancel_reservation tt) : unit in
+ read_reg stvec_ref >>= fun w__14 : Mtvec =>
+ read_reg scause_ref >>= fun w__15 : Mcause =>
+ (match (tvec_addr w__14 w__15) with
+ | Some (epc) => returnm (epc : mword 64)
+ | None => (internal_error "Invalid stvec mode") : M (mword 64)
+ end)
+ : M (mword 64)
+ | User => (internal_error "the N extension is currently unsupported") : M (mword 64)
+ end)
+ : M (mword 64).
+
+Definition handle_exception (cur_priv : Privilege) (ctl : ctl_result) (pc : mword 64)
+: M (mword 64) :=
+
+ (match (cur_priv, ctl) with
+ | (_, CTL_TRAP (e)) =>
+ (exception_delegatee e.(sync_exception_trap) cur_priv) >>= fun del_priv =>
+ let '_ :=
+ (print_endline
+ (String.append "trapping from "
+ (String.append ((privLevel_to_str cur_priv) : string)
+ (String.append " to "
+ (String.append ((privLevel_to_str del_priv) : string)
+ (String.append " to handle "
+ ((exceptionType_to_str e.(sync_exception_trap))
+ : string)))))))
+ : unit in
+ (handle_trap del_priv false ((exceptionType_to_bits e.(sync_exception_trap)) : mword 4) pc
+ e.(sync_exception_excinfo))
+ : M (mword 64)
+ | (_, CTL_MRET (tt)) =>
+ read_reg cur_privilege_ref >>= fun prev_priv =>
+ read_reg mstatus_ref >>= fun w__1 : Mstatus =>
+ (_set_Mstatus_MIE mstatus_ref (_get_Mstatus_MPIE w__1)) >>
+ (_set_Mstatus_MPIE mstatus_ref ((bool_to_bits true) : mword 1)) >>
+ read_reg mstatus_ref >>= fun w__2 : Mstatus =>
+ write_reg cur_privilege_ref (privLevel_of_bits (_get_Mstatus_MPP w__2)) >>
+ (_set_Mstatus_MPP mstatus_ref (privLevel_to_bits User)) >>
+ read_reg mstatus_ref >>= fun w__3 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__4 : Mstatus =>
+ let '_ :=
+ (print_endline
+ (String.append "CSR mstatus <- "
+ (String.append (string_of_bits (_get_Mstatus_bits w__3))
+ (String.append " (input: "
+ (String.append (string_of_bits (_get_Mstatus_bits w__4)) ")")))))
+ : unit in
+ read_reg cur_privilege_ref >>= fun w__5 : Privilege =>
+ let '_ :=
+ (print_endline
+ (String.append "ret-ing from "
+ (String.append ((privLevel_to_str prev_priv) : string)
+ (String.append " to " ((privLevel_to_str w__5) : string)))))
+ : unit in
+ let '_ := (cancel_reservation tt) : unit in
+ ((read_reg mepc_ref) : M (mword 64)) >>= fun w__6 : xlenbits =>
+ (pc_alignment_mask tt) >>= fun w__7 : mword 64 => returnm ((and_vec w__6 w__7) : mword 64)
+ | (_, CTL_SRET (tt)) =>
+ read_reg cur_privilege_ref >>= fun prev_priv =>
+ read_reg mstatus_ref >>= fun w__8 : Mstatus =>
+ (_set_Mstatus_SIE mstatus_ref (_get_Mstatus_SPIE w__8)) >>
+ (_set_Mstatus_SPIE mstatus_ref ((bool_to_bits true) : mword 1)) >>
+ read_reg mstatus_ref >>= fun w__9 : Mstatus =>
+ write_reg
+ cur_privilege_ref
+ (if ((eq_vec (_get_Mstatus_SPP w__9) ((bool_to_bits true) : mword 1))) then Supervisor
+ else User) >>
+ (_set_Mstatus_SPP mstatus_ref ((bool_to_bits false) : mword 1)) >>
+ read_reg mstatus_ref >>= fun w__10 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__11 : Mstatus =>
+ let '_ :=
+ (print_endline
+ (String.append "CSR mstatus <- "
+ (String.append (string_of_bits (_get_Mstatus_bits w__10))
+ (String.append " (input: "
+ (String.append (string_of_bits (_get_Mstatus_bits w__11)) ")")))))
+ : unit in
+ read_reg cur_privilege_ref >>= fun w__12 : Privilege =>
+ let '_ :=
+ (print_endline
+ (String.append "ret-ing from "
+ (String.append ((privLevel_to_str prev_priv) : string)
+ (String.append " to " ((privLevel_to_str w__12) : string)))))
+ : unit in
+ let '_ := (cancel_reservation tt) : unit in
+ ((read_reg sepc_ref) : M (mword 64)) >>= fun w__13 : xlenbits =>
+ (pc_alignment_mask tt) >>= fun w__14 : mword 64 =>
+ returnm ((and_vec w__13 w__14)
+ : mword 64)
+ end)
+ : M (mword 64).
+
+Definition handle_mem_exception (addr : mword 64) (e : ExceptionType)
+: M (unit) :=
+
+ let t : sync_exception :=
+ {| sync_exception_trap := e;
+ sync_exception_excinfo := (Some (addr)) |} in
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ (handle_exception w__0 (CTL_TRAP (t)) w__1) >>= fun w__2 : mword 64 =>
+ write_reg nextPC_ref w__2
+ : M (unit).
+
+Definition handle_interrupt (i : InterruptType) (del_priv : Privilege)
+: M (unit) :=
+
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ (handle_trap del_priv true ((interruptType_to_bits i) : mword 4) w__0 None) >>= fun w__1 : mword 64 =>
+ write_reg nextPC_ref w__1
+ : M (unit).
+
+Definition init_sys '(tt : unit)
+: M (unit) :=
+
+ write_reg cur_privilege_ref Machine >>
+ write_reg mhartid_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ (_set_Misa_MXL misa_ref (arch_to_bits RV64)) >>
+ (_set_Misa_A misa_ref ((bool_to_bits true) : mword 1)) >>
+ (_set_Misa_C misa_ref ((bool_to_bits true) : mword 1)) >>
+ (_set_Misa_I misa_ref ((bool_to_bits true) : mword 1)) >>
+ (_set_Misa_M misa_ref ((bool_to_bits true) : mword 1)) >>
+ (_set_Misa_U misa_ref ((bool_to_bits true) : mword 1)) >>
+ (_set_Misa_S misa_ref ((bool_to_bits true) : mword 1)) >>
+ read_reg misa_ref >>= fun w__0 : Misa =>
+ (_set_Mstatus_SXL mstatus_ref (_get_Misa_MXL w__0)) >>
+ read_reg misa_ref >>= fun w__1 : Misa =>
+ (_set_Mstatus_UXL mstatus_ref (_get_Misa_MXL w__1)) >>
+ (_set_Mstatus_SD mstatus_ref ((bool_to_bits false) : mword 1)) >>
+ (_set_Minterrupts_bits mip_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ (_set_Minterrupts_bits mie_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ (_set_Minterrupts_bits mideleg_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ (_set_Medeleg_bits medeleg_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ (_set_Mtvec_bits mtvec_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ (_set_Mcause_bits mcause_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ write_reg mepc_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ write_reg mtval_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ write_reg mscratch_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ write_reg mcycle_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ write_reg mtime_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ (_set_Counteren_bits mcounteren_ref (EXTZ 32 (vec_of_bits [B0] : mword 1))) >>
+ write_reg minstret_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ write_reg minstret_written_ref false >>
+ read_reg mstatus_ref >>= fun w__2 : Mstatus =>
+ returnm ((print_endline
+ (String.append "CSR mstatus <- "
+ (String.append (string_of_bits (_get_Mstatus_bits w__2))
+ (String.append " (input: "
+ (String.append
+ (string_of_bits ((EXTZ 64 (vec_of_bits [B0] : mword 1)) : xlenbits))
+ ")")))))
+ : unit).
+
+Axiom plat_ram_base : forall (_ : unit) , mword 64.
+
+Axiom plat_ram_size : forall (_ : unit) , mword 64.
+
+Axiom plat_enable_dirty_update : forall (_ : unit) , bool.
+
+Axiom plat_enable_misaligned_access : forall (_ : unit) , bool.
+
+Axiom plat_mtval_has_illegal_inst_bits : forall (_ : unit) , bool.
+
+Axiom plat_rom_base : forall (_ : unit) , mword 64.
+
+Axiom plat_rom_size : forall (_ : unit) , mword 64.
+
+Axiom plat_clint_base : forall (_ : unit) , mword 64.
+
+Axiom plat_clint_size : forall (_ : unit) , mword 64.
+
+Axiom plat_htif_tohost : forall (_ : unit) , mword 64.
+
+Definition phys_mem_segments '(tt : unit)
+: list ((mword 64 * mword 64)) :=
+
+ (plat_rom_base tt, plat_rom_size tt) :: (plat_ram_base tt, plat_ram_size tt) :: [].
+
+Definition within_phys_mem (addr : mword 64) (width : Z)
+: bool :=
+
+ let ram_base := plat_ram_base tt in
+ let rom_base := plat_rom_base tt in
+ let ram_size := plat_ram_size tt in
+ let rom_size := plat_rom_size tt in
+ if ((andb (zopz0zIzJ_u ram_base addr)
+ (zopz0zIzJ_u (add_vec_int addr width) (add_vec ram_base ram_size)))) then
+ true
+ else if ((andb (zopz0zIzJ_u rom_base addr)
+ (zopz0zIzJ_u (add_vec_int addr width) (add_vec rom_base rom_size)))) then
+ true
+ else
+ let '_ :=
+ (print_endline
+ (String.append "within_phys_mem: "
+ (String.append (string_of_bits addr) " not within phys-mem:")))
+ : unit in
+ let '_ := (print_endline (String.append " plat_rom_base: " (string_of_bits rom_base))) : unit in
+ let '_ := (print_endline (String.append " plat_rom_size: " (string_of_bits rom_size))) : unit in
+ let '_ := (print_endline (String.append " plat_ram_base: " (string_of_bits ram_base))) : unit in
+ let '_ := (print_endline (String.append " plat_ram_size: " (string_of_bits ram_size))) : unit in
+ false.
+
+Definition within_clint (addr : mword 64) (width : Z)
+: bool :=
+
+ andb (zopz0zIzJ_u (plat_clint_base tt) addr)
+ (zopz0zIzJ_u (add_vec_int addr width) (add_vec (plat_clint_base tt) (plat_clint_size tt))).
+
+Definition within_htif_writable (addr : mword 64) (width : Z)
+: bool :=
+
+ eq_vec (plat_htif_tohost tt) addr.
+
+Definition within_htif_readable (addr : mword 64) (width : Z)
+: bool :=
+
+ eq_vec (plat_htif_tohost tt) addr.
+
+Axiom plat_insns_per_tick : forall (_ : unit) , Z.
+
+Definition MSIP_BASE : xlenbits :=
+(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64).
+Hint Unfold MSIP_BASE : sail.
+Definition MTIMECMP_BASE : xlenbits :=
+(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64).
+Hint Unfold MTIMECMP_BASE : sail.
+Definition MTIME_BASE : xlenbits :=
+(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B0;B0;
+ B0]
+ : mword 64).
+Hint Unfold MTIME_BASE : sail.
+Definition clint_load (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ let addr := sub_vec addr (plat_clint_base tt) in
+ (if sumbool_of_bool ((andb (eq_vec addr MSIP_BASE) (orb (Z.eqb width 8) (Z.eqb width 4)))) then
+ read_reg mip_ref >>= fun w__0 : Minterrupts =>
+ let '_ :=
+ (print_endline
+ (String.append "clint["
+ (String.append (string_of_bits addr)
+ (String.append "] -> " (string_of_bits (_get_Minterrupts_MSI w__0))))))
+ : unit in
+ read_reg mip_ref >>= fun w__1 : Minterrupts =>
+ returnm ((MemValue
+ (zero_extend (_get_Minterrupts_MSI w__1) (Z.mul 8 width)))
+ : MemoryOpResult (mword (8 * width)))
+ else if sumbool_of_bool ((andb (eq_vec addr MTIMECMP_BASE) (Z.eqb width 8))) then
+ ((read_reg mtimecmp_ref) : M (mword 64)) >>= fun w__2 : xlenbits =>
+ let '_ :=
+ (print_endline
+ (String.append "clint["
+ (String.append (string_of_bits addr) (String.append "] -> " (string_of_bits w__2)))))
+ : unit in
+ ((read_reg mtimecmp_ref) : M (mword 64)) >>= fun w__3 : xlenbits =>
+ returnm ((MemValue
+ (zero_extend w__3 _))
+ : MemoryOpResult (mword (8 * width)))
+ else if sumbool_of_bool ((andb (eq_vec addr MTIME_BASE) (Z.eqb width 8))) then
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__4 : xlenbits =>
+ let '_ :=
+ (print_endline
+ (String.append "clint["
+ (String.append (string_of_bits addr) (String.append "] -> " (string_of_bits w__4)))))
+ : unit in
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__5 : xlenbits =>
+ returnm ((MemValue
+ (zero_extend w__5 _))
+ : MemoryOpResult (mword (8 * width)))
+ else
+ let '_ :=
+ (print_endline
+ (String.append "clint[" (String.append (string_of_bits addr) "] -> <not-mapped>")))
+ : unit in
+ returnm ((MemException
+ (E_Load_Access_Fault))
+ : MemoryOpResult (mword (8 * width))))
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition clint_dispatch '(tt : unit)
+: M (unit) :=
+
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let '_ := (print_endline (String.append "clint::tick mtime <- " (string_of_bits w__0))) : unit in
+ (_set_Minterrupts_MTI mip_ref ((bool_to_bits false) : mword 1)) >>
+ ((read_reg mtimecmp_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__2 : xlenbits =>
+ (if ((zopz0zIzJ_u w__1 w__2)) then
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__3 : xlenbits =>
+ let '_ :=
+ (print_endline (String.append " clint timer pending at mtime " (string_of_bits w__3)))
+ : unit in
+ (_set_Minterrupts_MTI mip_ref ((bool_to_bits true) : mword 1))
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition clint_store (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ let addr := sub_vec addr (plat_clint_base tt) in
+ (if sumbool_of_bool ((andb (eq_vec addr MSIP_BASE) (orb (Z.eqb width 8) (Z.eqb width 4)))) then
+ (cast_unit_vec (access_vec_dec data 0)) >>= fun w__0 : mword 1 =>
+ let '_ :=
+ (print_endline
+ (String.append "clint["
+ (String.append (string_of_bits addr)
+ (String.append "] <- "
+ (String.append (string_of_bits data)
+ (String.append " (mip.MSI <- " (String.append (string_of_bits w__0) ")")))))))
+ : unit in
+ (cast_unit_vec (access_vec_dec data 0)) >>= fun w__1 : mword 1 =>
+ (_set_Minterrupts_MSI mip_ref
+ ((bool_to_bits (eq_vec w__1 (vec_of_bits [B1] : mword 1)))
+ : mword 1)) >>
+ (clint_dispatch tt) >> returnm ((MemValue (true)) : MemoryOpResult bool)
+ else if sumbool_of_bool ((andb (eq_vec addr MTIMECMP_BASE) (Z.eqb width 8))) then
+ let '_ :=
+ (print_endline
+ (String.append "clint["
+ (String.append (string_of_bits addr)
+ (String.append "] <- " (String.append (string_of_bits data) " (mtimecmp)")))))
+ : unit in
+ write_reg mtimecmp_ref (zero_extend data 64) >>
+ (clint_dispatch tt) >> returnm ((MemValue (true)) : MemoryOpResult bool)
+ else
+ let '_ :=
+ (print_endline
+ (String.append "clint["
+ (String.append (string_of_bits addr)
+ (String.append "] <- " (String.append (string_of_bits data) " (<unmapped>)")))))
+ : unit in
+ returnm ((MemException
+ (E_SAMO_Access_Fault))
+ : MemoryOpResult bool))
+ : M (MemoryOpResult bool).
+
+Definition tick_clock '(tt : unit)
+: M (unit) :=
+
+ ((read_reg mcycle_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ write_reg mcycle_ref (add_vec_int w__0 1) >>
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ write_reg mtime_ref (add_vec_int w__1 1) >> (clint_dispatch tt) : M (unit).
+
+Axiom plat_term_write : forall (_ : mword 8) , unit.
+
+Axiom plat_term_read : forall (_ : unit) , mword 8.
+
+Definition Mk_htif_cmd (v : mword 64)
+: htif_cmd :=
+
+ {| htif_cmd_htif_cmd_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_htif_cmd_bits (v : htif_cmd)
+: mword 64 :=
+
+ subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 63 0.
+
+Definition _set_htif_cmd_bits (r_ref : register_ref regstate register_value htif_cmd) (v : mword 64)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec r.(htif_cmd_htif_cmd_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : htif_cmd in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_htif_cmd_bits (v : htif_cmd) (x : mword 64)
+: htif_cmd :=
+
+ {[ v with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_htif_cmd_device (v : htif_cmd)
+: mword 8 :=
+
+ subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 63 56.
+
+Definition _set_htif_cmd_device
+(r_ref : register_ref regstate register_value htif_cmd) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec r.(htif_cmd_htif_cmd_chunk_0) 63 56 (subrange_vec_dec v 7 0)) ]}
+ : htif_cmd in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_htif_cmd_device (v : htif_cmd) (x : mword 8)
+: htif_cmd :=
+
+ {[ v with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 63 56 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_htif_cmd_cmd (v : htif_cmd)
+: mword 8 :=
+
+ subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 55 48.
+
+Definition _set_htif_cmd_cmd (r_ref : register_ref regstate register_value htif_cmd) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec r.(htif_cmd_htif_cmd_chunk_0) 55 48 (subrange_vec_dec v 7 0)) ]}
+ : htif_cmd in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_htif_cmd_cmd (v : htif_cmd) (x : mword 8)
+: htif_cmd :=
+
+ {[ v with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 55 48 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_htif_cmd_payload (v : htif_cmd)
+: mword 48 :=
+
+ subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 47 0.
+
+Definition _set_htif_cmd_payload
+(r_ref : register_ref regstate register_value htif_cmd) (v : mword 48)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec r.(htif_cmd_htif_cmd_chunk_0) 47 0 (subrange_vec_dec v 47 0)) ]}
+ : htif_cmd in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_htif_cmd_payload (v : htif_cmd) (x : mword 48)
+: htif_cmd :=
+
+ {[ v with
+ htif_cmd_htif_cmd_chunk_0 :=
+ (update_subrange_vec_dec v.(htif_cmd_htif_cmd_chunk_0) 47 0 (subrange_vec_dec x 47 0)) ]}.
+
+Definition htif_load (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ ((read_reg htif_tohost_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let '_ :=
+ (print_endline
+ (String.append "htif["
+ (String.append (string_of_bits addr) (String.append "] -> " (string_of_bits w__0)))))
+ : unit in
+ (if sumbool_of_bool ((Z.eqb width 8)) then
+ ((read_reg htif_tohost_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ returnm ((MemValue
+ (zero_extend w__1 _))
+ : MemoryOpResult (mword (8 * width)))
+ else returnm ((MemException (E_Load_Access_Fault)) : MemoryOpResult (mword (8 * width))))
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition htif_store (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact ((0 + 1) <= width /\ width <= 8)}
+: M (MemoryOpResult bool) :=
+
+ let '_ :=
+ (print_endline
+ (String.append "htif["
+ (String.append (string_of_bits addr) (String.append "] <- " (string_of_bits data)))))
+ : unit in
+ let cbits : xlenbits := EXTZ 64 data in
+ write_reg htif_tohost_ref cbits >>
+ let cmd := Mk_htif_cmd cbits in
+ let b__0 := _get_htif_cmd_device cmd in
+ (if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8))) then
+ let '_ :=
+ (print_endline
+ (String.append "htif-syscall-proxy cmd: " (string_of_bits (_get_htif_cmd_payload cmd))))
+ : unit in
+ (cast_unit_vec (access_vec_dec (_get_htif_cmd_payload cmd) 0)) >>= fun w__0 : mword 1 =>
+ (if ((eq_vec w__0 (vec_of_bits [B1] : mword 1))) then
+ write_reg htif_done_ref true >>
+ write_reg
+ htif_exit_code_ref
+ ((shift_bits_right (zero_extend (_get_htif_cmd_payload cmd) xlen)
+ (vec_of_bits [B0;B1] : mword 2))
+ : xlenbits)
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit)
+ else
+ returnm ((if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1] : mword 8))) then
+ let '_ :=
+ (print_endline
+ (String.append "htif-term cmd: " (string_of_bits (_get_htif_cmd_payload cmd))))
+ : unit in
+ let b__2 := _get_htif_cmd_cmd cmd in
+ if ((eq_vec b__2 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8))) then tt
+ else if ((eq_vec b__2 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B1] : mword 8))) then
+ plat_term_write (subrange_vec_dec (_get_htif_cmd_payload cmd) 7 0)
+ else print_endline (String.append "Unknown term cmd: " (string_of_bits b__2))
+ else print_endline (String.append "htif-???? cmd: " (string_of_bits data)))
+ : unit)) >>
+ returnm ((MemValue
+ (true))
+ : MemoryOpResult bool).
+
+Definition htif_tick '(tt : unit)
+: M (unit) :=
+
+ ((read_reg htif_tohost_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let '_ := (print_endline (String.append "htif::tick " (string_of_bits w__0))) : unit in
+ write_reg htif_tohost_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))
+ : M (unit).
+
+Definition within_mmio_readable (addr : mword 64) (width : Z)
+: bool :=
+
+ orb (within_clint addr width) (andb (within_htif_readable addr width) (Z.leb 1 width)).
+
+Definition within_mmio_writable (addr : mword 64) (width : Z)
+: bool :=
+
+ orb (within_clint addr width) (andb (within_htif_writable addr width) (Z.leb width 8)).
+
+Definition mmio_read (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (if ((within_clint addr width)) then
+ (clint_load addr width)
+ : M (MemoryOpResult (mword (8 * width)))
+ else if sumbool_of_bool ((andb (within_htif_readable addr width) (Z.leb 1 width))) then
+ (htif_load addr width)
+ : M (MemoryOpResult (mword (8 * width)))
+ else returnm ((MemException (E_Load_Access_Fault)) : MemoryOpResult (mword (8 * width))))
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition mmio_write (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (if ((within_clint addr width)) then (clint_store addr width data) : M (MemoryOpResult bool)
+ else if sumbool_of_bool ((andb (within_htif_writable addr width) (Z.leb width 8))) then
+ (htif_store addr width data)
+ : M (MemoryOpResult bool)
+ else returnm ((MemException (E_SAMO_Access_Fault)) : MemoryOpResult bool))
+ : M (MemoryOpResult bool).
+
+Definition init_platform '(tt : unit)
+: M (unit) :=
+
+ write_reg htif_tohost_ref (EXTZ 64 (vec_of_bits [B0] : mword 1)) >>
+ write_reg htif_done_ref false >>
+ write_reg htif_exit_code_ref (EXTZ 64 (vec_of_bits [B0] : mword 1))
+ : M (unit).
+
+Definition tick_platform '(tt : unit)
+: M (unit) :=
+
+ let '_ := (cancel_reservation tt) : unit in
+ (htif_tick tt)
+ : M (unit).
+
+Definition handle_illegal '(tt : unit)
+: M (unit) :=
+
+ (if ((plat_mtval_has_illegal_inst_bits tt)) then
+ ((read_reg instbits_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ returnm ((Some
+ (w__0))
+ : option (mword 64))
+ else returnm (None : option (mword 64))) >>= fun info =>
+ let t : sync_exception :=
+ {| sync_exception_trap := E_Illegal_Instr;
+ sync_exception_excinfo := info |} in
+ read_reg cur_privilege_ref >>= fun w__1 : Privilege =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : xlenbits =>
+ (handle_exception w__1 (CTL_TRAP (t)) w__2) >>= fun w__3 : mword 64 =>
+ write_reg nextPC_ref w__3
+ : M (unit).
+
+Definition platform_wfi '(tt : unit)
+: M (unit) :=
+
+ ((read_reg mtime_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ ((read_reg mtimecmp_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ (if ((zopz0zI_u w__0 w__1)) then
+ ((read_reg mtimecmp_ref) : M (mword 64)) >>= fun w__2 : xlenbits =>
+ write_reg mtime_ref w__2 >>
+ ((read_reg mtimecmp_ref) : M (mword 64)) >>= fun w__3 : xlenbits =>
+ write_reg mcycle_ref w__3
+ : M (unit)
+ else returnm (tt : unit))
+ : M (unit).
+
+Definition is_aligned_addr (addr : mword 64) (width : Z)
+: bool :=
+
+ Z.eqb (modulus (projT1 (uint addr)) width) 0.
+
+Definition phys_mem_read
+(t : ReadType) (addr : mword 64) (width : Z) (aq : bool) (rl : bool) (res : bool)
+`{ArithFact (width >= 0)}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (__RISCV_read addr width aq rl res) >>= fun w__0 : option (mword (8 * width)) =>
+ returnm ((match (t, w__0) with
+ | (Instruction, None) => MemException (E_Fetch_Access_Fault)
+ | (Data, None) => MemException (E_Load_Access_Fault)
+ | (_, Some (v)) =>
+ let '_ :=
+ (print_endline
+ (String.append "mem["
+ (String.append ((readType_to_str t) : string)
+ (String.append ","
+ (String.append (string_of_bits addr)
+ (String.append "] -> " (string_of_bits v)))))))
+ : unit in
+ MemValue
+ (v)
+ end)
+ : MemoryOpResult (mword (8 * width))).
+
+Definition checked_mem_read
+(t : ReadType) (addr : mword 64) (width : Z) (aq : bool) (rl : bool) (res : bool)
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (if ((andb (generic_eq ((readType_to_str t) : string) ((readType_to_str Data) : string))
+ (within_mmio_readable addr width))) then
+ (mmio_read addr width)
+ : M (MemoryOpResult (mword (8 * width)))
+ else if ((within_phys_mem addr width)) then
+ (phys_mem_read t addr width aq rl res)
+ : M (MemoryOpResult (mword (8 * width)))
+ else returnm ((MemException (E_Load_Access_Fault)) : MemoryOpResult (mword (8 * width))))
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition MEMr (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (checked_mem_read Data addr width false false false)
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition MEMr_acquire (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (checked_mem_read Data addr width true false false)
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition MEMr_strong_acquire (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (checked_mem_read Data addr width true true false)
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition MEMr_reserved (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (checked_mem_read Data addr width false false true)
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition MEMr_reserved_acquire (addr : mword 64) (width : Z) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (checked_mem_read Data addr width true false true)
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition MEMr_reserved_strong_acquire (addr : mword 64) (width : Z)
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (checked_mem_read Data addr width true true true)
+ : M (MemoryOpResult (mword (8 * width))).
+
+Definition rvfi_read (addr : mword 64) (width : Z) (value : MemoryOpResult (mword (8 * width)))
+`{ArithFact (width >= (0 + 1))}
+: unit :=
+
+ tt.
+
+Definition mem_read (addr : mword 64) (width : Z) (aq : bool) (rl : bool) (res : bool)
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult (mword (8 * width))) :=
+
+ (if ((andb (orb aq res) (negb (is_aligned_addr addr width)))) then
+ returnm ((MemException
+ (E_Load_Addr_Align))
+ : MemoryOpResult (mword (8 * width)))
+ else
+ (match (aq, rl, res) with
+ | (false, false, false) =>
+ (checked_mem_read Data addr width false false false)
+ : M (MemoryOpResult (mword (8 * width)))
+ | (true, false, false) => (MEMr_acquire addr width) : M (MemoryOpResult (mword (8 * width)))
+ | (false, false, true) =>
+ (MEMr_reserved addr width) : M (MemoryOpResult (mword (8 * width)))
+ | (true, false, true) =>
+ (MEMr_reserved_acquire addr width) : M (MemoryOpResult (mword (8 * width)))
+ | (false, true, false) =>
+ (throw (Error_not_implemented ("load.rl"))) : M (MemoryOpResult (mword (8 * width)))
+ | (true, true, false) =>
+ (MEMr_strong_acquire addr width) : M (MemoryOpResult (mword (8 * width)))
+ | (false, true, true) =>
+ (throw (Error_not_implemented ("lr.rl"))) : M (MemoryOpResult (mword (8 * width)))
+ | (true, true, true) =>
+ (MEMr_reserved_strong_acquire addr width) : M (MemoryOpResult (mword (8 * width)))
+ end)
+ : M (MemoryOpResult (mword (8 * width)))) >>= fun result : MemoryOpResult (bits (8 * width)) =>
+ let '_ := (rvfi_read addr width result) : unit in
+ returnm (result
+ : MemoryOpResult (mword (8 * width))).
+
+Definition mem_write_ea (addr : mword 64) (width : Z) (aq : bool) (rl : bool) (con : bool)
+: M (MemoryOpResult unit) :=
+
+ (if ((andb (orb rl con) (negb (is_aligned_addr addr width)))) then
+ returnm ((MemException
+ (E_SAMO_Addr_Align))
+ : MemoryOpResult unit)
+ else
+ (match (aq, rl, con) with
+ | (false, false, false) =>
+ (MEMea addr width) >> returnm ((MemValue (tt)) : MemoryOpResult unit)
+ | (false, true, false) =>
+ (MEMea_release addr width) >> returnm ((MemValue (tt)) : MemoryOpResult unit)
+ | (false, false, true) =>
+ (MEMea_conditional addr width) >> returnm ((MemValue (tt)) : MemoryOpResult unit)
+ | (false, true, true) =>
+ (MEMea_conditional_release addr width) >> returnm ((MemValue (tt)) : MemoryOpResult unit)
+ | (true, false, false) =>
+ (throw (Error_not_implemented ("store.aq"))) : M (MemoryOpResult unit)
+ | (true, true, false) =>
+ (MEMea_strong_release addr width) >> returnm ((MemValue (tt)) : MemoryOpResult unit)
+ | (true, false, true) => (throw (Error_not_implemented ("sc.aq"))) : M (MemoryOpResult unit)
+ | (true, true, true) =>
+ (MEMea_conditional_strong_release addr width) >>
+ returnm ((MemValue
+ (tt))
+ : MemoryOpResult unit)
+ end)
+ : M (MemoryOpResult unit))
+ : M (MemoryOpResult unit).
+
+Definition phys_mem_write (addr : mword 64) (width : Z) (data : mword (8 * width))
+: M (MemoryOpResult bool) :=
+
+ let '_ :=
+ (print_endline
+ (String.append "mem["
+ (String.append (string_of_bits addr) (String.append "] <- " (string_of_bits data)))))
+ : unit in
+ (__RISCV_write addr width data) >>= fun w__0 : bool =>
+ returnm ((MemValue
+ (w__0))
+ : MemoryOpResult bool).
+
+Definition checked_mem_write (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (if ((within_mmio_writable addr width)) then
+ (mmio_write addr width data)
+ : M (MemoryOpResult bool)
+ else if ((within_phys_mem addr width)) then
+ (phys_mem_write addr width data)
+ : M (MemoryOpResult bool)
+ else returnm ((MemException (E_SAMO_Access_Fault)) : MemoryOpResult bool))
+ : M (MemoryOpResult bool).
+
+Definition MEMval (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (checked_mem_write addr width data)
+ : M (MemoryOpResult bool).
+
+Definition MEMval_release (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (checked_mem_write addr width data)
+ : M (MemoryOpResult bool).
+
+Definition MEMval_strong_release (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (checked_mem_write addr width data)
+ : M (MemoryOpResult bool).
+
+Definition MEMval_conditional (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (checked_mem_write addr width data)
+ : M (MemoryOpResult bool).
+
+Definition MEMval_conditional_release (addr : mword 64) (width : Z) (data : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (checked_mem_write addr width data)
+ : M (MemoryOpResult bool).
+
+Definition MEMval_conditional_strong_release
+(addr : mword 64) (width : Z) (data : mword (8 * width)) `{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ (checked_mem_write addr width data)
+ : M (MemoryOpResult bool).
+
+Definition rvfi_write (addr : mword 64) (width : Z) (value : mword (8 * width))
+`{ArithFact (width >= (0 + 1))}
+: unit :=
+
+ tt.
+
+Definition mem_write_value
+(addr : mword 64) (width : Z) (value : mword (8 * width)) (aq : bool) (rl : bool) (con : bool)
+`{ArithFact (width >= (0 + 1))}
+: M (MemoryOpResult bool) :=
+
+ let '_ := (rvfi_write addr width value) : unit in
+ (if ((andb (orb rl con) (negb (is_aligned_addr addr width)))) then
+ returnm ((MemException
+ (E_SAMO_Addr_Align))
+ : MemoryOpResult bool)
+ else
+ (match (aq, rl, con) with
+ | (false, false, false) => (checked_mem_write addr width value) : M (MemoryOpResult bool)
+ | (false, true, false) => (MEMval_release addr width value) : M (MemoryOpResult bool)
+ | (false, false, true) => (MEMval_conditional addr width value) : M (MemoryOpResult bool)
+ | (false, true, true) =>
+ (MEMval_conditional_release addr width value) : M (MemoryOpResult bool)
+ | (true, false, false) =>
+ (throw (Error_not_implemented ("store.aq"))) : M (MemoryOpResult bool)
+ | (true, true, false) => (MEMval_strong_release addr width value) : M (MemoryOpResult bool)
+ | (true, false, true) => (throw (Error_not_implemented ("sc.aq"))) : M (MemoryOpResult bool)
+ | (true, true, true) =>
+ (MEMval_conditional_strong_release addr width value) : M (MemoryOpResult bool)
+ end)
+ : M (MemoryOpResult bool))
+ : M (MemoryOpResult bool).
+
+Definition PAGESIZE_BITS := 12.
+Hint Unfold PAGESIZE_BITS : sail.
+Definition Mk_PTE_Bits (v : mword 8)
+: PTE_Bits :=
+
+ {| PTE_Bits_PTE_Bits_chunk_0 := (subrange_vec_dec v 7 0) |}.
+
+Definition _get_PTE_Bits_bits (v : PTE_Bits)
+: mword 8 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 7 0.
+
+Definition _set_PTE_Bits_bits (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 7 0 (subrange_vec_dec v 7 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_bits (v : PTE_Bits) (x : mword 8)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 7 0 (subrange_vec_dec x 7 0)) ]}.
+
+Definition _get_PTE_Bits_D (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 7 7.
+
+Definition _set_PTE_Bits_D (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 7 7 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_D (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 7 7 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_A (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 6 6.
+
+Definition _set_PTE_Bits_A (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 6 6 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_A (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 6 6 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_G (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 5 5.
+
+Definition _set_PTE_Bits_G (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 5 5 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_G (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 5 5 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_U (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 4 4.
+
+Definition _set_PTE_Bits_U (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 4 4 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_U (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 4 4 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_X (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 3 3.
+
+Definition _set_PTE_Bits_X (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 3 3 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_X (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 3 3 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_W (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 2 2.
+
+Definition _set_PTE_Bits_W (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 2 2 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_W (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 2 2 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_R (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 1 1.
+
+Definition _set_PTE_Bits_R (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 1 1 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_R (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 1 1 (subrange_vec_dec x 0 0)) ]}.
+
+Definition _get_PTE_Bits_V (v : PTE_Bits)
+: mword 1 :=
+
+ subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 0 0.
+
+Definition _set_PTE_Bits_V (r_ref : register_ref regstate register_value PTE_Bits) (v : mword 1)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec r.(PTE_Bits_PTE_Bits_chunk_0) 0 0 (subrange_vec_dec v 0 0)) ]}
+ : PTE_Bits in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_PTE_Bits_V (v : PTE_Bits) (x : mword 1)
+: PTE_Bits :=
+
+ {[ v with
+ PTE_Bits_PTE_Bits_chunk_0 :=
+ (update_subrange_vec_dec v.(PTE_Bits_PTE_Bits_chunk_0) 0 0 (subrange_vec_dec x 0 0)) ]}.
+
+Definition isPTEPtr (p : mword 8)
+: bool :=
+
+ let a := Mk_PTE_Bits p in
+ andb (eq_vec (_get_PTE_Bits_R a) ((bool_to_bits false) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_W a) ((bool_to_bits false) : mword 1))
+ (eq_vec (_get_PTE_Bits_X a) ((bool_to_bits false) : mword 1))).
+
+Definition isInvalidPTE (p : mword 8)
+: bool :=
+
+ let a := Mk_PTE_Bits p in
+ orb (eq_vec (_get_PTE_Bits_V a) ((bool_to_bits false) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_W a) ((bool_to_bits true) : mword 1))
+ (eq_vec (_get_PTE_Bits_R a) ((bool_to_bits false) : mword 1))).
+
+Definition checkPTEPermission
+(ac : AccessType) (priv : Privilege) (mxr : bool) (do_sum : bool) (p : PTE_Bits)
+: M (bool) :=
+
+ (match (ac, priv) with
+ | (Read, User) =>
+ returnm ((andb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits true) : mword 1))
+ (orb (eq_vec (_get_PTE_Bits_R p) ((bool_to_bits true) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_X p) ((bool_to_bits true) : mword 1)) mxr)))
+ : bool)
+ | (Write, User) =>
+ returnm ((andb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits true) : mword 1))
+ (eq_vec (_get_PTE_Bits_W p) ((bool_to_bits true) : mword 1)))
+ : bool)
+ | (ReadWrite, User) =>
+ returnm ((andb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits true) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_W p) ((bool_to_bits true) : mword 1))
+ (orb (eq_vec (_get_PTE_Bits_R p) ((bool_to_bits true) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_X p) ((bool_to_bits true) : mword 1)) mxr))))
+ : bool)
+ | (Execute, User) =>
+ returnm ((andb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits true) : mword 1))
+ (eq_vec (_get_PTE_Bits_X p) ((bool_to_bits true) : mword 1)))
+ : bool)
+ | (Read, Supervisor) =>
+ returnm ((andb (orb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits false) : mword 1)) do_sum)
+ (orb (eq_vec (_get_PTE_Bits_R p) ((bool_to_bits true) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_X p) ((bool_to_bits true) : mword 1)) mxr)))
+ : bool)
+ | (Write, Supervisor) =>
+ returnm ((andb (orb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits false) : mword 1)) do_sum)
+ (eq_vec (_get_PTE_Bits_W p) ((bool_to_bits true) : mword 1)))
+ : bool)
+ | (ReadWrite, Supervisor) =>
+ returnm ((andb (orb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits false) : mword 1)) do_sum)
+ (andb (eq_vec (_get_PTE_Bits_W p) ((bool_to_bits true) : mword 1))
+ (orb (eq_vec (_get_PTE_Bits_R p) ((bool_to_bits true) : mword 1))
+ (andb (eq_vec (_get_PTE_Bits_X p) ((bool_to_bits true) : mword 1)) mxr))))
+ : bool)
+ | (Execute, Supervisor) =>
+ returnm ((andb (eq_vec (_get_PTE_Bits_U p) ((bool_to_bits false) : mword 1))
+ (eq_vec (_get_PTE_Bits_X p) ((bool_to_bits true) : mword 1)))
+ : bool)
+ | (_, Machine) => (internal_error "m-mode mem perm check") : M (bool)
+ end)
+ : M (bool).
+
+Definition update_PTE_Bits (p : PTE_Bits) (a : AccessType)
+: option PTE_Bits :=
+
+ let update_d :=
+ andb
+ (orb (generic_eq ((accessType_to_str a) : string) ((accessType_to_str Write) : string))
+ (generic_eq ((accessType_to_str a) : string) ((accessType_to_str ReadWrite) : string)))
+ (eq_vec (_get_PTE_Bits_D p) ((bool_to_bits false) : mword 1)) in
+ let update_a := eq_vec (_get_PTE_Bits_A p) ((bool_to_bits false) : mword 1) in
+ if ((orb update_d update_a)) then
+ let np := _update_PTE_Bits_A p ((bool_to_bits true) : mword 1) in
+ let np := if (update_d) then _update_PTE_Bits_D np ((bool_to_bits true) : mword 1) else np in
+ Some
+ (np)
+ else None.
+
+Definition PTW_Error_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 4)}
+: PTW_Error :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then PTW_Access
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then PTW_Invalid_PTE
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then PTW_No_Permission
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then PTW_Misaligned
+ else PTW_PTE_Update.
+
+Definition num_of_PTW_Error (arg_ : PTW_Error)
+: {e : Z & ArithFact (0 <= e /\ e <= 4)} :=
+
+ build_ex(match arg_ with
+ | PTW_Access => 0
+ | PTW_Invalid_PTE => 1
+ | PTW_No_Permission => 2
+ | PTW_Misaligned => 3
+ | PTW_PTE_Update => 4
+ end).
+
+Definition ptw_error_to_str (e : PTW_Error)
+: string :=
+
+ match e with
+ | PTW_Access => "mem-access-error"
+ | PTW_Invalid_PTE => "invalid-pte"
+ | PTW_No_Permission => "no-permission"
+ | PTW_Misaligned => "misaligned-superpage"
+ | PTW_PTE_Update => "pte-update-needed"
+ end.
+
+Definition translationException (a : AccessType) (f : PTW_Error)
+: ExceptionType :=
+
+ match (a, f) with
+ | (ReadWrite, PTW_Access) => E_SAMO_Access_Fault
+ | (ReadWrite, _) => E_SAMO_Page_Fault
+ | (Read, PTW_Access) => E_Load_Access_Fault
+ | (Read, _) => E_Load_Page_Fault
+ | (Write, PTW_Access) => E_SAMO_Access_Fault
+ | (Write, _) => E_SAMO_Page_Fault
+ | (Fetch, PTW_Access) => E_Fetch_Access_Fault
+ | (Fetch, _) => E_Fetch_Page_Fault
+ end.
+
+Definition SV39_LEVEL_BITS := 9.
+Hint Unfold SV39_LEVEL_BITS : sail.
+Definition SV39_LEVELS := 3.
+Hint Unfold SV39_LEVELS : sail.
+Definition PTE39_LOG_SIZE := 3.
+Hint Unfold PTE39_LOG_SIZE : sail.
+Definition PTE39_SIZE := 8.
+Hint Unfold PTE39_SIZE : sail.
+Definition Mk_SV39_Vaddr (v : mword 39)
+: SV39_Vaddr :=
+
+ {| SV39_Vaddr_SV39_Vaddr_chunk_0 := (subrange_vec_dec v 38 0) |}.
+
+Definition _get_SV39_Vaddr_bits (v : SV39_Vaddr)
+: mword 39 :=
+
+ subrange_vec_dec v.(SV39_Vaddr_SV39_Vaddr_chunk_0) 38 0.
+
+Definition _set_SV39_Vaddr_bits
+(r_ref : register_ref regstate register_value SV39_Vaddr) (v : mword 39)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_Vaddr_SV39_Vaddr_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_Vaddr_SV39_Vaddr_chunk_0) 38 0 (subrange_vec_dec v 38 0)) ]}
+ : SV39_Vaddr in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_Vaddr_bits (v : SV39_Vaddr) (x : mword 39)
+: SV39_Vaddr :=
+
+ {[ v with
+ SV39_Vaddr_SV39_Vaddr_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_Vaddr_SV39_Vaddr_chunk_0) 38 0 (subrange_vec_dec x 38 0)) ]}.
+
+Definition _get_SV39_Vaddr_VPNi (v : SV39_Vaddr)
+: mword 27 :=
+
+ subrange_vec_dec v.(SV39_Vaddr_SV39_Vaddr_chunk_0) 38 12.
+
+Definition _set_SV39_Vaddr_VPNi
+(r_ref : register_ref regstate register_value SV39_Vaddr) (v : mword 27)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_Vaddr_SV39_Vaddr_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_Vaddr_SV39_Vaddr_chunk_0) 38 12 (subrange_vec_dec v 26 0)) ]}
+ : SV39_Vaddr in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_Vaddr_VPNi (v : SV39_Vaddr) (x : mword 27)
+: SV39_Vaddr :=
+
+ {[ v with
+ SV39_Vaddr_SV39_Vaddr_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_Vaddr_SV39_Vaddr_chunk_0) 38 12 (subrange_vec_dec x 26 0)) ]}.
+
+Definition _get_SV39_Vaddr_PgOfs (v : SV39_Vaddr)
+: mword 12 :=
+
+ subrange_vec_dec v.(SV39_Vaddr_SV39_Vaddr_chunk_0) 11 0.
+
+Definition _set_SV39_Vaddr_PgOfs
+(r_ref : register_ref regstate register_value SV39_Vaddr) (v : mword 12)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_Vaddr_SV39_Vaddr_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_Vaddr_SV39_Vaddr_chunk_0) 11 0 (subrange_vec_dec v 11 0)) ]}
+ : SV39_Vaddr in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_Vaddr_PgOfs (v : SV39_Vaddr) (x : mword 12)
+: SV39_Vaddr :=
+
+ {[ v with
+ SV39_Vaddr_SV39_Vaddr_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_Vaddr_SV39_Vaddr_chunk_0) 11 0 (subrange_vec_dec x 11 0)) ]}.
+
+Definition Mk_SV39_Paddr (v : mword 56)
+: SV39_Paddr :=
+
+ {| SV39_Paddr_SV39_Paddr_chunk_0 := (subrange_vec_dec v 55 0) |}.
+
+Definition _get_SV39_Paddr_bits (v : SV39_Paddr)
+: mword 56 :=
+
+ subrange_vec_dec v.(SV39_Paddr_SV39_Paddr_chunk_0) 55 0.
+
+Definition _set_SV39_Paddr_bits
+(r_ref : register_ref regstate register_value SV39_Paddr) (v : mword 56)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_Paddr_SV39_Paddr_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_Paddr_SV39_Paddr_chunk_0) 55 0 (subrange_vec_dec v 55 0)) ]}
+ : SV39_Paddr in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_Paddr_bits (v : SV39_Paddr) (x : mword 56)
+: SV39_Paddr :=
+
+ {[ v with
+ SV39_Paddr_SV39_Paddr_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_Paddr_SV39_Paddr_chunk_0) 55 0 (subrange_vec_dec x 55 0)) ]}.
+
+Definition _get_SV39_Paddr_PPNi (v : SV39_Paddr)
+: mword 44 :=
+
+ subrange_vec_dec v.(SV39_Paddr_SV39_Paddr_chunk_0) 55 12.
+
+Definition _set_SV39_Paddr_PPNi
+(r_ref : register_ref regstate register_value SV39_Paddr) (v : mword 44)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_Paddr_SV39_Paddr_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_Paddr_SV39_Paddr_chunk_0) 55 12 (subrange_vec_dec v 43 0)) ]}
+ : SV39_Paddr in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_Paddr_PPNi (v : SV39_Paddr) (x : mword 44)
+: SV39_Paddr :=
+
+ {[ v with
+ SV39_Paddr_SV39_Paddr_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_Paddr_SV39_Paddr_chunk_0) 55 12 (subrange_vec_dec x 43 0)) ]}.
+
+Definition _get_SV39_Paddr_PgOfs (v : SV39_Paddr)
+: mword 12 :=
+
+ subrange_vec_dec v.(SV39_Paddr_SV39_Paddr_chunk_0) 11 0.
+
+Definition _set_SV39_Paddr_PgOfs
+(r_ref : register_ref regstate register_value SV39_Paddr) (v : mword 12)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_Paddr_SV39_Paddr_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_Paddr_SV39_Paddr_chunk_0) 11 0 (subrange_vec_dec v 11 0)) ]}
+ : SV39_Paddr in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_Paddr_PgOfs (v : SV39_Paddr) (x : mword 12)
+: SV39_Paddr :=
+
+ {[ v with
+ SV39_Paddr_SV39_Paddr_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_Paddr_SV39_Paddr_chunk_0) 11 0 (subrange_vec_dec x 11 0)) ]}.
+
+Definition Mk_SV39_PTE (v : mword 64)
+: SV39_PTE :=
+
+ {| SV39_PTE_SV39_PTE_chunk_0 := (subrange_vec_dec v 63 0) |}.
+
+Definition _get_SV39_PTE_bits (v : SV39_PTE)
+: mword 64 :=
+
+ subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 63 0.
+
+Definition _set_SV39_PTE_bits (r_ref : register_ref regstate register_value SV39_PTE) (v : mword 64)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_PTE_SV39_PTE_chunk_0) 63 0 (subrange_vec_dec v 63 0)) ]}
+ : SV39_PTE in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_PTE_bits (v : SV39_PTE) (x : mword 64)
+: SV39_PTE :=
+
+ {[ v with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 63 0 (subrange_vec_dec x 63 0)) ]}.
+
+Definition _get_SV39_PTE_PPNi (v : SV39_PTE)
+: mword 44 :=
+
+ subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 53 10.
+
+Definition _set_SV39_PTE_PPNi (r_ref : register_ref regstate register_value SV39_PTE) (v : mword 44)
+
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_PTE_SV39_PTE_chunk_0) 53 10 (subrange_vec_dec v 43 0)) ]}
+ : SV39_PTE in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_PTE_PPNi (v : SV39_PTE) (x : mword 44)
+: SV39_PTE :=
+
+ {[ v with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 53 10 (subrange_vec_dec x 43 0)) ]}.
+
+Definition _get_SV39_PTE_RSW (v : SV39_PTE)
+: mword 2 :=
+
+ subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 9 8.
+
+Definition _set_SV39_PTE_RSW (r_ref : register_ref regstate register_value SV39_PTE) (v : mword 2)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_PTE_SV39_PTE_chunk_0) 9 8 (subrange_vec_dec v 1 0)) ]}
+ : SV39_PTE in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_PTE_RSW (v : SV39_PTE) (x : mword 2)
+: SV39_PTE :=
+
+ {[ v with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 9 8 (subrange_vec_dec x 1 0)) ]}.
+
+Definition _get_SV39_PTE_BITS (v : SV39_PTE)
+: mword 8 :=
+
+ subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 7 0.
+
+Definition _set_SV39_PTE_BITS (r_ref : register_ref regstate register_value SV39_PTE) (v : mword 8)
+: M (unit) :=
+
+ (reg_deref r_ref) >>= fun r =>
+ let r :=
+ {[ r with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec r.(SV39_PTE_SV39_PTE_chunk_0) 7 0 (subrange_vec_dec v 7 0)) ]}
+ : SV39_PTE in
+ write_reg r_ref r
+ : M (unit).
+
+Definition _update_SV39_PTE_BITS (v : SV39_PTE) (x : mword 8)
+: SV39_PTE :=
+
+ {[ v with
+ SV39_PTE_SV39_PTE_chunk_0 :=
+ (update_subrange_vec_dec v.(SV39_PTE_SV39_PTE_chunk_0) 7 0 (subrange_vec_dec x 7 0)) ]}.
+
+Definition curAsid64 '(tt : unit)
+: M (mword 16) :=
+
+ ((read_reg satp_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let satp64 := Mk_Satp64 w__0 in
+ returnm ((_get_Satp64_Asid satp64)
+ : mword 16).
+
+Definition curPTB39 '(tt : unit)
+: M (mword 56) :=
+
+ ((read_reg satp_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let satp64 := Mk_Satp64 w__0 in
+ returnm ((EXTZ 56 (shiftl (_get_Satp64_PPN satp64) PAGESIZE_BITS))
+ : mword 56).
+
+Fixpoint _rec_walk39
+(vaddr : mword 39) (ac : AccessType) (priv : Privilege) (mxr : bool) (do_sum : bool)
+(ptb : mword 56) (level : Z) (global : bool) (_reclimit : Z) `{ArithFact (0 <= level)}
+(_acc : Acc (Zwf 0) _reclimit)
+{struct _acc} : M (PTW_Result) :=
+
+ assert_exp' (Z.geb _reclimit 0) "recursion limit reached" >>= fun _ =>
+ let va := Mk_SV39_Vaddr vaddr in
+ let pt_ofs : paddr39 :=
+ shiftl
+ (EXTZ 56
+ (subrange_vec_dec (shiftr (_get_SV39_Vaddr_VPNi va) (Z.mul level SV39_LEVEL_BITS))
+ (Z.sub SV39_LEVEL_BITS 1) 0)) PTE39_LOG_SIZE in
+ let pte_addr := add_vec ptb pt_ofs in
+ (phys_mem_read Data (EXTZ 64 pte_addr) 8 false false false) >>= fun w__0 : MemoryOpResult (mword (8 * 8)) =>
+ (match w__0 with
+ | MemException (_) => returnm ((PTW_Failure (PTW_Access)) : PTW_Result )
+ | MemValue (v) =>
+ let pte := Mk_SV39_PTE v in
+ let pbits := _get_SV39_PTE_BITS pte in
+ let pattr := Mk_PTE_Bits pbits in
+ let is_global := orb global (eq_vec (_get_PTE_Bits_G pattr) ((bool_to_bits true) : mword 1)) in
+ (if ((isInvalidPTE pbits)) then returnm ((PTW_Failure (PTW_Invalid_PTE)) : PTW_Result )
+ else if ((isPTEPtr pbits)) then
+ (if sumbool_of_bool ((Z.eqb level 0)) then
+ returnm ((PTW_Failure
+ (PTW_Invalid_PTE))
+ : PTW_Result )
+ else
+ (_rec_walk39 vaddr ac priv mxr do_sum
+ (EXTZ 56 (shiftl (_get_SV39_PTE_PPNi pte) PAGESIZE_BITS)) _ is_global
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (PTW_Result))
+ : M (PTW_Result)
+ else
+ (checkPTEPermission ac priv mxr do_sum pattr) >>= fun w__3 : bool =>
+ returnm ((if ((negb w__3)) then PTW_Failure (PTW_No_Permission)
+ else if sumbool_of_bool ((Z.gtb level 0)) then
+ let mask :=
+ sub_vec_int
+ (shiftl
+ (xor_vec (_get_SV39_PTE_PPNi pte)
+ (xor_vec (_get_SV39_PTE_PPNi pte)
+ (EXTZ 44 (vec_of_bits [B1] : mword 1))))
+ (Z.mul level SV39_LEVEL_BITS)) 1 in
+ if ((neq_vec (and_vec (_get_SV39_PTE_PPNi pte) mask)
+ (EXTZ 44 (vec_of_bits [B0] : mword 1)))) then
+ PTW_Failure
+ (PTW_Misaligned)
+ else
+ let ppn :=
+ or_vec (_get_SV39_PTE_PPNi pte)
+ (and_vec (EXTZ 44 (_get_SV39_Vaddr_VPNi va)) mask) in
+ PTW_Success
+ ((concat_vec ppn (_get_SV39_Vaddr_PgOfs va), pte, pte_addr, build_ex level, is_global))
+ else
+ PTW_Success
+ ((concat_vec (_get_SV39_PTE_PPNi pte) (_get_SV39_Vaddr_PgOfs va), pte, pte_addr, build_ex level, is_global)))
+ : PTW_Result))
+ : M (PTW_Result)
+ end)
+ : M (PTW_Result).
+
+Definition walk39
+(_arg0 : mword 39) (_arg1 : AccessType) (_arg2 : Privilege) (_arg3 : bool) (_arg4 : bool)
+(_arg5 : mword 56) (level : Z) (_arg7 : bool) `{ArithFact (0 <= level)}
+: M (PTW_Result) :=
+
+ (_rec_walk39 _arg0 _arg1 _arg2 _arg3 _arg4 _arg5 level _arg7 (level : Z) (Zwf_guarded _))
+ : M (PTW_Result).
+
+Definition make_TLB39_Entry
+(asid : mword 16) (global : bool) (vAddr : mword 39) (pAddr : mword 56) (pte : SV39_PTE) (level : Z)
+(pteAddr : mword 56) `{ArithFact (0 <= level)}
+: M (TLB39_Entry) :=
+
+ let 'shift :=
+ projT1 (build_ex (Z.add PAGESIZE_BITS (Z.mul level SV39_LEVEL_BITS))
+ : {n : Z & ArithFact (n >= 0)}) in
+ let vAddrMask : vaddr39 :=
+ sub_vec_int
+ (shiftl (xor_vec vAddr (xor_vec vAddr (EXTZ 39 (vec_of_bits [B1] : mword 1)))) shift) 1 in
+ let vMatchMask : vaddr39 := not_vec vAddrMask in
+ ((read_reg mcycle_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ returnm (({| TLB39_Entry_asid := asid;
+ TLB39_Entry_global := global;
+ TLB39_Entry_pte := pte;
+ TLB39_Entry_pteAddr := pteAddr;
+ TLB39_Entry_vAddrMask := vAddrMask;
+ TLB39_Entry_vMatchMask := vMatchMask;
+ TLB39_Entry_vAddr := (and_vec vAddr vMatchMask);
+ TLB39_Entry_pAddr := (shiftl (shiftr pAddr shift) shift);
+ TLB39_Entry_age := w__0 |})
+ : TLB39_Entry).
+
+Definition lookupTLB39 (asid : mword 16) (vaddr : mword 39)
+: M (option ((Z * TLB39_Entry))) :=
+
+ read_reg tlb39_ref >>= fun w__0 : option TLB39_Entry =>
+ returnm ((match w__0 with
+ | None => None
+ | Some (e) =>
+ if ((andb (orb e.(TLB39_Entry_global) (eq_vec e.(TLB39_Entry_asid) asid))
+ (eq_vec e.(TLB39_Entry_vAddr) (and_vec e.(TLB39_Entry_vMatchMask) vaddr))))
+ then
+ Some
+ ((0, e))
+ else None
+ end)
+ : option ((Z * TLB39_Entry))).
+
+Definition addToTLB39
+(asid : mword 16) (vAddr : mword 39) (pAddr : mword 56) (pte : SV39_PTE) (pteAddr : mword 56)
+(level : Z) (global : bool) `{ArithFact (0 <= level)}
+: M (unit) :=
+
+ (make_TLB39_Entry asid global vAddr pAddr pte level pteAddr) >>= fun ent =>
+ write_reg tlb39_ref (Some (ent))
+ : M (unit).
+
+Definition writeTLB39 (idx : Z) (ent : TLB39_Entry)
+: M (unit) :=
+
+ write_reg tlb39_ref (Some (ent))
+ : M (unit).
+
+Definition flushTLB (asid : option (mword 16)) (addr : option (mword 39))
+: M (unit) :=
+
+ read_reg tlb39_ref >>= fun w__0 : option TLB39_Entry =>
+ let ent : option TLB39_Entry :=
+ match (w__0, asid, addr) with
+ | (None, _, _) => None
+ | (Some (e), None, None) => None
+ | (Some (e), None, Some (a)) =>
+ if ((eq_vec e.(TLB39_Entry_vAddr) (and_vec e.(TLB39_Entry_vMatchMask) a))) then None
+ else Some (e)
+ | (Some (e), Some (i), None) =>
+ if ((andb (eq_vec e.(TLB39_Entry_asid) i) (negb e.(TLB39_Entry_global)))) then None
+ else Some (e)
+ | (Some (e), Some (i), Some (a)) =>
+ if ((andb (eq_vec e.(TLB39_Entry_asid) i)
+ (andb (eq_vec e.(TLB39_Entry_vAddr) (and_vec a e.(TLB39_Entry_vMatchMask)))
+ (negb e.(TLB39_Entry_global))))) then
+ None
+ else Some (e)
+ end in
+ write_reg tlb39_ref ent
+ : M (unit).
+
+Definition translate39
+(vAddr : mword 39) (ac : AccessType) (priv : Privilege) (mxr : bool) (do_sum : bool) (level : Z)
+`{ArithFact (0 <= level)}
+: M (TR39_Result) :=
+
+ (curAsid64 tt) >>= fun asid =>
+ (lookupTLB39 asid vAddr) >>= fun w__0 : option ((Z * TLB39_Entry)) =>
+ (match w__0 with
+ | Some (idx,ent) =>
+ let pteBits := Mk_PTE_Bits (_get_SV39_PTE_BITS ent.(TLB39_Entry_pte)) in
+ (checkPTEPermission ac priv mxr do_sum pteBits) >>= fun w__1 : bool =>
+ (if ((negb w__1)) then returnm ((TR39_Failure (PTW_No_Permission)) : TR39_Result )
+ else
+ (match (update_PTE_Bits pteBits ac) with
+ | None =>
+ returnm ((TR39_Address
+ (or_vec ent.(TLB39_Entry_pAddr)
+ (EXTZ 56 (and_vec vAddr ent.(TLB39_Entry_vAddrMask)))))
+ : TR39_Result )
+ | Some (pbits) =>
+ (if ((negb (plat_enable_dirty_update tt))) then
+ returnm ((TR39_Failure
+ (PTW_PTE_Update))
+ : TR39_Result )
+ else
+ let n_ent : TLB39_Entry := ent in
+ let n_ent :=
+ {[ n_ent with
+ TLB39_Entry_pte :=
+ (_update_SV39_PTE_BITS ent.(TLB39_Entry_pte) (_get_PTE_Bits_bits pbits)) ]}
+ : TLB39_Entry in
+ (writeTLB39 idx n_ent) >>
+ (checked_mem_write (EXTZ 64 ent.(TLB39_Entry_pteAddr)) 8
+ (_get_SV39_PTE_bits ent.(TLB39_Entry_pte))) >>= fun w__2 : MemoryOpResult bool =>
+ (match w__2 with
+ | MemValue (_) => returnm (tt : unit)
+ | MemException (e) =>
+ (internal_error "invalid physical address in TLB") : M (unit)
+ end) >>
+ returnm ((TR39_Address
+ (or_vec ent.(TLB39_Entry_pAddr)
+ (EXTZ 56 (and_vec vAddr ent.(TLB39_Entry_vAddrMask)))))
+ : TR39_Result))
+ : M (TR39_Result)
+ end)
+ : M (TR39_Result))
+ : M (TR39_Result)
+ | None =>
+ (curPTB39 tt) >>= fun w__6 : mword 56 =>
+ (walk39 vAddr ac priv mxr do_sum w__6 level false) >>= fun w__7 : PTW_Result =>
+ (match w__7 with
+ | PTW_Failure (f) => returnm ((TR39_Failure (f)) : TR39_Result )
+ | PTW_Success (pAddr,pte,pteAddr,(existT _ level _),global) =>
+ (match (update_PTE_Bits (Mk_PTE_Bits (_get_SV39_PTE_BITS pte)) ac) with
+ | None =>
+ (addToTLB39 asid vAddr pAddr pte pteAddr level global) >>
+ returnm ((TR39_Address
+ (pAddr))
+ : TR39_Result )
+ | Some (pbits) =>
+ (if ((negb (plat_enable_dirty_update tt))) then
+ returnm ((TR39_Failure
+ (PTW_PTE_Update))
+ : TR39_Result )
+ else
+ let w_pte : SV39_PTE := _update_SV39_PTE_BITS pte (_get_PTE_Bits_bits pbits) in
+ (checked_mem_write (EXTZ 64 pteAddr) 8 (_get_SV39_PTE_bits w_pte)) >>= fun w__8 : MemoryOpResult bool =>
+ (match w__8 with
+ | MemValue (_) =>
+ (addToTLB39 asid vAddr pAddr w_pte pteAddr level global) >>
+ returnm ((TR39_Address
+ (pAddr))
+ : TR39_Result )
+ | MemException (e) => returnm ((TR39_Failure (PTW_Access)) : TR39_Result )
+ end)
+ : M (TR39_Result))
+ : M (TR39_Result)
+ end)
+ : M (TR39_Result)
+ end)
+ : M (TR39_Result)
+ end)
+ : M (TR39_Result).
+
+Definition translationMode (priv : Privilege)
+: M (SATPMode) :=
+
+ (if ((eq_vec (privLevel_to_bits priv) ((privLevel_to_bits Machine) : mword 2))) then
+ returnm (Sbare
+ : SATPMode)
+ else
+ read_reg mstatus_ref >>= fun w__0 : Mstatus =>
+ let arch := architecture (_get_Mstatus_SXL w__0) in
+ (match arch with
+ | Some (RV64) =>
+ ((read_reg satp_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ let mbits : satp_mode := _get_Satp64_Mode (Mk_Satp64 w__1) in
+ (match (satpMode_of_bits RV64 mbits) with
+ | Some (m) => returnm (m : SATPMode)
+ | None => (internal_error "invalid RV64 translation mode in satp") : M (SATPMode)
+ end)
+ : M (SATPMode)
+ | _ => (internal_error "unsupported address translation arch") : M (SATPMode)
+ end)
+ : M (SATPMode))
+ : M (SATPMode).
+
+Definition translateAddr (vAddr : mword 64) (ac : AccessType) (rt : ReadType)
+: M (TR_Result) :=
+
+ (match rt with
+ | Instruction => read_reg cur_privilege_ref : M (Privilege)
+ | Data =>
+ read_reg mstatus_ref >>= fun w__1 : Mstatus =>
+ (if ((eq_vec (_get_Mstatus_MPRV w__1) ((bool_to_bits true) : mword 1))) then
+ read_reg mstatus_ref >>= fun w__2 : Mstatus =>
+ returnm ((privLevel_of_bits (_get_Mstatus_MPP w__2))
+ : Privilege)
+ else read_reg cur_privilege_ref : M (Privilege))
+ : M (Privilege)
+ end) >>= fun effPriv : Privilege =>
+ read_reg mstatus_ref >>= fun w__5 : Mstatus =>
+ let mxr : bool := eq_vec (_get_Mstatus_MXR w__5) ((bool_to_bits true) : mword 1) in
+ read_reg mstatus_ref >>= fun w__6 : Mstatus =>
+ let do_sum : bool := eq_vec (_get_Mstatus_SUM w__6) ((bool_to_bits true) : mword 1) in
+ (translationMode effPriv) >>= fun mode : SATPMode =>
+ (match mode with
+ | Sbare => returnm ((TR_Address (vAddr)) : TR_Result )
+ | SV39 =>
+ (translate39 (subrange_vec_dec vAddr 38 0) ac effPriv mxr do_sum (Z.sub SV39_LEVELS 1)) >>= fun w__7 : TR39_Result =>
+ returnm ((match w__7 with
+ | TR39_Address (pa) => TR_Address (EXTZ 64 pa)
+ | TR39_Failure (f) => TR_Failure (translationException ac f)
+ end)
+ : TR_Result)
+ end)
+ : M (TR_Result).
+
+Definition encdec_uop_forwards (arg_ : uop)
+: mword 7 :=
+
+ match arg_ with
+ | RISCV_LUI => (vec_of_bits [B0;B1;B1;B0;B1;B1;B1] : mword 7)
+ | RISCV_AUIPC => (vec_of_bits [B0;B0;B1;B0;B1;B1;B1] : mword 7)
+ end.
+
+Definition encdec_uop_backwards (arg_ : mword 7)
+: uop :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B0;B1;B1;B1] : mword 7))) then RISCV_LUI
+ else RISCV_AUIPC.
+
+Definition encdec_uop_forwards_matches (arg_ : uop)
+: bool :=
+
+ match arg_ with | RISCV_LUI => true | RISCV_AUIPC => true end.
+
+Definition encdec_uop_backwards_matches (arg_ : mword 7)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B0;B1;B1;B1] : mword 7))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B0;B1;B1;B1] : mword 7))) then true
+ else false.
+
+Definition utype_mnemonic_forwards (arg_ : uop)
+: string :=
+
+ match arg_ with | RISCV_LUI => "lui" | RISCV_AUIPC => "auipc" end.
+
+Definition utype_mnemonic_backwards (arg_ : string)
+: uop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "lui")) then RISCV_LUI
+ else RISCV_AUIPC.
+
+Definition utype_mnemonic_forwards_matches (arg_ : uop)
+: bool :=
+
+ match arg_ with | RISCV_LUI => true | RISCV_AUIPC => true end.
+
+Definition utype_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "lui")) then true
+ else if ((generic_eq p0_ "auipc")) then true
+ else false.
+
+Definition _s496_ (_s497_ : string)
+: option string :=
+
+ let _s498_ := _s497_ in
+ if ((string_startswith _s498_ "auipc")) then
+ match (string_drop _s498_ (projT1 (string_length "auipc"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s492_ (_s493_ : string)
+: option string :=
+
+ let _s494_ := _s493_ in
+ if ((string_startswith _s494_ "lui")) then
+ match (string_drop _s494_ (projT1 (string_length "lui"))) with | s_ => Some (s_) end
+ else None.
+
+Definition utype_mnemonic_matches_prefix (arg_ : string)
+: M (option ((uop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s495_ := arg_ in
+ (if ((match (_s492_ _s495_) with | Some (s_) => true | _ => false end)) then
+ (match (_s492_ _s495_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_LUI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((uop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((uop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((uop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s496_ _s495_) with | Some (s_) => true | _ => false end)) then
+ (match (_s496_ _s495_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_AUIPC, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((uop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((uop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((uop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((uop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((uop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition encdec_bop_forwards (arg_ : bop)
+: mword 3 :=
+
+ match arg_ with
+ | RISCV_BEQ => (vec_of_bits [B0;B0;B0] : mword 3)
+ | RISCV_BNE => (vec_of_bits [B0;B0;B1] : mword 3)
+ | RISCV_BLT => (vec_of_bits [B1;B0;B0] : mword 3)
+ | RISCV_BGE => (vec_of_bits [B1;B0;B1] : mword 3)
+ | RISCV_BLTU => (vec_of_bits [B1;B1;B0] : mword 3)
+ | RISCV_BGEU => (vec_of_bits [B1;B1;B1] : mword 3)
+ end.
+
+Definition encdec_bop_backwards (arg_ : mword 3)
+: bop :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then RISCV_BEQ
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then RISCV_BNE
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B0] : mword 3))) then RISCV_BLT
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then RISCV_BGE
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0] : mword 3))) then RISCV_BLTU
+ else RISCV_BGEU.
+
+Definition encdec_bop_forwards_matches (arg_ : bop)
+: bool :=
+
+ match arg_ with
+ | RISCV_BEQ => true
+ | RISCV_BNE => true
+ | RISCV_BLT => true
+ | RISCV_BGE => true
+ | RISCV_BLTU => true
+ | RISCV_BGEU => true
+ end.
+
+Definition encdec_bop_backwards_matches (arg_ : mword 3)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1] : mword 3))) then true
+ else false.
+
+Definition btype_mnemonic_forwards (arg_ : bop)
+: string :=
+
+ match arg_ with
+ | RISCV_BEQ => "beq"
+ | RISCV_BNE => "bne"
+ | RISCV_BLT => "blt"
+ | RISCV_BGE => "bge"
+ | RISCV_BLTU => "bltu"
+ | RISCV_BGEU => "bgeu"
+ end.
+
+Definition btype_mnemonic_backwards (arg_ : string)
+: bop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "beq")) then RISCV_BEQ
+ else if ((generic_eq p0_ "bne")) then RISCV_BNE
+ else if ((generic_eq p0_ "blt")) then RISCV_BLT
+ else if ((generic_eq p0_ "bge")) then RISCV_BGE
+ else if ((generic_eq p0_ "bltu")) then RISCV_BLTU
+ else RISCV_BGEU.
+
+Definition btype_mnemonic_forwards_matches (arg_ : bop)
+: bool :=
+
+ match arg_ with
+ | RISCV_BEQ => true
+ | RISCV_BNE => true
+ | RISCV_BLT => true
+ | RISCV_BGE => true
+ | RISCV_BLTU => true
+ | RISCV_BGEU => true
+ end.
+
+Definition btype_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "beq")) then true
+ else if ((generic_eq p0_ "bne")) then true
+ else if ((generic_eq p0_ "blt")) then true
+ else if ((generic_eq p0_ "bge")) then true
+ else if ((generic_eq p0_ "bltu")) then true
+ else if ((generic_eq p0_ "bgeu")) then true
+ else false.
+
+Definition _s520_ (_s521_ : string)
+: option string :=
+
+ let _s522_ := _s521_ in
+ if ((string_startswith _s522_ "bgeu")) then
+ match (string_drop _s522_ (projT1 (string_length "bgeu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s516_ (_s517_ : string)
+: option string :=
+
+ let _s518_ := _s517_ in
+ if ((string_startswith _s518_ "bltu")) then
+ match (string_drop _s518_ (projT1 (string_length "bltu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s512_ (_s513_ : string)
+: option string :=
+
+ let _s514_ := _s513_ in
+ if ((string_startswith _s514_ "bge")) then
+ match (string_drop _s514_ (projT1 (string_length "bge"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s508_ (_s509_ : string)
+: option string :=
+
+ let _s510_ := _s509_ in
+ if ((string_startswith _s510_ "blt")) then
+ match (string_drop _s510_ (projT1 (string_length "blt"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s504_ (_s505_ : string)
+: option string :=
+
+ let _s506_ := _s505_ in
+ if ((string_startswith _s506_ "bne")) then
+ match (string_drop _s506_ (projT1 (string_length "bne"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s500_ (_s501_ : string)
+: option string :=
+
+ let _s502_ := _s501_ in
+ if ((string_startswith _s502_ "beq")) then
+ match (string_drop _s502_ (projT1 (string_length "beq"))) with | s_ => Some (s_) end
+ else None.
+
+Definition btype_mnemonic_matches_prefix (arg_ : string)
+: M (option ((bop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s503_ := arg_ in
+ (if ((match (_s500_ _s503_) with | Some (s_) => true | _ => false end)) then
+ (match (_s500_ _s503_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_BEQ, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s504_ _s503_) with | Some (s_) => true | _ => false end)) then
+ (match (_s504_ _s503_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_BNE, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s508_ _s503_) with | Some (s_) => true | _ => false end)) then
+ (match (_s508_ _s503_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_BLT, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s512_ _s503_) with | Some (s_) => true | _ => false end)) then
+ (match (_s512_ _s503_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_BGE, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s516_ _s503_) with | Some (s_) => true | _ => false end)) then
+ (match (_s516_ _s503_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_BLTU, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s520_ _s503_) with | Some (s_) => true | _ => false end)) then
+ (match (_s520_ _s503_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_BGEU, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((bop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((bop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition encdec_iop_forwards (arg_ : iop)
+: mword 3 :=
+
+ match arg_ with
+ | RISCV_ADDI => (vec_of_bits [B0;B0;B0] : mword 3)
+ | RISCV_SLTI => (vec_of_bits [B0;B1;B0] : mword 3)
+ | RISCV_SLTIU => (vec_of_bits [B0;B1;B1] : mword 3)
+ | RISCV_XORI => (vec_of_bits [B1;B0;B0] : mword 3)
+ | RISCV_ORI => (vec_of_bits [B1;B1;B0] : mword 3)
+ | RISCV_ANDI => (vec_of_bits [B1;B1;B1] : mword 3)
+ end.
+
+Definition encdec_iop_backwards (arg_ : mword 3)
+: iop :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then RISCV_ADDI
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B0] : mword 3))) then RISCV_SLTI
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1] : mword 3))) then RISCV_SLTIU
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B0] : mword 3))) then RISCV_XORI
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0] : mword 3))) then RISCV_ORI
+ else RISCV_ANDI.
+
+Definition encdec_iop_forwards_matches (arg_ : iop)
+: bool :=
+
+ match arg_ with
+ | RISCV_ADDI => true
+ | RISCV_SLTI => true
+ | RISCV_SLTIU => true
+ | RISCV_XORI => true
+ | RISCV_ORI => true
+ | RISCV_ANDI => true
+ end.
+
+Definition encdec_iop_backwards_matches (arg_ : mword 3)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1] : mword 3))) then true
+ else false.
+
+Definition itype_mnemonic_forwards (arg_ : iop)
+: string :=
+
+ match arg_ with
+ | RISCV_ADDI => "addi"
+ | RISCV_SLTI => "slti"
+ | RISCV_SLTIU => "sltiu"
+ | RISCV_XORI => "xori"
+ | RISCV_ORI => "ori"
+ | RISCV_ANDI => "andi"
+ end.
+
+Definition itype_mnemonic_backwards (arg_ : string)
+: iop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "addi")) then RISCV_ADDI
+ else if ((generic_eq p0_ "slti")) then RISCV_SLTI
+ else if ((generic_eq p0_ "sltiu")) then RISCV_SLTIU
+ else if ((generic_eq p0_ "xori")) then RISCV_XORI
+ else if ((generic_eq p0_ "ori")) then RISCV_ORI
+ else RISCV_ANDI.
+
+Definition itype_mnemonic_forwards_matches (arg_ : iop)
+: bool :=
+
+ match arg_ with
+ | RISCV_ADDI => true
+ | RISCV_SLTI => true
+ | RISCV_SLTIU => true
+ | RISCV_XORI => true
+ | RISCV_ORI => true
+ | RISCV_ANDI => true
+ end.
+
+Definition itype_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "addi")) then true
+ else if ((generic_eq p0_ "slti")) then true
+ else if ((generic_eq p0_ "sltiu")) then true
+ else if ((generic_eq p0_ "xori")) then true
+ else if ((generic_eq p0_ "ori")) then true
+ else if ((generic_eq p0_ "andi")) then true
+ else false.
+
+Definition _s544_ (_s545_ : string)
+: option string :=
+
+ let _s546_ := _s545_ in
+ if ((string_startswith _s546_ "andi")) then
+ match (string_drop _s546_ (projT1 (string_length "andi"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s540_ (_s541_ : string)
+: option string :=
+
+ let _s542_ := _s541_ in
+ if ((string_startswith _s542_ "ori")) then
+ match (string_drop _s542_ (projT1 (string_length "ori"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s536_ (_s537_ : string)
+: option string :=
+
+ let _s538_ := _s537_ in
+ if ((string_startswith _s538_ "xori")) then
+ match (string_drop _s538_ (projT1 (string_length "xori"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s532_ (_s533_ : string)
+: option string :=
+
+ let _s534_ := _s533_ in
+ if ((string_startswith _s534_ "sltiu")) then
+ match (string_drop _s534_ (projT1 (string_length "sltiu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s528_ (_s529_ : string)
+: option string :=
+
+ let _s530_ := _s529_ in
+ if ((string_startswith _s530_ "slti")) then
+ match (string_drop _s530_ (projT1 (string_length "slti"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s524_ (_s525_ : string)
+: option string :=
+
+ let _s526_ := _s525_ in
+ if ((string_startswith _s526_ "addi")) then
+ match (string_drop _s526_ (projT1 (string_length "addi"))) with | s_ => Some (s_) end
+ else None.
+
+Definition itype_mnemonic_matches_prefix (arg_ : string)
+: M (option ((iop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s527_ := arg_ in
+ (if ((match (_s524_ _s527_) with | Some (s_) => true | _ => false end)) then
+ (match (_s524_ _s527_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_ADDI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((iop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s528_ _s527_) with | Some (s_) => true | _ => false end)) then
+ (match (_s528_ _s527_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLTI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((iop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s532_ _s527_) with | Some (s_) => true | _ => false end)) then
+ (match (_s532_ _s527_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLTIU, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((iop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s536_ _s527_) with | Some (s_) => true | _ => false end)) then
+ (match (_s536_ _s527_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_XORI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((iop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s540_ _s527_) with | Some (s_) => true | _ => false end)) then
+ (match (_s540_ _s527_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_ORI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((iop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s544_ _s527_) with | Some (s_) => true | _ => false end)) then
+ (match (_s544_ _s527_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_ANDI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((iop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((iop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((iop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition encdec_sop_forwards (arg_ : sop)
+: mword 3 :=
+
+ match arg_ with
+ | RISCV_SLLI => (vec_of_bits [B0;B0;B1] : mword 3)
+ | RISCV_SRLI => (vec_of_bits [B1;B0;B1] : mword 3)
+ | RISCV_SRAI => (vec_of_bits [B1;B0;B1] : mword 3)
+ end.
+
+Definition encdec_sop_backwards (arg_ : mword 3)
+: sop :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then RISCV_SLLI
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then RISCV_SRLI
+ else RISCV_SRAI.
+
+Definition encdec_sop_forwards_matches (arg_ : sop)
+: bool :=
+
+ match arg_ with | RISCV_SLLI => true | RISCV_SRLI => true | RISCV_SRAI => true end.
+
+Definition encdec_sop_backwards_matches (arg_ : mword 3)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0;B1] : mword 3))) then true
+ else false.
+
+Definition shiftiop_mnemonic_forwards (arg_ : sop)
+: string :=
+
+ match arg_ with | RISCV_SLLI => "slli" | RISCV_SRLI => "srli" | RISCV_SRAI => "srai" end.
+
+Definition shiftiop_mnemonic_backwards (arg_ : string)
+: sop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "slli")) then RISCV_SLLI
+ else if ((generic_eq p0_ "srli")) then RISCV_SRLI
+ else RISCV_SRAI.
+
+Definition shiftiop_mnemonic_forwards_matches (arg_ : sop)
+: bool :=
+
+ match arg_ with | RISCV_SLLI => true | RISCV_SRLI => true | RISCV_SRAI => true end.
+
+Definition shiftiop_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "slli")) then true
+ else if ((generic_eq p0_ "srli")) then true
+ else if ((generic_eq p0_ "srai")) then true
+ else false.
+
+Definition _s556_ (_s557_ : string)
+: option string :=
+
+ let _s558_ := _s557_ in
+ if ((string_startswith _s558_ "srai")) then
+ match (string_drop _s558_ (projT1 (string_length "srai"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s552_ (_s553_ : string)
+: option string :=
+
+ let _s554_ := _s553_ in
+ if ((string_startswith _s554_ "srli")) then
+ match (string_drop _s554_ (projT1 (string_length "srli"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s548_ (_s549_ : string)
+: option string :=
+
+ let _s550_ := _s549_ in
+ if ((string_startswith _s550_ "slli")) then
+ match (string_drop _s550_ (projT1 (string_length "slli"))) with | s_ => Some (s_) end
+ else None.
+
+Definition shiftiop_mnemonic_matches_prefix (arg_ : string)
+: M (option ((sop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s551_ := arg_ in
+ (if ((match (_s548_ _s551_) with | Some (s_) => true | _ => false end)) then
+ (match (_s548_ _s551_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLLI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s552_ _s551_) with | Some (s_) => true | _ => false end)) then
+ (match (_s552_ _s551_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRLI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s556_ _s551_) with | Some (s_) => true | _ => false end)) then
+ (match (_s556_ _s551_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRAI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((sop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition rtype_mnemonic_forwards (arg_ : rop)
+: string :=
+
+ match arg_ with
+ | RISCV_ADD => "add"
+ | RISCV_SUB => "sub"
+ | RISCV_SLL => "sll"
+ | RISCV_SLT => "slt"
+ | RISCV_SLTU => "sltu"
+ | RISCV_XOR => "xor"
+ | RISCV_SRL => "srl"
+ | RISCV_SRA => "sra"
+ | RISCV_OR => "or"
+ | RISCV_AND => "and"
+ end.
+
+Definition rtype_mnemonic_backwards (arg_ : string)
+: rop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "add")) then RISCV_ADD
+ else if ((generic_eq p0_ "sub")) then RISCV_SUB
+ else if ((generic_eq p0_ "sll")) then RISCV_SLL
+ else if ((generic_eq p0_ "slt")) then RISCV_SLT
+ else if ((generic_eq p0_ "sltu")) then RISCV_SLTU
+ else if ((generic_eq p0_ "xor")) then RISCV_XOR
+ else if ((generic_eq p0_ "srl")) then RISCV_SRL
+ else if ((generic_eq p0_ "sra")) then RISCV_SRA
+ else if ((generic_eq p0_ "or")) then RISCV_OR
+ else RISCV_AND.
+
+Definition rtype_mnemonic_forwards_matches (arg_ : rop)
+: bool :=
+
+ match arg_ with
+ | RISCV_ADD => true
+ | RISCV_SUB => true
+ | RISCV_SLL => true
+ | RISCV_SLT => true
+ | RISCV_SLTU => true
+ | RISCV_XOR => true
+ | RISCV_SRL => true
+ | RISCV_SRA => true
+ | RISCV_OR => true
+ | RISCV_AND => true
+ end.
+
+Definition rtype_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "add")) then true
+ else if ((generic_eq p0_ "sub")) then true
+ else if ((generic_eq p0_ "sll")) then true
+ else if ((generic_eq p0_ "slt")) then true
+ else if ((generic_eq p0_ "sltu")) then true
+ else if ((generic_eq p0_ "xor")) then true
+ else if ((generic_eq p0_ "srl")) then true
+ else if ((generic_eq p0_ "sra")) then true
+ else if ((generic_eq p0_ "or")) then true
+ else if ((generic_eq p0_ "and")) then true
+ else false.
+
+Definition _s596_ (_s597_ : string)
+: option string :=
+
+ let _s598_ := _s597_ in
+ if ((string_startswith _s598_ "and")) then
+ match (string_drop _s598_ (projT1 (string_length "and"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s592_ (_s593_ : string)
+: option string :=
+
+ let _s594_ := _s593_ in
+ if ((string_startswith _s594_ "or")) then
+ match (string_drop _s594_ (projT1 (string_length "or"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s588_ (_s589_ : string)
+: option string :=
+
+ let _s590_ := _s589_ in
+ if ((string_startswith _s590_ "sra")) then
+ match (string_drop _s590_ (projT1 (string_length "sra"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s584_ (_s585_ : string)
+: option string :=
+
+ let _s586_ := _s585_ in
+ if ((string_startswith _s586_ "srl")) then
+ match (string_drop _s586_ (projT1 (string_length "srl"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s580_ (_s581_ : string)
+: option string :=
+
+ let _s582_ := _s581_ in
+ if ((string_startswith _s582_ "xor")) then
+ match (string_drop _s582_ (projT1 (string_length "xor"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s576_ (_s577_ : string)
+: option string :=
+
+ let _s578_ := _s577_ in
+ if ((string_startswith _s578_ "sltu")) then
+ match (string_drop _s578_ (projT1 (string_length "sltu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s572_ (_s573_ : string)
+: option string :=
+
+ let _s574_ := _s573_ in
+ if ((string_startswith _s574_ "slt")) then
+ match (string_drop _s574_ (projT1 (string_length "slt"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s568_ (_s569_ : string)
+: option string :=
+
+ let _s570_ := _s569_ in
+ if ((string_startswith _s570_ "sll")) then
+ match (string_drop _s570_ (projT1 (string_length "sll"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s564_ (_s565_ : string)
+: option string :=
+
+ let _s566_ := _s565_ in
+ if ((string_startswith _s566_ "sub")) then
+ match (string_drop _s566_ (projT1 (string_length "sub"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s560_ (_s561_ : string)
+: option string :=
+
+ let _s562_ := _s561_ in
+ if ((string_startswith _s562_ "add")) then
+ match (string_drop _s562_ (projT1 (string_length "add"))) with | s_ => Some (s_) end
+ else None.
+
+Definition rtype_mnemonic_matches_prefix (arg_ : string)
+: M (option ((rop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s563_ := arg_ in
+ (if ((match (_s560_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s560_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_ADD, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s564_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s564_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SUB, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s568_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s568_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLL, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s572_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s572_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLT, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s576_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s576_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLTU, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s580_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s580_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_XOR, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s584_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s584_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRL, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s588_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s588_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRA, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s592_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s592_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_OR, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s596_ _s563_) with | Some (s_) => true | _ => false end)) then
+ (match (_s596_ _s563_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_AND, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((rop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((rop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((rop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition extend_value {n : Z} (is_unsigned : bool) (value : MemoryOpResult (mword (8 * n)))
+`{ArithFact ((0 + 1) <= n /\ n <= 8)}
+: MemoryOpResult (mword 64) :=
+
+ match value with
+ | MemValue (v) => MemValue (if (is_unsigned) then EXTZ 64 v else (EXTS 64 v) : xlenbits)
+ | MemException (e) => MemException (e)
+ end.
+
+Definition process_load {n : Z}
+(rd : mword 5) (addr : mword 64) (value : MemoryOpResult (mword (8 * n))) (is_unsigned : bool)
+`{ArithFact ((0 + 1) <= n /\ n <= 8)}
+: M (bool) :=
+
+ (match (extend_value is_unsigned value) with
+ | MemValue (result) => (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool)
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ end)
+ : M (bool).
+
+Definition check_misaligned (vaddr : mword 64) (width : word_width)
+: M (bool) :=
+
+ (if ((plat_enable_misaligned_access tt)) then returnm (false : bool)
+ else
+ (match width with
+ | BYTE => returnm (false : bool)
+ | HALF =>
+ (bit_to_bool (access_vec_dec vaddr 0)) >>= fun w__0 : bool =>
+ returnm ((Bool.eqb (w__0 : bool) true)
+ : bool)
+ | WORD =>
+ (or_boolM
+ ((bit_to_bool (access_vec_dec vaddr 0)) >>= fun w__1 : bool =>
+ returnm ((Bool.eqb (w__1 : bool) true)
+ : bool))
+ ((bit_to_bool (access_vec_dec vaddr 1)) >>= fun w__2 : bool =>
+ returnm ((Bool.eqb (w__2 : bool) true)
+ : bool)))
+ : M (bool)
+ | DOUBLE =>
+ (or_boolM
+ ((bit_to_bool (access_vec_dec vaddr 0)) >>= fun w__4 : bool =>
+ returnm ((Bool.eqb (w__4 : bool) true)
+ : bool))
+ ((or_boolM
+ ((bit_to_bool (access_vec_dec vaddr 1)) >>= fun w__5 : bool =>
+ returnm ((Bool.eqb (w__5 : bool) true)
+ : bool))
+ ((bit_to_bool (access_vec_dec vaddr 2)) >>= fun w__6 : bool =>
+ returnm ((Bool.eqb (w__6 : bool) true)
+ : bool)))
+ : M (bool)))
+ : M (bool)
+ end)
+ : M (bool))
+ : M (bool).
+
+Definition maybe_aq_forwards (arg_ : bool)
+: string :=
+
+ match arg_ with | true => ".aq" | false => "" end.
+
+Definition maybe_aq_backwards (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ ".aq")) then true
+ else false.
+
+Definition maybe_aq_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | true => true | false => true end.
+
+Definition maybe_aq_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ ".aq")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s604_ (_s605_ : string)
+: option string :=
+
+ let _s606_ := _s605_ in
+ if ((string_startswith _s606_ "")) then
+ match (string_drop _s606_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s600_ (_s601_ : string)
+: option string :=
+
+ let _s602_ := _s601_ in
+ if ((string_startswith _s602_ ".aq")) then
+ match (string_drop _s602_ (projT1 (string_length ".aq"))) with | s_ => Some (s_) end
+ else None.
+
+Definition maybe_aq_matches_prefix (arg_ : string)
+: M (option ((bool * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s603_ := arg_ in
+ (if ((match (_s600_ _s603_) with | Some (s_) => true | _ => false end)) then
+ (match (_s600_ _s603_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((true, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s604_ _s603_) with | Some (s_) => true | _ => false end)) then
+ (match (_s604_ _s603_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((false, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((bool * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)}))).
+
+Definition maybe_rl_forwards (arg_ : bool)
+: string :=
+
+ match arg_ with | true => ".rl" | false => "" end.
+
+Definition maybe_rl_backwards (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ ".rl")) then true
+ else false.
+
+Definition maybe_rl_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | true => true | false => true end.
+
+Definition maybe_rl_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ ".rl")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s612_ (_s613_ : string)
+: option string :=
+
+ let _s614_ := _s613_ in
+ if ((string_startswith _s614_ "")) then
+ match (string_drop _s614_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s608_ (_s609_ : string)
+: option string :=
+
+ let _s610_ := _s609_ in
+ if ((string_startswith _s610_ ".rl")) then
+ match (string_drop _s610_ (projT1 (string_length ".rl"))) with | s_ => Some (s_) end
+ else None.
+
+Definition maybe_rl_matches_prefix (arg_ : string)
+: M (option ((bool * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s611_ := arg_ in
+ (if ((match (_s608_ _s611_) with | Some (s_) => true | _ => false end)) then
+ (match (_s608_ _s611_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((true, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s612_ _s611_) with | Some (s_) => true | _ => false end)) then
+ (match (_s612_ _s611_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((false, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((bool * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)}))).
+
+Definition maybe_u_forwards (arg_ : bool)
+: string :=
+
+ match arg_ with | true => "u" | false => "" end.
+
+Definition maybe_u_backwards (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "u")) then true
+ else false.
+
+Definition maybe_u_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | true => true | false => true end.
+
+Definition maybe_u_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "u")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s620_ (_s621_ : string)
+: option string :=
+
+ let _s622_ := _s621_ in
+ if ((string_startswith _s622_ "")) then
+ match (string_drop _s622_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s616_ (_s617_ : string)
+: option string :=
+
+ let _s618_ := _s617_ in
+ if ((string_startswith _s618_ "u")) then
+ match (string_drop _s618_ (projT1 (string_length "u"))) with | s_ => Some (s_) end
+ else None.
+
+Definition maybe_u_matches_prefix (arg_ : string)
+: M (option ((bool * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s619_ := arg_ in
+ (if ((match (_s616_ _s619_) with | Some (s_) => true | _ => false end)) then
+ (match (_s616_ _s619_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((true, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s620_ _s619_) with | Some (s_) => true | _ => false end)) then
+ (match (_s620_ _s619_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((false, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((bool * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)}))).
+
+Definition shiftw_mnemonic_forwards (arg_ : sop)
+: string :=
+
+ match arg_ with | RISCV_SLLI => "slli" | RISCV_SRLI => "srli" | RISCV_SRAI => "srai" end.
+
+Definition shiftw_mnemonic_backwards (arg_ : string)
+: sop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "slli")) then RISCV_SLLI
+ else if ((generic_eq p0_ "srli")) then RISCV_SRLI
+ else RISCV_SRAI.
+
+Definition shiftw_mnemonic_forwards_matches (arg_ : sop)
+: bool :=
+
+ match arg_ with | RISCV_SLLI => true | RISCV_SRLI => true | RISCV_SRAI => true end.
+
+Definition shiftw_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "slli")) then true
+ else if ((generic_eq p0_ "srli")) then true
+ else if ((generic_eq p0_ "srai")) then true
+ else false.
+
+Definition _s632_ (_s633_ : string)
+: option string :=
+
+ let _s634_ := _s633_ in
+ if ((string_startswith _s634_ "srai")) then
+ match (string_drop _s634_ (projT1 (string_length "srai"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s628_ (_s629_ : string)
+: option string :=
+
+ let _s630_ := _s629_ in
+ if ((string_startswith _s630_ "srli")) then
+ match (string_drop _s630_ (projT1 (string_length "srli"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s624_ (_s625_ : string)
+: option string :=
+
+ let _s626_ := _s625_ in
+ if ((string_startswith _s626_ "slli")) then
+ match (string_drop _s626_ (projT1 (string_length "slli"))) with | s_ => Some (s_) end
+ else None.
+
+Definition shiftw_mnemonic_matches_prefix (arg_ : string)
+: M (option ((sop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s627_ := arg_ in
+ (if ((match (_s624_ _s627_) with | Some (s_) => true | _ => false end)) then
+ (match (_s624_ _s627_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLLI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s628_ _s627_) with | Some (s_) => true | _ => false end)) then
+ (match (_s628_ _s627_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRLI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s632_ _s627_) with | Some (s_) => true | _ => false end)) then
+ (match (_s632_ _s627_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRAI, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((sop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((sop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition rtypew_mnemonic_forwards (arg_ : ropw)
+: string :=
+
+ match arg_ with
+ | RISCV_ADDW => "addw"
+ | RISCV_SUBW => "subw"
+ | RISCV_SLLW => "sllw"
+ | RISCV_SRLW => "srlw"
+ | RISCV_SRAW => "sraw"
+ end.
+
+Definition rtypew_mnemonic_backwards (arg_ : string)
+: ropw :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "addw")) then RISCV_ADDW
+ else if ((generic_eq p0_ "subw")) then RISCV_SUBW
+ else if ((generic_eq p0_ "sllw")) then RISCV_SLLW
+ else if ((generic_eq p0_ "srlw")) then RISCV_SRLW
+ else RISCV_SRAW.
+
+Definition rtypew_mnemonic_forwards_matches (arg_ : ropw)
+: bool :=
+
+ match arg_ with
+ | RISCV_ADDW => true
+ | RISCV_SUBW => true
+ | RISCV_SLLW => true
+ | RISCV_SRLW => true
+ | RISCV_SRAW => true
+ end.
+
+Definition rtypew_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "addw")) then true
+ else if ((generic_eq p0_ "subw")) then true
+ else if ((generic_eq p0_ "sllw")) then true
+ else if ((generic_eq p0_ "srlw")) then true
+ else if ((generic_eq p0_ "sraw")) then true
+ else false.
+
+Definition _s652_ (_s653_ : string)
+: option string :=
+
+ let _s654_ := _s653_ in
+ if ((string_startswith _s654_ "sraw")) then
+ match (string_drop _s654_ (projT1 (string_length "sraw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s648_ (_s649_ : string)
+: option string :=
+
+ let _s650_ := _s649_ in
+ if ((string_startswith _s650_ "srlw")) then
+ match (string_drop _s650_ (projT1 (string_length "srlw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s644_ (_s645_ : string)
+: option string :=
+
+ let _s646_ := _s645_ in
+ if ((string_startswith _s646_ "sllw")) then
+ match (string_drop _s646_ (projT1 (string_length "sllw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s640_ (_s641_ : string)
+: option string :=
+
+ let _s642_ := _s641_ in
+ if ((string_startswith _s642_ "subw")) then
+ match (string_drop _s642_ (projT1 (string_length "subw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s636_ (_s637_ : string)
+: option string :=
+
+ let _s638_ := _s637_ in
+ if ((string_startswith _s638_ "addw")) then
+ match (string_drop _s638_ (projT1 (string_length "addw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition rtypew_mnemonic_matches_prefix (arg_ : string)
+: M (option ((ropw * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s639_ := arg_ in
+ (if ((match (_s636_ _s639_) with | Some (s_) => true | _ => false end)) then
+ (match (_s636_ _s639_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_ADDW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s640_ _s639_) with | Some (s_) => true | _ => false end)) then
+ (match (_s640_ _s639_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SUBW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s644_ _s639_) with | Some (s_) => true | _ => false end)) then
+ (match (_s644_ _s639_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLLW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s648_ _s639_) with | Some (s_) => true | _ => false end)) then
+ (match (_s648_ _s639_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRLW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s652_ _s639_) with | Some (s_) => true | _ => false end)) then
+ (match (_s652_ _s639_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRAW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ropw * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((ropw * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ropw * {n : Z & ArithFact (n >= 0)}))).
+
+Definition shiftiwop_mnemonic_forwards (arg_ : sopw)
+: string :=
+
+ match arg_ with | RISCV_SLLIW => "slliw" | RISCV_SRLIW => "srliw" | RISCV_SRAIW => "sraiw" end.
+
+Definition shiftiwop_mnemonic_backwards (arg_ : string)
+: sopw :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "slliw")) then RISCV_SLLIW
+ else if ((generic_eq p0_ "srliw")) then RISCV_SRLIW
+ else RISCV_SRAIW.
+
+Definition shiftiwop_mnemonic_forwards_matches (arg_ : sopw)
+: bool :=
+
+ match arg_ with | RISCV_SLLIW => true | RISCV_SRLIW => true | RISCV_SRAIW => true end.
+
+Definition shiftiwop_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "slliw")) then true
+ else if ((generic_eq p0_ "srliw")) then true
+ else if ((generic_eq p0_ "sraiw")) then true
+ else false.
+
+Definition _s664_ (_s665_ : string)
+: option string :=
+
+ let _s666_ := _s665_ in
+ if ((string_startswith _s666_ "sraiw")) then
+ match (string_drop _s666_ (projT1 (string_length "sraiw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s660_ (_s661_ : string)
+: option string :=
+
+ let _s662_ := _s661_ in
+ if ((string_startswith _s662_ "srliw")) then
+ match (string_drop _s662_ (projT1 (string_length "srliw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s656_ (_s657_ : string)
+: option string :=
+
+ let _s658_ := _s657_ in
+ if ((string_startswith _s658_ "slliw")) then
+ match (string_drop _s658_ (projT1 (string_length "slliw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition shiftiwop_mnemonic_matches_prefix (arg_ : string)
+: M (option ((sopw * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s659_ := arg_ in
+ (if ((match (_s656_ _s659_) with | Some (s_) => true | _ => false end)) then
+ (match (_s656_ _s659_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SLLIW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s660_ _s659_) with | Some (s_) => true | _ => false end)) then
+ (match (_s660_ _s659_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRLIW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s664_ _s659_) with | Some (s_) => true | _ => false end)) then
+ (match (_s664_ _s659_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((RISCV_SRAIW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((sopw * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((sopw * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((sopw * {n : Z & ArithFact (n >= 0)}))).
+
+Definition encdec_mul_op_forwards (arg_ : (bool * bool * bool))
+: M (mword 3) :=
+
+ (match arg_ with
+ | (false, true, true) => returnm ((vec_of_bits [B0;B0;B0] : mword 3) : mword 3)
+ | (true, true, true) => returnm ((vec_of_bits [B0;B0;B1] : mword 3) : mword 3)
+ | (true, true, false) => returnm ((vec_of_bits [B0;B1;B0] : mword 3) : mword 3)
+ | (true, false, false) => returnm ((vec_of_bits [B0;B1;B1] : mword 3) : mword 3)
+ | _ => exit tt : M (mword 3)
+ end)
+ : M (mword 3).
+
+Definition encdec_mul_op_backwards (arg_ : mword 3)
+: (bool * bool * bool) :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then (false, true, true)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then (true, true, true)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B0] : mword 3))) then (true, true, false)
+ else (true, false, false).
+
+Definition encdec_mul_op_forwards_matches (arg_ : (bool * bool * bool))
+: bool :=
+
+ match arg_ with
+ | (false, true, true) => true
+ | (true, true, true) => true
+ | (true, true, false) => true
+ | (true, false, false) => true
+ | _ => false
+ end.
+
+Definition encdec_mul_op_backwards_matches (arg_ : mword 3)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B0;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B0] : mword 3))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1] : mword 3))) then true
+ else false.
+
+Definition mul_mnemonic_forwards (arg_ : (bool * bool * bool))
+: M (string) :=
+
+ (match arg_ with
+ | (false, true, true) => returnm ("mul" : string)
+ | (true, true, true) => returnm ("mulh" : string)
+ | (true, true, false) => returnm ("mulhsu" : string)
+ | (true, false, false) => returnm ("mulhu" : string)
+ | _ => exit tt : M (string)
+ end)
+ : M (string).
+
+Definition mul_mnemonic_backwards (arg_ : string)
+: (bool * bool * bool) :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "mul")) then (false, true, true)
+ else if ((generic_eq p0_ "mulh")) then (true, true, true)
+ else if ((generic_eq p0_ "mulhsu")) then (true, true, false)
+ else (true, false, false).
+
+Definition mul_mnemonic_forwards_matches (arg_ : (bool * bool * bool))
+: bool :=
+
+ match arg_ with
+ | (false, true, true) => true
+ | (true, true, true) => true
+ | (true, true, false) => true
+ | (true, false, false) => true
+ | _ => false
+ end.
+
+Definition mul_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "mul")) then true
+ else if ((generic_eq p0_ "mulh")) then true
+ else if ((generic_eq p0_ "mulhsu")) then true
+ else if ((generic_eq p0_ "mulhu")) then true
+ else false.
+
+Definition _s680_ (_s681_ : string)
+: option string :=
+
+ let _s682_ := _s681_ in
+ if ((string_startswith _s682_ "mulhu")) then
+ match (string_drop _s682_ (projT1 (string_length "mulhu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s676_ (_s677_ : string)
+: option string :=
+
+ let _s678_ := _s677_ in
+ if ((string_startswith _s678_ "mulhsu")) then
+ match (string_drop _s678_ (projT1 (string_length "mulhsu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s672_ (_s673_ : string)
+: option string :=
+
+ let _s674_ := _s673_ in
+ if ((string_startswith _s674_ "mulh")) then
+ match (string_drop _s674_ (projT1 (string_length "mulh"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s668_ (_s669_ : string)
+: option string :=
+
+ let _s670_ := _s669_ in
+ if ((string_startswith _s670_ "mul")) then
+ match (string_drop _s670_ (projT1 (string_length "mul"))) with | s_ => Some (s_) end
+ else None.
+
+Definition mul_mnemonic_matches_prefix (arg_ : string)
+: M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s671_ := arg_ in
+ (if ((match (_s668_ _s671_) with | Some (s_) => true | _ => false end)) then
+ (match (_s668_ _s671_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((false, true, true), build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s672_ _s671_) with | Some (s_) => true | _ => false end)) then
+ (match (_s672_ _s671_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((true, true, true), build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s676_ _s671_) with | Some (s_) => true | _ => false end)) then
+ (match (_s676_ _s671_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((true, true, false), build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s680_ _s671_) with | Some (s_) => true | _ => false end)) then
+ (match (_s680_ _s671_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((true, false, false), build_ex (projT1 (sub_nat
+ (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)}))))
+ : M (option (((bool * bool * bool) * {n : Z & ArithFact (n >= 0)}))).
+
+Definition maybe_not_u_forwards (arg_ : bool)
+: string :=
+
+ match arg_ with | false => "u" | true => "" end.
+
+Definition maybe_not_u_backwards (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "u")) then false
+ else true.
+
+Definition maybe_not_u_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | false => true | true => true end.
+
+Definition maybe_not_u_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "u")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s688_ (_s689_ : string)
+: option string :=
+
+ let _s690_ := _s689_ in
+ if ((string_startswith _s690_ "")) then
+ match (string_drop _s690_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s684_ (_s685_ : string)
+: option string :=
+
+ let _s686_ := _s685_ in
+ if ((string_startswith _s686_ "u")) then
+ match (string_drop _s686_ (projT1 (string_length "u"))) with | s_ => Some (s_) end
+ else None.
+
+Definition maybe_not_u_matches_prefix (arg_ : string)
+: M (option ((bool * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s687_ := arg_ in
+ (if ((match (_s684_ _s687_) with | Some (s_) => true | _ => false end)) then
+ (match (_s684_ _s687_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((false, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s688_ _s687_) with | Some (s_) => true | _ => false end)) then
+ (match (_s688_ _s687_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((true, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((bool * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)}))).
+
+Definition bit_maybe_r_forwards (arg_ : mword 1)
+: string :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then "r"
+ else "".
+
+Definition bit_maybe_r_backwards (arg_ : string)
+: mword 1 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "r")) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1).
+
+Definition bit_maybe_r_forwards_matches (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else false.
+
+Definition bit_maybe_r_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "r")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s696_ (_s697_ : string)
+: option string :=
+
+ let _s698_ := _s697_ in
+ if ((string_startswith _s698_ "")) then
+ match (string_drop _s698_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s692_ (_s693_ : string)
+: option string :=
+
+ let _s694_ := _s693_ in
+ if ((string_startswith _s694_ "r")) then
+ match (string_drop _s694_ (projT1 (string_length "r"))) with | s_ => Some (s_) end
+ else None.
+
+Definition bit_maybe_r_matches_prefix (arg_ : string)
+: M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s695_ := arg_ in
+ (if ((match (_s692_ _s695_) with | Some (s_) => true | _ => false end)) then
+ (match (_s692_ _s695_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s696_ _s695_) with | Some (s_) => true | _ => false end)) then
+ (match (_s696_ _s695_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 1 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition bit_maybe_w_forwards (arg_ : mword 1)
+: string :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then "w"
+ else "".
+
+Definition bit_maybe_w_backwards (arg_ : string)
+: mword 1 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "w")) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1).
+
+Definition bit_maybe_w_forwards_matches (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else false.
+
+Definition bit_maybe_w_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "w")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s704_ (_s705_ : string)
+: option string :=
+
+ let _s706_ := _s705_ in
+ if ((string_startswith _s706_ "")) then
+ match (string_drop _s706_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s700_ (_s701_ : string)
+: option string :=
+
+ let _s702_ := _s701_ in
+ if ((string_startswith _s702_ "w")) then
+ match (string_drop _s702_ (projT1 (string_length "w"))) with | s_ => Some (s_) end
+ else None.
+
+Definition bit_maybe_w_matches_prefix (arg_ : string)
+: M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s703_ := arg_ in
+ (if ((match (_s700_ _s703_) with | Some (s_) => true | _ => false end)) then
+ (match (_s700_ _s703_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s704_ _s703_) with | Some (s_) => true | _ => false end)) then
+ (match (_s704_ _s703_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 1 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition bit_maybe_i_forwards (arg_ : mword 1)
+: string :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then "i"
+ else "".
+
+Definition bit_maybe_i_backwards (arg_ : string)
+: mword 1 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "i")) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1).
+
+Definition bit_maybe_i_forwards_matches (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else false.
+
+Definition bit_maybe_i_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "i")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s712_ (_s713_ : string)
+: option string :=
+
+ let _s714_ := _s713_ in
+ if ((string_startswith _s714_ "")) then
+ match (string_drop _s714_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s708_ (_s709_ : string)
+: option string :=
+
+ let _s710_ := _s709_ in
+ if ((string_startswith _s710_ "i")) then
+ match (string_drop _s710_ (projT1 (string_length "i"))) with | s_ => Some (s_) end
+ else None.
+
+Definition bit_maybe_i_matches_prefix (arg_ : string)
+: M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s711_ := arg_ in
+ (if ((match (_s708_ _s711_) with | Some (s_) => true | _ => false end)) then
+ (match (_s708_ _s711_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s712_ _s711_) with | Some (s_) => true | _ => false end)) then
+ (match (_s712_ _s711_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 1 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition bit_maybe_o_forwards (arg_ : mword 1)
+: string :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then "o"
+ else "".
+
+Definition bit_maybe_o_backwards (arg_ : string)
+: mword 1 :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "o")) then (vec_of_bits [B1] : mword 1)
+ else (vec_of_bits [B0] : mword 1).
+
+Definition bit_maybe_o_forwards_matches (arg_ : mword 1)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B1] : mword 1))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B0] : mword 1))) then true
+ else false.
+
+Definition bit_maybe_o_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "o")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s720_ (_s721_ : string)
+: option string :=
+
+ let _s722_ := _s721_ in
+ if ((string_startswith _s722_ "")) then
+ match (string_drop _s722_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s716_ (_s717_ : string)
+: option string :=
+
+ let _s718_ := _s717_ in
+ if ((string_startswith _s718_ "o")) then
+ match (string_drop _s718_ (projT1 (string_length "o"))) with | s_ => Some (s_) end
+ else None.
+
+Definition bit_maybe_o_matches_prefix (arg_ : string)
+: M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s719_ := arg_ in
+ (if ((match (_s716_ _s719_) with | Some (s_) => true | _ => false end)) then
+ (match (_s716_ _s719_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B1] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s720_ _s719_) with | Some (s_) => true | _ => false end)) then
+ (match (_s720_ _s719_) with
+ | Some (s_) =>
+ returnm ((Some
+ (((vec_of_bits [B0] : mword 1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length s_)))))))
+ : option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 1 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 1 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition fence_bits_forwards (arg_ : mword 4)
+: string :=
+
+ match arg_ with
+ | v__0 =>
+ let i : bits 1 := subrange_vec_dec v__0 3 3 in
+ let w : bits 1 := subrange_vec_dec v__0 0 0 in
+ let r : bits 1 := subrange_vec_dec v__0 1 1 in
+ let o : bits 1 := subrange_vec_dec v__0 2 2 in
+ let i : bits 1 := subrange_vec_dec v__0 3 3 in
+ string_append (bit_maybe_i_forwards i)
+ (string_append (bit_maybe_o_forwards o)
+ (string_append (bit_maybe_r_forwards r) (string_append (bit_maybe_w_forwards w) "")))
+ end.
+
+Definition _s724_ (_s725_ : string)
+: M (option ((mword 1 * mword 1 * mword 1 * mword 1))) :=
+
+ (match _s725_ with
+ | _s726_ =>
+ (bit_maybe_i_matches_prefix _s726_) >>= fun w__0 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (i,(existT _ _s727_ _)) =>
+ (match (string_drop _s726_ _s727_) with
+ | _s728_ =>
+ (bit_maybe_o_matches_prefix _s728_) >>= fun w__1 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (o,(existT _ _s729_ _)) =>
+ (match (string_drop _s728_ _s729_) with
+ | _s730_ =>
+ (bit_maybe_r_matches_prefix _s730_) >>= fun w__2 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (r,(existT _ _s731_ _)) =>
+ (match (string_drop _s730_ _s731_) with
+ | _s732_ =>
+ (bit_maybe_w_matches_prefix _s732_) >>= fun w__3 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (w,(existT _ _s733_ _)) =>
+ let p0_ := string_drop _s732_ _s733_ in
+ if ((generic_eq p0_ "")) then Some ((i, o, r, w))
+ else None
+ | _ => None
+ end)
+ : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1))).
+
+Definition fence_bits_backwards (arg_ : string)
+: M (mword 4) :=
+
+ let _s734_ := arg_ in
+ (_s724_ _s734_) >>= fun w__0 : option ((mword 1 * mword 1 * mword 1 * mword 1)) =>
+ (match w__0 with
+ | Some (i,o,r,w) =>
+ returnm ((concat_vec (i : bits 1)
+ (concat_vec (o : bits 1) (concat_vec (r : bits 1) (w : bits 1))))
+ : mword (1 + (1 + (1 + 1))))
+ | _ => exit tt : M (mword 4)
+ end)
+ : M (mword 4).
+
+Definition fence_bits_forwards_matches (arg_ : mword 4)
+: bool :=
+
+ match arg_ with | v__1 => true end.
+
+Definition _s735_ (_s736_ : string)
+: M (option ((mword 1 * mword 1 * mword 1 * mword 1))) :=
+
+ (match _s736_ with
+ | _s737_ =>
+ (bit_maybe_i_matches_prefix _s737_) >>= fun w__0 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (i,(existT _ _s738_ _)) =>
+ (match (string_drop _s737_ _s738_) with
+ | _s739_ =>
+ (bit_maybe_o_matches_prefix _s739_) >>= fun w__1 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (o,(existT _ _s740_ _)) =>
+ (match (string_drop _s739_ _s740_) with
+ | _s741_ =>
+ (bit_maybe_r_matches_prefix _s741_) >>= fun w__2 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (r,(existT _ _s742_ _)) =>
+ (match (string_drop _s741_ _s742_) with
+ | _s743_ =>
+ (bit_maybe_w_matches_prefix _s743_) >>= fun w__3 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (w,(existT _ _s744_ _)) =>
+ let p0_ := string_drop _s743_ _s744_ in
+ if ((generic_eq p0_ "")) then Some ((i, o, r, w))
+ else None
+ | _ => None
+ end)
+ : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1))).
+
+Definition fence_bits_backwards_matches (arg_ : string)
+: M (bool) :=
+
+ let _s745_ := arg_ in
+ (_s735_ _s745_) >>= fun w__0 : option ((mword 1 * mword 1 * mword 1 * mword 1)) =>
+ (if ((match w__0 with | Some (i,o,r,w) => true | _ => false end)) then
+ (_s735_ _s745_) >>= fun w__1 : option ((mword 1 * mword 1 * mword 1 * mword 1)) =>
+ (match w__1 with | Some (i,o,r,w) => returnm (true : bool) | _ => exit tt : M (bool) end)
+ : M (bool)
+ else returnm (false : bool))
+ : M (bool).
+
+Definition _s746_ (_s747_ : string)
+: M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string))) :=
+
+ (match _s747_ with
+ | _s748_ =>
+ (bit_maybe_i_matches_prefix _s748_) >>= fun w__0 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (i,(existT _ _s749_ _)) =>
+ (match (string_drop _s748_ _s749_) with
+ | _s750_ =>
+ (bit_maybe_o_matches_prefix _s750_) >>= fun w__1 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (o,(existT _ _s751_ _)) =>
+ (match (string_drop _s750_ _s751_) with
+ | _s752_ =>
+ (bit_maybe_r_matches_prefix _s752_) >>= fun w__2 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (r,(existT _ _s753_ _)) =>
+ (match (string_drop _s752_ _s753_) with
+ | _s754_ =>
+ (bit_maybe_w_matches_prefix _s754_) >>= fun w__3 : option ((mword 1 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (w,(existT _ _s755_ _)) =>
+ match (string_drop _s754_ _s755_) with
+ | s_ => Some ((i, o, r, w, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ | _ => returnm (None : option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string)))
+ end)
+ : M (option ((mword 1 * mword 1 * mword 1 * mword 1 * string))).
+
+Definition fence_bits_matches_prefix (arg_ : string)
+: M (option ((mword 4 * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s756_ := arg_ in
+ (_s746_ _s756_) >>= fun w__0 : option ((mword 1 * mword 1 * mword 1 * mword 1 * string)) =>
+ (if ((match w__0 with | Some (i,o,r,w,s_) => true | _ => false end)) then
+ (_s746_ _s756_) >>= fun w__1 : option ((mword 1 * mword 1 * mword 1 * mword 1 * string)) =>
+ (match w__1 with
+ | Some (i,o,r,w,s_) =>
+ returnm ((Some
+ ((concat_vec (i : bits 1)
+ (concat_vec (o : bits 1) (concat_vec (r : bits 1) (w : bits 1))), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((mword 4 * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((mword 4 * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((mword 4 * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((mword 4 * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((mword 4 * {n : Z & ArithFact (n >= 0)}))).
+
+Definition aqrl_str (aq : bool) (rl : bool)
+: string :=
+
+ match (aq, rl) with
+ | (false, false) => ""
+ | (false, true) => ".rl"
+ | (true, false) => ".aq"
+ | (true, true) => ".aqrl"
+ end.
+
+Definition lrsc_width_str (width : word_width)
+: string :=
+
+ match width with | BYTE => ".b" | HALF => ".h" | WORD => ".w" | DOUBLE => ".d" end.
+
+Definition process_loadres {n : Z}
+(rd : mword 5) (addr : mword 64) (value : MemoryOpResult (mword (8 * n))) (is_unsigned : bool)
+`{ArithFact ((0 + 1) <= n /\ n <= 8)}
+: M (bool) :=
+
+ (match (extend_value is_unsigned value) with
+ | MemValue (result) =>
+ let '_ := (load_reservation addr) : unit in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool)
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ end)
+ : M (bool).
+
+Definition encdec_amoop_forwards (arg_ : amoop)
+: mword 5 :=
+
+ match arg_ with
+ | AMOSWAP => (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)
+ | AMOADD => (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ | AMOXOR => (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)
+ | AMOAND => (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)
+ | AMOOR => (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)
+ | AMOMIN => (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)
+ | AMOMAX => (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)
+ | AMOMINU => (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)
+ | AMOMAXU => (vec_of_bits [B1;B1;B1;B0;B0] : mword 5)
+ end.
+
+Definition encdec_amoop_backwards (arg_ : mword 5)
+: amoop :=
+
+ let b__0 := arg_ in
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)))))
+ then
+ AMOSWAP
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)))))
+ then
+ AMOADD
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)))))
+ then
+ AMOXOR
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)))))
+ then
+ AMOAND
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)))))
+ then
+ AMOOR
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)))))
+ then
+ AMOMIN
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)))))
+ then
+ AMOMAX
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)))))
+ then
+ AMOMINU
+ else AMOMAXU.
+
+Definition encdec_amoop_forwards_matches (arg_ : amoop)
+: bool :=
+
+ match arg_ with
+ | AMOSWAP => true
+ | AMOADD => true
+ | AMOXOR => true
+ | AMOAND => true
+ | AMOOR => true
+ | AMOMIN => true
+ | AMOMAX => true
+ | AMOMINU => true
+ | AMOMAXU => true
+ end.
+
+Definition encdec_amoop_backwards_matches (arg_ : mword 5)
+: bool :=
+
+ let b__0 := arg_ in
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B1] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B0;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B0;B1;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B0;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B0;B0;B0] : mword 5)))))
+ then
+ true
+ else if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno b__0))
+ (projT1 (regbits_to_regno (vec_of_bits [B1;B1;B1;B0;B0] : mword 5)))))
+ then
+ true
+ else false.
+
+Definition amo_mnemonic_forwards (arg_ : amoop)
+: string :=
+
+ match arg_ with
+ | AMOSWAP => "amoswap"
+ | AMOADD => "amoadd"
+ | AMOXOR => "amoxor"
+ | AMOAND => "amoand"
+ | AMOOR => "amoor"
+ | AMOMIN => "amomin"
+ | AMOMAX => "amomax"
+ | AMOMINU => "amominu"
+ | AMOMAXU => "amomaxu"
+ end.
+
+Definition amo_mnemonic_backwards (arg_ : string)
+: amoop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "amoswap")) then AMOSWAP
+ else if ((generic_eq p0_ "amoadd")) then AMOADD
+ else if ((generic_eq p0_ "amoxor")) then AMOXOR
+ else if ((generic_eq p0_ "amoand")) then AMOAND
+ else if ((generic_eq p0_ "amoor")) then AMOOR
+ else if ((generic_eq p0_ "amomin")) then AMOMIN
+ else if ((generic_eq p0_ "amomax")) then AMOMAX
+ else if ((generic_eq p0_ "amominu")) then AMOMINU
+ else AMOMAXU.
+
+Definition amo_mnemonic_forwards_matches (arg_ : amoop)
+: bool :=
+
+ match arg_ with
+ | AMOSWAP => true
+ | AMOADD => true
+ | AMOXOR => true
+ | AMOAND => true
+ | AMOOR => true
+ | AMOMIN => true
+ | AMOMAX => true
+ | AMOMINU => true
+ | AMOMAXU => true
+ end.
+
+Definition amo_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "amoswap")) then true
+ else if ((generic_eq p0_ "amoadd")) then true
+ else if ((generic_eq p0_ "amoxor")) then true
+ else if ((generic_eq p0_ "amoand")) then true
+ else if ((generic_eq p0_ "amoor")) then true
+ else if ((generic_eq p0_ "amomin")) then true
+ else if ((generic_eq p0_ "amomax")) then true
+ else if ((generic_eq p0_ "amominu")) then true
+ else if ((generic_eq p0_ "amomaxu")) then true
+ else false.
+
+Definition _s789_ (_s790_ : string)
+: option string :=
+
+ let _s791_ := _s790_ in
+ if ((string_startswith _s791_ "amomaxu")) then
+ match (string_drop _s791_ (projT1 (string_length "amomaxu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s785_ (_s786_ : string)
+: option string :=
+
+ let _s787_ := _s786_ in
+ if ((string_startswith _s787_ "amominu")) then
+ match (string_drop _s787_ (projT1 (string_length "amominu"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s781_ (_s782_ : string)
+: option string :=
+
+ let _s783_ := _s782_ in
+ if ((string_startswith _s783_ "amomax")) then
+ match (string_drop _s783_ (projT1 (string_length "amomax"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s777_ (_s778_ : string)
+: option string :=
+
+ let _s779_ := _s778_ in
+ if ((string_startswith _s779_ "amomin")) then
+ match (string_drop _s779_ (projT1 (string_length "amomin"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s773_ (_s774_ : string)
+: option string :=
+
+ let _s775_ := _s774_ in
+ if ((string_startswith _s775_ "amoor")) then
+ match (string_drop _s775_ (projT1 (string_length "amoor"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s769_ (_s770_ : string)
+: option string :=
+
+ let _s771_ := _s770_ in
+ if ((string_startswith _s771_ "amoand")) then
+ match (string_drop _s771_ (projT1 (string_length "amoand"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s765_ (_s766_ : string)
+: option string :=
+
+ let _s767_ := _s766_ in
+ if ((string_startswith _s767_ "amoxor")) then
+ match (string_drop _s767_ (projT1 (string_length "amoxor"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s761_ (_s762_ : string)
+: option string :=
+
+ let _s763_ := _s762_ in
+ if ((string_startswith _s763_ "amoadd")) then
+ match (string_drop _s763_ (projT1 (string_length "amoadd"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s757_ (_s758_ : string)
+: option string :=
+
+ let _s759_ := _s758_ in
+ if ((string_startswith _s759_ "amoswap")) then
+ match (string_drop _s759_ (projT1 (string_length "amoswap"))) with | s_ => Some (s_) end
+ else None.
+
+Definition amo_mnemonic_matches_prefix (arg_ : string)
+: M (option ((amoop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s760_ := arg_ in
+ (if ((match (_s757_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s757_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOSWAP, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s761_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s761_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOADD, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s765_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s765_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOXOR, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s769_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s769_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOAND, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s773_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s773_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOOR, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s777_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s777_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOMIN, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s781_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s781_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOMAX, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s785_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s785_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOMINU, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s789_ _s760_) with | Some (s_) => true | _ => false end)) then
+ (match (_s789_ _s760_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((AMOMAXU, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((amoop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((amoop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition encdec_csrop_forwards (arg_ : csrop)
+: mword 2 :=
+
+ match arg_ with
+ | CSRRW => (vec_of_bits [B0;B1] : mword 2)
+ | CSRRS => (vec_of_bits [B1;B0] : mword 2)
+ | CSRRC => (vec_of_bits [B1;B1] : mword 2)
+ end.
+
+Definition encdec_csrop_backwards (arg_ : mword 2)
+: csrop :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then CSRRW
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then CSRRS
+ else CSRRC.
+
+Definition encdec_csrop_forwards_matches (arg_ : csrop)
+: bool :=
+
+ match arg_ with | CSRRW => true | CSRRS => true | CSRRC => true end.
+
+Definition encdec_csrop_backwards_matches (arg_ : mword 2)
+: bool :=
+
+ let b__0 := arg_ in
+ if ((eq_vec b__0 (vec_of_bits [B0;B1] : mword 2))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B0] : mword 2))) then true
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1] : mword 2))) then true
+ else false.
+
+Definition readCSR (csr : mword 12)
+: M (mword 64) :=
+
+ let b__0 := csr in
+ (if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B0;B1] : mword 12))) then
+ ((read_reg mvendorid_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B0] : mword 12))) then
+ ((read_reg marchid_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B0;B1;B1] : mword 12))) then
+ ((read_reg mimpid_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B1;B1;B0;B0;B0;B1;B0;B1;B0;B0] : mword 12))) then
+ ((read_reg mhartid_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ read_reg mstatus_ref >>= fun w__4 : Mstatus => returnm ((_get_Mstatus_bits w__4) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ read_reg misa_ref >>= fun w__5 : Misa => returnm ((_get_Misa_bits w__5) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg medeleg_ref >>= fun w__6 : Medeleg => returnm ((_get_Medeleg_bits w__6) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ read_reg mideleg_ref >>= fun w__7 : Minterrupts =>
+ returnm ((_get_Minterrupts_bits w__7)
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mie_ref >>= fun w__8 : Minterrupts =>
+ returnm ((_get_Minterrupts_bits w__8)
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ read_reg mtvec_ref >>= fun w__9 : Mtvec => returnm ((_get_Mtvec_bits w__9) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ read_reg mcounteren_ref >>= fun w__10 : Counteren =>
+ returnm ((EXTZ 64 (_get_Counteren_bits w__10))
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg mscratch_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ ((read_reg mepc_ref) : M (mword 64)) >>= fun w__12 : xlenbits =>
+ (pc_alignment_mask tt) >>= fun w__13 : mword 64 => returnm ((and_vec w__12 w__13) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg mcause_ref >>= fun w__14 : Mcause => returnm ((_get_Mcause_bits w__14) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ ((read_reg mtval_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mip_ref >>= fun w__16 : Minterrupts =>
+ returnm ((_get_Minterrupts_bits w__16)
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg pmpcfg0_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg pmpaddr0_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ read_reg mstatus_ref >>= fun w__19 : Mstatus =>
+ returnm ((_get_Sstatus_bits (lower_mstatus w__19))
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg sedeleg_ref >>= fun w__20 : Sedeleg =>
+ returnm ((_get_Sedeleg_bits w__20)
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ read_reg sideleg_ref >>= fun w__21 : Sinterrupts =>
+ returnm ((_get_Sinterrupts_bits w__21)
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mie_ref >>= fun w__22 : Minterrupts =>
+ read_reg mideleg_ref >>= fun w__23 : Minterrupts =>
+ returnm ((_get_Sinterrupts_bits (lower_mie w__22 w__23))
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ read_reg stvec_ref >>= fun w__24 : Mtvec => returnm ((_get_Mtvec_bits w__24) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ read_reg scounteren_ref >>= fun w__25 : Counteren =>
+ returnm ((EXTZ 64 (_get_Counteren_bits w__25))
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg sscratch_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ ((read_reg sepc_ref) : M (mword 64)) >>= fun w__27 : xlenbits =>
+ (pc_alignment_mask tt) >>= fun w__28 : mword 64 => returnm ((and_vec w__27 w__28) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg scause_ref >>= fun w__29 : Mcause => returnm ((_get_Mcause_bits w__29) : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ ((read_reg stval_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mip_ref >>= fun w__31 : Minterrupts =>
+ read_reg mideleg_ref >>= fun w__32 : Minterrupts =>
+ returnm ((_get_Sinterrupts_bits (lower_mip w__31 w__32))
+ : mword 64)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg satp_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg mcycle_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ ((read_reg mtime_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ ((read_reg minstret_ref) : M (mword 64))
+ : M (xlenbits)
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ ((read_reg tselect_ref) : M (mword 64)) >>= fun w__37 : xlenbits =>
+ returnm ((not_vec w__37)
+ : mword 64)
+ else
+ let '_ := (print_bits "unhandled read to CSR " csr) : unit in
+ returnm ((vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)
+ : mword 64)) >>= fun res : xlenbits =>
+ let '_ :=
+ (print_endline
+ (String.append "CSR "
+ (String.append ((csr_name csr) : string) (String.append " -> " (string_of_bits res)))))
+ : unit in
+ returnm (res
+ : mword 64).
+
+Definition writeCSR (csr : mword 12) (value : mword 64)
+: M (unit) :=
+
+ let b__0 := csr in
+ (if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ read_reg mstatus_ref >>= fun w__0 : Mstatus =>
+ write_reg mstatus_ref (legalize_mstatus w__0 value) >>
+ read_reg mstatus_ref >>= fun w__1 : Mstatus =>
+ returnm ((Some
+ (_get_Mstatus_bits w__1))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ read_reg misa_ref >>= fun w__2 : Misa =>
+ (legalize_misa w__2 value) >>= fun w__3 : Misa =>
+ write_reg misa_ref w__3 >>
+ read_reg misa_ref >>= fun w__4 : Misa =>
+ returnm ((Some
+ (_get_Misa_bits w__4))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg medeleg_ref >>= fun w__5 : Medeleg =>
+ write_reg medeleg_ref (legalize_medeleg w__5 value) >>
+ read_reg medeleg_ref >>= fun w__6 : Medeleg =>
+ returnm ((Some
+ (_get_Medeleg_bits w__6))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ read_reg mideleg_ref >>= fun w__7 : Minterrupts =>
+ write_reg mideleg_ref (legalize_mideleg w__7 value) >>
+ read_reg mideleg_ref >>= fun w__8 : Minterrupts =>
+ returnm ((Some
+ (_get_Minterrupts_bits w__8))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mie_ref >>= fun w__9 : Minterrupts =>
+ write_reg mie_ref (legalize_mie w__9 value) >>
+ read_reg mie_ref >>= fun w__10 : Minterrupts =>
+ returnm ((Some
+ (_get_Minterrupts_bits w__10))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ read_reg mtvec_ref >>= fun w__11 : Mtvec =>
+ write_reg mtvec_ref (legalize_tvec w__11 value) >>
+ read_reg mtvec_ref >>= fun w__12 : Mtvec =>
+ returnm ((Some
+ (_get_Mtvec_bits w__12))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ read_reg mcounteren_ref >>= fun w__13 : Counteren =>
+ (legalize_mcounteren w__13 value) >>= fun w__14 : Counteren =>
+ write_reg mcounteren_ref w__14 >>
+ read_reg mcounteren_ref >>= fun w__15 : Counteren =>
+ returnm ((Some
+ (EXTZ 64 (_get_Counteren_bits w__15)))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ write_reg mscratch_ref value >>
+ ((read_reg mscratch_ref) : M (mword 64)) >>= fun w__16 : xlenbits =>
+ returnm ((Some
+ (w__16))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ (legalize_xepc value) >>= fun w__17 : mword 64 =>
+ write_reg mepc_ref w__17 >>
+ ((read_reg mepc_ref) : M (mword 64)) >>= fun w__18 : xlenbits =>
+ returnm ((Some
+ (w__18))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ (_set_Mcause_bits mcause_ref value) >>
+ read_reg mcause_ref >>= fun w__19 : Mcause =>
+ returnm ((Some
+ (_get_Mcause_bits w__19))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ write_reg mtval_ref value >>
+ ((read_reg mtval_ref) : M (mword 64)) >>= fun w__20 : xlenbits =>
+ returnm ((Some
+ (w__20))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mip_ref >>= fun w__21 : Minterrupts =>
+ write_reg mip_ref (legalize_mip w__21 value) >>
+ read_reg mip_ref >>= fun w__22 : Minterrupts =>
+ returnm ((Some
+ (_get_Minterrupts_bits w__22))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ write_reg pmpcfg0_ref value >>
+ ((read_reg pmpcfg0_ref) : M (mword 64)) >>= fun w__23 : xlenbits =>
+ returnm ((Some
+ (w__23))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B1;B1;B1;B0;B1;B1;B0;B0;B0;B0] : mword 12))) then
+ write_reg pmpaddr0_ref value >>
+ ((read_reg pmpaddr0_ref) : M (mword 64)) >>= fun w__24 : xlenbits =>
+ returnm ((Some
+ (w__24))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ read_reg mstatus_ref >>= fun w__25 : Mstatus =>
+ write_reg mstatus_ref (legalize_sstatus w__25 value) >>
+ read_reg mstatus_ref >>= fun w__26 : Mstatus =>
+ returnm ((Some
+ (_get_Mstatus_bits w__26))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ read_reg sedeleg_ref >>= fun w__27 : Sedeleg =>
+ write_reg sedeleg_ref (legalize_sedeleg w__27 value) >>
+ read_reg sedeleg_ref >>= fun w__28 : Sedeleg =>
+ returnm ((Some
+ (_get_Sedeleg_bits w__28))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ (_set_Sinterrupts_bits sideleg_ref value) >>
+ read_reg sideleg_ref >>= fun w__29 : Sinterrupts =>
+ returnm ((Some
+ (_get_Sinterrupts_bits w__29))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mie_ref >>= fun w__30 : Minterrupts =>
+ read_reg mideleg_ref >>= fun w__31 : Minterrupts =>
+ write_reg mie_ref (legalize_sie w__30 w__31 value) >>
+ read_reg mie_ref >>= fun w__32 : Minterrupts =>
+ returnm ((Some
+ (_get_Minterrupts_bits w__32))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12))) then
+ read_reg stvec_ref >>= fun w__33 : Mtvec =>
+ write_reg stvec_ref (legalize_tvec w__33 value) >>
+ read_reg stvec_ref >>= fun w__34 : Mtvec =>
+ returnm ((Some
+ (_get_Mtvec_bits w__34))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B1;B0] : mword 12))) then
+ read_reg scounteren_ref >>= fun w__35 : Counteren =>
+ (legalize_scounteren w__35 value) >>= fun w__36 : Counteren =>
+ write_reg scounteren_ref w__36 >>
+ read_reg scounteren_ref >>= fun w__37 : Counteren =>
+ returnm ((Some
+ (EXTZ 64 (_get_Counteren_bits w__37)))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ write_reg sscratch_ref value >>
+ ((read_reg sscratch_ref) : M (mword 64)) >>= fun w__38 : xlenbits =>
+ returnm ((Some
+ (w__38))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B1] : mword 12))) then
+ (legalize_xepc value) >>= fun w__39 : mword 64 =>
+ write_reg sepc_ref w__39 >>
+ ((read_reg sepc_ref) : M (mword 64)) >>= fun w__40 : xlenbits =>
+ returnm ((Some
+ (w__40))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ (_set_Mcause_bits scause_ref value) >>
+ read_reg scause_ref >>= fun w__41 : Mcause =>
+ returnm ((Some
+ (_get_Mcause_bits w__41))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B1;B1] : mword 12))) then
+ write_reg stval_ref value >>
+ ((read_reg stval_ref) : M (mword 64)) >>= fun w__42 : xlenbits =>
+ returnm ((Some
+ (w__42))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B0;B1;B0;B0;B0;B1;B0;B0] : mword 12))) then
+ read_reg mip_ref >>= fun w__43 : Minterrupts =>
+ read_reg mideleg_ref >>= fun w__44 : Minterrupts =>
+ write_reg mip_ref (legalize_sip w__43 w__44 value) >>
+ read_reg mip_ref >>= fun w__45 : Minterrupts =>
+ returnm ((Some
+ (_get_Minterrupts_bits w__45))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ (cur_Architecture tt) >>= fun w__46 : Architecture =>
+ ((read_reg satp_ref) : M (mword 64)) >>= fun w__47 : xlenbits =>
+ write_reg satp_ref (legalize_satp w__46 w__47 value) >>
+ ((read_reg satp_ref) : M (mword 64)) >>= fun w__48 : xlenbits =>
+ returnm ((Some
+ (w__48))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B0;B1;B1;B1;B1;B0;B1;B0;B0;B0;B0;B0] : mword 12))) then
+ write_reg tselect_ref value >>
+ ((read_reg tselect_ref) : M (mword 64)) >>= fun w__49 : xlenbits =>
+ returnm ((Some
+ (w__49))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12))) then
+ write_reg mcycle_ref value >>
+ ((read_reg mcycle_ref) : M (mword 64)) >>= fun w__50 : xlenbits =>
+ returnm ((Some
+ (w__50))
+ : option (mword 64))
+ else if ((eq_vec b__0 (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 12))) then
+ write_reg minstret_ref value >>
+ write_reg minstret_written_ref true >>
+ ((read_reg minstret_ref) : M (mword 64)) >>= fun w__51 : xlenbits =>
+ returnm ((Some
+ (w__51))
+ : option (mword 64))
+ else returnm (None : option (mword 64))) >>= fun res : option xlenbits =>
+ returnm ((match res with
+ | Some (v) =>
+ print_endline
+ (String.append "CSR "
+ (String.append ((csr_name csr) : string)
+ (String.append " <- "
+ (String.append (string_of_bits v)
+ (String.append " (input: " (String.append (string_of_bits value) ")"))))))
+ | None => print_bits "unhandled write to CSR " csr
+ end)
+ : unit).
+
+Definition maybe_i_forwards (arg_ : bool)
+: string :=
+
+ match arg_ with | true => "i" | false => "" end.
+
+Definition maybe_i_backwards (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "i")) then true
+ else false.
+
+Definition maybe_i_forwards_matches (arg_ : bool)
+: bool :=
+
+ match arg_ with | true => true | false => true end.
+
+Definition maybe_i_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "i")) then true
+ else if ((generic_eq p0_ "")) then true
+ else false.
+
+Definition _s797_ (_s798_ : string)
+: option string :=
+
+ let _s799_ := _s798_ in
+ if ((string_startswith _s799_ "")) then
+ match (string_drop _s799_ (projT1 (string_length ""))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s793_ (_s794_ : string)
+: option string :=
+
+ let _s795_ := _s794_ in
+ if ((string_startswith _s795_ "i")) then
+ match (string_drop _s795_ (projT1 (string_length "i"))) with | s_ => Some (s_) end
+ else None.
+
+Definition maybe_i_matches_prefix (arg_ : string)
+: M (option ((bool * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s796_ := arg_ in
+ (if ((match (_s793_ _s796_) with | Some (s_) => true | _ => false end)) then
+ (match (_s793_ _s796_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((true, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s797_ _s796_) with | Some (s_) => true | _ => false end)) then
+ (match (_s797_ _s796_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((false, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((bool * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((bool * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((bool * {n : Z & ArithFact (n >= 0)}))).
+
+Definition csr_mnemonic_forwards (arg_ : csrop)
+: string :=
+
+ match arg_ with | CSRRW => "csrrw" | CSRRS => "csrrs" | CSRRC => "csrrc" end.
+
+Definition csr_mnemonic_backwards (arg_ : string)
+: csrop :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "csrrw")) then CSRRW
+ else if ((generic_eq p0_ "csrrs")) then CSRRS
+ else CSRRC.
+
+Definition csr_mnemonic_forwards_matches (arg_ : csrop)
+: bool :=
+
+ match arg_ with | CSRRW => true | CSRRS => true | CSRRC => true end.
+
+Definition csr_mnemonic_backwards_matches (arg_ : string)
+: bool :=
+
+ let p0_ := arg_ in
+ if ((generic_eq p0_ "csrrw")) then true
+ else if ((generic_eq p0_ "csrrs")) then true
+ else if ((generic_eq p0_ "csrrc")) then true
+ else false.
+
+Definition _s809_ (_s810_ : string)
+: option string :=
+
+ let _s811_ := _s810_ in
+ if ((string_startswith _s811_ "csrrc")) then
+ match (string_drop _s811_ (projT1 (string_length "csrrc"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s805_ (_s806_ : string)
+: option string :=
+
+ let _s807_ := _s806_ in
+ if ((string_startswith _s807_ "csrrs")) then
+ match (string_drop _s807_ (projT1 (string_length "csrrs"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s801_ (_s802_ : string)
+: option string :=
+
+ let _s803_ := _s802_ in
+ if ((string_startswith _s803_ "csrrw")) then
+ match (string_drop _s803_ (projT1 (string_length "csrrw"))) with | s_ => Some (s_) end
+ else None.
+
+Definition csr_mnemonic_matches_prefix (arg_ : string)
+: M (option ((csrop * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s804_ := arg_ in
+ (if ((match (_s801_ _s804_) with | Some (s_) => true | _ => false end)) then
+ (match (_s801_ _s804_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((CSRRW, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s805_ _s804_) with | Some (s_) => true | _ => false end)) then
+ (match (_s805_ _s804_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((CSRRS, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ else if ((match (_s809_ _s804_) with | Some (s_) => true | _ => false end)) then
+ (match (_s809_ _s804_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((CSRRC, build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((csrop * {n : Z & ArithFact (n >= 0)})))
+ else returnm (None : option ((csrop * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((csrop * {n : Z & ArithFact (n >= 0)}))).
+
+Definition encdec_forwards (arg_ : ast)
+: M (mword 32) :=
+
+ (match arg_ with
+ | UTYPE (imm,rd,op) =>
+ returnm ((concat_vec (imm : mword 20) (concat_vec (rd : mword 5) (encdec_uop_forwards op)))
+ : mword (20 + (5 + 7)))
+ | RISCV_JAL (v__2,rd) =>
+ let imm_19 : bits 1 := subrange_vec_dec v__2 20 20 in
+ let imm_8 : bits 1 := subrange_vec_dec v__2 11 11 in
+ let imm_7_0 : bits 8 := subrange_vec_dec v__2 19 12 in
+ let imm_19 : bits 1 := subrange_vec_dec v__2 20 20 in
+ let imm_18_13 : bits 6 := subrange_vec_dec v__2 10 5 in
+ let imm_12_9 : bits 4 := subrange_vec_dec v__2 4 1 in
+ returnm ((concat_vec (imm_19 : bits 1)
+ (concat_vec (imm_18_13 : bits 6)
+ (concat_vec (imm_12_9 : bits 4)
+ (concat_vec (imm_8 : bits 1)
+ (concat_vec (imm_7_0 : bits 8)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B1;B1;B0;B1;B1;B1;B1] : mword 7)))))))
+ : mword 32)
+ | RISCV_JALR (imm,rs1,rd) =>
+ returnm ((concat_vec (imm : mword 12)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5) (vec_of_bits [B1;B1;B0;B0;B1;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | BTYPE (v__4,rs2,rs1,op) =>
+ let imm7_6 : bits 1 := subrange_vec_dec v__4 12 12 in
+ let imm7_6 : bits 1 := subrange_vec_dec v__4 12 12 in
+ let imm7_5_0 : bits 6 := subrange_vec_dec v__4 10 5 in
+ let imm5_4_1 : bits 4 := subrange_vec_dec v__4 4 1 in
+ let imm5_0 : bits 1 := subrange_vec_dec v__4 11 11 in
+ returnm ((concat_vec (imm7_6 : bits 1)
+ (concat_vec (imm7_5_0 : bits 6)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (encdec_bop_forwards op)
+ (concat_vec (imm5_4_1 : bits 4)
+ (concat_vec (imm5_0 : bits 1)
+ (vec_of_bits [B1;B1;B0;B0;B0;B1;B1] : mword 7))))))))
+ : mword 32)
+ | ITYPE (imm,rs1,rd,op) =>
+ returnm ((concat_vec (imm : mword 12)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (encdec_iop_forwards op)
+ (concat_vec (rd : mword 5) (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | SHIFTIOP (shamt,rs1,rd,RISCV_SLLI) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6)
+ (concat_vec (shamt : mword 6)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (6 + (6 + (5 + (3 + (5 + 7))))))
+ | SHIFTIOP (shamt,rs1,rd,RISCV_SRLI) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6)
+ (concat_vec (shamt : mword 6)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (6 + (6 + (5 + (3 + (5 + 7))))))
+ | SHIFTIOP (shamt,rs1,rd,RISCV_SRAI) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0] : mword 6)
+ (concat_vec (shamt : mword 6)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (6 + (6 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_ADD) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_SUB) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_SLL) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_SLT) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B1;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_SLTU) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B1;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_XOR) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_SRL) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_SRA) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_OR) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B1;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPE (rs2,rs1,rd,RISCV_AND) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B1;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | LOAD (imm,rs1,rd,is_unsigned,size,false,false) =>
+ returnm ((concat_vec (imm : mword 12)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (bool_bits_forwards is_unsigned)
+ (concat_vec (size_bits_forwards size)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1] : mword 7))))))
+ : mword (12 + (5 + (1 + (2 + (5 + 7))))))
+ | STORE (v__6,rs2,rs1,size,false,false) =>
+ let imm7 : bits 7 := subrange_vec_dec v__6 11 5 in
+ let imm7 : bits 7 := subrange_vec_dec v__6 11 5 in
+ let imm5 : bits 5 := subrange_vec_dec v__6 4 0 in
+ returnm ((concat_vec (imm7 : bits 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (size_bits_forwards size)
+ (concat_vec (imm5 : bits 5)
+ (vec_of_bits [B0;B1;B0;B0;B0;B1;B1] : mword 7)))))))
+ : mword 32)
+ | ADDIW (imm,rs1,rd) =>
+ returnm ((concat_vec (imm : mword 12)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5) (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | SHIFTW (shamt,rs1,rd,RISCV_SLLI) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (shamt : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | SHIFTW (shamt,rs1,rd,RISCV_SRLI) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (shamt : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | SHIFTW (shamt,rs1,rd,RISCV_SRAI) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (shamt : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPEW (rs2,rs1,rd,RISCV_ADDW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPEW (rs2,rs1,rd,RISCV_SUBW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPEW (rs2,rs1,rd,RISCV_SLLW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPEW (rs2,rs1,rd,RISCV_SRLW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | RTYPEW (rs2,rs1,rd,RISCV_SRAW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | SHIFTIWOP (shamt,rs1,rd,RISCV_SLLIW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (shamt : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | SHIFTIWOP (shamt,rs1,rd,RISCV_SRLIW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (shamt : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | SHIFTIWOP (shamt,rs1,rd,RISCV_SRAIW) =>
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword 7)
+ (concat_vec (shamt : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | MUL (rs2,rs1,rd,high,signed1,signed2) =>
+ (encdec_mul_op_forwards (high, signed1, signed2)) >>= fun w__0 : mword 3 =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (w__0 : bits 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | DIV (rs2,rs1,rd,s) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0] : mword 2)
+ (concat_vec (bool_not_bits_forwards s)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7)))))))
+ : mword (7 + (5 + (5 + (2 + (1 + (5 + 7)))))))
+ | REM (rs2,rs1,rd,s) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (bool_not_bits_forwards s)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword 7)))))))
+ : mword (7 + (5 + (5 + (2 + (1 + (5 + 7)))))))
+ | MULW (rs2,rs1,rd) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | DIVW (rs2,rs1,rd,s) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B0] : mword 2)
+ (concat_vec (bool_not_bits_forwards s)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7)))))))
+ : mword (7 + (5 + (5 + (2 + (1 + (5 + 7)))))))
+ | REMW (rs2,rs1,rd,s) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (bool_not_bits_forwards s)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword 7)))))))
+ : mword (7 + (5 + (5 + (2 + (1 + (5 + 7)))))))
+ | FENCE (pred,succ) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0] : mword 4)
+ (concat_vec (pred : mword 4)
+ (concat_vec (succ : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1;B1] : mword 7)))))))
+ : mword (4 + (4 + (4 + (5 + (3 + (5 + 7)))))))
+ | FENCE_TSO (pred,succ) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0;B0] : mword 4)
+ (concat_vec (pred : mword 4)
+ (concat_vec (succ : mword 4)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1;B1] : mword 7)))))))
+ : mword (4 + (4 + (4 + (5 + (3 + (5 + 7)))))))
+ | FENCEI (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B0;B0;B0;B1;B1;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | ECALL (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | MRET (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B1;B1;B0;B0;B0] : mword 7)
+ (concat_vec (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | SRET (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B1;B0;B0;B0] : mword 7)
+ (concat_vec (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | EBREAK (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 12)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | WFI (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1] : mword 12)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7)))))
+ : mword (12 + (5 + (3 + (5 + 7)))))
+ | SFENCE_VMA (rs1,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B1;B0;B0;B1] : mword 7)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (7 + (5 + (5 + (3 + (5 + 7))))))
+ | LOADRES (aq,rl,rs1,size,rd) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)
+ (concat_vec (bool_bits_forwards aq)
+ (concat_vec (bool_bits_forwards rl)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (size_bits_forwards size)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword 7)))))))))
+ : mword (5 + (1 + (1 + (5 + (5 + (1 + (2 + (5 + 7)))))))))
+ | STORECON (aq,rl,rs2,rs1,size,rd) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0;B1;B1] : mword 5)
+ (concat_vec (bool_bits_forwards aq)
+ (concat_vec (bool_bits_forwards rl)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (size_bits_forwards size)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword 7)))))))))
+ : mword (5 + (1 + (1 + (5 + (5 + (1 + (2 + (5 + 7)))))))))
+ | AMO (op,aq,rl,rs2,rs1,size,rd) =>
+ returnm ((concat_vec (encdec_amoop_forwards op)
+ (concat_vec (bool_bits_forwards aq)
+ (concat_vec (bool_bits_forwards rl)
+ (concat_vec (rs2 : mword 5)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (size_bits_forwards size)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword 7)))))))))
+ : mword (5 + (1 + (1 + (5 + (5 + (1 + (2 + (5 + 7)))))))))
+ | CSR (csr,rs1,rd,is_imm,op) =>
+ returnm ((concat_vec (csr : mword 12)
+ (concat_vec (rs1 : mword 5)
+ (concat_vec (bool_bits_forwards is_imm)
+ (concat_vec (encdec_csrop_forwards op)
+ (concat_vec (rd : mword 5)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword 7))))))
+ : mword (12 + (5 + (1 + (2 + (5 + 7))))))
+ | STOP_FETCHING (tt) =>
+ returnm ((concat_vec
+ (vec_of_bits [B1;B1;B1;B1;B1;B0;B1;B0;B1;B1;B0;B1;B1;B1;B1;B0] : mword 16)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0;B0] : mword 2)
+ (concat_vec (vec_of_bits [B0;B1;B0] : mword 3)
+ (vec_of_bits [B1;B1] : mword 2))))))
+ : mword (16 + (8 + (1 + (2 + (3 + 2))))))
+ | THREAD_START (tt) =>
+ returnm ((concat_vec
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1;B1;B1;B0] : mword 16)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0;B0] : mword 2)
+ (concat_vec (vec_of_bits [B0;B1;B0] : mword 3)
+ (vec_of_bits [B1;B1] : mword 2))))))
+ : mword (16 + (8 + (1 + (2 + (3 + 2))))))
+ | ILLEGAL (s) => returnm (s : mword 32)
+ | _ => exit tt : M (mword 32)
+ end)
+ : M (mword 32).
+
+Definition encdec_backwards (arg_ : mword 32)
+: ast :=
+
+ let v__7 := arg_ in
+ if ((let _mappingpatterns_23_ : mword 7 := subrange_vec_dec v__7 6 0 in
+ andb (encdec_uop_backwards_matches _mappingpatterns_23_)
+ (if ((encdec_uop_backwards_matches _mappingpatterns_23_)) then
+ let op := encdec_uop_backwards _mappingpatterns_23_ in
+ true
+ else false))) then
+ let imm : mword 20 := subrange_vec_dec v__7 31 12 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let imm : mword 20 := subrange_vec_dec v__7 31 12 in
+ let _mappingpatterns_23_ : mword 7 := subrange_vec_dec v__7 6 0 in
+ let op := encdec_uop_backwards _mappingpatterns_23_ in
+ UTYPE
+ ((imm, rd, op))
+ else if ((eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B1;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1)))) then
+ let imm_19 : bits 1 := subrange_vec_dec v__7 31 31 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let imm_8 : bits 1 := subrange_vec_dec v__7 20 20 in
+ let imm_7_0 : bits 8 := subrange_vec_dec v__7 19 12 in
+ let imm_19 : bits 1 := subrange_vec_dec v__7 31 31 in
+ let imm_18_13 : bits 6 := subrange_vec_dec v__7 30 25 in
+ let imm_12_9 : bits 4 := subrange_vec_dec v__7 24 21 in
+ RISCV_JAL
+ ((concat_vec (imm_19 : bits 1)
+ (concat_vec (imm_7_0 : bits 8)
+ (concat_vec (imm_8 : bits 1)
+ (concat_vec (imm_18_13 : bits 6)
+ (concat_vec (imm_12_9 : bits 4) (vec_of_bits [B0] : mword 1))))), rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 14 12) (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B1;B1;B0;B0;B1;B1;B1] : mword (6 - 0 + 1))))) then
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ RISCV_JALR
+ ((imm, rs1, rd))
+ else if ((andb
+ (let _mappingpatterns_24_ : mword 3 := subrange_vec_dec v__7 14 12 in
+ andb (encdec_bop_backwards_matches _mappingpatterns_24_)
+ (if ((encdec_bop_backwards_matches _mappingpatterns_24_)) then
+ let op := encdec_bop_backwards _mappingpatterns_24_ in
+ true
+ else false))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B1;B1;B0;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let imm7_6 : bits 1 := subrange_vec_dec v__7 31 31 in
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let imm7_6 : bits 1 := subrange_vec_dec v__7 31 31 in
+ let imm7_5_0 : bits 6 := subrange_vec_dec v__7 30 25 in
+ let imm5_4_1 : bits 4 := subrange_vec_dec v__7 11 8 in
+ let imm5_0 : bits 1 := subrange_vec_dec v__7 7 7 in
+ let _mappingpatterns_24_ : mword 3 := subrange_vec_dec v__7 14 12 in
+ let op := encdec_bop_backwards _mappingpatterns_24_ in
+ BTYPE
+ ((concat_vec (imm7_6 : bits 1)
+ (concat_vec (imm5_0 : bits 1)
+ (concat_vec (imm7_5_0 : bits 6)
+ (concat_vec (imm5_4_1 : bits 4) (vec_of_bits [B0] : mword 1)))), rs2, rs1, op))
+ else if ((andb
+ (let _mappingpatterns_25_ : mword 3 := subrange_vec_dec v__7 14 12 in
+ andb (encdec_iop_backwards_matches _mappingpatterns_25_)
+ (if ((encdec_iop_backwards_matches _mappingpatterns_25_)) then
+ let op := encdec_iop_backwards _mappingpatterns_25_ in
+ true
+ else false))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ let _mappingpatterns_25_ : mword 3 := subrange_vec_dec v__7 14 12 in
+ let op := encdec_iop_backwards _mappingpatterns_25_ in
+ ITYPE
+ ((imm, rs1, rd, op))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 6 := subrange_vec_dec v__7 25 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTIOP
+ ((shamt, rs1, rd, RISCV_SLLI))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 6 := subrange_vec_dec v__7 25 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTIOP
+ ((shamt, rs1, rd, RISCV_SRLI))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 26)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 6 := subrange_vec_dec v__7 25 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTIOP
+ ((shamt, rs1, rd, RISCV_SRAI))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_ADD))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_SUB))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_SLL))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B1;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_SLT))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B1;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_SLTU))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_XOR))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_SRL))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_SRA))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B1;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_OR))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B1;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPE
+ ((rs2, rs1, rd, RISCV_AND))
+ else if ((andb
+ (let _mappingpatterns_27_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_26_ : mword 1 := subrange_vec_dec v__7 14 14 in
+ andb (size_bits_backwards_matches _mappingpatterns_27_)
+ (if ((size_bits_backwards_matches _mappingpatterns_27_)) then
+ let size := size_bits_backwards _mappingpatterns_27_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_26_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_26_)) then
+ let is_unsigned := bool_bits_backwards _mappingpatterns_26_ in
+ orb (neq_vec (size_bits_forwards size) (vec_of_bits [B1;B1] : mword 2))
+ (negb is_unsigned)
+ else false)
+ else false))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ let _mappingpatterns_27_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_26_ : mword 1 := subrange_vec_dec v__7 14 14 in
+ let size := size_bits_backwards _mappingpatterns_27_ in
+ let is_unsigned := bool_bits_backwards _mappingpatterns_26_ in
+ LOAD
+ ((imm, rs1, rd, is_unsigned, size, false, false))
+ else if ((andb
+ (let _mappingpatterns_28_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ andb (size_bits_backwards_matches _mappingpatterns_28_)
+ (if ((size_bits_backwards_matches _mappingpatterns_28_)) then
+ let size := size_bits_backwards _mappingpatterns_28_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 14) (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B0;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let imm7 : bits 7 := subrange_vec_dec v__7 31 25 in
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let imm7 : bits 7 := subrange_vec_dec v__7 31 25 in
+ let imm5 : bits 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_28_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let size := size_bits_backwards _mappingpatterns_28_ in
+ STORE
+ ((concat_vec (imm7 : bits 7) (imm5 : bits 5), rs2, rs1, size, false, false))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 14 12) (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let imm : mword 12 := subrange_vec_dec v__7 31 20 in
+ ADDIW
+ ((imm, rs1, rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTW
+ ((shamt, rs1, rd, RISCV_SLLI))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTW
+ ((shamt, rs1, rd, RISCV_SRLI))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTW
+ ((shamt, rs1, rd, RISCV_SRAI))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPEW
+ ((rs2, rs1, rd, RISCV_ADDW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPEW
+ ((rs2, rs1, rd, RISCV_SUBW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPEW
+ ((rs2, rs1, rd, RISCV_SLLW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPEW
+ ((rs2, rs1, rd, RISCV_SRLW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ RTYPEW
+ ((rs2, rs1, rd, RISCV_SRAW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTIWOP
+ ((shamt, rs1, rd, RISCV_SLLIW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTIWOP
+ ((shamt, rs1, rd, RISCV_SRLIW))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let shamt : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ SHIFTIWOP
+ ((shamt, rs1, rd, RISCV_SRAIW))
+ else if ((andb
+ (let _mappingpatterns_29_ : bits 3 := subrange_vec_dec v__7 14 12 in
+ andb (encdec_mul_op_backwards_matches _mappingpatterns_29_)
+ (if ((encdec_mul_op_backwards_matches _mappingpatterns_29_)) then
+ let '(high, signed1, signed2) := encdec_mul_op_backwards _mappingpatterns_29_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_29_ : bits 3 := subrange_vec_dec v__7 14 12 in
+ let '(high, signed1, signed2) := encdec_mul_op_backwards _mappingpatterns_29_ in
+ MUL
+ ((rs2, rs1, rd, high, signed1, signed2))
+ else if ((andb
+ (let _mappingpatterns_30_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_30_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_30_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_30_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 13)
+ (vec_of_bits [B1;B0] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_30_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_30_ in
+ DIV
+ ((rs2, rs1, rd, s))
+ else if ((andb
+ (let _mappingpatterns_31_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_31_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_31_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_31_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 13)
+ (vec_of_bits [B1;B1] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_31_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_31_ in
+ REM
+ ((rs2, rs1, rd, s))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ MULW
+ ((rs2, rs1, rd))
+ else if ((andb
+ (let _mappingpatterns_32_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_32_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_32_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_32_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 13)
+ (vec_of_bits [B1;B0] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_32_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_32_ in
+ DIVW
+ ((rs2, rs1, rd, s))
+ else if ((andb
+ (let _mappingpatterns_33_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_33_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_33_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_33_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 13)
+ (vec_of_bits [B1;B1] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_33_ : mword 1 := subrange_vec_dec v__7 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_33_ in
+ REMW
+ ((rs2, rs1, rd, s))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 28)
+ (vec_of_bits [B0;B0;B0;B0] : mword (31 - 28 + 1)))
+ (eq_vec (subrange_vec_dec v__7 19 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1]
+ : mword (19 - 0 + 1))))) then
+ let succ : mword 4 := subrange_vec_dec v__7 23 20 in
+ let pred : mword 4 := subrange_vec_dec v__7 27 24 in
+ FENCE
+ ((pred, succ))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 28)
+ (vec_of_bits [B1;B0;B0;B0] : mword (31 - 28 + 1)))
+ (eq_vec (subrange_vec_dec v__7 19 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1]
+ : mword (19 - 0 + 1))))) then
+ let succ : mword 4 := subrange_vec_dec v__7 23 20 in
+ let pred : mword 4 := subrange_vec_dec v__7 27 24 in
+ FENCE_TSO
+ ((pred, succ))
+ else if ((eq_vec v__7
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1]
+ : mword 32))) then
+ FENCEI
+ (tt)
+ else if ((eq_vec v__7
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ ECALL
+ (tt)
+ else if ((eq_vec v__7
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ MRET
+ (tt)
+ else if ((eq_vec v__7
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ SRET
+ (tt)
+ else if ((eq_vec v__7
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ EBREAK
+ (tt)
+ else if ((eq_vec v__7
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ WFI
+ (tt)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__7 31 25)
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B1] : mword (31 - 25 + 1)))
+ (eq_vec (subrange_vec_dec v__7 14 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1] : mword (14 - 0 + 1)))))
+ then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ SFENCE_VMA
+ ((rs1, rs2))
+ else if sumbool_of_bool ((andb
+ (let _mappingpatterns_36_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_35_ : mword 1 := subrange_vec_dec v__7 25 25 in
+ let _mappingpatterns_34_ : mword 1 := subrange_vec_dec v__7 26 26 in
+ andb (size_bits_backwards_matches _mappingpatterns_36_)
+ (if ((size_bits_backwards_matches _mappingpatterns_36_)) then
+ let size := size_bits_backwards _mappingpatterns_36_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_35_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_35_)) then
+ let rl := bool_bits_backwards _mappingpatterns_35_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_34_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_34_))
+ then
+ let aq := bool_bits_backwards _mappingpatterns_34_ in
+ true
+ else false)
+ else false)
+ else false))
+ (andb
+ (Z.eqb (projT1 (regbits_to_regno (subrange_vec_dec v__7 31 27)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))))
+ (andb
+ (Z.eqb
+ (projT1 (regbits_to_regno (subrange_vec_dec v__7 24 20)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 14)
+ (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1))))))))
+ then
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_36_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_35_ : mword 1 := subrange_vec_dec v__7 25 25 in
+ let _mappingpatterns_34_ : mword 1 := subrange_vec_dec v__7 26 26 in
+ let size := size_bits_backwards _mappingpatterns_36_ in
+ let rl := bool_bits_backwards _mappingpatterns_35_ in
+ let aq := bool_bits_backwards _mappingpatterns_34_ in
+ LOADRES
+ ((aq, rl, rs1, size, rd))
+ else if sumbool_of_bool ((andb
+ (let _mappingpatterns_39_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_38_ : mword 1 := subrange_vec_dec v__7 25 25 in
+ let _mappingpatterns_37_ : mword 1 := subrange_vec_dec v__7 26 26 in
+ andb (size_bits_backwards_matches _mappingpatterns_39_)
+ (if ((size_bits_backwards_matches _mappingpatterns_39_)) then
+ let size := size_bits_backwards _mappingpatterns_39_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_38_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_38_)) then
+ let rl := bool_bits_backwards _mappingpatterns_38_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_37_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_37_))
+ then
+ let aq := bool_bits_backwards _mappingpatterns_37_ in
+ true
+ else false)
+ else false)
+ else false))
+ (andb
+ (Z.eqb (projT1 (regbits_to_regno (subrange_vec_dec v__7 31 27)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 14)
+ (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1)))))))
+ then
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_39_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_38_ : mword 1 := subrange_vec_dec v__7 25 25 in
+ let _mappingpatterns_37_ : mword 1 := subrange_vec_dec v__7 26 26 in
+ let size := size_bits_backwards _mappingpatterns_39_ in
+ let rl := bool_bits_backwards _mappingpatterns_38_ in
+ let aq := bool_bits_backwards _mappingpatterns_37_ in
+ STORECON
+ ((aq, rl, rs2, rs1, size, rd))
+ else if ((andb
+ (let _mappingpatterns_40_ : mword 5 := subrange_vec_dec v__7 31 27 in
+ let _mappingpatterns_43_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_42_ : mword 1 := subrange_vec_dec v__7 25 25 in
+ let _mappingpatterns_41_ : mword 1 := subrange_vec_dec v__7 26 26 in
+ let _mappingpatterns_40_ : mword 5 := subrange_vec_dec v__7 31 27 in
+ andb (size_bits_backwards_matches _mappingpatterns_43_)
+ (if ((size_bits_backwards_matches _mappingpatterns_43_)) then
+ let size := size_bits_backwards _mappingpatterns_43_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_42_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_42_)) then
+ let rl := bool_bits_backwards _mappingpatterns_42_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_41_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_41_)) then
+ let aq := bool_bits_backwards _mappingpatterns_41_ in
+ andb (encdec_amoop_backwards_matches _mappingpatterns_40_)
+ (if ((encdec_amoop_backwards_matches _mappingpatterns_40_)) then
+ let op := encdec_amoop_backwards _mappingpatterns_40_ in
+ true
+ else false)
+ else false)
+ else false)
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__7 14 14) (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1)))))) then
+ let _mappingpatterns_40_ : mword 5 := subrange_vec_dec v__7 31 27 in
+ let rs2 : mword 5 := subrange_vec_dec v__7 24 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let _mappingpatterns_43_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_42_ : mword 1 := subrange_vec_dec v__7 25 25 in
+ let _mappingpatterns_41_ : mword 1 := subrange_vec_dec v__7 26 26 in
+ let _mappingpatterns_40_ : mword 5 := subrange_vec_dec v__7 31 27 in
+ let size := size_bits_backwards _mappingpatterns_43_ in
+ let rl := bool_bits_backwards _mappingpatterns_42_ in
+ let aq := bool_bits_backwards _mappingpatterns_41_ in
+ let op := encdec_amoop_backwards _mappingpatterns_40_ in
+ AMO
+ ((op, aq, rl, rs2, rs1, size, rd))
+ else if ((andb
+ (let _mappingpatterns_45_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_44_ : mword 1 := subrange_vec_dec v__7 14 14 in
+ andb (encdec_csrop_backwards_matches _mappingpatterns_45_)
+ (if ((encdec_csrop_backwards_matches _mappingpatterns_45_)) then
+ let op := encdec_csrop_backwards _mappingpatterns_45_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_44_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_44_)) then
+ let is_imm := bool_bits_backwards _mappingpatterns_44_ in
+ true
+ else false)
+ else false))
+ (eq_vec (subrange_vec_dec v__7 6 0)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let csr : mword 12 := subrange_vec_dec v__7 31 20 in
+ let rs1 : mword 5 := subrange_vec_dec v__7 19 15 in
+ let rd : mword 5 := subrange_vec_dec v__7 11 7 in
+ let csr : mword 12 := subrange_vec_dec v__7 31 20 in
+ let _mappingpatterns_45_ : mword 2 := subrange_vec_dec v__7 13 12 in
+ let _mappingpatterns_44_ : mword 1 := subrange_vec_dec v__7 14 14 in
+ let op := encdec_csrop_backwards _mappingpatterns_45_ in
+ let is_imm := bool_bits_backwards _mappingpatterns_44_ in
+ CSR
+ ((csr, rs1, rd, is_imm, op))
+ else if ((eq_vec v__7
+ (vec_of_bits [B1;B1;B1;B1;B1;B0;B1;B0;B1;B1;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1]
+ : mword 32))) then
+ STOP_FETCHING
+ (tt)
+ else if ((eq_vec v__7
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1]
+ : mword 32))) then
+ THREAD_START
+ (tt)
+ else ILLEGAL (v__7).
+
+Definition encdec_forwards_matches (arg_ : ast)
+: bool :=
+
+ match arg_ with
+ | UTYPE (imm,rd,op) => true
+ | RISCV_JAL (v__227,rd) =>
+ if ((eq_vec (subrange_vec_dec v__227 0 0) (vec_of_bits [B0] : mword (0 - 0 + 1)))) then true
+ else
+ let g__36 := RISCV_JAL ((v__227, rd)) in
+ false
+ | RISCV_JALR (imm,rs1,rd) => true
+ | BTYPE (v__229,rs2,rs1,op) =>
+ if ((eq_vec (subrange_vec_dec v__229 0 0) (vec_of_bits [B0] : mword (0 - 0 + 1)))) then true
+ else
+ let g__36 := BTYPE ((v__229, rs2, rs1, op)) in
+ false
+ | ITYPE (imm,rs1,rd,op) => true
+ | SHIFTIOP (shamt,rs1,rd,RISCV_SLLI) => true
+ | SHIFTIOP (shamt,rs1,rd,RISCV_SRLI) => true
+ | SHIFTIOP (shamt,rs1,rd,RISCV_SRAI) => true
+ | RTYPE (rs2,rs1,rd,RISCV_ADD) => true
+ | RTYPE (rs2,rs1,rd,RISCV_SUB) => true
+ | RTYPE (rs2,rs1,rd,RISCV_SLL) => true
+ | RTYPE (rs2,rs1,rd,RISCV_SLT) => true
+ | RTYPE (rs2,rs1,rd,RISCV_SLTU) => true
+ | RTYPE (rs2,rs1,rd,RISCV_XOR) => true
+ | RTYPE (rs2,rs1,rd,RISCV_SRL) => true
+ | RTYPE (rs2,rs1,rd,RISCV_SRA) => true
+ | RTYPE (rs2,rs1,rd,RISCV_OR) => true
+ | RTYPE (rs2,rs1,rd,RISCV_AND) => true
+ | LOAD (imm,rs1,rd,is_unsigned,size,false,false) =>
+ if ((orb (neq_vec (size_bits_forwards size) (vec_of_bits [B1;B1] : mword 2))
+ (negb is_unsigned))) then
+ true
+ else
+ let g__36 := LOAD ((imm, rs1, rd, is_unsigned, size, false, false)) in
+ false
+ | STORE (v__231,rs2,rs1,size,false,false) => true
+ | ADDIW (imm,rs1,rd) => true
+ | SHIFTW (shamt,rs1,rd,RISCV_SLLI) => true
+ | SHIFTW (shamt,rs1,rd,RISCV_SRLI) => true
+ | SHIFTW (shamt,rs1,rd,RISCV_SRAI) => true
+ | RTYPEW (rs2,rs1,rd,RISCV_ADDW) => true
+ | RTYPEW (rs2,rs1,rd,RISCV_SUBW) => true
+ | RTYPEW (rs2,rs1,rd,RISCV_SLLW) => true
+ | RTYPEW (rs2,rs1,rd,RISCV_SRLW) => true
+ | RTYPEW (rs2,rs1,rd,RISCV_SRAW) => true
+ | SHIFTIWOP (shamt,rs1,rd,RISCV_SLLIW) => true
+ | SHIFTIWOP (shamt,rs1,rd,RISCV_SRLIW) => true
+ | SHIFTIWOP (shamt,rs1,rd,RISCV_SRAIW) => true
+ | MUL (rs2,rs1,rd,high,signed1,signed2) => true
+ | DIV (rs2,rs1,rd,s) => true
+ | REM (rs2,rs1,rd,s) => true
+ | MULW (rs2,rs1,rd) => true
+ | DIVW (rs2,rs1,rd,s) => true
+ | REMW (rs2,rs1,rd,s) => true
+ | FENCE (pred,succ) => true
+ | FENCE_TSO (pred,succ) => true
+ | FENCEI (tt) => true
+ | ECALL (tt) => true
+ | MRET (tt) => true
+ | SRET (tt) => true
+ | EBREAK (tt) => true
+ | WFI (tt) => true
+ | SFENCE_VMA (rs1,rs2) => true
+ | LOADRES (aq,rl,rs1,size,rd) => true
+ | STORECON (aq,rl,rs2,rs1,size,rd) => true
+ | AMO (op,aq,rl,rs2,rs1,size,rd) => true
+ | CSR (csr,rs1,rd,is_imm,op) => true
+ | STOP_FETCHING (tt) => true
+ | THREAD_START (tt) => true
+ | ILLEGAL (s) => true
+ | g__36 => false
+ end.
+
+Definition encdec_backwards_matches (arg_ : mword 32)
+: bool :=
+
+ let v__232 := arg_ in
+ if ((let _mappingpatterns_0_ : mword 7 := subrange_vec_dec v__232 6 0 in
+ andb (encdec_uop_backwards_matches _mappingpatterns_0_)
+ (if ((encdec_uop_backwards_matches _mappingpatterns_0_)) then
+ let op := encdec_uop_backwards _mappingpatterns_0_ in
+ true
+ else false))) then
+ let _mappingpatterns_0_ : mword 7 := subrange_vec_dec v__232 6 0 in
+ let op := encdec_uop_backwards _mappingpatterns_0_ in
+ true
+ else if ((eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B1;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1)))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B1;B1;B0;B0;B1;B1;B1] : mword (6 - 0 + 1))))) then
+ true
+ else if ((andb
+ (let _mappingpatterns_1_ : mword 3 := subrange_vec_dec v__232 14 12 in
+ andb (encdec_bop_backwards_matches _mappingpatterns_1_)
+ (if ((encdec_bop_backwards_matches _mappingpatterns_1_)) then
+ let op := encdec_bop_backwards _mappingpatterns_1_ in
+ true
+ else false))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B1;B1;B0;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let _mappingpatterns_1_ : mword 3 := subrange_vec_dec v__232 14 12 in
+ let op := encdec_bop_backwards _mappingpatterns_1_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_2_ : mword 3 := subrange_vec_dec v__232 14 12 in
+ andb (encdec_iop_backwards_matches _mappingpatterns_2_)
+ (if ((encdec_iop_backwards_matches _mappingpatterns_2_)) then
+ let op := encdec_iop_backwards _mappingpatterns_2_ in
+ true
+ else false))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let _mappingpatterns_2_ : mword 3 := subrange_vec_dec v__232 14 12 in
+ let op := encdec_iop_backwards _mappingpatterns_2_ in
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 26)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 26)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0] : mword (31 - 26 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B1;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B1;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B1;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B1;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (let _mappingpatterns_4_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_3_ : mword 1 := subrange_vec_dec v__232 14 14 in
+ andb (size_bits_backwards_matches _mappingpatterns_4_)
+ (if ((size_bits_backwards_matches _mappingpatterns_4_)) then
+ let size := size_bits_backwards _mappingpatterns_4_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_3_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_3_)) then
+ let is_unsigned := bool_bits_backwards _mappingpatterns_3_ in
+ orb (neq_vec (size_bits_forwards size) (vec_of_bits [B1;B1] : mword 2))
+ (negb is_unsigned)
+ else false)
+ else false))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let _mappingpatterns_4_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_3_ : mword 1 := subrange_vec_dec v__232 14 14 in
+ let size := size_bits_backwards _mappingpatterns_4_ in
+ let is_unsigned := bool_bits_backwards _mappingpatterns_3_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_5_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ andb (size_bits_backwards_matches _mappingpatterns_5_)
+ (if ((size_bits_backwards_matches _mappingpatterns_5_)) then
+ let size := size_bits_backwards _mappingpatterns_5_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 14) (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B0;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let _mappingpatterns_5_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let size := size_bits_backwards _mappingpatterns_5_ in
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B1;B0;B0;B0;B0;B0] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B1;B0;B1] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B0;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (let _mappingpatterns_6_ : bits 3 := subrange_vec_dec v__232 14 12 in
+ andb (encdec_mul_op_backwards_matches _mappingpatterns_6_)
+ (if ((encdec_mul_op_backwards_matches _mappingpatterns_6_)) then
+ let '(high, signed1, signed2) := encdec_mul_op_backwards _mappingpatterns_6_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ let _mappingpatterns_6_ : bits 3 := subrange_vec_dec v__232 14 12 in
+ let '(high, signed1, signed2) := encdec_mul_op_backwards _mappingpatterns_6_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_7_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_7_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_7_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_7_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 13)
+ (vec_of_bits [B1;B0] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let _mappingpatterns_7_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_7_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_8_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_8_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_8_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_8_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 13)
+ (vec_of_bits [B1;B1] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let _mappingpatterns_8_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_8_ in
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 12)
+ (vec_of_bits [B0;B0;B0] : mword (14 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (let _mappingpatterns_9_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_9_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_9_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_9_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 13)
+ (vec_of_bits [B1;B0] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let _mappingpatterns_9_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_9_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_10_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ andb (bool_not_bits_backwards_matches _mappingpatterns_10_)
+ (if ((bool_not_bits_backwards_matches _mappingpatterns_10_)) then
+ let s := bool_not_bits_backwards _mappingpatterns_10_ in
+ true
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B1] : mword (31 - 25 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 13)
+ (vec_of_bits [B1;B1] : mword (14 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B1;B1;B0;B1;B1] : mword (6 - 0 + 1))))))) then
+ let _mappingpatterns_10_ : mword 1 := subrange_vec_dec v__232 12 12 in
+ let s := bool_not_bits_backwards _mappingpatterns_10_ in
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 28)
+ (vec_of_bits [B0;B0;B0;B0] : mword (31 - 28 + 1)))
+ (eq_vec (subrange_vec_dec v__232 19 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1]
+ : mword (19 - 0 + 1))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 28)
+ (vec_of_bits [B1;B0;B0;B0] : mword (31 - 28 + 1)))
+ (eq_vec (subrange_vec_dec v__232 19 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1]
+ : mword (19 - 0 + 1))))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B1]
+ : mword 32))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B0;B0;B1;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B0;B0;B0;B1;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1]
+ : mword 32))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__232 31 25)
+ (vec_of_bits [B0;B0;B0;B1;B0;B0;B1] : mword (31 - 25 + 1)))
+ (eq_vec (subrange_vec_dec v__232 14 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B1;B1;B1;B0;B0;B1;B1] : mword (14 - 0 + 1)))))
+ then
+ true
+ else if sumbool_of_bool ((andb
+ (let _mappingpatterns_13_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_12_ : mword 1 := subrange_vec_dec v__232 25 25 in
+ let _mappingpatterns_11_ : mword 1 := subrange_vec_dec v__232 26 26 in
+ andb (size_bits_backwards_matches _mappingpatterns_13_)
+ (if ((size_bits_backwards_matches _mappingpatterns_13_)) then
+ let size := size_bits_backwards _mappingpatterns_13_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_12_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_12_)) then
+ let rl := bool_bits_backwards _mappingpatterns_12_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_11_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_11_))
+ then
+ let aq := bool_bits_backwards _mappingpatterns_11_ in
+ true
+ else false)
+ else false)
+ else false))
+ (andb
+ (Z.eqb (projT1 (regbits_to_regno (subrange_vec_dec v__232 31 27)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))))
+ (andb
+ (Z.eqb
+ (projT1 (regbits_to_regno (subrange_vec_dec v__232 24 20)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B0;B0] : mword 5))))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 14)
+ (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1))))))))
+ then
+ let _mappingpatterns_13_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_12_ : mword 1 := subrange_vec_dec v__232 25 25 in
+ let _mappingpatterns_11_ : mword 1 := subrange_vec_dec v__232 26 26 in
+ let size := size_bits_backwards _mappingpatterns_13_ in
+ let rl := bool_bits_backwards _mappingpatterns_12_ in
+ let aq := bool_bits_backwards _mappingpatterns_11_ in
+ true
+ else if sumbool_of_bool ((andb
+ (let _mappingpatterns_16_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_15_ : mword 1 := subrange_vec_dec v__232 25 25 in
+ let _mappingpatterns_14_ : mword 1 := subrange_vec_dec v__232 26 26 in
+ andb (size_bits_backwards_matches _mappingpatterns_16_)
+ (if ((size_bits_backwards_matches _mappingpatterns_16_)) then
+ let size := size_bits_backwards _mappingpatterns_16_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_15_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_15_)) then
+ let rl := bool_bits_backwards _mappingpatterns_15_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_14_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_14_))
+ then
+ let aq := bool_bits_backwards _mappingpatterns_14_ in
+ true
+ else false)
+ else false)
+ else false))
+ (andb
+ (Z.eqb (projT1 (regbits_to_regno (subrange_vec_dec v__232 31 27)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B1;B1] : mword 5))))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 14)
+ (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1)))))))
+ then
+ let _mappingpatterns_16_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_15_ : mword 1 := subrange_vec_dec v__232 25 25 in
+ let _mappingpatterns_14_ : mword 1 := subrange_vec_dec v__232 26 26 in
+ let size := size_bits_backwards _mappingpatterns_16_ in
+ let rl := bool_bits_backwards _mappingpatterns_15_ in
+ let aq := bool_bits_backwards _mappingpatterns_14_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_17_ : mword 5 := subrange_vec_dec v__232 31 27 in
+ let _mappingpatterns_20_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_19_ : mword 1 := subrange_vec_dec v__232 25 25 in
+ let _mappingpatterns_18_ : mword 1 := subrange_vec_dec v__232 26 26 in
+ let _mappingpatterns_17_ : mword 5 := subrange_vec_dec v__232 31 27 in
+ andb (size_bits_backwards_matches _mappingpatterns_20_)
+ (if ((size_bits_backwards_matches _mappingpatterns_20_)) then
+ let size := size_bits_backwards _mappingpatterns_20_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_19_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_19_)) then
+ let rl := bool_bits_backwards _mappingpatterns_19_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_18_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_18_)) then
+ let aq := bool_bits_backwards _mappingpatterns_18_ in
+ andb (encdec_amoop_backwards_matches _mappingpatterns_17_)
+ (if ((encdec_amoop_backwards_matches _mappingpatterns_17_)) then
+ let op := encdec_amoop_backwards _mappingpatterns_17_ in
+ true
+ else false)
+ else false)
+ else false)
+ else false))
+ (andb
+ (eq_vec (subrange_vec_dec v__232 14 14) (vec_of_bits [B0] : mword (14 - 14 + 1)))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B0;B1;B0;B1;B1;B1;B1] : mword (6 - 0 + 1)))))) then
+ let _mappingpatterns_17_ : mword 5 := subrange_vec_dec v__232 31 27 in
+ let _mappingpatterns_20_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_19_ : mword 1 := subrange_vec_dec v__232 25 25 in
+ let _mappingpatterns_18_ : mword 1 := subrange_vec_dec v__232 26 26 in
+ let _mappingpatterns_17_ : mword 5 := subrange_vec_dec v__232 31 27 in
+ let size := size_bits_backwards _mappingpatterns_20_ in
+ let rl := bool_bits_backwards _mappingpatterns_19_ in
+ let aq := bool_bits_backwards _mappingpatterns_18_ in
+ let op := encdec_amoop_backwards _mappingpatterns_17_ in
+ true
+ else if ((andb
+ (let _mappingpatterns_22_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_21_ : mword 1 := subrange_vec_dec v__232 14 14 in
+ andb (encdec_csrop_backwards_matches _mappingpatterns_22_)
+ (if ((encdec_csrop_backwards_matches _mappingpatterns_22_)) then
+ let op := encdec_csrop_backwards _mappingpatterns_22_ in
+ andb (bool_bits_backwards_matches _mappingpatterns_21_)
+ (if ((bool_bits_backwards_matches _mappingpatterns_21_)) then
+ let is_imm := bool_bits_backwards _mappingpatterns_21_ in
+ true
+ else false)
+ else false))
+ (eq_vec (subrange_vec_dec v__232 6 0)
+ (vec_of_bits [B1;B1;B1;B0;B0;B1;B1] : mword (6 - 0 + 1))))) then
+ let _mappingpatterns_22_ : mword 2 := subrange_vec_dec v__232 13 12 in
+ let _mappingpatterns_21_ : mword 1 := subrange_vec_dec v__232 14 14 in
+ let op := encdec_csrop_backwards _mappingpatterns_22_ in
+ let is_imm := bool_bits_backwards _mappingpatterns_21_ in
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B1;B1;B1;B1;B1;B0;B1;B0;B1;B1;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1]
+ : mword 32))) then
+ true
+ else if ((eq_vec v__232
+ (vec_of_bits [B1;B1;B0;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1;B1;B1;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B1;B0;B1;B1]
+ : mword 32))) then
+ true
+ else true.
+
+Definition encdec_compressed_forwards (arg_ : ast)
+: M (mword 16) :=
+
+ (match arg_ with
+ | C_NOP (tt) =>
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B0;B1] : mword 2)))))
+ : mword (3 + (1 + (5 + (5 + 2)))))
+ | C_ADDI4SPN (rd,v__452) =>
+ let nz96 : bits 4 := subrange_vec_dec v__452 7 4 in
+ let nz96 : bits 4 := subrange_vec_dec v__452 7 4 in
+ let nz54 : bits 2 := subrange_vec_dec v__452 3 2 in
+ let nz3 : bits 1 := subrange_vec_dec v__452 1 1 in
+ let nz2 : bits 1 := subrange_vec_dec v__452 0 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (nz54 : bits 2)
+ (concat_vec (nz96 : bits 4)
+ (concat_vec (nz2 : bits 1)
+ (concat_vec (nz3 : bits 1)
+ (concat_vec (rd : cregbits) (vec_of_bits [B0;B0] : mword 2)))))))
+ : mword 16)
+ | C_LW (v__453,rs1,rd) =>
+ let ui6 : bits 1 := subrange_vec_dec v__453 4 4 in
+ let ui6 : bits 1 := subrange_vec_dec v__453 4 4 in
+ let ui53 : bits 3 := subrange_vec_dec v__453 3 1 in
+ let ui2 : bits 1 := subrange_vec_dec v__453 0 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0] : mword 3)
+ (concat_vec (ui53 : bits 3)
+ (concat_vec (rs1 : cregbits)
+ (concat_vec (ui2 : bits 1)
+ (concat_vec (ui6 : bits 1)
+ (concat_vec (rd : cregbits) (vec_of_bits [B0;B0] : mword 2)))))))
+ : mword 16)
+ | C_LD (v__454,rs1,rd) =>
+ let ui76 : bits 2 := subrange_vec_dec v__454 4 3 in
+ let ui76 : bits 2 := subrange_vec_dec v__454 4 3 in
+ let ui53 : bits 3 := subrange_vec_dec v__454 2 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B1] : mword 3)
+ (concat_vec (ui53 : bits 3)
+ (concat_vec (rs1 : cregbits)
+ (concat_vec (ui76 : bits 2)
+ (concat_vec (rd : cregbits) (vec_of_bits [B0;B0] : mword 2))))))
+ : mword 16)
+ | C_SW (v__455,rs1,rs2) =>
+ let ui6 : bits 1 := subrange_vec_dec v__455 4 4 in
+ let ui6 : bits 1 := subrange_vec_dec v__455 4 4 in
+ let ui53 : bits 3 := subrange_vec_dec v__455 3 1 in
+ let ui2 : bits 1 := subrange_vec_dec v__455 0 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B1;B0] : mword 3)
+ (concat_vec (ui53 : bits 3)
+ (concat_vec (rs1 : cregbits)
+ (concat_vec (ui2 : bits 1)
+ (concat_vec (ui6 : bits 1)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B0] : mword 2)))))))
+ : mword 16)
+ | C_SD (v__456,rs1,rs2) =>
+ let ui76 : bits 2 := subrange_vec_dec v__456 4 3 in
+ let ui76 : bits 2 := subrange_vec_dec v__456 4 3 in
+ let ui53 : bits 3 := subrange_vec_dec v__456 2 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B1;B1] : mword 3)
+ (concat_vec (ui53 : bits 3)
+ (concat_vec (rs1 : bits 3)
+ (concat_vec (ui76 : bits 2)
+ (concat_vec (rs2 : bits 3) (vec_of_bits [B0;B0] : mword 2))))))
+ : mword 16)
+ | C_ADDI (v__457,rsd) =>
+ let nzi5 : bits 1 := subrange_vec_dec v__457 5 5 in
+ let nzi5 : bits 1 := subrange_vec_dec v__457 5 5 in
+ let nzi40 : bits 5 := subrange_vec_dec v__457 4 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (nzi5 : bits 1)
+ (concat_vec (rsd : regbits)
+ (concat_vec (nzi40 : bits 5) (vec_of_bits [B0;B1] : mword 2)))))
+ : mword 16)
+ | C_ADDIW (v__458,rsd) =>
+ let imm5 : bits 1 := subrange_vec_dec v__458 5 5 in
+ let imm5 : bits 1 := subrange_vec_dec v__458 5 5 in
+ let imm40 : bits 5 := subrange_vec_dec v__458 4 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B0;B1] : mword 3)
+ (concat_vec (imm5 : bits 1)
+ (concat_vec (rsd : regbits)
+ (concat_vec (imm40 : bits 5) (vec_of_bits [B0;B1] : mword 2)))))
+ : mword 16)
+ | C_LI (v__459,rd) =>
+ let imm5 : bits 1 := subrange_vec_dec v__459 5 5 in
+ let imm5 : bits 1 := subrange_vec_dec v__459 5 5 in
+ let imm40 : bits 5 := subrange_vec_dec v__459 4 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0] : mword 3)
+ (concat_vec (imm5 : bits 1)
+ (concat_vec (rd : regbits)
+ (concat_vec (imm40 : bits 5) (vec_of_bits [B0;B1] : mword 2)))))
+ : mword 16)
+ | C_ADDI16SP (v__460) =>
+ let nzi9 : bits 1 := subrange_vec_dec v__460 5 5 in
+ let nzi9 : bits 1 := subrange_vec_dec v__460 5 5 in
+ let nzi87 : bits 2 := subrange_vec_dec v__460 4 3 in
+ let nzi6 : bits 1 := subrange_vec_dec v__460 2 2 in
+ let nzi5 : bits 1 := subrange_vec_dec v__460 1 1 in
+ let nzi4 : bits 1 := subrange_vec_dec v__460 0 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B1] : mword 3)
+ (concat_vec (nzi9 : bits 1)
+ (concat_vec (vec_of_bits [B0;B0;B0;B1;B0] : mword 5)
+ (concat_vec (nzi4 : bits 1)
+ (concat_vec (nzi6 : bits 1)
+ (concat_vec (nzi87 : bits 2)
+ (concat_vec (nzi5 : bits 1) (vec_of_bits [B0;B1] : mword 2))))))))
+ : mword 16)
+ | C_LUI (v__461,rd) =>
+ let imm17 : bits 1 := subrange_vec_dec v__461 5 5 in
+ let imm17 : bits 1 := subrange_vec_dec v__461 5 5 in
+ let imm1612 : bits 5 := subrange_vec_dec v__461 4 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B1] : mword 3)
+ (concat_vec (imm17 : bits 1)
+ (concat_vec (rd : regbits)
+ (concat_vec (imm1612 : bits 5) (vec_of_bits [B0;B1] : mword 2)))))
+ : mword 16)
+ | C_SRLI (v__462,rsd) =>
+ let nzui5 : bits 1 := subrange_vec_dec v__462 5 5 in
+ let nzui5 : bits 1 := subrange_vec_dec v__462 5 5 in
+ let nzui40 : bits 5 := subrange_vec_dec v__462 4 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (nzui5 : bits 1)
+ (concat_vec (vec_of_bits [B0;B0] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (nzui40 : bits 5) (vec_of_bits [B0;B1] : mword 2))))))
+ : mword 16)
+ | C_SRAI (v__463,rsd) =>
+ let nzui5 : bits 1 := subrange_vec_dec v__463 5 5 in
+ let nzui5 : bits 1 := subrange_vec_dec v__463 5 5 in
+ let nzui40 : bits 5 := subrange_vec_dec v__463 4 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (nzui5 : bits 1)
+ (concat_vec (vec_of_bits [B0;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (nzui40 : bits 5) (vec_of_bits [B0;B1] : mword 2))))))
+ : mword 16)
+ | C_ANDI (v__464,rsd) =>
+ let i5 : bits 1 := subrange_vec_dec v__464 5 5 in
+ let i5 : bits 1 := subrange_vec_dec v__464 5 5 in
+ let i40 : bits 5 := subrange_vec_dec v__464 4 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (i5 : bits 1)
+ (concat_vec (vec_of_bits [B1;B0] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (i40 : bits 5) (vec_of_bits [B0;B1] : mword 2))))))
+ : mword 16)
+ | C_SUB (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (vec_of_bits [B0;B0] : mword 2)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B1] : mword 2)))))))
+ : mword (3 + (1 + (2 + (3 + (2 + (3 + 2)))))))
+ | C_XOR (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (vec_of_bits [B0;B1] : mword 2)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B1] : mword 2)))))))
+ : mword (3 + (1 + (2 + (3 + (2 + (3 + 2)))))))
+ | C_OR (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (vec_of_bits [B1;B0] : mword 2)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B1] : mword 2)))))))
+ : mword (3 + (1 + (2 + (3 + (2 + (3 + 2)))))))
+ | C_AND (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B1] : mword 2)))))))
+ : mword (3 + (1 + (2 + (3 + (2 + (3 + 2)))))))
+ | C_SUBW (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (vec_of_bits [B0;B0] : mword 2)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B1] : mword 2)))))))
+ : mword (3 + (1 + (2 + (3 + (2 + (3 + 2)))))))
+ | C_ADDW (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B1;B1] : mword 2)
+ (concat_vec (rsd : cregbits)
+ (concat_vec (vec_of_bits [B0;B1] : mword 2)
+ (concat_vec (rs2 : cregbits) (vec_of_bits [B0;B1] : mword 2)))))))
+ : mword (3 + (1 + (2 + (3 + (2 + (3 + 2)))))))
+ | C_J (v__465) =>
+ let i11 : bits 1 := subrange_vec_dec v__465 10 10 in
+ let i98 : bits 2 := subrange_vec_dec v__465 8 7 in
+ let i7 : bits 1 := subrange_vec_dec v__465 6 6 in
+ let i6 : bits 1 := subrange_vec_dec v__465 5 5 in
+ let i5 : bits 1 := subrange_vec_dec v__465 4 4 in
+ let i4 : bits 1 := subrange_vec_dec v__465 3 3 in
+ let i31 : bits 3 := subrange_vec_dec v__465 2 0 in
+ let i11 : bits 1 := subrange_vec_dec v__465 10 10 in
+ let i10 : bits 1 := subrange_vec_dec v__465 9 9 in
+ returnm ((concat_vec (vec_of_bits [B1;B0;B1] : mword 3)
+ (concat_vec (i11 : bits 1)
+ (concat_vec (i4 : bits 1)
+ (concat_vec (i98 : bits 2)
+ (concat_vec (i10 : bits 1)
+ (concat_vec (i6 : bits 1)
+ (concat_vec (i7 : bits 1)
+ (concat_vec (i31 : bits 3)
+ (concat_vec (i5 : bits 1) (vec_of_bits [B0;B1] : mword 2))))))))))
+ : mword 16)
+ | C_BEQZ (v__466,rs) =>
+ let i8 : bits 1 := subrange_vec_dec v__466 7 7 in
+ let i8 : bits 1 := subrange_vec_dec v__466 7 7 in
+ let i76 : bits 2 := subrange_vec_dec v__466 6 5 in
+ let i5 : bits 1 := subrange_vec_dec v__466 4 4 in
+ let i43 : bits 2 := subrange_vec_dec v__466 3 2 in
+ let i21 : bits 2 := subrange_vec_dec v__466 1 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B1;B0] : mword 3)
+ (concat_vec (i8 : bits 1)
+ (concat_vec (i43 : bits 2)
+ (concat_vec (rs : cregbits)
+ (concat_vec (i76 : bits 2)
+ (concat_vec (i21 : bits 2)
+ (concat_vec (i5 : bits 1) (vec_of_bits [B0;B1] : mword 2))))))))
+ : mword 16)
+ | C_BNEZ (v__467,rs) =>
+ let i8 : bits 1 := subrange_vec_dec v__467 7 7 in
+ let i8 : bits 1 := subrange_vec_dec v__467 7 7 in
+ let i76 : bits 2 := subrange_vec_dec v__467 6 5 in
+ let i5 : bits 1 := subrange_vec_dec v__467 4 4 in
+ let i43 : bits 2 := subrange_vec_dec v__467 3 2 in
+ let i21 : bits 2 := subrange_vec_dec v__467 1 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B1;B1] : mword 3)
+ (concat_vec (i8 : bits 1)
+ (concat_vec (i43 : bits 2)
+ (concat_vec (rs : cregbits)
+ (concat_vec (i76 : bits 2)
+ (concat_vec (i21 : bits 2)
+ (concat_vec (i5 : bits 1) (vec_of_bits [B0;B1] : mword 2))))))))
+ : mword 16)
+ | C_SLLI (v__468,rsd) =>
+ let nzui5 : bits 1 := subrange_vec_dec v__468 5 5 in
+ let nzui5 : bits 1 := subrange_vec_dec v__468 5 5 in
+ let nzui40 : bits 5 := subrange_vec_dec v__468 4 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B0;B0] : mword 3)
+ (concat_vec (nzui5 : bits 1)
+ (concat_vec (rsd : regbits)
+ (concat_vec (nzui40 : bits 5) (vec_of_bits [B1;B0] : mword 2)))))
+ : mword 16)
+ | C_LWSP (v__469,rd) =>
+ let ui76 : bits 2 := subrange_vec_dec v__469 5 4 in
+ let ui76 : bits 2 := subrange_vec_dec v__469 5 4 in
+ let ui5 : bits 1 := subrange_vec_dec v__469 3 3 in
+ let ui42 : bits 3 := subrange_vec_dec v__469 2 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B0] : mword 3)
+ (concat_vec (ui5 : bits 1)
+ (concat_vec (rd : regbits)
+ (concat_vec (ui42 : bits 3)
+ (concat_vec (ui76 : bits 2) (vec_of_bits [B1;B0] : mword 2))))))
+ : mword 16)
+ | C_LDSP (v__470,rd) =>
+ let ui86 : bits 3 := subrange_vec_dec v__470 5 3 in
+ let ui86 : bits 3 := subrange_vec_dec v__470 5 3 in
+ let ui5 : bits 1 := subrange_vec_dec v__470 2 2 in
+ let ui43 : bits 2 := subrange_vec_dec v__470 1 0 in
+ returnm ((concat_vec (vec_of_bits [B0;B1;B1] : mword 3)
+ (concat_vec (ui5 : bits 1)
+ (concat_vec (rd : regbits)
+ (concat_vec (ui43 : bits 2)
+ (concat_vec (ui86 : bits 3) (vec_of_bits [B1;B0] : mword 2))))))
+ : mword 16)
+ | C_SWSP (v__471,rs2) =>
+ let ui76 : bits 2 := subrange_vec_dec v__471 5 4 in
+ let ui76 : bits 2 := subrange_vec_dec v__471 5 4 in
+ let ui52 : bits 4 := subrange_vec_dec v__471 3 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B1;B0] : mword 3)
+ (concat_vec (ui52 : bits 4)
+ (concat_vec (ui76 : bits 2)
+ (concat_vec (rs2 : regbits) (vec_of_bits [B1;B0] : mword 2)))))
+ : mword 16)
+ | C_SDSP (v__472,rs2) =>
+ let ui86 : bits 3 := subrange_vec_dec v__472 5 3 in
+ let ui86 : bits 3 := subrange_vec_dec v__472 5 3 in
+ let ui53 : bits 3 := subrange_vec_dec v__472 2 0 in
+ returnm ((concat_vec (vec_of_bits [B1;B1;B1] : mword 3)
+ (concat_vec (ui53 : bits 3)
+ (concat_vec (ui86 : bits 3)
+ (concat_vec (rs2 : regbits) (vec_of_bits [B1;B0] : mword 2)))))
+ : mword 16)
+ | C_JR (rs1) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (rs1 : regbits)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B0] : mword 2)))))
+ : mword (3 + (1 + (5 + (5 + 2)))))
+ | C_JALR (rs1) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (rs1 : regbits)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B0] : mword 2)))))
+ : mword (3 + (1 + (5 + (5 + 2)))))
+ | C_MV (rd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B0] : mword 1)
+ (concat_vec (rd : regbits)
+ (concat_vec (rs2 : regbits) (vec_of_bits [B1;B0] : mword 2)))))
+ : mword (3 + (1 + (5 + (5 + 2)))))
+ | C_EBREAK (tt) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (concat_vec (vec_of_bits [B0;B0;B0;B0;B0] : mword 5)
+ (vec_of_bits [B1;B0] : mword 2)))))
+ : mword (3 + (1 + (5 + (5 + 2)))))
+ | C_ADD (rsd,rs2) =>
+ returnm ((concat_vec (vec_of_bits [B1;B0;B0] : mword 3)
+ (concat_vec (vec_of_bits [B1] : mword 1)
+ (concat_vec (rsd : regbits)
+ (concat_vec (rs2 : regbits) (vec_of_bits [B1;B0] : mword 2)))))
+ : mword (3 + (1 + (5 + (5 + 2)))))
+ | C_ILLEGAL (s) => returnm (s : mword 16)
+ | _ => exit tt : M (mword 16)
+ end)
+ : M (mword 16).
+
+Definition encdec_compressed_backwards (arg_ : mword 16)
+: ast :=
+
+ let v__473 := arg_ in
+ if ((eq_vec v__473 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 16)))
+ then
+ C_NOP
+ (tt)
+ else if ((andb
+ (let nz96 : bits 4 := subrange_vec_dec v__473 10 7 in
+ let nz54 : bits 2 := subrange_vec_dec v__473 12 11 in
+ let nz3 : bits 1 := subrange_vec_dec v__473 5 5 in
+ let nz2 : bits 1 := subrange_vec_dec v__473 6 6 in
+ neq_vec (concat_vec nz96 (concat_vec nz54 (concat_vec nz3 nz2)))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (4 + (2 + (1 + 1)))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B0;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))))
+ then
+ let rd : cregbits := subrange_vec_dec v__473 4 2 in
+ let nz96 : bits 4 := subrange_vec_dec v__473 10 7 in
+ let nz54 : bits 2 := subrange_vec_dec v__473 12 11 in
+ let nz3 : bits 1 := subrange_vec_dec v__473 5 5 in
+ let nz2 : bits 1 := subrange_vec_dec v__473 6 6 in
+ C_ADDI4SPN
+ ((rd, concat_vec (nz96 : bits 4)
+ (concat_vec (nz54 : bits 2) (concat_vec (nz3 : bits 1) (nz2 : bits 1)))))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ let ui6 : bits 1 := subrange_vec_dec v__473 5 5 in
+ let ui53 : bits 3 := subrange_vec_dec v__473 12 10 in
+ let ui2 : bits 1 := subrange_vec_dec v__473 6 6 in
+ let rs1 : cregbits := subrange_vec_dec v__473 9 7 in
+ let rd : cregbits := subrange_vec_dec v__473 4 2 in
+ C_LW
+ ((concat_vec (ui6 : bits 1) (concat_vec (ui53 : bits 3) (ui2 : bits 1)), rs1, rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ let ui76 : bits 2 := subrange_vec_dec v__473 6 5 in
+ let ui53 : bits 3 := subrange_vec_dec v__473 12 10 in
+ let rs1 : cregbits := subrange_vec_dec v__473 9 7 in
+ let rd : cregbits := subrange_vec_dec v__473 4 2 in
+ C_LD
+ ((concat_vec (ui76 : bits 2) (ui53 : bits 3), rs1, rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ let ui6 : bits 1 := subrange_vec_dec v__473 5 5 in
+ let ui53 : bits 3 := subrange_vec_dec v__473 12 10 in
+ let ui2 : bits 1 := subrange_vec_dec v__473 6 6 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ let rs1 : cregbits := subrange_vec_dec v__473 9 7 in
+ C_SW
+ ((concat_vec (ui6 : bits 1) (concat_vec (ui53 : bits 3) (ui2 : bits 1)), rs1, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ let ui76 : bits 2 := subrange_vec_dec v__473 6 5 in
+ let ui53 : bits 3 := subrange_vec_dec v__473 12 10 in
+ let rs2 : bits 3 := subrange_vec_dec v__473 4 2 in
+ let rs1 : bits 3 := subrange_vec_dec v__473 9 7 in
+ C_SD
+ ((concat_vec (ui76 : bits 2) (ui53 : bits 3), rs1, rs2))
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let nzi5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzi40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ andb
+ (neq_vec (concat_vec nzi5 nzi40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B0;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let nzi5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzi40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_ADDI
+ ((concat_vec (nzi5 : bits 1) (nzi40 : bits 5), rsd))
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B0;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let imm5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let imm40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_ADDIW
+ ((concat_vec (imm5 : bits 1) (imm40 : bits 5), rsd))
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__473 11 7 in
+ neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rd : regbits := subrange_vec_dec v__473 11 7 in
+ let imm5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let imm40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_LI
+ ((concat_vec (imm5 : bits 1) (imm40 : bits 5), rd))
+ else if sumbool_of_bool ((andb
+ (let nzi9 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzi87 : bits 2 := subrange_vec_dec v__473 4 3 in
+ let nzi6 : bits 1 := subrange_vec_dec v__473 5 5 in
+ let nzi5 : bits 1 := subrange_vec_dec v__473 2 2 in
+ let nzi4 : bits 1 := subrange_vec_dec v__473 6 6 in
+ neq_vec
+ (concat_vec nzi9
+ (concat_vec nzi87 (concat_vec nzi6 (concat_vec nzi5 nzi4))))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + (2 + (1 + (1 + 1))))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (andb
+ (Z.eqb
+ (projT1 (regbits_to_regno (subrange_vec_dec v__473 11 7)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))))
+ (eq_vec (subrange_vec_dec v__473 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))) then
+ let nzi9 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzi87 : bits 2 := subrange_vec_dec v__473 4 3 in
+ let nzi6 : bits 1 := subrange_vec_dec v__473 5 5 in
+ let nzi5 : bits 1 := subrange_vec_dec v__473 2 2 in
+ let nzi4 : bits 1 := subrange_vec_dec v__473 6 6 in
+ C_ADDI16SP
+ (concat_vec (nzi9 : bits 1)
+ (concat_vec (nzi87 : bits 2)
+ (concat_vec (nzi6 : bits 1) (concat_vec (nzi5 : bits 1) (nzi4 : bits 1)))))
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__473 11 7 in
+ let imm17 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let imm1612 : bits 5 := subrange_vec_dec v__473 6 2 in
+ andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno sp)))
+ (neq_vec (concat_vec imm17 imm1612)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rd : regbits := subrange_vec_dec v__473 11 7 in
+ let imm17 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let imm1612 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_LUI
+ ((concat_vec (imm17 : bits 1) (imm1612 : bits 5), rd))
+ else if ((andb
+ (let nzui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B0;B0] : mword (15 - 13 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 11 10)
+ (vec_of_bits [B0;B0] : mword (11 - 10 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))) then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let nzui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_SRLI
+ ((concat_vec (nzui5 : bits 1) (nzui40 : bits 5), rsd))
+ else if ((andb
+ (let nzui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B0;B0] : mword (15 - 13 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 11 10)
+ (vec_of_bits [B0;B1] : mword (11 - 10 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))) then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let nzui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_SRAI
+ ((concat_vec (nzui5 : bits 1) (nzui40 : bits 5), rsd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B0;B0] : mword (15 - 13 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 11 10)
+ (vec_of_bits [B1;B0] : mword (11 - 10 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let i5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let i40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_ANDI
+ ((concat_vec (i5 : bits 1) (i40 : bits 5), rsd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 6 5) (vec_of_bits [B0;B0] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ C_SUB
+ ((rsd, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 6 5) (vec_of_bits [B0;B1] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ C_XOR
+ ((rsd, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 6 5) (vec_of_bits [B1;B0] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ C_OR
+ ((rsd, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 6 5) (vec_of_bits [B1;B1] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ C_AND
+ ((rsd, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 10)
+ (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 6 5) (vec_of_bits [B0;B0] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ C_SUBW
+ ((rsd, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 10)
+ (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 6 5) (vec_of_bits [B0;B1] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ let rsd : cregbits := subrange_vec_dec v__473 9 7 in
+ let rs2 : cregbits := subrange_vec_dec v__473 4 2 in
+ C_ADDW
+ ((rsd, rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B0;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ let i98 : bits 2 := subrange_vec_dec v__473 10 9 in
+ let i7 : bits 1 := subrange_vec_dec v__473 6 6 in
+ let i6 : bits 1 := subrange_vec_dec v__473 7 7 in
+ let i5 : bits 1 := subrange_vec_dec v__473 2 2 in
+ let i4 : bits 1 := subrange_vec_dec v__473 11 11 in
+ let i31 : bits 3 := subrange_vec_dec v__473 5 3 in
+ let i11 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let i10 : bits 1 := subrange_vec_dec v__473 8 8 in
+ C_J
+ (concat_vec (i11 : bits 1)
+ (concat_vec (i10 : bits 1)
+ (concat_vec (i98 : bits 2)
+ (concat_vec (i7 : bits 1)
+ (concat_vec (i6 : bits 1)
+ (concat_vec (i5 : bits 1) (concat_vec (i4 : bits 1) (i31 : bits 3))))))))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ let rs : cregbits := subrange_vec_dec v__473 9 7 in
+ let i8 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let i76 : bits 2 := subrange_vec_dec v__473 6 5 in
+ let i5 : bits 1 := subrange_vec_dec v__473 2 2 in
+ let i43 : bits 2 := subrange_vec_dec v__473 11 10 in
+ let i21 : bits 2 := subrange_vec_dec v__473 4 3 in
+ C_BEQZ
+ ((concat_vec (i8 : bits 1)
+ (concat_vec (i76 : bits 2)
+ (concat_vec (i5 : bits 1) (concat_vec (i43 : bits 2) (i21 : bits 2)))), rs))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ let rs : cregbits := subrange_vec_dec v__473 9 7 in
+ let i8 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let i76 : bits 2 := subrange_vec_dec v__473 6 5 in
+ let i5 : bits 1 := subrange_vec_dec v__473 2 2 in
+ let i43 : bits 2 := subrange_vec_dec v__473 11 10 in
+ let i21 : bits 2 := subrange_vec_dec v__473 4 3 in
+ C_BNEZ
+ ((concat_vec (i8 : bits 1)
+ (concat_vec (i76 : bits 2)
+ (concat_vec (i5 : bits 1) (concat_vec (i43 : bits 2) (i21 : bits 2)))), rs))
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let nzui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ andb
+ (neq_vec (concat_vec nzui5 nzui40)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B0;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let nzui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__473 6 2 in
+ C_SLLI
+ ((concat_vec (nzui5 : bits 1) (nzui40 : bits 5), rsd))
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__473 11 7 in
+ neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ let ui76 : bits 2 := subrange_vec_dec v__473 3 2 in
+ let ui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let ui42 : bits 3 := subrange_vec_dec v__473 6 4 in
+ let rd : regbits := subrange_vec_dec v__473 11 7 in
+ C_LWSP
+ ((concat_vec (ui76 : bits 2) (concat_vec (ui5 : bits 1) (ui42 : bits 3)), rd))
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__473 11 7 in
+ neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ let ui86 : bits 3 := subrange_vec_dec v__473 4 2 in
+ let ui5 : bits 1 := subrange_vec_dec v__473 12 12 in
+ let ui43 : bits 2 := subrange_vec_dec v__473 6 5 in
+ let rd : regbits := subrange_vec_dec v__473 11 7 in
+ C_LDSP
+ ((concat_vec (ui86 : bits 3) (concat_vec (ui5 : bits 1) (ui43 : bits 2)), rd))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ let ui76 : bits 2 := subrange_vec_dec v__473 8 7 in
+ let ui52 : bits 4 := subrange_vec_dec v__473 12 9 in
+ let rs2 : regbits := subrange_vec_dec v__473 6 2 in
+ C_SWSP
+ ((concat_vec (ui76 : bits 2) (ui52 : bits 4), rs2))
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__473 15 13)
+ (vec_of_bits [B1;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ let ui86 : bits 3 := subrange_vec_dec v__473 9 7 in
+ let ui53 : bits 3 := subrange_vec_dec v__473 12 10 in
+ let rs2 : regbits := subrange_vec_dec v__473 6 2 in
+ C_SDSP
+ ((concat_vec (ui86 : bits 3) (ui53 : bits 3), rs2))
+ else if ((andb
+ (let rs1 : regbits := subrange_vec_dec v__473 11 7 in
+ neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 12)
+ (vec_of_bits [B1;B0;B0;B0] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__473 6 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0] : mword (6 - 0 + 1)))))) then
+ let rs1 : regbits := subrange_vec_dec v__473 11 7 in
+ C_JR
+ (rs1)
+ else if ((andb
+ (let rs1 : regbits := subrange_vec_dec v__473 11 7 in
+ neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 12)
+ (vec_of_bits [B1;B0;B0;B1] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__473 6 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0] : mword (6 - 0 + 1)))))) then
+ let rs1 : regbits := subrange_vec_dec v__473 11 7 in
+ C_JALR
+ (rs1)
+ else if ((andb
+ (let rs2 : regbits := subrange_vec_dec v__473 6 2 in
+ let rd : regbits := subrange_vec_dec v__473 11 7 in
+ andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 12)
+ (vec_of_bits [B1;B0;B0;B0] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ let rs2 : regbits := subrange_vec_dec v__473 6 2 in
+ let rd : regbits := subrange_vec_dec v__473 11 7 in
+ C_MV
+ ((rd, rs2))
+ else if ((eq_vec v__473
+ (vec_of_bits [B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 16))) then
+ C_EBREAK
+ (tt)
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let rs2 : regbits := subrange_vec_dec v__473 6 2 in
+ andb (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__473 15 12)
+ (vec_of_bits [B1;B0;B0;B1] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__473 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ let rsd : regbits := subrange_vec_dec v__473 11 7 in
+ let rs2 : regbits := subrange_vec_dec v__473 6 2 in
+ C_ADD
+ ((rsd, rs2))
+ else C_ILLEGAL (v__473).
+
+Definition encdec_compressed_forwards_matches (arg_ : ast)
+: bool :=
+
+ match arg_ with
+ | C_NOP (tt) => true
+ | C_ADDI4SPN (rd,v__606) =>
+ if ((let nz96 : bits 4 := subrange_vec_dec v__606 7 4 in
+ let nz96 : bits 4 := subrange_vec_dec v__606 7 4 in
+ let nz54 : bits 2 := subrange_vec_dec v__606 3 2 in
+ let nz3 : bits 1 := subrange_vec_dec v__606 1 1 in
+ let nz2 : bits 1 := subrange_vec_dec v__606 0 0 in
+ neq_vec (concat_vec nz96 (concat_vec nz54 (concat_vec nz3 nz2)))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (4 + (2 + (1 + 1)))))) then
+ true
+ else
+ let g__35 := C_ADDI4SPN ((rd, v__606)) in
+ false
+ | C_LW (v__607,rs1,rd) => true
+ | C_LD (v__608,rs1,rd) => true
+ | C_SW (v__609,rs1,rs2) => true
+ | C_SD (v__610,rs1,rs2) => true
+ | C_ADDI (v__611,rsd) =>
+ if ((let nzi5 : bits 1 := subrange_vec_dec v__611 5 5 in
+ let nzi5 : bits 1 := subrange_vec_dec v__611 5 5 in
+ let nzi40 : bits 5 := subrange_vec_dec v__611 4 0 in
+ andb (neq_vec (concat_vec nzi5 nzi40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__35 := C_ADDI ((v__611, rsd)) in
+ false
+ | C_ADDIW (v__612,rsd) =>
+ if ((neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__35 := C_ADDIW ((v__612, rsd)) in
+ false
+ | C_LI (v__613,rd) =>
+ if ((neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__35 := C_LI ((v__613, rd)) in
+ false
+ | C_ADDI16SP (v__614) =>
+ if ((let nzi9 : bits 1 := subrange_vec_dec v__614 5 5 in
+ let nzi9 : bits 1 := subrange_vec_dec v__614 5 5 in
+ let nzi87 : bits 2 := subrange_vec_dec v__614 4 3 in
+ let nzi6 : bits 1 := subrange_vec_dec v__614 2 2 in
+ let nzi5 : bits 1 := subrange_vec_dec v__614 1 1 in
+ let nzi4 : bits 1 := subrange_vec_dec v__614 0 0 in
+ neq_vec (concat_vec nzi9 (concat_vec nzi87 (concat_vec nzi6 (concat_vec nzi5 nzi4))))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + (2 + (1 + (1 + 1))))))) then
+ true
+ else
+ let g__35 := C_ADDI16SP (v__614) in
+ false
+ | C_LUI (v__615,rd) =>
+ if ((let imm17 : bits 1 := subrange_vec_dec v__615 5 5 in
+ let imm17 : bits 1 := subrange_vec_dec v__615 5 5 in
+ let imm1612 : bits 5 := subrange_vec_dec v__615 4 0 in
+ andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno sp)))
+ (neq_vec (concat_vec imm17 imm1612) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5))))))
+ then
+ true
+ else
+ let g__35 := C_LUI ((v__615, rd)) in
+ false
+ | C_SRLI (v__616,rsd) =>
+ if ((let nzui5 : bits 1 := subrange_vec_dec v__616 5 5 in
+ let nzui5 : bits 1 := subrange_vec_dec v__616 5 5 in
+ let nzui40 : bits 5 := subrange_vec_dec v__616 4 0 in
+ neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))) then
+ true
+ else
+ let g__35 := C_SRLI ((v__616, rsd)) in
+ false
+ | C_SRAI (v__617,rsd) =>
+ if ((let nzui5 : bits 1 := subrange_vec_dec v__617 5 5 in
+ let nzui5 : bits 1 := subrange_vec_dec v__617 5 5 in
+ let nzui40 : bits 5 := subrange_vec_dec v__617 4 0 in
+ neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))) then
+ true
+ else
+ let g__35 := C_SRAI ((v__617, rsd)) in
+ false
+ | C_ANDI (v__618,rsd) => true
+ | C_SUB (rsd,rs2) => true
+ | C_XOR (rsd,rs2) => true
+ | C_OR (rsd,rs2) => true
+ | C_AND (rsd,rs2) => true
+ | C_SUBW (rsd,rs2) => true
+ | C_ADDW (rsd,rs2) => true
+ | C_J (v__619) => true
+ | C_BEQZ (v__620,rs) => true
+ | C_BNEZ (v__621,rs) => true
+ | C_SLLI (v__622,rsd) =>
+ if ((let nzui5 : bits 1 := subrange_vec_dec v__622 5 5 in
+ let nzui5 : bits 1 := subrange_vec_dec v__622 5 5 in
+ let nzui40 : bits 5 := subrange_vec_dec v__622 4 0 in
+ andb (neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__35 := C_SLLI ((v__622, rsd)) in
+ false
+ | C_LWSP (v__623,rd) =>
+ if ((neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__35 := C_LWSP ((v__623, rd)) in
+ false
+ | C_LDSP (v__624,rd) =>
+ if ((neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__35 := C_LDSP ((v__624, rd)) in
+ false
+ | C_SWSP (v__625,rs2) => true
+ | C_SDSP (v__626,rs2) => true
+ | C_JR (rs1) =>
+ if ((neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__35 := C_JR (rs1) in
+ false
+ | C_JALR (rs1) =>
+ if ((neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__35 := C_JALR (rs1) in
+ false
+ | C_MV (rd,rs2) =>
+ if ((andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__35 := C_MV ((rd, rs2)) in
+ false
+ | C_EBREAK (tt) => true
+ | C_ADD (rsd,rs2) =>
+ if ((andb (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__35 := C_ADD ((rsd, rs2)) in
+ false
+ | C_ILLEGAL (s) => true
+ | g__35 => false
+ end.
+
+Definition encdec_compressed_backwards_matches (arg_ : mword 16)
+: bool :=
+
+ let v__627 := arg_ in
+ if ((eq_vec v__627 (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1] : mword 16)))
+ then
+ true
+ else if ((andb
+ (let nz96 : bits 4 := subrange_vec_dec v__627 10 7 in
+ let nz54 : bits 2 := subrange_vec_dec v__627 12 11 in
+ let nz3 : bits 1 := subrange_vec_dec v__627 5 5 in
+ let nz2 : bits 1 := subrange_vec_dec v__627 6 6 in
+ neq_vec (concat_vec nz96 (concat_vec nz54 (concat_vec nz3 nz2)))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword (4 + (2 + (1 + 1)))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B0;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__627 11 7 in
+ let nzi5 : bits 1 := subrange_vec_dec v__627 12 12 in
+ let nzi40 : bits 5 := subrange_vec_dec v__627 6 2 in
+ andb
+ (neq_vec (concat_vec nzi5 nzi40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B0;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__627 11 7 in
+ neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B0;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__627 11 7 in
+ neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if sumbool_of_bool ((andb
+ (let nzi9 : bits 1 := subrange_vec_dec v__627 12 12 in
+ let nzi87 : bits 2 := subrange_vec_dec v__627 4 3 in
+ let nzi6 : bits 1 := subrange_vec_dec v__627 5 5 in
+ let nzi5 : bits 1 := subrange_vec_dec v__627 2 2 in
+ let nzi4 : bits 1 := subrange_vec_dec v__627 6 6 in
+ neq_vec
+ (concat_vec nzi9
+ (concat_vec nzi87 (concat_vec nzi6 (concat_vec nzi5 nzi4))))
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + (2 + (1 + (1 + 1))))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (andb
+ (Z.eqb
+ (projT1 (regbits_to_regno (subrange_vec_dec v__627 11 7)))
+ (projT1 (regbits_to_regno
+ (vec_of_bits [B0;B0;B0;B1;B0] : mword 5))))
+ (eq_vec (subrange_vec_dec v__627 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))) then
+ true
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__627 11 7 in
+ let imm17 : bits 1 := subrange_vec_dec v__627 12 12 in
+ let imm1612 : bits 5 := subrange_vec_dec v__627 6 2 in
+ andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno sp)))
+ (neq_vec (concat_vec imm17 imm1612)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (let nzui5 : bits 1 := subrange_vec_dec v__627 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__627 6 2 in
+ neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B0;B0] : mword (15 - 13 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 11 10)
+ (vec_of_bits [B0;B0] : mword (11 - 10 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))) then
+ true
+ else if ((andb
+ (let nzui5 : bits 1 := subrange_vec_dec v__627 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__627 6 2 in
+ neq_vec (concat_vec nzui5 nzui40) (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B0;B0] : mword (15 - 13 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 11 10)
+ (vec_of_bits [B0;B1] : mword (11 - 10 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))) then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B0;B0] : mword (15 - 13 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 11 10)
+ (vec_of_bits [B1;B0] : mword (11 - 10 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 6 5) (vec_of_bits [B0;B0] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 6 5) (vec_of_bits [B0;B1] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 6 5) (vec_of_bits [B1;B0] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 10)
+ (vec_of_bits [B1;B0;B0;B0;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 6 5) (vec_of_bits [B1;B1] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 10)
+ (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 6 5) (vec_of_bits [B0;B0] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 10)
+ (vec_of_bits [B1;B0;B0;B1;B1;B1] : mword (15 - 10 + 1)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 6 5) (vec_of_bits [B0;B1] : mword (6 - 5 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B0;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__627 11 7 in
+ let nzui5 : bits 1 := subrange_vec_dec v__627 12 12 in
+ let nzui40 : bits 5 := subrange_vec_dec v__627 6 2 in
+ andb
+ (neq_vec (concat_vec nzui5 nzui40)
+ (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword (1 + 5)))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B0;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__627 11 7 in
+ neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (let rd : regbits := subrange_vec_dec v__627 11 7 in
+ neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B0;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B1;B0] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__627 15 13)
+ (vec_of_bits [B1;B1;B1] : mword (15 - 13 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ true
+ else if ((andb
+ (let rs1 : regbits := subrange_vec_dec v__627 11 7 in
+ neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 12)
+ (vec_of_bits [B1;B0;B0;B0] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__627 6 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (let rs1 : regbits := subrange_vec_dec v__627 11 7 in
+ neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 12)
+ (vec_of_bits [B1;B0;B0;B1] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__627 6 0)
+ (vec_of_bits [B0;B0;B0;B0;B0;B1;B0] : mword (6 - 0 + 1)))))) then
+ true
+ else if ((andb
+ (let rs2 : regbits := subrange_vec_dec v__627 6 2 in
+ let rd : regbits := subrange_vec_dec v__627 11 7 in
+ andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 12)
+ (vec_of_bits [B1;B0;B0;B0] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ true
+ else if ((eq_vec v__627
+ (vec_of_bits [B1;B0;B0;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B1;B0] : mword 16))) then
+ true
+ else if ((andb
+ (let rsd : regbits := subrange_vec_dec v__627 11 7 in
+ let rs2 : regbits := subrange_vec_dec v__627 6 2 in
+ andb (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))
+ (andb
+ (eq_vec (subrange_vec_dec v__627 15 12)
+ (vec_of_bits [B1;B0;B0;B1] : mword (15 - 12 + 1)))
+ (eq_vec (subrange_vec_dec v__627 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))))
+ then
+ true
+ else true.
+
+Definition assembly_forwards (arg_ : ast)
+: M (string) :=
+
+ (match arg_ with
+ | UTYPE (imm,rd,op) =>
+ returnm ((string_append (utype_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | RISCV_JAL (imm,rd) =>
+ returnm ((string_append "jal"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | RISCV_JALR (imm,rs1,rd) =>
+ returnm ((string_append "jalr"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))))
+ : string)
+ | BTYPE (imm,rs2,rs1,op) =>
+ returnm ((string_append (btype_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))))
+ : string)
+ | ITYPE (imm,rs1,rd,op) =>
+ returnm ((string_append (itype_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))))
+ : string)
+ | SHIFTIOP (shamt,rs1,rd,op) =>
+ returnm ((string_append (shiftiop_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (decimal_string_of_bits shamt) ""))))))
+ : string)
+ | RTYPE (rs2,rs1,rd,op) =>
+ returnm ((string_append (rtype_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))
+ : string)
+ | LOAD (imm,rs1,rd,is_unsigned,size,aq,rl) =>
+ returnm ((string_append "l"
+ (string_append (size_mnemonic_forwards size)
+ (string_append (maybe_u_forwards is_unsigned)
+ (string_append (maybe_aq_forwards aq)
+ (string_append (maybe_rl_forwards rl)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))))))))
+ : string)
+ | STORE (imm,rs1,rd,size,aq,rl) =>
+ returnm ((string_append "s"
+ (string_append (size_mnemonic_forwards size)
+ (string_append (maybe_aq_forwards aq)
+ (string_append (maybe_rl_forwards rl)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) ""))))))))))
+ : string)
+ | ADDIW (imm,rs1,rd) =>
+ returnm ((string_append "addiw"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))))
+ : string)
+ | SHIFTW (shamt,rs1,rd,op) =>
+ returnm ((string_append (shiftw_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits shamt) "")))))))
+ : string)
+ | RTYPEW (rs2,rs1,rd,op) =>
+ returnm ((string_append (rtypew_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))
+ : string)
+ | SHIFTIWOP (shamt,rs1,rd,op) =>
+ returnm ((string_append (shiftiwop_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (decimal_string_of_bits shamt) ""))))))
+ : string)
+ | MUL (rs2,rs1,rd,high,signed1,signed2) =>
+ (mul_mnemonic_forwards (high, signed1, signed2)) >>= fun w__0 : string =>
+ returnm ((string_append w__0
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))
+ : string)
+ | DIV (rs2,rs1,rd,s) =>
+ returnm ((string_append "div"
+ (string_append (maybe_not_u_forwards s)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) ""))))))))
+ : string)
+ | REM (rs2,rs1,rd,s) =>
+ returnm ((string_append "rem"
+ (string_append (maybe_not_u_forwards s)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) ""))))))))
+ : string)
+ | MULW (rs2,rs1,rd) =>
+ returnm ((string_append "mulw"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))
+ : string)
+ | DIVW (rs2,rs1,rd,s) =>
+ returnm ((string_append "div"
+ (string_append (maybe_not_u_forwards s)
+ (string_append "w"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))))
+ : string)
+ | REMW (rs2,rs1,rd,s) =>
+ returnm ((string_append "rem"
+ (string_append (maybe_not_u_forwards s)
+ (string_append "w"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))))
+ : string)
+ | FENCE (pred,succ) =>
+ returnm ((string_append "fence"
+ (string_append (spc_forwards tt)
+ (string_append (fence_bits_forwards pred)
+ (string_append (sep_forwards tt)
+ (string_append (fence_bits_forwards succ) "")))))
+ : string)
+ | FENCE_TSO (pred,succ) =>
+ returnm ((string_append "fence.tso"
+ (string_append (spc_forwards tt)
+ (string_append (fence_bits_forwards pred)
+ (string_append (sep_forwards tt)
+ (string_append (fence_bits_forwards succ) "")))))
+ : string)
+ | FENCEI (tt) => returnm ("fence.i" : string)
+ | ECALL (tt) => returnm ("ecall" : string)
+ | MRET (tt) => returnm ("mret" : string)
+ | SRET (tt) => returnm ("sret" : string)
+ | EBREAK (tt) => returnm ("ebreak" : string)
+ | WFI (tt) => returnm ("wfi" : string)
+ | SFENCE_VMA (rs1,rs2) =>
+ returnm ((string_append "sfence.vma"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt) (string_append (reg_name_forwards rs2) "")))))
+ : string)
+ | LOADRES (aq,rl,rs1,size,rd) =>
+ returnm ((string_append "lr."
+ (string_append (size_mnemonic_forwards size)
+ (string_append (maybe_aq_forwards aq)
+ (string_append (maybe_rl_forwards rl)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1) ""))))))))
+ : string)
+ | STORECON (aq,rl,rs2,rs1,size,rd) =>
+ returnm ((string_append "sc."
+ (string_append (size_mnemonic_forwards size)
+ (string_append (maybe_aq_forwards aq)
+ (string_append (maybe_rl_forwards rl)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) ""))))))))))
+ : string)
+ | AMO (op,aq,rl,rs2,rs1,width,rd) =>
+ returnm ((string_append (amo_mnemonic_forwards op)
+ (string_append "."
+ (string_append (size_mnemonic_forwards width)
+ (string_append (maybe_aq_forwards aq)
+ (string_append (maybe_rl_forwards rl)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs2) "")))))))))))
+ : string)
+ | CSR (csr,rs1,rd,true,op) =>
+ returnm ((string_append (csr_mnemonic_forwards op)
+ (string_append "i"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits rs1)
+ (string_append (sep_forwards tt)
+ (string_append (csr_name_map_forwards csr) ""))))))))
+ : string)
+ | CSR (csr,rs1,rd,false,op) =>
+ returnm ((string_append (csr_mnemonic_forwards op)
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (reg_name_forwards rs1)
+ (string_append (sep_forwards tt)
+ (string_append (csr_name_map_forwards csr) "")))))))
+ : string)
+ | C_NOP (tt) => returnm ("c.nop" : string)
+ | C_ADDI4SPN (rdc,nzimm) =>
+ returnm ((string_append "c.addi4spn"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rdc)
+ (string_append (sep_forwards tt)
+ (string_append
+ (decimal_string_of_bits
+ (concat_vec (nzimm : mword 8) (vec_of_bits [B0;B0] : mword 2)))
+ "")))))
+ : string)
+ | C_LW (uimm,rsc,rdc) =>
+ returnm ((string_append "c.lw"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rdc)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rsc)
+ (string_append (sep_forwards tt)
+ (string_append
+ (decimal_string_of_bits
+ (concat_vec (uimm : mword 5)
+ (vec_of_bits [B0;B0] : mword 2))) "")))))))
+ : string)
+ | C_LD (uimm,rsc,rdc) =>
+ returnm ((string_append "c.ld"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rdc)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rsc)
+ (string_append (sep_forwards tt)
+ (string_append
+ (decimal_string_of_bits
+ (concat_vec (uimm : mword 5)
+ (vec_of_bits [B0;B0;B0] : mword 3))) "")))))))
+ : string)
+ | C_SW (uimm,rsc1,rsc2) =>
+ returnm ((string_append "c.sw"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsc1)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rsc2)
+ (string_append (sep_forwards tt)
+ (string_append
+ (decimal_string_of_bits
+ (concat_vec (uimm : mword 5)
+ (vec_of_bits [B0;B0] : mword 2))) "")))))))
+ : string)
+ | C_SD (uimm,rsc1,rsc2) =>
+ returnm ((string_append "c.sd"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsc1)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rsc2)
+ (string_append (sep_forwards tt)
+ (string_append
+ (decimal_string_of_bits
+ (concat_vec (uimm : mword 5)
+ (vec_of_bits [B0;B0;B0] : mword 3))) "")))))))
+ : string)
+ | C_ADDI (nzi,rsd) =>
+ returnm ((string_append "c.addi"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits nzi) "")))))
+ : string)
+ | C_JAL (imm) =>
+ returnm ((string_append "c.jal"
+ (string_append (spc_forwards tt)
+ (string_append
+ (decimal_string_of_bits
+ (concat_vec (imm : mword 11) (vec_of_bits [B0] : mword 1))) "")))
+ : string)
+ | C_ADDIW (imm,rsd) =>
+ returnm ((string_append "c.addiw"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | C_LI (imm,rd) =>
+ returnm ((string_append "c.li"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | C_ADDI16SP (imm) =>
+ returnm ((string_append "c.addi16sp"
+ (string_append (spc_forwards tt) (string_append (decimal_string_of_bits imm) "")))
+ : string)
+ | C_LUI (imm,rd) =>
+ returnm ((string_append "c.lui"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | C_SRLI (shamt,rsd) =>
+ returnm ((string_append "c.srli"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits shamt) "")))))
+ : string)
+ | C_SRAI (shamt,rsd) =>
+ returnm ((string_append "c.srai"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits shamt) "")))))
+ : string)
+ | C_ANDI (imm,rsd) =>
+ returnm ((string_append "c.andi"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | C_SUB (rsd,rs2) =>
+ returnm ((string_append "c.sub"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rs2) "")))))
+ : string)
+ | C_XOR (rsd,rs2) =>
+ returnm ((string_append "c.xor"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rs2) "")))))
+ : string)
+ | C_OR (rsd,rs2) =>
+ returnm ((string_append "c.or"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rs2) "")))))
+ : string)
+ | C_AND (rsd,rs2) =>
+ returnm ((string_append "c.and"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rs2) "")))))
+ : string)
+ | C_SUBW (rsd,rs2) =>
+ returnm ((string_append "c.subw"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rs2) "")))))
+ : string)
+ | C_ADDW (rsd,rs2) =>
+ returnm ((string_append "c.addw"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (creg_name_forwards rs2) "")))))
+ : string)
+ | C_J (imm) =>
+ returnm ((string_append "c.j"
+ (string_append (spc_forwards tt) (string_append (decimal_string_of_bits imm) "")))
+ : string)
+ | C_BEQZ (imm,rs) =>
+ returnm ((string_append "c.beqz"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rs)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | C_BNEZ (imm,rs) =>
+ returnm ((string_append "c.bnez"
+ (string_append (spc_forwards tt)
+ (string_append (creg_name_forwards rs)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits imm) "")))))
+ : string)
+ | C_SLLI (shamt,rsd) =>
+ returnm ((string_append "c.slli"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rsd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits shamt) "")))))
+ : string)
+ | C_LWSP (uimm,rd) =>
+ returnm ((string_append "c.lwsp"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits uimm) "")))))
+ : string)
+ | C_LDSP (uimm,rd) =>
+ returnm ((string_append "c.ldsp"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits uimm) "")))))
+ : string)
+ | C_SWSP (uimm,rd) =>
+ returnm ((string_append "c.swsp"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits uimm) "")))))
+ : string)
+ | C_SDSP (uimm,rs2) =>
+ returnm ((string_append "c.sdsp"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rs2)
+ (string_append (sep_forwards tt)
+ (string_append (decimal_string_of_bits uimm) "")))))
+ : string)
+ | C_JR (rs1) =>
+ returnm ((string_append "c.jr"
+ (string_append (spc_forwards tt) (string_append (reg_name_forwards rs1) "")))
+ : string)
+ | C_JALR (rs1) =>
+ returnm ((string_append "c.jalr"
+ (string_append (spc_forwards tt) (string_append (reg_name_forwards rs1) "")))
+ : string)
+ | C_MV (rd,rs2) =>
+ returnm ((string_append "c.mv"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rd)
+ (string_append (sep_forwards tt) (string_append (reg_name_forwards rs2) "")))))
+ : string)
+ | C_EBREAK (tt) => returnm ("c.ebreak" : string)
+ | C_ADD (rsd,rs2) =>
+ returnm ((string_append "c.add"
+ (string_append (spc_forwards tt)
+ (string_append (reg_name_forwards rsd)
+ (string_append (sep_forwards tt) (string_append (reg_name_forwards rs2) "")))))
+ : string)
+ | STOP_FETCHING (tt) => returnm ("stop_fetching" : string)
+ | THREAD_START (tt) => returnm ("thread_start" : string)
+ | ILLEGAL (s) =>
+ returnm ((string_append "illegal"
+ (string_append (spc_forwards tt) (string_append (decimal_string_of_bits s) "")))
+ : string)
+ | C_ILLEGAL (s) =>
+ returnm ((string_append "c.illegal"
+ (string_append (spc_forwards tt) (string_append (decimal_string_of_bits s) "")))
+ : string)
+ end)
+ : M (string).
+
+Definition _s1661_ (_s1662_ : string)
+: M (option (mword 16)) :=
+
+ let _s1663_ := _s1662_ in
+ (if ((string_startswith _s1663_ "c.illegal")) then
+ (match (string_drop _s1663_ (projT1 (string_length "c.illegal"))) with
+ | _s1664_ =>
+ (spc_matches_prefix _s1664_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s1665_ _)) =>
+ match (string_drop _s1664_ _s1665_) with
+ | _s1666_ =>
+ match (hex_bits_16_matches_prefix _s1666_) with
+ | Some (s,(existT _ _s1667_ _)) =>
+ let p0_ := string_drop _s1666_ _s1667_ in
+ if ((generic_eq p0_ "")) then Some (s)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 16))
+ end)
+ : M (option (mword 16))
+ else returnm (None : option (mword 16)))
+ : M (option (mword 16)).
+
+Definition _s1653_ (_s1654_ : string)
+: M (option (mword 32)) :=
+
+ let _s1655_ := _s1654_ in
+ (if ((string_startswith _s1655_ "illegal")) then
+ (match (string_drop _s1655_ (projT1 (string_length "illegal"))) with
+ | _s1656_ =>
+ (spc_matches_prefix _s1656_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s1657_ _)) =>
+ match (string_drop _s1656_ _s1657_) with
+ | _s1658_ =>
+ match (hex_bits_32_matches_prefix _s1658_) with
+ | Some (s,(existT _ _s1659_ _)) =>
+ let p0_ := string_drop _s1658_ _s1659_ in
+ if ((generic_eq p0_ "")) then Some (s)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 32))
+ end)
+ : M (option (mword 32))
+ else returnm (None : option (mword 32)))
+ : M (option (mword 32)).
+
+Definition _s1641_ (_s1642_ : string)
+: M (option ((mword 5 * mword 5))) :=
+
+ let _s1643_ := _s1642_ in
+ (if ((string_startswith _s1643_ "c.add")) then
+ (match (string_drop _s1643_ (projT1 (string_length "c.add"))) with
+ | _s1644_ =>
+ (spc_matches_prefix _s1644_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1645_ _)) =>
+ (match (string_drop _s1644_ _s1645_) with
+ | _s1646_ =>
+ (reg_name_matches_prefix _s1646_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1647_ _)) =>
+ (match (string_drop _s1646_ _s1647_) with
+ | _s1648_ =>
+ (sep_matches_prefix _s1648_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1649_ _)) =>
+ (match (string_drop _s1648_ _s1649_) with
+ | _s1650_ =>
+ (reg_name_matches_prefix _s1650_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1651_ _)) =>
+ let p0_ := string_drop _s1650_ _s1651_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5))).
+
+Definition _s1629_ (_s1630_ : string)
+: M (option ((mword 5 * mword 5))) :=
+
+ let _s1631_ := _s1630_ in
+ (if ((string_startswith _s1631_ "c.mv")) then
+ (match (string_drop _s1631_ (projT1 (string_length "c.mv"))) with
+ | _s1632_ =>
+ (spc_matches_prefix _s1632_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1633_ _)) =>
+ (match (string_drop _s1632_ _s1633_) with
+ | _s1634_ =>
+ (reg_name_matches_prefix _s1634_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1635_ _)) =>
+ (match (string_drop _s1634_ _s1635_) with
+ | _s1636_ =>
+ (sep_matches_prefix _s1636_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1637_ _)) =>
+ (match (string_drop _s1636_ _s1637_) with
+ | _s1638_ =>
+ (reg_name_matches_prefix _s1638_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1639_ _)) =>
+ let p0_ := string_drop _s1638_ _s1639_ in
+ if ((generic_eq p0_ "")) then Some ((rd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5))).
+
+Definition _s1621_ (_s1622_ : string)
+: M (option (mword 5)) :=
+
+ let _s1623_ := _s1622_ in
+ (if ((string_startswith _s1623_ "c.jalr")) then
+ (match (string_drop _s1623_ (projT1 (string_length "c.jalr"))) with
+ | _s1624_ =>
+ (spc_matches_prefix _s1624_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1625_ _)) =>
+ (match (string_drop _s1624_ _s1625_) with
+ | _s1626_ =>
+ (reg_name_matches_prefix _s1626_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (rs1,(existT _ _s1627_ _)) =>
+ let p0_ := string_drop _s1626_ _s1627_ in
+ if ((generic_eq p0_ "")) then Some (rs1)
+ else None
+ | _ => None
+ end)
+ : option (mword 5))
+ end)
+ : M (option (mword 5))
+ | _ => returnm (None : option (mword 5))
+ end)
+ : M (option (mword 5))
+ end)
+ : M (option (mword 5))
+ else returnm (None : option (mword 5)))
+ : M (option (mword 5)).
+
+Definition _s1613_ (_s1614_ : string)
+: M (option (mword 5)) :=
+
+ let _s1615_ := _s1614_ in
+ (if ((string_startswith _s1615_ "c.jr")) then
+ (match (string_drop _s1615_ (projT1 (string_length "c.jr"))) with
+ | _s1616_ =>
+ (spc_matches_prefix _s1616_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1617_ _)) =>
+ (match (string_drop _s1616_ _s1617_) with
+ | _s1618_ =>
+ (reg_name_matches_prefix _s1618_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (rs1,(existT _ _s1619_ _)) =>
+ let p0_ := string_drop _s1618_ _s1619_ in
+ if ((generic_eq p0_ "")) then Some (rs1)
+ else None
+ | _ => None
+ end)
+ : option (mword 5))
+ end)
+ : M (option (mword 5))
+ | _ => returnm (None : option (mword 5))
+ end)
+ : M (option (mword 5))
+ end)
+ : M (option (mword 5))
+ else returnm (None : option (mword 5)))
+ : M (option (mword 5)).
+
+Definition _s1601_ (_s1602_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1603_ := _s1602_ in
+ (if ((string_startswith _s1603_ "c.sdsp")) then
+ (match (string_drop _s1603_ (projT1 (string_length "c.sdsp"))) with
+ | _s1604_ =>
+ (spc_matches_prefix _s1604_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1605_ _)) =>
+ (match (string_drop _s1604_ _s1605_) with
+ | _s1606_ =>
+ (reg_name_matches_prefix _s1606_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs2,(existT _ _s1607_ _)) =>
+ (match (string_drop _s1606_ _s1607_) with
+ | _s1608_ =>
+ (sep_matches_prefix _s1608_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1609_ _)) =>
+ match (string_drop _s1608_ _s1609_) with
+ | _s1610_ =>
+ match (hex_bits_6_matches_prefix _s1610_) with
+ | Some (uimm,(existT _ _s1611_ _)) =>
+ let p0_ := string_drop _s1610_ _s1611_ in
+ if ((generic_eq p0_ "")) then Some ((rs2, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1589_ (_s1590_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1591_ := _s1590_ in
+ (if ((string_startswith _s1591_ "c.swsp")) then
+ (match (string_drop _s1591_ (projT1 (string_length "c.swsp"))) with
+ | _s1592_ =>
+ (spc_matches_prefix _s1592_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1593_ _)) =>
+ (match (string_drop _s1592_ _s1593_) with
+ | _s1594_ =>
+ (reg_name_matches_prefix _s1594_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1595_ _)) =>
+ (match (string_drop _s1594_ _s1595_) with
+ | _s1596_ =>
+ (sep_matches_prefix _s1596_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1597_ _)) =>
+ match (string_drop _s1596_ _s1597_) with
+ | _s1598_ =>
+ match (hex_bits_6_matches_prefix _s1598_) with
+ | Some (uimm,(existT _ _s1599_ _)) =>
+ let p0_ := string_drop _s1598_ _s1599_ in
+ if ((generic_eq p0_ "")) then Some ((rd, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1577_ (_s1578_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1579_ := _s1578_ in
+ (if ((string_startswith _s1579_ "c.ldsp")) then
+ (match (string_drop _s1579_ (projT1 (string_length "c.ldsp"))) with
+ | _s1580_ =>
+ (spc_matches_prefix _s1580_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1581_ _)) =>
+ (match (string_drop _s1580_ _s1581_) with
+ | _s1582_ =>
+ (reg_name_matches_prefix _s1582_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1583_ _)) =>
+ (match (string_drop _s1582_ _s1583_) with
+ | _s1584_ =>
+ (sep_matches_prefix _s1584_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1585_ _)) =>
+ match (string_drop _s1584_ _s1585_) with
+ | _s1586_ =>
+ match (hex_bits_6_matches_prefix _s1586_) with
+ | Some (uimm,(existT _ _s1587_ _)) =>
+ let p0_ := string_drop _s1586_ _s1587_ in
+ if ((generic_eq p0_ "")) then Some ((rd, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1565_ (_s1566_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1567_ := _s1566_ in
+ (if ((string_startswith _s1567_ "c.lwsp")) then
+ (match (string_drop _s1567_ (projT1 (string_length "c.lwsp"))) with
+ | _s1568_ =>
+ (spc_matches_prefix _s1568_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1569_ _)) =>
+ (match (string_drop _s1568_ _s1569_) with
+ | _s1570_ =>
+ (reg_name_matches_prefix _s1570_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1571_ _)) =>
+ (match (string_drop _s1570_ _s1571_) with
+ | _s1572_ =>
+ (sep_matches_prefix _s1572_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1573_ _)) =>
+ match (string_drop _s1572_ _s1573_) with
+ | _s1574_ =>
+ match (hex_bits_6_matches_prefix _s1574_) with
+ | Some (uimm,(existT _ _s1575_ _)) =>
+ let p0_ := string_drop _s1574_ _s1575_ in
+ if ((generic_eq p0_ "")) then Some ((rd, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1553_ (_s1554_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1555_ := _s1554_ in
+ (if ((string_startswith _s1555_ "c.slli")) then
+ (match (string_drop _s1555_ (projT1 (string_length "c.slli"))) with
+ | _s1556_ =>
+ (spc_matches_prefix _s1556_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1557_ _)) =>
+ (match (string_drop _s1556_ _s1557_) with
+ | _s1558_ =>
+ (reg_name_matches_prefix _s1558_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1559_ _)) =>
+ (match (string_drop _s1558_ _s1559_) with
+ | _s1560_ =>
+ (sep_matches_prefix _s1560_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1561_ _)) =>
+ match (string_drop _s1560_ _s1561_) with
+ | _s1562_ =>
+ match (hex_bits_6_matches_prefix _s1562_) with
+ | Some (shamt,(existT _ _s1563_ _)) =>
+ let p0_ := string_drop _s1562_ _s1563_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1541_ (_s1542_ : string)
+: M (option ((mword 3 * mword 8))) :=
+
+ let _s1543_ := _s1542_ in
+ (if ((string_startswith _s1543_ "c.bnez")) then
+ (match (string_drop _s1543_ (projT1 (string_length "c.bnez"))) with
+ | _s1544_ =>
+ (spc_matches_prefix _s1544_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1545_ _)) =>
+ (match (string_drop _s1544_ _s1545_) with
+ | _s1546_ =>
+ (creg_name_matches_prefix _s1546_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs,(existT _ _s1547_ _)) =>
+ (match (string_drop _s1546_ _s1547_) with
+ | _s1548_ =>
+ (sep_matches_prefix _s1548_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1549_ _)) =>
+ match (string_drop _s1548_ _s1549_) with
+ | _s1550_ =>
+ match (hex_bits_8_matches_prefix _s1550_) with
+ | Some (imm,(existT _ _s1551_ _)) =>
+ let p0_ := string_drop _s1550_ _s1551_ in
+ if ((generic_eq p0_ "")) then Some ((rs, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ else returnm (None : option ((mword 3 * mword 8))))
+ : M (option ((mword 3 * mword 8))).
+
+Definition _s1529_ (_s1530_ : string)
+: M (option ((mword 3 * mword 8))) :=
+
+ let _s1531_ := _s1530_ in
+ (if ((string_startswith _s1531_ "c.beqz")) then
+ (match (string_drop _s1531_ (projT1 (string_length "c.beqz"))) with
+ | _s1532_ =>
+ (spc_matches_prefix _s1532_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1533_ _)) =>
+ (match (string_drop _s1532_ _s1533_) with
+ | _s1534_ =>
+ (creg_name_matches_prefix _s1534_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs,(existT _ _s1535_ _)) =>
+ (match (string_drop _s1534_ _s1535_) with
+ | _s1536_ =>
+ (sep_matches_prefix _s1536_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1537_ _)) =>
+ match (string_drop _s1536_ _s1537_) with
+ | _s1538_ =>
+ match (hex_bits_8_matches_prefix _s1538_) with
+ | Some (imm,(existT _ _s1539_ _)) =>
+ let p0_ := string_drop _s1538_ _s1539_ in
+ if ((generic_eq p0_ "")) then Some ((rs, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ else returnm (None : option ((mword 3 * mword 8))))
+ : M (option ((mword 3 * mword 8))).
+
+Definition _s1521_ (_s1522_ : string)
+: M (option (mword 11)) :=
+
+ let _s1523_ := _s1522_ in
+ (if ((string_startswith _s1523_ "c.j")) then
+ (match (string_drop _s1523_ (projT1 (string_length "c.j"))) with
+ | _s1524_ =>
+ (spc_matches_prefix _s1524_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s1525_ _)) =>
+ match (string_drop _s1524_ _s1525_) with
+ | _s1526_ =>
+ match (hex_bits_11_matches_prefix _s1526_) with
+ | Some (imm,(existT _ _s1527_ _)) =>
+ let p0_ := string_drop _s1526_ _s1527_ in
+ if ((generic_eq p0_ "")) then Some (imm)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 11))
+ end)
+ : M (option (mword 11))
+ else returnm (None : option (mword 11)))
+ : M (option (mword 11)).
+
+Definition _s1509_ (_s1510_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s1511_ := _s1510_ in
+ (if ((string_startswith _s1511_ "c.addw")) then
+ (match (string_drop _s1511_ (projT1 (string_length "c.addw"))) with
+ | _s1512_ =>
+ (spc_matches_prefix _s1512_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1513_ _)) =>
+ (match (string_drop _s1512_ _s1513_) with
+ | _s1514_ =>
+ (creg_name_matches_prefix _s1514_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1515_ _)) =>
+ (match (string_drop _s1514_ _s1515_) with
+ | _s1516_ =>
+ (sep_matches_prefix _s1516_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1517_ _)) =>
+ (match (string_drop _s1516_ _s1517_) with
+ | _s1518_ =>
+ (creg_name_matches_prefix _s1518_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1519_ _)) =>
+ let p0_ := string_drop _s1518_ _s1519_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s1497_ (_s1498_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s1499_ := _s1498_ in
+ (if ((string_startswith _s1499_ "c.subw")) then
+ (match (string_drop _s1499_ (projT1 (string_length "c.subw"))) with
+ | _s1500_ =>
+ (spc_matches_prefix _s1500_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1501_ _)) =>
+ (match (string_drop _s1500_ _s1501_) with
+ | _s1502_ =>
+ (creg_name_matches_prefix _s1502_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1503_ _)) =>
+ (match (string_drop _s1502_ _s1503_) with
+ | _s1504_ =>
+ (sep_matches_prefix _s1504_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1505_ _)) =>
+ (match (string_drop _s1504_ _s1505_) with
+ | _s1506_ =>
+ (creg_name_matches_prefix _s1506_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1507_ _)) =>
+ let p0_ := string_drop _s1506_ _s1507_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s1485_ (_s1486_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s1487_ := _s1486_ in
+ (if ((string_startswith _s1487_ "c.and")) then
+ (match (string_drop _s1487_ (projT1 (string_length "c.and"))) with
+ | _s1488_ =>
+ (spc_matches_prefix _s1488_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1489_ _)) =>
+ (match (string_drop _s1488_ _s1489_) with
+ | _s1490_ =>
+ (creg_name_matches_prefix _s1490_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1491_ _)) =>
+ (match (string_drop _s1490_ _s1491_) with
+ | _s1492_ =>
+ (sep_matches_prefix _s1492_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1493_ _)) =>
+ (match (string_drop _s1492_ _s1493_) with
+ | _s1494_ =>
+ (creg_name_matches_prefix _s1494_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1495_ _)) =>
+ let p0_ := string_drop _s1494_ _s1495_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s1473_ (_s1474_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s1475_ := _s1474_ in
+ (if ((string_startswith _s1475_ "c.or")) then
+ (match (string_drop _s1475_ (projT1 (string_length "c.or"))) with
+ | _s1476_ =>
+ (spc_matches_prefix _s1476_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1477_ _)) =>
+ (match (string_drop _s1476_ _s1477_) with
+ | _s1478_ =>
+ (creg_name_matches_prefix _s1478_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1479_ _)) =>
+ (match (string_drop _s1478_ _s1479_) with
+ | _s1480_ =>
+ (sep_matches_prefix _s1480_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1481_ _)) =>
+ (match (string_drop _s1480_ _s1481_) with
+ | _s1482_ =>
+ (creg_name_matches_prefix _s1482_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1483_ _)) =>
+ let p0_ := string_drop _s1482_ _s1483_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s1461_ (_s1462_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s1463_ := _s1462_ in
+ (if ((string_startswith _s1463_ "c.xor")) then
+ (match (string_drop _s1463_ (projT1 (string_length "c.xor"))) with
+ | _s1464_ =>
+ (spc_matches_prefix _s1464_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1465_ _)) =>
+ (match (string_drop _s1464_ _s1465_) with
+ | _s1466_ =>
+ (creg_name_matches_prefix _s1466_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1467_ _)) =>
+ (match (string_drop _s1466_ _s1467_) with
+ | _s1468_ =>
+ (sep_matches_prefix _s1468_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1469_ _)) =>
+ (match (string_drop _s1468_ _s1469_) with
+ | _s1470_ =>
+ (creg_name_matches_prefix _s1470_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1471_ _)) =>
+ let p0_ := string_drop _s1470_ _s1471_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s1449_ (_s1450_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s1451_ := _s1450_ in
+ (if ((string_startswith _s1451_ "c.sub")) then
+ (match (string_drop _s1451_ (projT1 (string_length "c.sub"))) with
+ | _s1452_ =>
+ (spc_matches_prefix _s1452_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1453_ _)) =>
+ (match (string_drop _s1452_ _s1453_) with
+ | _s1454_ =>
+ (creg_name_matches_prefix _s1454_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1455_ _)) =>
+ (match (string_drop _s1454_ _s1455_) with
+ | _s1456_ =>
+ (sep_matches_prefix _s1456_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1457_ _)) =>
+ (match (string_drop _s1456_ _s1457_) with
+ | _s1458_ =>
+ (creg_name_matches_prefix _s1458_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1459_ _)) =>
+ let p0_ := string_drop _s1458_ _s1459_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s1437_ (_s1438_ : string)
+: M (option ((mword 3 * mword 6))) :=
+
+ let _s1439_ := _s1438_ in
+ (if ((string_startswith _s1439_ "c.andi")) then
+ (match (string_drop _s1439_ (projT1 (string_length "c.andi"))) with
+ | _s1440_ =>
+ (spc_matches_prefix _s1440_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1441_ _)) =>
+ (match (string_drop _s1440_ _s1441_) with
+ | _s1442_ =>
+ (creg_name_matches_prefix _s1442_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1443_ _)) =>
+ (match (string_drop _s1442_ _s1443_) with
+ | _s1444_ =>
+ (sep_matches_prefix _s1444_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1445_ _)) =>
+ match (string_drop _s1444_ _s1445_) with
+ | _s1446_ =>
+ match (hex_bits_6_matches_prefix _s1446_) with
+ | Some (imm,(existT _ _s1447_ _)) =>
+ let p0_ := string_drop _s1446_ _s1447_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ else returnm (None : option ((mword 3 * mword 6))))
+ : M (option ((mword 3 * mword 6))).
+
+Definition _s1425_ (_s1426_ : string)
+: M (option ((mword 3 * mword 6))) :=
+
+ let _s1427_ := _s1426_ in
+ (if ((string_startswith _s1427_ "c.srai")) then
+ (match (string_drop _s1427_ (projT1 (string_length "c.srai"))) with
+ | _s1428_ =>
+ (spc_matches_prefix _s1428_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1429_ _)) =>
+ (match (string_drop _s1428_ _s1429_) with
+ | _s1430_ =>
+ (creg_name_matches_prefix _s1430_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1431_ _)) =>
+ (match (string_drop _s1430_ _s1431_) with
+ | _s1432_ =>
+ (sep_matches_prefix _s1432_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1433_ _)) =>
+ match (string_drop _s1432_ _s1433_) with
+ | _s1434_ =>
+ match (hex_bits_6_matches_prefix _s1434_) with
+ | Some (shamt,(existT _ _s1435_ _)) =>
+ let p0_ := string_drop _s1434_ _s1435_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ else returnm (None : option ((mword 3 * mword 6))))
+ : M (option ((mword 3 * mword 6))).
+
+Definition _s1413_ (_s1414_ : string)
+: M (option ((mword 3 * mword 6))) :=
+
+ let _s1415_ := _s1414_ in
+ (if ((string_startswith _s1415_ "c.srli")) then
+ (match (string_drop _s1415_ (projT1 (string_length "c.srli"))) with
+ | _s1416_ =>
+ (spc_matches_prefix _s1416_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1417_ _)) =>
+ (match (string_drop _s1416_ _s1417_) with
+ | _s1418_ =>
+ (creg_name_matches_prefix _s1418_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1419_ _)) =>
+ (match (string_drop _s1418_ _s1419_) with
+ | _s1420_ =>
+ (sep_matches_prefix _s1420_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1421_ _)) =>
+ match (string_drop _s1420_ _s1421_) with
+ | _s1422_ =>
+ match (hex_bits_6_matches_prefix _s1422_) with
+ | Some (shamt,(existT _ _s1423_ _)) =>
+ let p0_ := string_drop _s1422_ _s1423_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ else returnm (None : option ((mword 3 * mword 6))))
+ : M (option ((mword 3 * mword 6))).
+
+Definition _s1401_ (_s1402_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1403_ := _s1402_ in
+ (if ((string_startswith _s1403_ "c.lui")) then
+ (match (string_drop _s1403_ (projT1 (string_length "c.lui"))) with
+ | _s1404_ =>
+ (spc_matches_prefix _s1404_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1405_ _)) =>
+ (match (string_drop _s1404_ _s1405_) with
+ | _s1406_ =>
+ (reg_name_matches_prefix _s1406_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1407_ _)) =>
+ (match (string_drop _s1406_ _s1407_) with
+ | _s1408_ =>
+ (sep_matches_prefix _s1408_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1409_ _)) =>
+ match (string_drop _s1408_ _s1409_) with
+ | _s1410_ =>
+ match (hex_bits_6_matches_prefix _s1410_) with
+ | Some (imm,(existT _ _s1411_ _)) =>
+ let p0_ := string_drop _s1410_ _s1411_ in
+ if ((generic_eq p0_ "")) then Some ((rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1393_ (_s1394_ : string)
+: M (option (mword 6)) :=
+
+ let _s1395_ := _s1394_ in
+ (if ((string_startswith _s1395_ "c.addi16sp")) then
+ (match (string_drop _s1395_ (projT1 (string_length "c.addi16sp"))) with
+ | _s1396_ =>
+ (spc_matches_prefix _s1396_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s1397_ _)) =>
+ match (string_drop _s1396_ _s1397_) with
+ | _s1398_ =>
+ match (hex_bits_6_matches_prefix _s1398_) with
+ | Some (imm,(existT _ _s1399_ _)) =>
+ let p0_ := string_drop _s1398_ _s1399_ in
+ if ((generic_eq p0_ "")) then Some (imm)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 6))
+ end)
+ : M (option (mword 6))
+ else returnm (None : option (mword 6)))
+ : M (option (mword 6)).
+
+Definition _s1381_ (_s1382_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1383_ := _s1382_ in
+ (if ((string_startswith _s1383_ "c.li")) then
+ (match (string_drop _s1383_ (projT1 (string_length "c.li"))) with
+ | _s1384_ =>
+ (spc_matches_prefix _s1384_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1385_ _)) =>
+ (match (string_drop _s1384_ _s1385_) with
+ | _s1386_ =>
+ (reg_name_matches_prefix _s1386_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1387_ _)) =>
+ (match (string_drop _s1386_ _s1387_) with
+ | _s1388_ =>
+ (sep_matches_prefix _s1388_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1389_ _)) =>
+ match (string_drop _s1388_ _s1389_) with
+ | _s1390_ =>
+ match (hex_bits_6_matches_prefix _s1390_) with
+ | Some (imm,(existT _ _s1391_ _)) =>
+ let p0_ := string_drop _s1390_ _s1391_ in
+ if ((generic_eq p0_ "")) then Some ((rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1369_ (_s1370_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1371_ := _s1370_ in
+ (if ((string_startswith _s1371_ "c.addiw")) then
+ (match (string_drop _s1371_ (projT1 (string_length "c.addiw"))) with
+ | _s1372_ =>
+ (spc_matches_prefix _s1372_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1373_ _)) =>
+ (match (string_drop _s1372_ _s1373_) with
+ | _s1374_ =>
+ (reg_name_matches_prefix _s1374_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1375_ _)) =>
+ (match (string_drop _s1374_ _s1375_) with
+ | _s1376_ =>
+ (sep_matches_prefix _s1376_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1377_ _)) =>
+ match (string_drop _s1376_ _s1377_) with
+ | _s1378_ =>
+ match (hex_bits_6_matches_prefix _s1378_) with
+ | Some (imm,(existT _ _s1379_ _)) =>
+ let p0_ := string_drop _s1378_ _s1379_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1361_ (_s1362_ : string)
+: M (option (mword 11)) :=
+
+ let _s1363_ := _s1362_ in
+ (if ((string_startswith _s1363_ "c.jal")) then
+ (match (string_drop _s1363_ (projT1 (string_length "c.jal"))) with
+ | _s1364_ =>
+ (spc_matches_prefix _s1364_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s1365_ _)) =>
+ match (string_drop _s1364_ _s1365_) with
+ | _s1366_ =>
+ match (hex_bits_12_matches_prefix _s1366_) with
+ | Some (v__760,(existT _ _s1367_ _)) =>
+ if ((eq_vec (subrange_vec_dec v__760 0 0)
+ (vec_of_bits [B0] : mword (0 - 0 + 1)))) then
+ let imm : mword 11 := subrange_vec_dec v__760 11 1 in
+ let imm : mword 11 := subrange_vec_dec v__760 11 1 in
+ let p0_ := string_drop _s1366_ _s1367_ in
+ if ((generic_eq p0_ "")) then Some (imm)
+ else None
+ else
+ let g__34 := Some ((v__760, _s1367_)) in
+ None
+ | g__34 => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 11))
+ end)
+ : M (option (mword 11))
+ else returnm (None : option (mword 11)))
+ : M (option (mword 11)).
+
+Definition _s1349_ (_s1350_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s1351_ := _s1350_ in
+ (if ((string_startswith _s1351_ "c.addi")) then
+ (match (string_drop _s1351_ (projT1 (string_length "c.addi"))) with
+ | _s1352_ =>
+ (spc_matches_prefix _s1352_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1353_ _)) =>
+ (match (string_drop _s1352_ _s1353_) with
+ | _s1354_ =>
+ (reg_name_matches_prefix _s1354_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s1355_ _)) =>
+ (match (string_drop _s1354_ _s1355_) with
+ | _s1356_ =>
+ (sep_matches_prefix _s1356_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1357_ _)) =>
+ match (string_drop _s1356_ _s1357_) with
+ | _s1358_ =>
+ match (hex_bits_6_matches_prefix _s1358_) with
+ | Some (nzi,(existT _ _s1359_ _)) =>
+ let p0_ := string_drop _s1358_ _s1359_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, nzi))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s1333_ (_s1334_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s1335_ := _s1334_ in
+ (if ((string_startswith _s1335_ "c.sd")) then
+ (match (string_drop _s1335_ (projT1 (string_length "c.sd"))) with
+ | _s1336_ =>
+ (spc_matches_prefix _s1336_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1337_ _)) =>
+ (match (string_drop _s1336_ _s1337_) with
+ | _s1338_ =>
+ (creg_name_matches_prefix _s1338_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsc1,(existT _ _s1339_ _)) =>
+ (match (string_drop _s1338_ _s1339_) with
+ | _s1340_ =>
+ (sep_matches_prefix _s1340_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1341_ _)) =>
+ (match (string_drop _s1340_ _s1341_) with
+ | _s1342_ =>
+ (creg_name_matches_prefix _s1342_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc2,(existT _ _s1343_ _)) =>
+ (match (string_drop _s1342_ _s1343_) with
+ | _s1344_ =>
+ (sep_matches_prefix _s1344_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s1345_ _)) =>
+ match (string_drop _s1344_ _s1345_) with
+ | _s1346_ =>
+ match (hex_bits_8_matches_prefix _s1346_) with
+ | Some (v__762,(existT _ _s1347_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__762 2 0)
+ (vec_of_bits [B0;B0;B0]
+ : mword (2 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__762 7 3 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__762 7 3 in
+ let p0_ :=
+ string_drop _s1346_ _s1347_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rsc1, rsc2, uimm))
+ else None
+ else
+ let g__33 := Some ((v__762, _s1347_)) in
+ None
+ | g__33 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s1317_ (_s1318_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s1319_ := _s1318_ in
+ (if ((string_startswith _s1319_ "c.sw")) then
+ (match (string_drop _s1319_ (projT1 (string_length "c.sw"))) with
+ | _s1320_ =>
+ (spc_matches_prefix _s1320_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1321_ _)) =>
+ (match (string_drop _s1320_ _s1321_) with
+ | _s1322_ =>
+ (creg_name_matches_prefix _s1322_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsc1,(existT _ _s1323_ _)) =>
+ (match (string_drop _s1322_ _s1323_) with
+ | _s1324_ =>
+ (sep_matches_prefix _s1324_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1325_ _)) =>
+ (match (string_drop _s1324_ _s1325_) with
+ | _s1326_ =>
+ (creg_name_matches_prefix _s1326_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc2,(existT _ _s1327_ _)) =>
+ (match (string_drop _s1326_ _s1327_) with
+ | _s1328_ =>
+ (sep_matches_prefix _s1328_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s1329_ _)) =>
+ match (string_drop _s1328_ _s1329_) with
+ | _s1330_ =>
+ match (hex_bits_7_matches_prefix _s1330_) with
+ | Some (v__764,(existT _ _s1331_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__764 1 0)
+ (vec_of_bits [B0;B0]
+ : mword (1 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__764 6 2 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__764 6 2 in
+ let p0_ :=
+ string_drop _s1330_ _s1331_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rsc1, rsc2, uimm))
+ else None
+ else
+ let g__32 := Some ((v__764, _s1331_)) in
+ None
+ | g__32 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s1301_ (_s1302_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s1303_ := _s1302_ in
+ (if ((string_startswith _s1303_ "c.ld")) then
+ (match (string_drop _s1303_ (projT1 (string_length "c.ld"))) with
+ | _s1304_ =>
+ (spc_matches_prefix _s1304_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1305_ _)) =>
+ (match (string_drop _s1304_ _s1305_) with
+ | _s1306_ =>
+ (creg_name_matches_prefix _s1306_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s1307_ _)) =>
+ (match (string_drop _s1306_ _s1307_) with
+ | _s1308_ =>
+ (sep_matches_prefix _s1308_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1309_ _)) =>
+ (match (string_drop _s1308_ _s1309_) with
+ | _s1310_ =>
+ (creg_name_matches_prefix _s1310_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc,(existT _ _s1311_ _)) =>
+ (match (string_drop _s1310_ _s1311_) with
+ | _s1312_ =>
+ (sep_matches_prefix _s1312_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s1313_ _)) =>
+ match (string_drop _s1312_ _s1313_) with
+ | _s1314_ =>
+ match (hex_bits_8_matches_prefix _s1314_) with
+ | Some (v__766,(existT _ _s1315_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__766 2 0)
+ (vec_of_bits [B0;B0;B0]
+ : mword (2 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__766 7 3 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__766 7 3 in
+ let p0_ :=
+ string_drop _s1314_ _s1315_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rdc, rsc, uimm))
+ else None
+ else
+ let g__31 := Some ((v__766, _s1315_)) in
+ None
+ | g__31 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s1285_ (_s1286_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s1287_ := _s1286_ in
+ (if ((string_startswith _s1287_ "c.lw")) then
+ (match (string_drop _s1287_ (projT1 (string_length "c.lw"))) with
+ | _s1288_ =>
+ (spc_matches_prefix _s1288_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1289_ _)) =>
+ (match (string_drop _s1288_ _s1289_) with
+ | _s1290_ =>
+ (creg_name_matches_prefix _s1290_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s1291_ _)) =>
+ (match (string_drop _s1290_ _s1291_) with
+ | _s1292_ =>
+ (sep_matches_prefix _s1292_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1293_ _)) =>
+ (match (string_drop _s1292_ _s1293_) with
+ | _s1294_ =>
+ (creg_name_matches_prefix _s1294_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc,(existT _ _s1295_ _)) =>
+ (match (string_drop _s1294_ _s1295_) with
+ | _s1296_ =>
+ (sep_matches_prefix _s1296_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s1297_ _)) =>
+ match (string_drop _s1296_ _s1297_) with
+ | _s1298_ =>
+ match (hex_bits_7_matches_prefix _s1298_) with
+ | Some (v__768,(existT _ _s1299_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__768 1 0)
+ (vec_of_bits [B0;B0]
+ : mword (1 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__768 6 2 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__768 6 2 in
+ let p0_ :=
+ string_drop _s1298_ _s1299_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rdc, rsc, uimm))
+ else None
+ else
+ let g__30 := Some ((v__768, _s1299_)) in
+ None
+ | g__30 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s1273_ (_s1274_ : string)
+: M (option ((mword 3 * mword 8))) :=
+
+ let _s1275_ := _s1274_ in
+ (if ((string_startswith _s1275_ "c.addi4spn")) then
+ (match (string_drop _s1275_ (projT1 (string_length "c.addi4spn"))) with
+ | _s1276_ =>
+ (spc_matches_prefix _s1276_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1277_ _)) =>
+ (match (string_drop _s1276_ _s1277_) with
+ | _s1278_ =>
+ (creg_name_matches_prefix _s1278_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s1279_ _)) =>
+ (match (string_drop _s1278_ _s1279_) with
+ | _s1280_ =>
+ (sep_matches_prefix _s1280_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1281_ _)) =>
+ match (string_drop _s1280_ _s1281_) with
+ | _s1282_ =>
+ match (hex_bits_10_matches_prefix _s1282_) with
+ | Some (v__770,(existT _ _s1283_ _)) =>
+ if ((eq_vec (subrange_vec_dec v__770 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))
+ then
+ let nzimm : mword 8 := subrange_vec_dec v__770 9 2 in
+ let nzimm : mword 8 := subrange_vec_dec v__770 9 2 in
+ let p0_ := string_drop _s1282_ _s1283_ in
+ if ((generic_eq p0_ "")) then Some ((rdc, nzimm))
+ else None
+ else
+ let g__29 := Some ((v__770, _s1283_)) in
+ None
+ | g__29 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ else returnm (None : option ((mword 3 * mword 8))))
+ : M (option ((mword 3 * mword 8))).
+
+Definition _s1256_ (_s1257_ : string)
+: M (option ((csrop * mword 5 * mword 5 * mword 12))) :=
+
+ (match _s1257_ with
+ | _s1258_ =>
+ (csr_mnemonic_matches_prefix _s1258_) >>= fun w__0 : option ((csrop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1259_ _)) =>
+ (match (string_drop _s1258_ _s1259_) with
+ | _s1260_ =>
+ (spc_matches_prefix _s1260_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1261_ _)) =>
+ (match (string_drop _s1260_ _s1261_) with
+ | _s1262_ =>
+ (reg_name_matches_prefix _s1262_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1263_ _)) =>
+ (match (string_drop _s1262_ _s1263_) with
+ | _s1264_ =>
+ (sep_matches_prefix _s1264_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1265_ _)) =>
+ (match (string_drop _s1264_ _s1265_) with
+ | _s1266_ =>
+ (reg_name_matches_prefix _s1266_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1267_ _)) =>
+ (match (string_drop _s1266_ _s1267_) with
+ | _s1268_ =>
+ (sep_matches_prefix _s1268_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1269_ _)) =>
+ (match (string_drop _s1268_ _s1269_) with
+ | _s1270_ =>
+ (csr_name_map_matches_prefix _s1270_) >>= fun w__6 : option ((mword 12 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (csr,(existT _ _s1271_ _)) =>
+ let p0_ :=
+ string_drop _s1270_ _s1271_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, csr))
+ else None
+ | _ => None
+ end)
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12))).
+
+Definition _s1238_ (_s1239_ : string)
+: M (option ((csrop * mword 5 * mword 5 * mword 12))) :=
+
+ (match _s1239_ with
+ | _s1240_ =>
+ (csr_mnemonic_matches_prefix _s1240_) >>= fun w__0 : option ((csrop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1241_ _)) =>
+ let _s1242_ := string_drop _s1240_ _s1241_ in
+ (if ((string_startswith _s1242_ "i")) then
+ (match (string_drop _s1242_ (projT1 (string_length "i"))) with
+ | _s1243_ =>
+ (spc_matches_prefix _s1243_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1244_ _)) =>
+ (match (string_drop _s1243_ _s1244_) with
+ | _s1245_ =>
+ (reg_name_matches_prefix _s1245_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1246_ _)) =>
+ (match (string_drop _s1245_ _s1246_) with
+ | _s1247_ =>
+ (sep_matches_prefix _s1247_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1248_ _)) =>
+ (match (string_drop _s1247_ _s1248_) with
+ | _s1249_ =>
+ (match (hex_bits_5_matches_prefix _s1249_) with
+ | Some (rs1,(existT _ _s1250_ _)) =>
+ (match (string_drop _s1249_ _s1250_) with
+ | _s1251_ =>
+ (sep_matches_prefix _s1251_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s1252_ _)) =>
+ (match (string_drop _s1251_ _s1252_) with
+ | _s1253_ =>
+ (csr_name_map_matches_prefix _s1253_) >>= fun w__5 : option ((mword 12 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some
+ (csr,(existT _ _s1254_ _)) =>
+ let p0_ :=
+ string_drop _s1253_ _s1254_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, csr))
+ else None
+ | _ => None
+ end)
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((csrop * mword 5 * mword 5 * mword 12))))
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12))).
+
+Definition _s1214_ (_s1215_ : string)
+: M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1215_ with
+ | _s1216_ =>
+ (amo_mnemonic_matches_prefix _s1216_) >>= fun w__0 : option ((amoop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1217_ _)) =>
+ let _s1218_ := string_drop _s1216_ _s1217_ in
+ (if ((string_startswith _s1218_ ".")) then
+ (match (string_drop _s1218_ (projT1 (string_length "."))) with
+ | _s1219_ =>
+ (size_mnemonic_matches_prefix _s1219_) >>= fun w__1 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (width,(existT _ _s1220_ _)) =>
+ (match (string_drop _s1219_ _s1220_) with
+ | _s1221_ =>
+ (maybe_aq_matches_prefix _s1221_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (aq,(existT _ _s1222_ _)) =>
+ (match (string_drop _s1221_ _s1222_) with
+ | _s1223_ =>
+ (maybe_rl_matches_prefix _s1223_) >>= fun w__3 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rl,(existT _ _s1224_ _)) =>
+ (match (string_drop _s1223_ _s1224_) with
+ | _s1225_ =>
+ (spc_matches_prefix _s1225_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s1226_ _)) =>
+ (match (string_drop _s1225_ _s1226_) with
+ | _s1227_ =>
+ (reg_name_matches_prefix _s1227_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (rd,(existT _ _s1228_ _)) =>
+ (match (string_drop _s1227_ _s1228_) with
+ | _s1229_ =>
+ (sep_matches_prefix _s1229_) >>= fun w__6 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (tt,(existT _ _s1230_ _)) =>
+ (match (string_drop _s1229_ _s1230_) with
+ | _s1231_ =>
+ (reg_name_matches_prefix _s1231_) >>= fun w__7 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (rs1,(existT _ _s1232_ _)) =>
+ (match (string_drop _s1231_
+ _s1232_) with
+ | _s1233_ =>
+ (sep_matches_prefix
+ _s1233_) >>= fun w__8 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__8 with
+ | Some
+ (tt,(existT _ _s1234_ _)) =>
+ (match (string_drop
+ _s1233_
+ _s1234_) with
+ | _s1235_ =>
+ (reg_name_matches_prefix
+ _s1235_) >>= fun w__9 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__9 with
+ | Some
+ (rs2,(existT _ _s1236_ _)) =>
+ let p0_ :=
+ string_drop
+ _s1235_
+ _s1236_ in
+ if ((generic_eq
+ p0_
+ ""))
+ then
+ Some
+ ((op, width, aq, rl, rd, rs1, rs2))
+ else
+ None
+ | _ =>
+ None
+ end)
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ else
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1192_ (_s1193_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1194_ := _s1193_ in
+ (if ((string_startswith _s1194_ "sc.")) then
+ (match (string_drop _s1194_ (projT1 (string_length "sc."))) with
+ | _s1195_ =>
+ (size_mnemonic_matches_prefix _s1195_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s1196_ _)) =>
+ (match (string_drop _s1195_ _s1196_) with
+ | _s1197_ =>
+ (maybe_aq_matches_prefix _s1197_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s1198_ _)) =>
+ (match (string_drop _s1197_ _s1198_) with
+ | _s1199_ =>
+ (maybe_rl_matches_prefix _s1199_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s1200_ _)) =>
+ (match (string_drop _s1199_ _s1200_) with
+ | _s1201_ =>
+ (spc_matches_prefix _s1201_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1202_ _)) =>
+ (match (string_drop _s1201_ _s1202_) with
+ | _s1203_ =>
+ (reg_name_matches_prefix _s1203_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s1204_ _)) =>
+ (match (string_drop _s1203_ _s1204_) with
+ | _s1205_ =>
+ (sep_matches_prefix _s1205_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1206_ _)) =>
+ (match (string_drop _s1205_ _s1206_) with
+ | _s1207_ =>
+ (reg_name_matches_prefix _s1207_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (rs1,(existT _ _s1208_ _)) =>
+ (match (string_drop _s1207_ _s1208_) with
+ | _s1209_ =>
+ (sep_matches_prefix _s1209_) >>= fun w__7 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (tt,(existT _ _s1210_ _)) =>
+ (match (string_drop _s1209_
+ _s1210_) with
+ | _s1211_ =>
+ (reg_name_matches_prefix
+ _s1211_) >>= fun w__8 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__8 with
+ | Some
+ (rs2,(existT _ _s1212_ _)) =>
+ let p0_ :=
+ string_drop
+ _s1211_
+ _s1212_ in
+ if ((generic_eq
+ p0_ ""))
+ then
+ Some
+ ((size, aq, rl, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1174_ (_s1175_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5))) :=
+
+ let _s1176_ := _s1175_ in
+ (if ((string_startswith _s1176_ "lr.")) then
+ (match (string_drop _s1176_ (projT1 (string_length "lr."))) with
+ | _s1177_ =>
+ (size_mnemonic_matches_prefix _s1177_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s1178_ _)) =>
+ (match (string_drop _s1177_ _s1178_) with
+ | _s1179_ =>
+ (maybe_aq_matches_prefix _s1179_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s1180_ _)) =>
+ (match (string_drop _s1179_ _s1180_) with
+ | _s1181_ =>
+ (maybe_rl_matches_prefix _s1181_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s1182_ _)) =>
+ (match (string_drop _s1181_ _s1182_) with
+ | _s1183_ =>
+ (spc_matches_prefix _s1183_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1184_ _)) =>
+ (match (string_drop _s1183_ _s1184_) with
+ | _s1185_ =>
+ (reg_name_matches_prefix _s1185_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s1186_ _)) =>
+ (match (string_drop _s1185_ _s1186_) with
+ | _s1187_ =>
+ (sep_matches_prefix _s1187_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1188_ _)) =>
+ (match (string_drop _s1187_ _s1188_) with
+ | _s1189_ =>
+ (reg_name_matches_prefix _s1189_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs1,(existT _ _s1190_ _)) =>
+ let p0_ :=
+ string_drop _s1189_ _s1190_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((size, aq, rl, rd, rs1))
+ else None
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ => returnm (None : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ => returnm (None : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5))).
+
+Definition _s1162_ (_s1163_ : string)
+: M (option ((mword 5 * mword 5))) :=
+
+ let _s1164_ := _s1163_ in
+ (if ((string_startswith _s1164_ "sfence.vma")) then
+ (match (string_drop _s1164_ (projT1 (string_length "sfence.vma"))) with
+ | _s1165_ =>
+ (spc_matches_prefix _s1165_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1166_ _)) =>
+ (match (string_drop _s1165_ _s1166_) with
+ | _s1167_ =>
+ (reg_name_matches_prefix _s1167_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs1,(existT _ _s1168_ _)) =>
+ (match (string_drop _s1167_ _s1168_) with
+ | _s1169_ =>
+ (sep_matches_prefix _s1169_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1170_ _)) =>
+ (match (string_drop _s1169_ _s1170_) with
+ | _s1171_ =>
+ (reg_name_matches_prefix _s1171_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s1172_ _)) =>
+ let p0_ := string_drop _s1171_ _s1172_ in
+ if ((generic_eq p0_ "")) then Some ((rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5))).
+
+Definition _s1150_ (_s1151_ : string)
+: M (option ((mword 4 * mword 4))) :=
+
+ let _s1152_ := _s1151_ in
+ (if ((string_startswith _s1152_ "fence.tso")) then
+ (match (string_drop _s1152_ (projT1 (string_length "fence.tso"))) with
+ | _s1153_ =>
+ (spc_matches_prefix _s1153_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1154_ _)) =>
+ (match (string_drop _s1153_ _s1154_) with
+ | _s1155_ =>
+ (fence_bits_matches_prefix _s1155_) >>= fun w__1 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (pred,(existT _ _s1156_ _)) =>
+ (match (string_drop _s1155_ _s1156_) with
+ | _s1157_ =>
+ (sep_matches_prefix _s1157_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1158_ _)) =>
+ (match (string_drop _s1157_ _s1158_) with
+ | _s1159_ =>
+ (fence_bits_matches_prefix _s1159_) >>= fun w__3 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (succ,(existT _ _s1160_ _)) =>
+ let p0_ := string_drop _s1159_ _s1160_ in
+ if ((generic_eq p0_ "")) then Some ((pred, succ))
+ else None
+ | _ => None
+ end)
+ : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ else returnm (None : option ((mword 4 * mword 4))))
+ : M (option ((mword 4 * mword 4))).
+
+Definition _s1138_ (_s1139_ : string)
+: M (option ((mword 4 * mword 4))) :=
+
+ let _s1140_ := _s1139_ in
+ (if ((string_startswith _s1140_ "fence")) then
+ (match (string_drop _s1140_ (projT1 (string_length "fence"))) with
+ | _s1141_ =>
+ (spc_matches_prefix _s1141_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1142_ _)) =>
+ (match (string_drop _s1141_ _s1142_) with
+ | _s1143_ =>
+ (fence_bits_matches_prefix _s1143_) >>= fun w__1 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (pred,(existT _ _s1144_ _)) =>
+ (match (string_drop _s1143_ _s1144_) with
+ | _s1145_ =>
+ (sep_matches_prefix _s1145_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1146_ _)) =>
+ (match (string_drop _s1145_ _s1146_) with
+ | _s1147_ =>
+ (fence_bits_matches_prefix _s1147_) >>= fun w__3 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (succ,(existT _ _s1148_ _)) =>
+ let p0_ := string_drop _s1147_ _s1148_ in
+ if ((generic_eq p0_ "")) then Some ((pred, succ))
+ else None
+ | _ => None
+ end)
+ : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ else returnm (None : option ((mword 4 * mword 4))))
+ : M (option ((mword 4 * mword 4))).
+
+Definition _s1119_ (_s1120_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1121_ := _s1120_ in
+ (if ((string_startswith _s1121_ "rem")) then
+ (match (string_drop _s1121_ (projT1 (string_length "rem"))) with
+ | _s1122_ =>
+ (maybe_not_u_matches_prefix _s1122_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1123_ _)) =>
+ let _s1124_ := string_drop _s1122_ _s1123_ in
+ (if ((string_startswith _s1124_ "w")) then
+ (match (string_drop _s1124_ (projT1 (string_length "w"))) with
+ | _s1125_ =>
+ (spc_matches_prefix _s1125_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1126_ _)) =>
+ (match (string_drop _s1125_ _s1126_) with
+ | _s1127_ =>
+ (reg_name_matches_prefix _s1127_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1128_ _)) =>
+ (match (string_drop _s1127_ _s1128_) with
+ | _s1129_ =>
+ (sep_matches_prefix _s1129_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1130_ _)) =>
+ (match (string_drop _s1129_ _s1130_) with
+ | _s1131_ =>
+ (reg_name_matches_prefix _s1131_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1132_ _)) =>
+ (match (string_drop _s1131_ _s1132_) with
+ | _s1133_ =>
+ (sep_matches_prefix _s1133_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1134_ _)) =>
+ (match (string_drop _s1133_ _s1134_) with
+ | _s1135_ =>
+ (reg_name_matches_prefix _s1135_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1136_ _)) =>
+ let p0_ :=
+ string_drop _s1135_
+ _s1136_ in
+ if ((generic_eq p0_ ""))
+ then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1100_ (_s1101_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1102_ := _s1101_ in
+ (if ((string_startswith _s1102_ "div")) then
+ (match (string_drop _s1102_ (projT1 (string_length "div"))) with
+ | _s1103_ =>
+ (maybe_not_u_matches_prefix _s1103_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1104_ _)) =>
+ let _s1105_ := string_drop _s1103_ _s1104_ in
+ (if ((string_startswith _s1105_ "w")) then
+ (match (string_drop _s1105_ (projT1 (string_length "w"))) with
+ | _s1106_ =>
+ (spc_matches_prefix _s1106_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1107_ _)) =>
+ (match (string_drop _s1106_ _s1107_) with
+ | _s1108_ =>
+ (reg_name_matches_prefix _s1108_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1109_ _)) =>
+ (match (string_drop _s1108_ _s1109_) with
+ | _s1110_ =>
+ (sep_matches_prefix _s1110_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1111_ _)) =>
+ (match (string_drop _s1110_ _s1111_) with
+ | _s1112_ =>
+ (reg_name_matches_prefix _s1112_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1113_ _)) =>
+ (match (string_drop _s1112_ _s1113_) with
+ | _s1114_ =>
+ (sep_matches_prefix _s1114_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1115_ _)) =>
+ (match (string_drop _s1114_ _s1115_) with
+ | _s1116_ =>
+ (reg_name_matches_prefix _s1116_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1117_ _)) =>
+ let p0_ :=
+ string_drop _s1116_
+ _s1117_ in
+ if ((generic_eq p0_ ""))
+ then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1084_ (_s1085_ : string)
+: M (option ((mword 5 * mword 5 * mword 5))) :=
+
+ let _s1086_ := _s1085_ in
+ (if ((string_startswith _s1086_ "mulw")) then
+ (match (string_drop _s1086_ (projT1 (string_length "mulw"))) with
+ | _s1087_ =>
+ (spc_matches_prefix _s1087_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1088_ _)) =>
+ (match (string_drop _s1087_ _s1088_) with
+ | _s1089_ =>
+ (reg_name_matches_prefix _s1089_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1090_ _)) =>
+ (match (string_drop _s1089_ _s1090_) with
+ | _s1091_ =>
+ (sep_matches_prefix _s1091_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1092_ _)) =>
+ (match (string_drop _s1091_ _s1092_) with
+ | _s1093_ =>
+ (reg_name_matches_prefix _s1093_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s1094_ _)) =>
+ (match (string_drop _s1093_ _s1094_) with
+ | _s1095_ =>
+ (sep_matches_prefix _s1095_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s1096_ _)) =>
+ (match (string_drop _s1095_ _s1096_) with
+ | _s1097_ =>
+ (reg_name_matches_prefix _s1097_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (rs2,(existT _ _s1098_ _)) =>
+ let p0_ :=
+ string_drop _s1097_ _s1098_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5 * mword 5))).
+
+Definition _s1066_ (_s1067_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1068_ := _s1067_ in
+ (if ((string_startswith _s1068_ "rem")) then
+ (match (string_drop _s1068_ (projT1 (string_length "rem"))) with
+ | _s1069_ =>
+ (maybe_not_u_matches_prefix _s1069_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1070_ _)) =>
+ (match (string_drop _s1069_ _s1070_) with
+ | _s1071_ =>
+ (spc_matches_prefix _s1071_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1072_ _)) =>
+ (match (string_drop _s1071_ _s1072_) with
+ | _s1073_ =>
+ (reg_name_matches_prefix _s1073_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1074_ _)) =>
+ (match (string_drop _s1073_ _s1074_) with
+ | _s1075_ =>
+ (sep_matches_prefix _s1075_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1076_ _)) =>
+ (match (string_drop _s1075_ _s1076_) with
+ | _s1077_ =>
+ (reg_name_matches_prefix _s1077_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1078_ _)) =>
+ (match (string_drop _s1077_ _s1078_) with
+ | _s1079_ =>
+ (sep_matches_prefix _s1079_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1080_ _)) =>
+ (match (string_drop _s1079_ _s1080_) with
+ | _s1081_ =>
+ (reg_name_matches_prefix _s1081_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1082_ _)) =>
+ let p0_ :=
+ string_drop _s1081_ _s1082_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1048_ (_s1049_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1050_ := _s1049_ in
+ (if ((string_startswith _s1050_ "div")) then
+ (match (string_drop _s1050_ (projT1 (string_length "div"))) with
+ | _s1051_ =>
+ (maybe_not_u_matches_prefix _s1051_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1052_ _)) =>
+ (match (string_drop _s1051_ _s1052_) with
+ | _s1053_ =>
+ (spc_matches_prefix _s1053_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1054_ _)) =>
+ (match (string_drop _s1053_ _s1054_) with
+ | _s1055_ =>
+ (reg_name_matches_prefix _s1055_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1056_ _)) =>
+ (match (string_drop _s1055_ _s1056_) with
+ | _s1057_ =>
+ (sep_matches_prefix _s1057_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1058_ _)) =>
+ (match (string_drop _s1057_ _s1058_) with
+ | _s1059_ =>
+ (reg_name_matches_prefix _s1059_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1060_ _)) =>
+ (match (string_drop _s1059_ _s1060_) with
+ | _s1061_ =>
+ (sep_matches_prefix _s1061_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1062_ _)) =>
+ (match (string_drop _s1061_ _s1062_) with
+ | _s1063_ =>
+ (reg_name_matches_prefix _s1063_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1064_ _)) =>
+ let p0_ :=
+ string_drop _s1063_ _s1064_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1031_ (_s1032_ : string)
+: M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1032_ with
+ | _s1033_ =>
+ (mul_mnemonic_matches_prefix _s1033_) >>= fun w__0 : option (((bool * bool * bool) * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some ((high, signed1, signed2),(existT _ _s1034_ _)) =>
+ (match (string_drop _s1033_ _s1034_) with
+ | _s1035_ =>
+ (spc_matches_prefix _s1035_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1036_ _)) =>
+ (match (string_drop _s1035_ _s1036_) with
+ | _s1037_ =>
+ (reg_name_matches_prefix _s1037_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1038_ _)) =>
+ (match (string_drop _s1037_ _s1038_) with
+ | _s1039_ =>
+ (sep_matches_prefix _s1039_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1040_ _)) =>
+ (match (string_drop _s1039_ _s1040_) with
+ | _s1041_ =>
+ (reg_name_matches_prefix _s1041_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1042_ _)) =>
+ (match (string_drop _s1041_ _s1042_) with
+ | _s1043_ =>
+ (sep_matches_prefix _s1043_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1044_ _)) =>
+ (match (string_drop _s1043_ _s1044_) with
+ | _s1045_ =>
+ (reg_name_matches_prefix _s1045_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s1046_ _)) =>
+ let p0_ :=
+ string_drop _s1045_ _s1046_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((high, signed1, signed2, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1016_ (_s1017_ : string)
+: M (option ((sopw * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1017_ with
+ | _s1018_ =>
+ (shiftiwop_mnemonic_matches_prefix _s1018_) >>= fun w__0 : option ((sopw * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1019_ _)) =>
+ (match (string_drop _s1018_ _s1019_) with
+ | _s1020_ =>
+ (spc_matches_prefix _s1020_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1021_ _)) =>
+ (match (string_drop _s1020_ _s1021_) with
+ | _s1022_ =>
+ (reg_name_matches_prefix _s1022_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1023_ _)) =>
+ (match (string_drop _s1022_ _s1023_) with
+ | _s1024_ =>
+ (sep_matches_prefix _s1024_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1025_ _)) =>
+ (match (string_drop _s1024_ _s1025_) with
+ | _s1026_ =>
+ (reg_name_matches_prefix _s1026_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (rs1,(existT _ _s1027_ _)) =>
+ match (string_drop _s1026_ _s1027_) with
+ | _s1028_ =>
+ match (hex_bits_5_matches_prefix _s1028_) with
+ | Some (shamt,(existT _ _s1029_ _)) =>
+ let p0_ := string_drop _s1028_ _s1029_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5))).
+
+Definition _s999_ (_s1000_ : string)
+: M (option ((ropw * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1000_ with
+ | _s1001_ =>
+ (rtypew_mnemonic_matches_prefix _s1001_) >>= fun w__0 : option ((ropw * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1002_ _)) =>
+ (match (string_drop _s1001_ _s1002_) with
+ | _s1003_ =>
+ (spc_matches_prefix _s1003_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1004_ _)) =>
+ (match (string_drop _s1003_ _s1004_) with
+ | _s1005_ =>
+ (reg_name_matches_prefix _s1005_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1006_ _)) =>
+ (match (string_drop _s1005_ _s1006_) with
+ | _s1007_ =>
+ (sep_matches_prefix _s1007_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1008_ _)) =>
+ (match (string_drop _s1007_ _s1008_) with
+ | _s1009_ =>
+ (reg_name_matches_prefix _s1009_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1010_ _)) =>
+ (match (string_drop _s1009_ _s1010_) with
+ | _s1011_ =>
+ (sep_matches_prefix _s1011_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1012_ _)) =>
+ (match (string_drop _s1011_ _s1012_) with
+ | _s1013_ =>
+ (reg_name_matches_prefix _s1013_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s1014_ _)) =>
+ let p0_ :=
+ string_drop _s1013_ _s1014_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5))).
+
+Definition _s982_ (_s983_ : string)
+: M (option ((sop * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s983_ with
+ | _s984_ =>
+ (shiftw_mnemonic_matches_prefix _s984_) >>= fun w__0 : option ((sop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s985_ _)) =>
+ (match (string_drop _s984_ _s985_) with
+ | _s986_ =>
+ (spc_matches_prefix _s986_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s987_ _)) =>
+ (match (string_drop _s986_ _s987_) with
+ | _s988_ =>
+ (reg_name_matches_prefix _s988_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s989_ _)) =>
+ (match (string_drop _s988_ _s989_) with
+ | _s990_ =>
+ (sep_matches_prefix _s990_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s991_ _)) =>
+ (match (string_drop _s990_ _s991_) with
+ | _s992_ =>
+ (reg_name_matches_prefix _s992_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s993_ _)) =>
+ (match (string_drop _s992_ _s993_) with
+ | _s994_ =>
+ (sep_matches_prefix _s994_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s995_ _)) =>
+ match (string_drop _s994_ _s995_) with
+ | _s996_ =>
+ match (hex_bits_5_matches_prefix
+ _s996_) with
+ | Some (shamt,(existT _ _s997_ _)) =>
+ let p0_ :=
+ string_drop _s996_ _s997_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5))).
+
+Definition _s966_ (_s967_ : string)
+: M (option ((mword 5 * mword 5 * mword 12))) :=
+
+ let _s968_ := _s967_ in
+ (if ((string_startswith _s968_ "addiw")) then
+ (match (string_drop _s968_ (projT1 (string_length "addiw"))) with
+ | _s969_ =>
+ (spc_matches_prefix _s969_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s970_ _)) =>
+ (match (string_drop _s969_ _s970_) with
+ | _s971_ =>
+ (reg_name_matches_prefix _s971_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s972_ _)) =>
+ (match (string_drop _s971_ _s972_) with
+ | _s973_ =>
+ (sep_matches_prefix _s973_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s974_ _)) =>
+ (match (string_drop _s973_ _s974_) with
+ | _s975_ =>
+ (reg_name_matches_prefix _s975_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s976_ _)) =>
+ (match (string_drop _s975_ _s976_) with
+ | _s977_ =>
+ (sep_matches_prefix _s977_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s978_ _)) =>
+ match (string_drop _s977_ _s978_) with
+ | _s979_ =>
+ match (hex_bits_12_matches_prefix _s979_) with
+ | Some (imm,(existT _ _s980_ _)) =>
+ let p0_ := string_drop _s979_ _s980_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 12))))
+ : M (option ((mword 5 * mword 5 * mword 12))).
+
+Definition _s944_ (_s945_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12))) :=
+
+ let _s946_ := _s945_ in
+ (if ((string_startswith _s946_ "s")) then
+ (match (string_drop _s946_ (projT1 (string_length "s"))) with
+ | _s947_ =>
+ (size_mnemonic_matches_prefix _s947_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s948_ _)) =>
+ (match (string_drop _s947_ _s948_) with
+ | _s949_ =>
+ (maybe_aq_matches_prefix _s949_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s950_ _)) =>
+ (match (string_drop _s949_ _s950_) with
+ | _s951_ =>
+ (maybe_rl_matches_prefix _s951_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s952_ _)) =>
+ (match (string_drop _s951_ _s952_) with
+ | _s953_ =>
+ (spc_matches_prefix _s953_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s954_ _)) =>
+ (match (string_drop _s953_ _s954_) with
+ | _s955_ =>
+ (reg_name_matches_prefix _s955_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s956_ _)) =>
+ (match (string_drop _s955_ _s956_) with
+ | _s957_ =>
+ (sep_matches_prefix _s957_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s958_ _)) =>
+ (match (string_drop _s957_ _s958_) with
+ | _s959_ =>
+ (reg_name_matches_prefix _s959_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (rs1,(existT _ _s960_ _)) =>
+ (match (string_drop _s959_ _s960_) with
+ | _s961_ =>
+ (sep_matches_prefix _s961_) >>= fun w__7 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__7 with
+ | Some
+ (tt,(existT _ _s962_ _)) =>
+ match (string_drop
+ _s961_
+ _s962_) with
+ | _s963_ =>
+ match (hex_bits_12_matches_prefix
+ _s963_) with
+ | Some
+ (imm,(existT _ _s964_ _)) =>
+ let p0_ :=
+ string_drop
+ _s963_
+ _s964_ in
+ if ((generic_eq
+ p0_ ""))
+ then
+ Some
+ ((size, aq, rl, rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12))).
+
+Definition _s920_ (_s921_ : string)
+: M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12))) :=
+
+ let _s922_ := _s921_ in
+ (if ((string_startswith _s922_ "l")) then
+ (match (string_drop _s922_ (projT1 (string_length "l"))) with
+ | _s923_ =>
+ (size_mnemonic_matches_prefix _s923_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s924_ _)) =>
+ (match (string_drop _s923_ _s924_) with
+ | _s925_ =>
+ (maybe_u_matches_prefix _s925_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (is_unsigned,(existT _ _s926_ _)) =>
+ (match (string_drop _s925_ _s926_) with
+ | _s927_ =>
+ (maybe_aq_matches_prefix _s927_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (aq,(existT _ _s928_ _)) =>
+ (match (string_drop _s927_ _s928_) with
+ | _s929_ =>
+ (maybe_rl_matches_prefix _s929_) >>= fun w__3 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rl,(existT _ _s930_ _)) =>
+ (match (string_drop _s929_ _s930_) with
+ | _s931_ =>
+ (spc_matches_prefix _s931_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s932_ _)) =>
+ (match (string_drop _s931_ _s932_) with
+ | _s933_ =>
+ (reg_name_matches_prefix _s933_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (rd,(existT _ _s934_ _)) =>
+ (match (string_drop _s933_ _s934_) with
+ | _s935_ =>
+ (sep_matches_prefix _s935_) >>= fun w__6 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (tt,(existT _ _s936_ _)) =>
+ (match (string_drop _s935_ _s936_) with
+ | _s937_ =>
+ (reg_name_matches_prefix _s937_) >>= fun w__7 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (rs1,(existT _ _s938_ _)) =>
+ (match (string_drop _s937_
+ _s938_) with
+ | _s939_ =>
+ (sep_matches_prefix _s939_) >>= fun w__8 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__8 with
+ | Some
+ (tt,(existT _ _s940_ _)) =>
+ match (string_drop
+ _s939_
+ _s940_) with
+ | _s941_ =>
+ match (hex_bits_12_matches_prefix
+ _s941_) with
+ | Some
+ (imm,(existT _ _s942_ _)) =>
+ let p0_ :=
+ string_drop
+ _s941_
+ _s942_ in
+ if ((generic_eq
+ p0_
+ ""))
+ then
+ Some
+ ((size, is_unsigned, aq, rl, rd, rs1, imm))
+ else
+ None
+ | _ =>
+ None
+ end
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12))))
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12))).
+
+Definition _s903_ (_s904_ : string)
+: M (option ((rop * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s904_ with
+ | _s905_ =>
+ (rtype_mnemonic_matches_prefix _s905_) >>= fun w__0 : option ((rop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s906_ _)) =>
+ (match (string_drop _s905_ _s906_) with
+ | _s907_ =>
+ (spc_matches_prefix _s907_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s908_ _)) =>
+ (match (string_drop _s907_ _s908_) with
+ | _s909_ =>
+ (reg_name_matches_prefix _s909_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s910_ _)) =>
+ (match (string_drop _s909_ _s910_) with
+ | _s911_ =>
+ (sep_matches_prefix _s911_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s912_ _)) =>
+ (match (string_drop _s911_ _s912_) with
+ | _s913_ =>
+ (reg_name_matches_prefix _s913_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s914_ _)) =>
+ (match (string_drop _s913_ _s914_) with
+ | _s915_ =>
+ (sep_matches_prefix _s915_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s916_ _)) =>
+ (match (string_drop _s915_ _s916_) with
+ | _s917_ =>
+ (reg_name_matches_prefix _s917_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s918_ _)) =>
+ let p0_ :=
+ string_drop _s917_ _s918_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5))).
+
+Definition _s888_ (_s889_ : string)
+: M (option ((sop * mword 5 * mword 5 * mword 6))) :=
+
+ (match _s889_ with
+ | _s890_ =>
+ (shiftiop_mnemonic_matches_prefix _s890_) >>= fun w__0 : option ((sop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s891_ _)) =>
+ (match (string_drop _s890_ _s891_) with
+ | _s892_ =>
+ (spc_matches_prefix _s892_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s893_ _)) =>
+ (match (string_drop _s892_ _s893_) with
+ | _s894_ =>
+ (reg_name_matches_prefix _s894_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s895_ _)) =>
+ (match (string_drop _s894_ _s895_) with
+ | _s896_ =>
+ (sep_matches_prefix _s896_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s897_ _)) =>
+ (match (string_drop _s896_ _s897_) with
+ | _s898_ =>
+ (reg_name_matches_prefix _s898_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (rs1,(existT _ _s899_ _)) =>
+ match (string_drop _s898_ _s899_) with
+ | _s900_ =>
+ match (hex_bits_6_matches_prefix _s900_) with
+ | Some (shamt,(existT _ _s901_ _)) =>
+ let p0_ := string_drop _s900_ _s901_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ =>
+ returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6))).
+
+Definition _s871_ (_s872_ : string)
+: M (option ((iop * mword 5 * mword 5 * mword 12))) :=
+
+ (match _s872_ with
+ | _s873_ =>
+ (itype_mnemonic_matches_prefix _s873_) >>= fun w__0 : option ((iop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s874_ _)) =>
+ (match (string_drop _s873_ _s874_) with
+ | _s875_ =>
+ (spc_matches_prefix _s875_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s876_ _)) =>
+ (match (string_drop _s875_ _s876_) with
+ | _s877_ =>
+ (reg_name_matches_prefix _s877_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s878_ _)) =>
+ (match (string_drop _s877_ _s878_) with
+ | _s879_ =>
+ (sep_matches_prefix _s879_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s880_ _)) =>
+ (match (string_drop _s879_ _s880_) with
+ | _s881_ =>
+ (reg_name_matches_prefix _s881_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s882_ _)) =>
+ (match (string_drop _s881_ _s882_) with
+ | _s883_ =>
+ (sep_matches_prefix _s883_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s884_ _)) =>
+ match (string_drop _s883_ _s884_) with
+ | _s885_ =>
+ match (hex_bits_12_matches_prefix
+ _s885_) with
+ | Some (imm,(existT _ _s886_ _)) =>
+ let p0_ :=
+ string_drop _s885_ _s886_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12))).
+
+Definition _s854_ (_s855_ : string)
+: M (option ((bop * mword 5 * mword 5 * mword 13))) :=
+
+ (match _s855_ with
+ | _s856_ =>
+ (btype_mnemonic_matches_prefix _s856_) >>= fun w__0 : option ((bop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s857_ _)) =>
+ (match (string_drop _s856_ _s857_) with
+ | _s858_ =>
+ (spc_matches_prefix _s858_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s859_ _)) =>
+ (match (string_drop _s858_ _s859_) with
+ | _s860_ =>
+ (reg_name_matches_prefix _s860_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rs1,(existT _ _s861_ _)) =>
+ (match (string_drop _s860_ _s861_) with
+ | _s862_ =>
+ (sep_matches_prefix _s862_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s863_ _)) =>
+ (match (string_drop _s862_ _s863_) with
+ | _s864_ =>
+ (reg_name_matches_prefix _s864_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs2,(existT _ _s865_ _)) =>
+ (match (string_drop _s864_ _s865_) with
+ | _s866_ =>
+ (sep_matches_prefix _s866_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s867_ _)) =>
+ match (string_drop _s866_ _s867_) with
+ | _s868_ =>
+ match (hex_bits_13_matches_prefix
+ _s868_) with
+ | Some (imm,(existT _ _s869_ _)) =>
+ let p0_ :=
+ string_drop _s868_ _s869_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rs1, rs2, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ =>
+ returnm (None
+ : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ =>
+ returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13))).
+
+Definition _s838_ (_s839_ : string)
+: M (option ((mword 5 * mword 5 * mword 12))) :=
+
+ let _s840_ := _s839_ in
+ (if ((string_startswith _s840_ "jalr")) then
+ (match (string_drop _s840_ (projT1 (string_length "jalr"))) with
+ | _s841_ =>
+ (spc_matches_prefix _s841_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s842_ _)) =>
+ (match (string_drop _s841_ _s842_) with
+ | _s843_ =>
+ (reg_name_matches_prefix _s843_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s844_ _)) =>
+ (match (string_drop _s843_ _s844_) with
+ | _s845_ =>
+ (sep_matches_prefix _s845_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s846_ _)) =>
+ (match (string_drop _s845_ _s846_) with
+ | _s847_ =>
+ (reg_name_matches_prefix _s847_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s848_ _)) =>
+ (match (string_drop _s847_ _s848_) with
+ | _s849_ =>
+ (sep_matches_prefix _s849_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s850_ _)) =>
+ match (string_drop _s849_ _s850_) with
+ | _s851_ =>
+ match (hex_bits_12_matches_prefix _s851_) with
+ | Some (imm,(existT _ _s852_ _)) =>
+ let p0_ := string_drop _s851_ _s852_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 12))))
+ : M (option ((mword 5 * mword 5 * mword 12))).
+
+Definition _s826_ (_s827_ : string)
+: M (option ((mword 5 * mword 21))) :=
+
+ let _s828_ := _s827_ in
+ (if ((string_startswith _s828_ "jal")) then
+ (match (string_drop _s828_ (projT1 (string_length "jal"))) with
+ | _s829_ =>
+ (spc_matches_prefix _s829_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s830_ _)) =>
+ (match (string_drop _s829_ _s830_) with
+ | _s831_ =>
+ (reg_name_matches_prefix _s831_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s832_ _)) =>
+ (match (string_drop _s831_ _s832_) with
+ | _s833_ =>
+ (sep_matches_prefix _s833_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s834_ _)) =>
+ match (string_drop _s833_ _s834_) with
+ | _s835_ =>
+ match (hex_bits_21_matches_prefix _s835_) with
+ | Some (imm,(existT _ _s836_ _)) =>
+ let p0_ := string_drop _s835_ _s836_ in
+ if ((generic_eq p0_ "")) then Some ((rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ | _ => returnm (None : option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ | _ => returnm (None : option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ else returnm (None : option ((mword 5 * mword 21))))
+ : M (option ((mword 5 * mword 21))).
+
+Definition _s813_ (_s814_ : string)
+: M (option ((uop * mword 5 * mword 20))) :=
+
+ (match _s814_ with
+ | _s815_ =>
+ (utype_mnemonic_matches_prefix _s815_) >>= fun w__0 : option ((uop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s816_ _)) =>
+ (match (string_drop _s815_ _s816_) with
+ | _s817_ =>
+ (spc_matches_prefix _s817_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s818_ _)) =>
+ (match (string_drop _s817_ _s818_) with
+ | _s819_ =>
+ (reg_name_matches_prefix _s819_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s820_ _)) =>
+ (match (string_drop _s819_ _s820_) with
+ | _s821_ =>
+ (sep_matches_prefix _s821_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (tt,(existT _ _s822_ _)) =>
+ match (string_drop _s821_ _s822_) with
+ | _s823_ =>
+ match (hex_bits_20_matches_prefix _s823_) with
+ | Some (imm,(existT _ _s824_ _)) =>
+ let p0_ := string_drop _s823_ _s824_ in
+ if ((generic_eq p0_ "")) then Some ((op, rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20))).
+
+Definition assembly_backwards (arg_ : string)
+: M (ast) :=
+
+ let _s825_ := arg_ in
+ (_s813_ _s825_) >>= fun w__0 : option ((uop * mword 5 * mword 20)) =>
+ (if ((match w__0 with | Some (op,rd,imm) => true | _ => false end)) then
+ (_s813_ _s825_) >>= fun w__1 : option ((uop * mword 5 * mword 20)) =>
+ (match w__1 with
+ | Some (op,rd,imm) => returnm ((UTYPE ((imm, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s826_ _s825_) >>= fun w__4 : option ((mword 5 * mword 21)) =>
+ (if ((match w__4 with | Some (rd,imm) => true | _ => false end)) then
+ (_s826_ _s825_) >>= fun w__5 : option ((mword 5 * mword 21)) =>
+ (match w__5 with
+ | Some (rd,imm) => returnm ((RISCV_JAL ((imm, rd))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s838_ _s825_) >>= fun w__8 : option ((mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__8 with | Some (rd,rs1,imm) => true | _ => false end)) then
+ (_s838_ _s825_) >>= fun w__9 : option ((mword 5 * mword 5 * mword 12)) =>
+ (match w__9 with
+ | Some (rd,rs1,imm) => returnm ((RISCV_JALR ((imm, rs1, rd))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s854_ _s825_) >>= fun w__12 : option ((bop * mword 5 * mword 5 * mword 13)) =>
+ (if ((match w__12 with | Some (op,rs1,rs2,imm) => true | _ => false end)) then
+ (_s854_ _s825_) >>= fun w__13 : option ((bop * mword 5 * mword 5 * mword 13)) =>
+ (match w__13 with
+ | Some (op,rs1,rs2,imm) => returnm ((BTYPE ((imm, rs2, rs1, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s871_ _s825_) >>= fun w__16 : option ((iop * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__16 with | Some (op,rd,rs1,imm) => true | _ => false end)) then
+ (_s871_ _s825_) >>= fun w__17 : option ((iop * mword 5 * mword 5 * mword 12)) =>
+ (match w__17 with
+ | Some (op,rd,rs1,imm) => returnm ((ITYPE ((imm, rs1, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s888_ _s825_) >>= fun w__20 : option ((sop * mword 5 * mword 5 * mword 6)) =>
+ (if ((match w__20 with | Some (op,rd,rs1,shamt) => true | _ => false end)) then
+ (_s888_ _s825_) >>= fun w__21 : option ((sop * mword 5 * mword 5 * mword 6)) =>
+ (match w__21 with
+ | Some (op,rd,rs1,shamt) =>
+ returnm ((SHIFTIOP ((shamt, rs1, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s903_ _s825_) >>= fun w__24 : option ((rop * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__24 with | Some (op,rd,rs1,rs2) => true | _ => false end)) then
+ (_s903_ _s825_) >>= fun w__25 : option ((rop * mword 5 * mword 5 * mword 5)) =>
+ (match w__25 with
+ | Some (op,rd,rs1,rs2) => returnm ((RTYPE ((rs2, rs1, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s920_ _s825_) >>= fun w__28 : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__28 with
+ | Some (size,is_unsigned,aq,rl,rd,rs1,imm) => true
+ | _ => false
+ end)) then
+ (_s920_ _s825_) >>= fun w__29 : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (match w__29 with
+ | Some (size,is_unsigned,aq,rl,rd,rs1,imm) =>
+ returnm ((LOAD ((imm, rs1, rd, is_unsigned, size, aq, rl))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s944_ _s825_) >>= fun w__32 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__32 with
+ | Some (size,aq,rl,rd,rs1,imm) => true
+ | _ => false
+ end)) then
+ (_s944_ _s825_) >>= fun w__33 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (match w__33 with
+ | Some (size,aq,rl,rd,rs1,imm) =>
+ returnm ((STORE ((imm, rs1, rd, size, aq, rl))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s966_ _s825_) >>= fun w__36 : option ((mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__36 with | Some (rd,rs1,imm) => true | _ => false end))
+ then
+ (_s966_ _s825_) >>= fun w__37 : option ((mword 5 * mword 5 * mword 12)) =>
+ (match w__37 with
+ | Some (rd,rs1,imm) => returnm ((ADDIW ((imm, rs1, rd))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s982_ _s825_) >>= fun w__40 : option ((sop * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__40 with
+ | Some (op,rd,rs1,shamt) => true
+ | _ => false
+ end)) then
+ (_s982_ _s825_) >>= fun w__41 : option ((sop * mword 5 * mword 5 * mword 5)) =>
+ (match w__41 with
+ | Some (op,rd,rs1,shamt) =>
+ returnm ((SHIFTW ((shamt, rs1, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s999_ _s825_) >>= fun w__44 : option ((ropw * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__44 with
+ | Some (op,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s999_ _s825_) >>= fun w__45 : option ((ropw * mword 5 * mword 5 * mword 5)) =>
+ (match w__45 with
+ | Some (op,rd,rs1,rs2) =>
+ returnm ((RTYPEW ((rs2, rs1, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1016_ _s825_) >>= fun w__48 : option ((sopw * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__48 with
+ | Some (op,rd,rs1,shamt) => true
+ | _ => false
+ end)) then
+ (_s1016_ _s825_) >>= fun w__49 : option ((sopw * mword 5 * mword 5 * mword 5)) =>
+ (match w__49 with
+ | Some (op,rd,rs1,shamt) =>
+ returnm ((SHIFTIWOP ((shamt, rs1, rd, op))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1031_ _s825_) >>= fun w__52 : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__52 with
+ | Some (high,signed1,signed2,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1031_ _s825_) >>= fun w__53 : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__53 with
+ | Some (high,signed1,signed2,rd,rs1,rs2) =>
+ returnm ((MUL
+ ((rs2, rs1, rd, high, signed1, signed2)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1048_ _s825_) >>= fun w__56 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__56 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1048_ _s825_) >>= fun w__57 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__57 with
+ | Some (s,rd,rs1,rs2) =>
+ returnm ((DIV ((rs2, rs1, rd, s))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1066_ _s825_) >>= fun w__60 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__60 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1066_ _s825_) >>= fun w__61 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__61 with
+ | Some (s,rd,rs1,rs2) =>
+ returnm ((REM ((rs2, rs1, rd, s))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1084_ _s825_) >>= fun w__64 : option ((mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__64 with
+ | Some (rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1084_ _s825_) >>= fun w__65 : option ((mword 5 * mword 5 * mword 5)) =>
+ (match w__65 with
+ | Some (rd,rs1,rs2) =>
+ returnm ((MULW ((rs2, rs1, rd))) : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1100_ _s825_) >>= fun w__68 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__68 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1100_ _s825_) >>= fun w__69 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__69 with
+ | Some (s,rd,rs1,rs2) =>
+ returnm ((DIVW
+ ((rs2, rs1, rd, s)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1119_ _s825_) >>= fun w__72 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__72 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1119_ _s825_) >>= fun w__73 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__73 with
+ | Some (s,rd,rs1,rs2) =>
+ returnm ((REMW
+ ((rs2, rs1, rd, s)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1138_ _s825_) >>= fun w__76 : option ((mword 4 * mword 4)) =>
+ (if ((match w__76 with
+ | Some (pred,succ) => true
+ | _ => false
+ end)) then
+ (_s1138_ _s825_) >>= fun w__77 : option ((mword 4 * mword 4)) =>
+ (match w__77 with
+ | Some (pred,succ) =>
+ returnm ((FENCE
+ ((pred, succ)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1150_ _s825_) >>= fun w__80 : option ((mword 4 * mword 4)) =>
+ (if ((match w__80 with
+ | Some (pred,succ) => true
+ | _ => false
+ end)) then
+ (_s1150_ _s825_) >>= fun w__81 : option ((mword 4 * mword 4)) =>
+ (match w__81 with
+ | Some (pred,succ) =>
+ returnm ((FENCE_TSO
+ ((pred, succ)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else if ((generic_eq _s825_
+ "fence.i")) then
+ returnm ((FENCEI
+ (tt))
+ : ast )
+ else if ((generic_eq _s825_ "ecall"))
+ then
+ returnm ((ECALL
+ (tt))
+ : ast )
+ else if ((generic_eq _s825_ "mret"))
+ then
+ returnm ((MRET
+ (tt))
+ : ast )
+ else if ((generic_eq _s825_ "sret"))
+ then
+ returnm ((SRET
+ (tt))
+ : ast )
+ else if ((generic_eq _s825_ "ebreak"))
+ then
+ returnm ((EBREAK
+ (tt))
+ : ast )
+ else if ((generic_eq _s825_ "wfi"))
+ then
+ returnm ((WFI
+ (tt))
+ : ast )
+ else
+ (_s1162_ _s825_) >>= fun w__84 : option ((mword 5 * mword 5)) =>
+ (if ((match w__84 with
+ | Some (rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1162_ _s825_) >>= fun w__85 : option ((mword 5 * mword 5)) =>
+ (match w__85 with
+ | Some (rs1,rs2) =>
+ returnm ((SFENCE_VMA
+ ((rs1, rs2)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1174_ _s825_) >>= fun w__88 : option ((word_width * bool * bool * mword 5 * mword 5)) =>
+ (if ((match w__88 with
+ | Some
+ (size,aq,rl,rd,rs1) =>
+ true
+ | _ => false
+ end)) then
+ (_s1174_ _s825_) >>= fun w__89 : option ((word_width * bool * bool * mword 5 * mword 5)) =>
+ (match w__89 with
+ | Some (size,aq,rl,rd,rs1) =>
+ returnm ((LOADRES
+ ((aq, rl, rs1, size, rd)))
+ : ast )
+ | _ => exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1192_ _s825_) >>= fun w__92 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__92 with
+ | Some
+ (size,aq,rl,rd,rs1,rs2) =>
+ true
+ | _ => false
+ end)) then
+ (_s1192_ _s825_) >>= fun w__93 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__93 with
+ | Some
+ (size,aq,rl,rd,rs1,rs2) =>
+ returnm ((STORECON
+ ((aq, rl, rs2, rs1, size, rd)))
+ : ast )
+ | _ =>
+ exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1214_ _s825_) >>= fun w__96 : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__96 with
+ | Some
+ (op,width,aq,rl,rd,rs1,rs2) =>
+ true
+ | _ => false
+ end)) then
+ (_s1214_ _s825_) >>= fun w__97 : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__97 with
+ | Some
+ (op,width,aq,rl,rd,rs1,rs2) =>
+ returnm ((AMO
+ ((op, aq, rl, rs2, rs1, width, rd)))
+ : ast )
+ | _ =>
+ exit tt : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1238_ _s825_) >>= fun w__100 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__100 with
+ | Some
+ (op,rd,rs1,csr) =>
+ true
+ | _ => false
+ end)) then
+ (_s1238_ _s825_) >>= fun w__101 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (match w__101 with
+ | Some
+ (op,rd,rs1,csr) =>
+ returnm ((CSR
+ ((csr, rs1, rd, true, op)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1256_ _s825_) >>= fun w__104 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__104 with
+ | Some
+ (op,rd,rs1,csr) =>
+ true
+ | _ => false
+ end)) then
+ (_s1256_ _s825_) >>= fun w__105 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (match w__105 with
+ | Some
+ (op,rd,rs1,csr) =>
+ returnm ((CSR
+ ((csr, rs1, rd, false, op)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else if ((generic_eq
+ _s825_
+ "c.nop"))
+ then
+ returnm ((C_NOP
+ (tt))
+ : ast )
+ else
+ (_s1273_ _s825_) >>= fun w__108 : option ((mword 3 * mword 8)) =>
+ (if ((match w__108 with
+ | Some
+ (rdc,nzimm) =>
+ neq_vec
+ nzimm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 8)
+ | _ =>
+ false
+ end)) then
+ (_s1273_
+ _s825_) >>= fun w__109 : option ((mword 3 * mword 8)) =>
+ (match w__109 with
+ | Some
+ (rdc,nzimm) =>
+ returnm ((C_ADDI4SPN
+ ((rdc, nzimm)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1285_
+ _s825_) >>= fun w__112 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__112 with
+ | Some
+ (rdc,rsc,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1285_
+ _s825_) >>= fun w__113 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__113 with
+ | Some
+ (rdc,rsc,uimm) =>
+ returnm ((C_LW
+ ((uimm, rsc, rdc)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1301_
+ _s825_) >>= fun w__116 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__116 with
+ | Some
+ (rdc,rsc,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1301_
+ _s825_) >>= fun w__117 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__117 with
+ | Some
+ (rdc,rsc,uimm) =>
+ returnm ((C_LD
+ ((uimm, rsc, rdc)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1317_
+ _s825_) >>= fun w__120 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__120 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1317_
+ _s825_) >>= fun w__121 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__121 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ returnm ((C_SW
+ ((uimm, rsc1, rsc2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1333_
+ _s825_) >>= fun w__124 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__124 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1333_
+ _s825_) >>= fun w__125 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__125 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ returnm ((C_SD
+ ((uimm, rsc1, rsc2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1349_
+ _s825_) >>= fun w__128 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__128 with
+ | Some
+ (rsd,nzi) =>
+ andb
+ (neq_vec
+ nzi
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s1349_
+ _s825_) >>= fun w__129 : option ((mword 5 * mword 6)) =>
+ (match w__129 with
+ | Some
+ (rsd,nzi) =>
+ returnm ((C_ADDI
+ ((nzi, rsd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1361_
+ _s825_) >>= fun w__132 : option (mword 11) =>
+ (if
+ ((match w__132 with
+ | Some
+ (imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1361_
+ _s825_) >>= fun w__133 : option (mword 11) =>
+ (match w__133 with
+ | Some
+ (imm) =>
+ returnm ((C_JAL
+ (imm))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1369_
+ _s825_) >>= fun w__136 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__136 with
+ | Some
+ (rsd,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1369_
+ _s825_) >>= fun w__137 : option ((mword 5 * mword 6)) =>
+ (match w__137 with
+ | Some
+ (rsd,imm) =>
+ returnm ((C_ADDIW
+ ((imm, rsd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1381_
+ _s825_) >>= fun w__140 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__140 with
+ | Some
+ (rd,imm) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s1381_
+ _s825_) >>= fun w__141 : option ((mword 5 * mword 6)) =>
+ (match w__141 with
+ | Some
+ (rd,imm) =>
+ returnm ((C_LI
+ ((imm, rd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1393_
+ _s825_) >>= fun w__144 : option (mword 6) =>
+ (if
+ ((match w__144 with
+ | Some
+ (imm) =>
+ neq_vec
+ imm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s1393_
+ _s825_) >>= fun w__145 : option (mword 6) =>
+ (match w__145 with
+ | Some
+ (imm) =>
+ returnm ((C_ADDI16SP
+ (imm))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1401_
+ _s825_) >>= fun w__148 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__148 with
+ | Some
+ (rd,imm) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ sp)))
+ (neq_vec
+ imm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)))
+ | _ =>
+ false
+ end))
+ then
+ (_s1401_
+ _s825_) >>= fun w__149 : option ((mword 5 * mword 6)) =>
+ (match w__149 with
+ | Some
+ (rd,imm) =>
+ returnm ((C_LUI
+ ((imm, rd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1413_
+ _s825_) >>= fun w__152 : option ((mword 3 * mword 6)) =>
+ (if
+ ((match w__152 with
+ | Some
+ (rsd,shamt) =>
+ neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s1413_
+ _s825_) >>= fun w__153 : option ((mword 3 * mword 6)) =>
+ (match w__153 with
+ | Some
+ (rsd,shamt) =>
+ returnm ((C_SRLI
+ ((shamt, rsd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1425_
+ _s825_) >>= fun w__156 : option ((mword 3 * mword 6)) =>
+ (if
+ ((match w__156 with
+ | Some
+ (rsd,shamt) =>
+ neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s1425_
+ _s825_) >>= fun w__157 : option ((mword 3 * mword 6)) =>
+ (match w__157 with
+ | Some
+ (rsd,shamt) =>
+ returnm ((C_SRAI
+ ((shamt, rsd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1437_
+ _s825_) >>= fun w__160 : option ((mword 3 * mword 6)) =>
+ (if
+ ((match w__160 with
+ | Some
+ (rsd,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1437_
+ _s825_) >>= fun w__161 : option ((mword 3 * mword 6)) =>
+ (match w__161 with
+ | Some
+ (rsd,imm) =>
+ returnm ((C_ANDI
+ ((imm, rsd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1449_
+ _s825_) >>= fun w__164 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__164 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1449_
+ _s825_) >>= fun w__165 : option ((mword 3 * mword 3)) =>
+ (match w__165 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_SUB
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1461_
+ _s825_) >>= fun w__168 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__168 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1461_
+ _s825_) >>= fun w__169 : option ((mword 3 * mword 3)) =>
+ (match w__169 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_XOR
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1473_
+ _s825_) >>= fun w__172 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__172 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1473_
+ _s825_) >>= fun w__173 : option ((mword 3 * mword 3)) =>
+ (match w__173 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_OR
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1485_
+ _s825_) >>= fun w__176 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__176 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1485_
+ _s825_) >>= fun w__177 : option ((mword 3 * mword 3)) =>
+ (match w__177 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_AND
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1497_
+ _s825_) >>= fun w__180 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__180 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1497_
+ _s825_) >>= fun w__181 : option ((mword 3 * mword 3)) =>
+ (match w__181 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_SUBW
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1509_
+ _s825_) >>= fun w__184 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__184 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1509_
+ _s825_) >>= fun w__185 : option ((mword 3 * mword 3)) =>
+ (match w__185 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_ADDW
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1521_
+ _s825_) >>= fun w__188 : option (mword 11) =>
+ (if
+ ((match w__188 with
+ | Some
+ (imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1521_
+ _s825_) >>= fun w__189 : option (mword 11) =>
+ (match w__189 with
+ | Some
+ (imm) =>
+ returnm ((C_J
+ (imm))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1529_
+ _s825_) >>= fun w__192 : option ((mword 3 * mword 8)) =>
+ (if
+ ((match w__192 with
+ | Some
+ (rs,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1529_
+ _s825_) >>= fun w__193 : option ((mword 3 * mword 8)) =>
+ (match w__193 with
+ | Some
+ (rs,imm) =>
+ returnm ((C_BEQZ
+ ((imm, rs)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1541_
+ _s825_) >>= fun w__196 : option ((mword 3 * mword 8)) =>
+ (if
+ ((match w__196 with
+ | Some
+ (rs,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1541_
+ _s825_) >>= fun w__197 : option ((mword 3 * mword 8)) =>
+ (match w__197 with
+ | Some
+ (rs,imm) =>
+ returnm ((C_BNEZ
+ ((imm, rs)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1553_
+ _s825_) >>= fun w__200 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__200 with
+ | Some
+ (rsd,shamt) =>
+ andb
+ (neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s1553_
+ _s825_) >>= fun w__201 : option ((mword 5 * mword 6)) =>
+ (match w__201 with
+ | Some
+ (rsd,shamt) =>
+ returnm ((C_SLLI
+ ((shamt, rsd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1565_
+ _s825_) >>= fun w__204 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__204 with
+ | Some
+ (rd,uimm) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s1565_
+ _s825_) >>= fun w__205 : option ((mword 5 * mword 6)) =>
+ (match w__205 with
+ | Some
+ (rd,uimm) =>
+ returnm ((C_LWSP
+ ((uimm, rd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1577_
+ _s825_) >>= fun w__208 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__208 with
+ | Some
+ (rd,uimm) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s1577_
+ _s825_) >>= fun w__209 : option ((mword 5 * mword 6)) =>
+ (match w__209 with
+ | Some
+ (rd,uimm) =>
+ returnm ((C_LDSP
+ ((uimm, rd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1589_
+ _s825_) >>= fun w__212 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__212 with
+ | Some
+ (rd,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1589_
+ _s825_) >>= fun w__213 : option ((mword 5 * mword 6)) =>
+ (match w__213 with
+ | Some
+ (rd,uimm) =>
+ returnm ((C_SWSP
+ ((uimm, rd)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1601_
+ _s825_) >>= fun w__216 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__216 with
+ | Some
+ (rs2,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1601_
+ _s825_) >>= fun w__217 : option ((mword 5 * mword 6)) =>
+ (match w__217 with
+ | Some
+ (rs2,uimm) =>
+ returnm ((C_SDSP
+ ((uimm, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1613_
+ _s825_) >>= fun w__220 : option (mword 5) =>
+ (if
+ ((match w__220 with
+ | Some
+ (rs1) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rs1))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s1613_
+ _s825_) >>= fun w__221 : option (mword 5) =>
+ (match w__221 with
+ | Some
+ (rs1) =>
+ returnm ((C_JR
+ (rs1))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1621_
+ _s825_) >>= fun w__224 : option (mword 5) =>
+ (if
+ ((match w__224 with
+ | Some
+ (rs1) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rs1))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s1621_
+ _s825_) >>= fun w__225 : option (mword 5) =>
+ (match w__225 with
+ | Some
+ (rs1) =>
+ returnm ((C_JALR
+ (rs1))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1629_
+ _s825_) >>= fun w__228 : option ((mword 5 * mword 5)) =>
+ (if
+ ((match w__228 with
+ | Some
+ (rd,rs2) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rs2))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s1629_
+ _s825_) >>= fun w__229 : option ((mword 5 * mword 5)) =>
+ (match w__229 with
+ | Some
+ (rd,rs2) =>
+ returnm ((C_MV
+ ((rd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else if
+ ((generic_eq
+ _s825_
+ "c.ebreak"))
+ then
+ returnm ((C_EBREAK
+ (tt))
+ : ast )
+ else
+ (_s1641_
+ _s825_) >>= fun w__232 : option ((mword 5 * mword 5)) =>
+ (if
+ ((match w__232 with
+ | Some
+ (rsd,rs2) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rs2))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s1641_
+ _s825_) >>= fun w__233 : option ((mword 5 * mword 5)) =>
+ (match w__233 with
+ | Some
+ (rsd,rs2) =>
+ returnm ((C_ADD
+ ((rsd, rs2)))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else if
+ ((generic_eq
+ _s825_
+ "stop_fetching"))
+ then
+ returnm ((STOP_FETCHING
+ (tt))
+ : ast )
+ else if
+ ((generic_eq
+ _s825_
+ "thread_start"))
+ then
+ returnm ((THREAD_START
+ (tt))
+ : ast )
+ else
+ (_s1653_
+ _s825_) >>= fun w__236 : option (mword 32) =>
+ (if
+ ((match w__236 with
+ | Some
+ (s) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s1653_
+ _s825_) >>= fun w__237 : option (mword 32) =>
+ (match w__237 with
+ | Some
+ (s) =>
+ returnm ((ILLEGAL
+ (s))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast)
+ else
+ (_s1661_
+ _s825_) >>= fun w__240 : option (mword 16) =>
+ (match w__240 with
+ | Some
+ (s) =>
+ returnm ((C_ILLEGAL
+ (s))
+ : ast )
+ | _ =>
+ exit tt
+ : M (ast)
+ end)
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast))
+ : M (ast).
+
+Definition assembly_forwards_matches (arg_ : ast)
+: bool :=
+
+ match arg_ with
+ | UTYPE (imm,rd,op) => true
+ | RISCV_JAL (imm,rd) => true
+ | RISCV_JALR (imm,rs1,rd) => true
+ | BTYPE (imm,rs2,rs1,op) => true
+ | ITYPE (imm,rs1,rd,op) => true
+ | SHIFTIOP (shamt,rs1,rd,op) => true
+ | RTYPE (rs2,rs1,rd,op) => true
+ | LOAD (imm,rs1,rd,is_unsigned,size,aq,rl) => true
+ | STORE (imm,rs1,rd,size,aq,rl) => true
+ | ADDIW (imm,rs1,rd) => true
+ | SHIFTW (shamt,rs1,rd,op) => true
+ | RTYPEW (rs2,rs1,rd,op) => true
+ | SHIFTIWOP (shamt,rs1,rd,op) => true
+ | MUL (rs2,rs1,rd,high,signed1,signed2) => true
+ | DIV (rs2,rs1,rd,s) => true
+ | REM (rs2,rs1,rd,s) => true
+ | MULW (rs2,rs1,rd) => true
+ | DIVW (rs2,rs1,rd,s) => true
+ | REMW (rs2,rs1,rd,s) => true
+ | FENCE (pred,succ) => true
+ | FENCE_TSO (pred,succ) => true
+ | FENCEI (tt) => true
+ | ECALL (tt) => true
+ | MRET (tt) => true
+ | SRET (tt) => true
+ | EBREAK (tt) => true
+ | WFI (tt) => true
+ | SFENCE_VMA (rs1,rs2) => true
+ | LOADRES (aq,rl,rs1,size,rd) => true
+ | STORECON (aq,rl,rs2,rs1,size,rd) => true
+ | AMO (op,aq,rl,rs2,rs1,width,rd) => true
+ | CSR (csr,rs1,rd,true,op) => true
+ | CSR (csr,rs1,rd,false,op) => true
+ | C_NOP (tt) => true
+ | C_ADDI4SPN (rdc,nzimm) =>
+ if ((neq_vec nzimm (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0] : mword 8))) then true
+ else
+ let g__28 := C_ADDI4SPN ((rdc, nzimm)) in
+ false
+ | C_LW (uimm,rsc,rdc) => true
+ | C_LD (uimm,rsc,rdc) => true
+ | C_SW (uimm,rsc1,rsc2) => true
+ | C_SD (uimm,rsc1,rsc2) => true
+ | C_ADDI (nzi,rsd) =>
+ if ((andb (neq_vec nzi (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__28 := C_ADDI ((nzi, rsd)) in
+ false
+ | C_JAL (imm) => true
+ | C_ADDIW (imm,rsd) => true
+ | C_LI (imm,rd) =>
+ if ((neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__28 := C_LI ((imm, rd)) in
+ false
+ | C_ADDI16SP (imm) =>
+ if ((neq_vec imm (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))) then true
+ else
+ let g__28 := C_ADDI16SP (imm) in
+ false
+ | C_LUI (imm,rd) =>
+ if ((andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno sp)))
+ (neq_vec imm (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))))) then
+ true
+ else
+ let g__28 := C_LUI ((imm, rd)) in
+ false
+ | C_SRLI (shamt,rsd) =>
+ if ((neq_vec shamt (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))) then true
+ else
+ let g__28 := C_SRLI ((shamt, rsd)) in
+ false
+ | C_SRAI (shamt,rsd) =>
+ if ((neq_vec shamt (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))) then true
+ else
+ let g__28 := C_SRAI ((shamt, rsd)) in
+ false
+ | C_ANDI (imm,rsd) => true
+ | C_SUB (rsd,rs2) => true
+ | C_XOR (rsd,rs2) => true
+ | C_OR (rsd,rs2) => true
+ | C_AND (rsd,rs2) => true
+ | C_SUBW (rsd,rs2) => true
+ | C_ADDW (rsd,rs2) => true
+ | C_J (imm) => true
+ | C_BEQZ (imm,rs) => true
+ | C_BNEZ (imm,rs) => true
+ | C_SLLI (shamt,rsd) =>
+ if ((andb (neq_vec shamt (vec_of_bits [B0;B0;B0;B0;B0;B0] : mword 6))
+ (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__28 := C_SLLI ((shamt, rsd)) in
+ false
+ | C_LWSP (uimm,rd) =>
+ if ((neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__28 := C_LWSP ((uimm, rd)) in
+ false
+ | C_LDSP (uimm,rd) =>
+ if ((neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__28 := C_LDSP ((uimm, rd)) in
+ false
+ | C_SWSP (uimm,rd) => true
+ | C_SDSP (uimm,rs2) => true
+ | C_JR (rs1) =>
+ if ((neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__28 := C_JR (rs1) in
+ false
+ | C_JALR (rs1) =>
+ if ((neq_int (projT1 (regbits_to_regno rs1)) (projT1 (regbits_to_regno zreg)))) then true
+ else
+ let g__28 := C_JALR (rs1) in
+ false
+ | C_MV (rd,rs2) =>
+ if ((andb (neq_int (projT1 (regbits_to_regno rd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__28 := C_MV ((rd, rs2)) in
+ false
+ | C_EBREAK (tt) => true
+ | C_ADD (rsd,rs2) =>
+ if ((andb (neq_int (projT1 (regbits_to_regno rsd)) (projT1 (regbits_to_regno zreg)))
+ (neq_int (projT1 (regbits_to_regno rs2)) (projT1 (regbits_to_regno zreg))))) then
+ true
+ else
+ let g__28 := C_ADD ((rsd, rs2)) in
+ false
+ | STOP_FETCHING (tt) => true
+ | THREAD_START (tt) => true
+ | ILLEGAL (s) => true
+ | C_ILLEGAL (s) => true
+ end.
+
+Definition _s2517_ (_s2518_ : string)
+: M (option (mword 16)) :=
+
+ let _s2519_ := _s2518_ in
+ (if ((string_startswith _s2519_ "c.illegal")) then
+ (match (string_drop _s2519_ (projT1 (string_length "c.illegal"))) with
+ | _s2520_ =>
+ (spc_matches_prefix _s2520_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s2521_ _)) =>
+ match (string_drop _s2520_ _s2521_) with
+ | _s2522_ =>
+ match (hex_bits_16_matches_prefix _s2522_) with
+ | Some (s,(existT _ _s2523_ _)) =>
+ let p0_ := string_drop _s2522_ _s2523_ in
+ if ((generic_eq p0_ "")) then Some (s)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 16))
+ end)
+ : M (option (mword 16))
+ else returnm (None : option (mword 16)))
+ : M (option (mword 16)).
+
+Definition _s2509_ (_s2510_ : string)
+: M (option (mword 32)) :=
+
+ let _s2511_ := _s2510_ in
+ (if ((string_startswith _s2511_ "illegal")) then
+ (match (string_drop _s2511_ (projT1 (string_length "illegal"))) with
+ | _s2512_ =>
+ (spc_matches_prefix _s2512_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s2513_ _)) =>
+ match (string_drop _s2512_ _s2513_) with
+ | _s2514_ =>
+ match (hex_bits_32_matches_prefix _s2514_) with
+ | Some (s,(existT _ _s2515_ _)) =>
+ let p0_ := string_drop _s2514_ _s2515_ in
+ if ((generic_eq p0_ "")) then Some (s)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 32))
+ end)
+ : M (option (mword 32))
+ else returnm (None : option (mword 32)))
+ : M (option (mword 32)).
+
+Definition _s2497_ (_s2498_ : string)
+: M (option ((mword 5 * mword 5))) :=
+
+ let _s2499_ := _s2498_ in
+ (if ((string_startswith _s2499_ "c.add")) then
+ (match (string_drop _s2499_ (projT1 (string_length "c.add"))) with
+ | _s2500_ =>
+ (spc_matches_prefix _s2500_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2501_ _)) =>
+ (match (string_drop _s2500_ _s2501_) with
+ | _s2502_ =>
+ (reg_name_matches_prefix _s2502_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2503_ _)) =>
+ (match (string_drop _s2502_ _s2503_) with
+ | _s2504_ =>
+ (sep_matches_prefix _s2504_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2505_ _)) =>
+ (match (string_drop _s2504_ _s2505_) with
+ | _s2506_ =>
+ (reg_name_matches_prefix _s2506_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2507_ _)) =>
+ let p0_ := string_drop _s2506_ _s2507_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5))).
+
+Definition _s2485_ (_s2486_ : string)
+: M (option ((mword 5 * mword 5))) :=
+
+ let _s2487_ := _s2486_ in
+ (if ((string_startswith _s2487_ "c.mv")) then
+ (match (string_drop _s2487_ (projT1 (string_length "c.mv"))) with
+ | _s2488_ =>
+ (spc_matches_prefix _s2488_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2489_ _)) =>
+ (match (string_drop _s2488_ _s2489_) with
+ | _s2490_ =>
+ (reg_name_matches_prefix _s2490_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2491_ _)) =>
+ (match (string_drop _s2490_ _s2491_) with
+ | _s2492_ =>
+ (sep_matches_prefix _s2492_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2493_ _)) =>
+ (match (string_drop _s2492_ _s2493_) with
+ | _s2494_ =>
+ (reg_name_matches_prefix _s2494_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2495_ _)) =>
+ let p0_ := string_drop _s2494_ _s2495_ in
+ if ((generic_eq p0_ "")) then Some ((rd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5))).
+
+Definition _s2477_ (_s2478_ : string)
+: M (option (mword 5)) :=
+
+ let _s2479_ := _s2478_ in
+ (if ((string_startswith _s2479_ "c.jalr")) then
+ (match (string_drop _s2479_ (projT1 (string_length "c.jalr"))) with
+ | _s2480_ =>
+ (spc_matches_prefix _s2480_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2481_ _)) =>
+ (match (string_drop _s2480_ _s2481_) with
+ | _s2482_ =>
+ (reg_name_matches_prefix _s2482_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (rs1,(existT _ _s2483_ _)) =>
+ let p0_ := string_drop _s2482_ _s2483_ in
+ if ((generic_eq p0_ "")) then Some (rs1)
+ else None
+ | _ => None
+ end)
+ : option (mword 5))
+ end)
+ : M (option (mword 5))
+ | _ => returnm (None : option (mword 5))
+ end)
+ : M (option (mword 5))
+ end)
+ : M (option (mword 5))
+ else returnm (None : option (mword 5)))
+ : M (option (mword 5)).
+
+Definition _s2469_ (_s2470_ : string)
+: M (option (mword 5)) :=
+
+ let _s2471_ := _s2470_ in
+ (if ((string_startswith _s2471_ "c.jr")) then
+ (match (string_drop _s2471_ (projT1 (string_length "c.jr"))) with
+ | _s2472_ =>
+ (spc_matches_prefix _s2472_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2473_ _)) =>
+ (match (string_drop _s2472_ _s2473_) with
+ | _s2474_ =>
+ (reg_name_matches_prefix _s2474_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (rs1,(existT _ _s2475_ _)) =>
+ let p0_ := string_drop _s2474_ _s2475_ in
+ if ((generic_eq p0_ "")) then Some (rs1)
+ else None
+ | _ => None
+ end)
+ : option (mword 5))
+ end)
+ : M (option (mword 5))
+ | _ => returnm (None : option (mword 5))
+ end)
+ : M (option (mword 5))
+ end)
+ : M (option (mword 5))
+ else returnm (None : option (mword 5)))
+ : M (option (mword 5)).
+
+Definition _s2457_ (_s2458_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2459_ := _s2458_ in
+ (if ((string_startswith _s2459_ "c.sdsp")) then
+ (match (string_drop _s2459_ (projT1 (string_length "c.sdsp"))) with
+ | _s2460_ =>
+ (spc_matches_prefix _s2460_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2461_ _)) =>
+ (match (string_drop _s2460_ _s2461_) with
+ | _s2462_ =>
+ (reg_name_matches_prefix _s2462_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs2,(existT _ _s2463_ _)) =>
+ (match (string_drop _s2462_ _s2463_) with
+ | _s2464_ =>
+ (sep_matches_prefix _s2464_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2465_ _)) =>
+ match (string_drop _s2464_ _s2465_) with
+ | _s2466_ =>
+ match (hex_bits_6_matches_prefix _s2466_) with
+ | Some (uimm,(existT _ _s2467_ _)) =>
+ let p0_ := string_drop _s2466_ _s2467_ in
+ if ((generic_eq p0_ "")) then Some ((rs2, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2445_ (_s2446_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2447_ := _s2446_ in
+ (if ((string_startswith _s2447_ "c.swsp")) then
+ (match (string_drop _s2447_ (projT1 (string_length "c.swsp"))) with
+ | _s2448_ =>
+ (spc_matches_prefix _s2448_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2449_ _)) =>
+ (match (string_drop _s2448_ _s2449_) with
+ | _s2450_ =>
+ (reg_name_matches_prefix _s2450_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2451_ _)) =>
+ (match (string_drop _s2450_ _s2451_) with
+ | _s2452_ =>
+ (sep_matches_prefix _s2452_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2453_ _)) =>
+ match (string_drop _s2452_ _s2453_) with
+ | _s2454_ =>
+ match (hex_bits_6_matches_prefix _s2454_) with
+ | Some (uimm,(existT _ _s2455_ _)) =>
+ let p0_ := string_drop _s2454_ _s2455_ in
+ if ((generic_eq p0_ "")) then Some ((rd, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2433_ (_s2434_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2435_ := _s2434_ in
+ (if ((string_startswith _s2435_ "c.ldsp")) then
+ (match (string_drop _s2435_ (projT1 (string_length "c.ldsp"))) with
+ | _s2436_ =>
+ (spc_matches_prefix _s2436_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2437_ _)) =>
+ (match (string_drop _s2436_ _s2437_) with
+ | _s2438_ =>
+ (reg_name_matches_prefix _s2438_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2439_ _)) =>
+ (match (string_drop _s2438_ _s2439_) with
+ | _s2440_ =>
+ (sep_matches_prefix _s2440_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2441_ _)) =>
+ match (string_drop _s2440_ _s2441_) with
+ | _s2442_ =>
+ match (hex_bits_6_matches_prefix _s2442_) with
+ | Some (uimm,(existT _ _s2443_ _)) =>
+ let p0_ := string_drop _s2442_ _s2443_ in
+ if ((generic_eq p0_ "")) then Some ((rd, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2421_ (_s2422_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2423_ := _s2422_ in
+ (if ((string_startswith _s2423_ "c.lwsp")) then
+ (match (string_drop _s2423_ (projT1 (string_length "c.lwsp"))) with
+ | _s2424_ =>
+ (spc_matches_prefix _s2424_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2425_ _)) =>
+ (match (string_drop _s2424_ _s2425_) with
+ | _s2426_ =>
+ (reg_name_matches_prefix _s2426_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2427_ _)) =>
+ (match (string_drop _s2426_ _s2427_) with
+ | _s2428_ =>
+ (sep_matches_prefix _s2428_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2429_ _)) =>
+ match (string_drop _s2428_ _s2429_) with
+ | _s2430_ =>
+ match (hex_bits_6_matches_prefix _s2430_) with
+ | Some (uimm,(existT _ _s2431_ _)) =>
+ let p0_ := string_drop _s2430_ _s2431_ in
+ if ((generic_eq p0_ "")) then Some ((rd, uimm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2409_ (_s2410_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2411_ := _s2410_ in
+ (if ((string_startswith _s2411_ "c.slli")) then
+ (match (string_drop _s2411_ (projT1 (string_length "c.slli"))) with
+ | _s2412_ =>
+ (spc_matches_prefix _s2412_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2413_ _)) =>
+ (match (string_drop _s2412_ _s2413_) with
+ | _s2414_ =>
+ (reg_name_matches_prefix _s2414_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2415_ _)) =>
+ (match (string_drop _s2414_ _s2415_) with
+ | _s2416_ =>
+ (sep_matches_prefix _s2416_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2417_ _)) =>
+ match (string_drop _s2416_ _s2417_) with
+ | _s2418_ =>
+ match (hex_bits_6_matches_prefix _s2418_) with
+ | Some (shamt,(existT _ _s2419_ _)) =>
+ let p0_ := string_drop _s2418_ _s2419_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2397_ (_s2398_ : string)
+: M (option ((mword 3 * mword 8))) :=
+
+ let _s2399_ := _s2398_ in
+ (if ((string_startswith _s2399_ "c.bnez")) then
+ (match (string_drop _s2399_ (projT1 (string_length "c.bnez"))) with
+ | _s2400_ =>
+ (spc_matches_prefix _s2400_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2401_ _)) =>
+ (match (string_drop _s2400_ _s2401_) with
+ | _s2402_ =>
+ (creg_name_matches_prefix _s2402_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs,(existT _ _s2403_ _)) =>
+ (match (string_drop _s2402_ _s2403_) with
+ | _s2404_ =>
+ (sep_matches_prefix _s2404_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2405_ _)) =>
+ match (string_drop _s2404_ _s2405_) with
+ | _s2406_ =>
+ match (hex_bits_8_matches_prefix _s2406_) with
+ | Some (imm,(existT _ _s2407_ _)) =>
+ let p0_ := string_drop _s2406_ _s2407_ in
+ if ((generic_eq p0_ "")) then Some ((rs, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ else returnm (None : option ((mword 3 * mword 8))))
+ : M (option ((mword 3 * mword 8))).
+
+Definition _s2385_ (_s2386_ : string)
+: M (option ((mword 3 * mword 8))) :=
+
+ let _s2387_ := _s2386_ in
+ (if ((string_startswith _s2387_ "c.beqz")) then
+ (match (string_drop _s2387_ (projT1 (string_length "c.beqz"))) with
+ | _s2388_ =>
+ (spc_matches_prefix _s2388_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2389_ _)) =>
+ (match (string_drop _s2388_ _s2389_) with
+ | _s2390_ =>
+ (creg_name_matches_prefix _s2390_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs,(existT _ _s2391_ _)) =>
+ (match (string_drop _s2390_ _s2391_) with
+ | _s2392_ =>
+ (sep_matches_prefix _s2392_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2393_ _)) =>
+ match (string_drop _s2392_ _s2393_) with
+ | _s2394_ =>
+ match (hex_bits_8_matches_prefix _s2394_) with
+ | Some (imm,(existT _ _s2395_ _)) =>
+ let p0_ := string_drop _s2394_ _s2395_ in
+ if ((generic_eq p0_ "")) then Some ((rs, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ else returnm (None : option ((mword 3 * mword 8))))
+ : M (option ((mword 3 * mword 8))).
+
+Definition _s2377_ (_s2378_ : string)
+: M (option (mword 11)) :=
+
+ let _s2379_ := _s2378_ in
+ (if ((string_startswith _s2379_ "c.j")) then
+ (match (string_drop _s2379_ (projT1 (string_length "c.j"))) with
+ | _s2380_ =>
+ (spc_matches_prefix _s2380_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s2381_ _)) =>
+ match (string_drop _s2380_ _s2381_) with
+ | _s2382_ =>
+ match (hex_bits_11_matches_prefix _s2382_) with
+ | Some (imm,(existT _ _s2383_ _)) =>
+ let p0_ := string_drop _s2382_ _s2383_ in
+ if ((generic_eq p0_ "")) then Some (imm)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 11))
+ end)
+ : M (option (mword 11))
+ else returnm (None : option (mword 11)))
+ : M (option (mword 11)).
+
+Definition _s2365_ (_s2366_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s2367_ := _s2366_ in
+ (if ((string_startswith _s2367_ "c.addw")) then
+ (match (string_drop _s2367_ (projT1 (string_length "c.addw"))) with
+ | _s2368_ =>
+ (spc_matches_prefix _s2368_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2369_ _)) =>
+ (match (string_drop _s2368_ _s2369_) with
+ | _s2370_ =>
+ (creg_name_matches_prefix _s2370_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2371_ _)) =>
+ (match (string_drop _s2370_ _s2371_) with
+ | _s2372_ =>
+ (sep_matches_prefix _s2372_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2373_ _)) =>
+ (match (string_drop _s2372_ _s2373_) with
+ | _s2374_ =>
+ (creg_name_matches_prefix _s2374_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2375_ _)) =>
+ let p0_ := string_drop _s2374_ _s2375_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s2353_ (_s2354_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s2355_ := _s2354_ in
+ (if ((string_startswith _s2355_ "c.subw")) then
+ (match (string_drop _s2355_ (projT1 (string_length "c.subw"))) with
+ | _s2356_ =>
+ (spc_matches_prefix _s2356_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2357_ _)) =>
+ (match (string_drop _s2356_ _s2357_) with
+ | _s2358_ =>
+ (creg_name_matches_prefix _s2358_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2359_ _)) =>
+ (match (string_drop _s2358_ _s2359_) with
+ | _s2360_ =>
+ (sep_matches_prefix _s2360_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2361_ _)) =>
+ (match (string_drop _s2360_ _s2361_) with
+ | _s2362_ =>
+ (creg_name_matches_prefix _s2362_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2363_ _)) =>
+ let p0_ := string_drop _s2362_ _s2363_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s2341_ (_s2342_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s2343_ := _s2342_ in
+ (if ((string_startswith _s2343_ "c.and")) then
+ (match (string_drop _s2343_ (projT1 (string_length "c.and"))) with
+ | _s2344_ =>
+ (spc_matches_prefix _s2344_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2345_ _)) =>
+ (match (string_drop _s2344_ _s2345_) with
+ | _s2346_ =>
+ (creg_name_matches_prefix _s2346_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2347_ _)) =>
+ (match (string_drop _s2346_ _s2347_) with
+ | _s2348_ =>
+ (sep_matches_prefix _s2348_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2349_ _)) =>
+ (match (string_drop _s2348_ _s2349_) with
+ | _s2350_ =>
+ (creg_name_matches_prefix _s2350_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2351_ _)) =>
+ let p0_ := string_drop _s2350_ _s2351_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s2329_ (_s2330_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s2331_ := _s2330_ in
+ (if ((string_startswith _s2331_ "c.or")) then
+ (match (string_drop _s2331_ (projT1 (string_length "c.or"))) with
+ | _s2332_ =>
+ (spc_matches_prefix _s2332_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2333_ _)) =>
+ (match (string_drop _s2332_ _s2333_) with
+ | _s2334_ =>
+ (creg_name_matches_prefix _s2334_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2335_ _)) =>
+ (match (string_drop _s2334_ _s2335_) with
+ | _s2336_ =>
+ (sep_matches_prefix _s2336_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2337_ _)) =>
+ (match (string_drop _s2336_ _s2337_) with
+ | _s2338_ =>
+ (creg_name_matches_prefix _s2338_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2339_ _)) =>
+ let p0_ := string_drop _s2338_ _s2339_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s2317_ (_s2318_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s2319_ := _s2318_ in
+ (if ((string_startswith _s2319_ "c.xor")) then
+ (match (string_drop _s2319_ (projT1 (string_length "c.xor"))) with
+ | _s2320_ =>
+ (spc_matches_prefix _s2320_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2321_ _)) =>
+ (match (string_drop _s2320_ _s2321_) with
+ | _s2322_ =>
+ (creg_name_matches_prefix _s2322_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2323_ _)) =>
+ (match (string_drop _s2322_ _s2323_) with
+ | _s2324_ =>
+ (sep_matches_prefix _s2324_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2325_ _)) =>
+ (match (string_drop _s2324_ _s2325_) with
+ | _s2326_ =>
+ (creg_name_matches_prefix _s2326_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2327_ _)) =>
+ let p0_ := string_drop _s2326_ _s2327_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s2305_ (_s2306_ : string)
+: M (option ((mword 3 * mword 3))) :=
+
+ let _s2307_ := _s2306_ in
+ (if ((string_startswith _s2307_ "c.sub")) then
+ (match (string_drop _s2307_ (projT1 (string_length "c.sub"))) with
+ | _s2308_ =>
+ (spc_matches_prefix _s2308_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2309_ _)) =>
+ (match (string_drop _s2308_ _s2309_) with
+ | _s2310_ =>
+ (creg_name_matches_prefix _s2310_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2311_ _)) =>
+ (match (string_drop _s2310_ _s2311_) with
+ | _s2312_ =>
+ (sep_matches_prefix _s2312_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2313_ _)) =>
+ (match (string_drop _s2312_ _s2313_) with
+ | _s2314_ =>
+ (creg_name_matches_prefix _s2314_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2315_ _)) =>
+ let p0_ := string_drop _s2314_ _s2315_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ | _ => returnm (None : option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ end)
+ : M (option ((mword 3 * mword 3)))
+ else returnm (None : option ((mword 3 * mword 3))))
+ : M (option ((mword 3 * mword 3))).
+
+Definition _s2293_ (_s2294_ : string)
+: M (option ((mword 3 * mword 6))) :=
+
+ let _s2295_ := _s2294_ in
+ (if ((string_startswith _s2295_ "c.andi")) then
+ (match (string_drop _s2295_ (projT1 (string_length "c.andi"))) with
+ | _s2296_ =>
+ (spc_matches_prefix _s2296_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2297_ _)) =>
+ (match (string_drop _s2296_ _s2297_) with
+ | _s2298_ =>
+ (creg_name_matches_prefix _s2298_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2299_ _)) =>
+ (match (string_drop _s2298_ _s2299_) with
+ | _s2300_ =>
+ (sep_matches_prefix _s2300_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2301_ _)) =>
+ match (string_drop _s2300_ _s2301_) with
+ | _s2302_ =>
+ match (hex_bits_6_matches_prefix _s2302_) with
+ | Some (imm,(existT _ _s2303_ _)) =>
+ let p0_ := string_drop _s2302_ _s2303_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ else returnm (None : option ((mword 3 * mword 6))))
+ : M (option ((mword 3 * mword 6))).
+
+Definition _s2281_ (_s2282_ : string)
+: M (option ((mword 3 * mword 6))) :=
+
+ let _s2283_ := _s2282_ in
+ (if ((string_startswith _s2283_ "c.srai")) then
+ (match (string_drop _s2283_ (projT1 (string_length "c.srai"))) with
+ | _s2284_ =>
+ (spc_matches_prefix _s2284_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2285_ _)) =>
+ (match (string_drop _s2284_ _s2285_) with
+ | _s2286_ =>
+ (creg_name_matches_prefix _s2286_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2287_ _)) =>
+ (match (string_drop _s2286_ _s2287_) with
+ | _s2288_ =>
+ (sep_matches_prefix _s2288_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2289_ _)) =>
+ match (string_drop _s2288_ _s2289_) with
+ | _s2290_ =>
+ match (hex_bits_6_matches_prefix _s2290_) with
+ | Some (shamt,(existT _ _s2291_ _)) =>
+ let p0_ := string_drop _s2290_ _s2291_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ else returnm (None : option ((mword 3 * mword 6))))
+ : M (option ((mword 3 * mword 6))).
+
+Definition _s2269_ (_s2270_ : string)
+: M (option ((mword 3 * mword 6))) :=
+
+ let _s2271_ := _s2270_ in
+ (if ((string_startswith _s2271_ "c.srli")) then
+ (match (string_drop _s2271_ (projT1 (string_length "c.srli"))) with
+ | _s2272_ =>
+ (spc_matches_prefix _s2272_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2273_ _)) =>
+ (match (string_drop _s2272_ _s2273_) with
+ | _s2274_ =>
+ (creg_name_matches_prefix _s2274_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2275_ _)) =>
+ (match (string_drop _s2274_ _s2275_) with
+ | _s2276_ =>
+ (sep_matches_prefix _s2276_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2277_ _)) =>
+ match (string_drop _s2276_ _s2277_) with
+ | _s2278_ =>
+ match (hex_bits_6_matches_prefix _s2278_) with
+ | Some (shamt,(existT _ _s2279_ _)) =>
+ let p0_ := string_drop _s2278_ _s2279_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ | _ => returnm (None : option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ end)
+ : M (option ((mword 3 * mword 6)))
+ else returnm (None : option ((mword 3 * mword 6))))
+ : M (option ((mword 3 * mword 6))).
+
+Definition _s2257_ (_s2258_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2259_ := _s2258_ in
+ (if ((string_startswith _s2259_ "c.lui")) then
+ (match (string_drop _s2259_ (projT1 (string_length "c.lui"))) with
+ | _s2260_ =>
+ (spc_matches_prefix _s2260_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2261_ _)) =>
+ (match (string_drop _s2260_ _s2261_) with
+ | _s2262_ =>
+ (reg_name_matches_prefix _s2262_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2263_ _)) =>
+ (match (string_drop _s2262_ _s2263_) with
+ | _s2264_ =>
+ (sep_matches_prefix _s2264_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2265_ _)) =>
+ match (string_drop _s2264_ _s2265_) with
+ | _s2266_ =>
+ match (hex_bits_6_matches_prefix _s2266_) with
+ | Some (imm,(existT _ _s2267_ _)) =>
+ let p0_ := string_drop _s2266_ _s2267_ in
+ if ((generic_eq p0_ "")) then Some ((rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2249_ (_s2250_ : string)
+: M (option (mword 6)) :=
+
+ let _s2251_ := _s2250_ in
+ (if ((string_startswith _s2251_ "c.addi16sp")) then
+ (match (string_drop _s2251_ (projT1 (string_length "c.addi16sp"))) with
+ | _s2252_ =>
+ (spc_matches_prefix _s2252_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s2253_ _)) =>
+ match (string_drop _s2252_ _s2253_) with
+ | _s2254_ =>
+ match (hex_bits_6_matches_prefix _s2254_) with
+ | Some (imm,(existT _ _s2255_ _)) =>
+ let p0_ := string_drop _s2254_ _s2255_ in
+ if ((generic_eq p0_ "")) then Some (imm)
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 6))
+ end)
+ : M (option (mword 6))
+ else returnm (None : option (mword 6)))
+ : M (option (mword 6)).
+
+Definition _s2237_ (_s2238_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2239_ := _s2238_ in
+ (if ((string_startswith _s2239_ "c.li")) then
+ (match (string_drop _s2239_ (projT1 (string_length "c.li"))) with
+ | _s2240_ =>
+ (spc_matches_prefix _s2240_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2241_ _)) =>
+ (match (string_drop _s2240_ _s2241_) with
+ | _s2242_ =>
+ (reg_name_matches_prefix _s2242_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2243_ _)) =>
+ (match (string_drop _s2242_ _s2243_) with
+ | _s2244_ =>
+ (sep_matches_prefix _s2244_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2245_ _)) =>
+ match (string_drop _s2244_ _s2245_) with
+ | _s2246_ =>
+ match (hex_bits_6_matches_prefix _s2246_) with
+ | Some (imm,(existT _ _s2247_ _)) =>
+ let p0_ := string_drop _s2246_ _s2247_ in
+ if ((generic_eq p0_ "")) then Some ((rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2225_ (_s2226_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2227_ := _s2226_ in
+ (if ((string_startswith _s2227_ "c.addiw")) then
+ (match (string_drop _s2227_ (projT1 (string_length "c.addiw"))) with
+ | _s2228_ =>
+ (spc_matches_prefix _s2228_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2229_ _)) =>
+ (match (string_drop _s2228_ _s2229_) with
+ | _s2230_ =>
+ (reg_name_matches_prefix _s2230_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2231_ _)) =>
+ (match (string_drop _s2230_ _s2231_) with
+ | _s2232_ =>
+ (sep_matches_prefix _s2232_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2233_ _)) =>
+ match (string_drop _s2232_ _s2233_) with
+ | _s2234_ =>
+ match (hex_bits_6_matches_prefix _s2234_) with
+ | Some (imm,(existT _ _s2235_ _)) =>
+ let p0_ := string_drop _s2234_ _s2235_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2217_ (_s2218_ : string)
+: M (option (mword 11)) :=
+
+ let _s2219_ := _s2218_ in
+ (if ((string_startswith _s2219_ "c.jal")) then
+ (match (string_drop _s2219_ (projT1 (string_length "c.jal"))) with
+ | _s2220_ =>
+ (spc_matches_prefix _s2220_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s2221_ _)) =>
+ match (string_drop _s2220_ _s2221_) with
+ | _s2222_ =>
+ match (hex_bits_12_matches_prefix _s2222_) with
+ | Some (v__772,(existT _ _s2223_ _)) =>
+ if ((eq_vec (subrange_vec_dec v__772 0 0)
+ (vec_of_bits [B0] : mword (0 - 0 + 1)))) then
+ let imm : mword 11 := subrange_vec_dec v__772 11 1 in
+ let imm : mword 11 := subrange_vec_dec v__772 11 1 in
+ let p0_ := string_drop _s2222_ _s2223_ in
+ if ((generic_eq p0_ "")) then Some (imm)
+ else None
+ else
+ let g__27 := Some ((v__772, _s2223_)) in
+ None
+ | g__27 => None
+ end
+ end
+ | _ => None
+ end)
+ : option (mword 11))
+ end)
+ : M (option (mword 11))
+ else returnm (None : option (mword 11)))
+ : M (option (mword 11)).
+
+Definition _s2205_ (_s2206_ : string)
+: M (option ((mword 5 * mword 6))) :=
+
+ let _s2207_ := _s2206_ in
+ (if ((string_startswith _s2207_ "c.addi")) then
+ (match (string_drop _s2207_ (projT1 (string_length "c.addi"))) with
+ | _s2208_ =>
+ (spc_matches_prefix _s2208_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2209_ _)) =>
+ (match (string_drop _s2208_ _s2209_) with
+ | _s2210_ =>
+ (reg_name_matches_prefix _s2210_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s2211_ _)) =>
+ (match (string_drop _s2210_ _s2211_) with
+ | _s2212_ =>
+ (sep_matches_prefix _s2212_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2213_ _)) =>
+ match (string_drop _s2212_ _s2213_) with
+ | _s2214_ =>
+ match (hex_bits_6_matches_prefix _s2214_) with
+ | Some (nzi,(existT _ _s2215_ _)) =>
+ let p0_ := string_drop _s2214_ _s2215_ in
+ if ((generic_eq p0_ "")) then Some ((rsd, nzi))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ | _ => returnm (None : option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ end)
+ : M (option ((mword 5 * mword 6)))
+ else returnm (None : option ((mword 5 * mword 6))))
+ : M (option ((mword 5 * mword 6))).
+
+Definition _s2189_ (_s2190_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s2191_ := _s2190_ in
+ (if ((string_startswith _s2191_ "c.sd")) then
+ (match (string_drop _s2191_ (projT1 (string_length "c.sd"))) with
+ | _s2192_ =>
+ (spc_matches_prefix _s2192_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2193_ _)) =>
+ (match (string_drop _s2192_ _s2193_) with
+ | _s2194_ =>
+ (creg_name_matches_prefix _s2194_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsc1,(existT _ _s2195_ _)) =>
+ (match (string_drop _s2194_ _s2195_) with
+ | _s2196_ =>
+ (sep_matches_prefix _s2196_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2197_ _)) =>
+ (match (string_drop _s2196_ _s2197_) with
+ | _s2198_ =>
+ (creg_name_matches_prefix _s2198_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc2,(existT _ _s2199_ _)) =>
+ (match (string_drop _s2198_ _s2199_) with
+ | _s2200_ =>
+ (sep_matches_prefix _s2200_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s2201_ _)) =>
+ match (string_drop _s2200_ _s2201_) with
+ | _s2202_ =>
+ match (hex_bits_8_matches_prefix _s2202_) with
+ | Some (v__774,(existT _ _s2203_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__774 2 0)
+ (vec_of_bits [B0;B0;B0]
+ : mword (2 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__774 7 3 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__774 7 3 in
+ let p0_ :=
+ string_drop _s2202_ _s2203_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rsc1, rsc2, uimm))
+ else None
+ else
+ let g__26 := Some ((v__774, _s2203_)) in
+ None
+ | g__26 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s2173_ (_s2174_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s2175_ := _s2174_ in
+ (if ((string_startswith _s2175_ "c.sw")) then
+ (match (string_drop _s2175_ (projT1 (string_length "c.sw"))) with
+ | _s2176_ =>
+ (spc_matches_prefix _s2176_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2177_ _)) =>
+ (match (string_drop _s2176_ _s2177_) with
+ | _s2178_ =>
+ (creg_name_matches_prefix _s2178_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsc1,(existT _ _s2179_ _)) =>
+ (match (string_drop _s2178_ _s2179_) with
+ | _s2180_ =>
+ (sep_matches_prefix _s2180_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2181_ _)) =>
+ (match (string_drop _s2180_ _s2181_) with
+ | _s2182_ =>
+ (creg_name_matches_prefix _s2182_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc2,(existT _ _s2183_ _)) =>
+ (match (string_drop _s2182_ _s2183_) with
+ | _s2184_ =>
+ (sep_matches_prefix _s2184_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s2185_ _)) =>
+ match (string_drop _s2184_ _s2185_) with
+ | _s2186_ =>
+ match (hex_bits_7_matches_prefix _s2186_) with
+ | Some (v__776,(existT _ _s2187_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__776 1 0)
+ (vec_of_bits [B0;B0]
+ : mword (1 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__776 6 2 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__776 6 2 in
+ let p0_ :=
+ string_drop _s2186_ _s2187_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rsc1, rsc2, uimm))
+ else None
+ else
+ let g__25 := Some ((v__776, _s2187_)) in
+ None
+ | g__25 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s2157_ (_s2158_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s2159_ := _s2158_ in
+ (if ((string_startswith _s2159_ "c.ld")) then
+ (match (string_drop _s2159_ (projT1 (string_length "c.ld"))) with
+ | _s2160_ =>
+ (spc_matches_prefix _s2160_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2161_ _)) =>
+ (match (string_drop _s2160_ _s2161_) with
+ | _s2162_ =>
+ (creg_name_matches_prefix _s2162_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s2163_ _)) =>
+ (match (string_drop _s2162_ _s2163_) with
+ | _s2164_ =>
+ (sep_matches_prefix _s2164_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2165_ _)) =>
+ (match (string_drop _s2164_ _s2165_) with
+ | _s2166_ =>
+ (creg_name_matches_prefix _s2166_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc,(existT _ _s2167_ _)) =>
+ (match (string_drop _s2166_ _s2167_) with
+ | _s2168_ =>
+ (sep_matches_prefix _s2168_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s2169_ _)) =>
+ match (string_drop _s2168_ _s2169_) with
+ | _s2170_ =>
+ match (hex_bits_8_matches_prefix _s2170_) with
+ | Some (v__778,(existT _ _s2171_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__778 2 0)
+ (vec_of_bits [B0;B0;B0]
+ : mword (2 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__778 7 3 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__778 7 3 in
+ let p0_ :=
+ string_drop _s2170_ _s2171_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rdc, rsc, uimm))
+ else None
+ else
+ let g__24 := Some ((v__778, _s2171_)) in
+ None
+ | g__24 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s2141_ (_s2142_ : string)
+: M (option ((mword 3 * mword 3 * mword 5))) :=
+
+ let _s2143_ := _s2142_ in
+ (if ((string_startswith _s2143_ "c.lw")) then
+ (match (string_drop _s2143_ (projT1 (string_length "c.lw"))) with
+ | _s2144_ =>
+ (spc_matches_prefix _s2144_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2145_ _)) =>
+ (match (string_drop _s2144_ _s2145_) with
+ | _s2146_ =>
+ (creg_name_matches_prefix _s2146_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s2147_ _)) =>
+ (match (string_drop _s2146_ _s2147_) with
+ | _s2148_ =>
+ (sep_matches_prefix _s2148_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2149_ _)) =>
+ (match (string_drop _s2148_ _s2149_) with
+ | _s2150_ =>
+ (creg_name_matches_prefix _s2150_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc,(existT _ _s2151_ _)) =>
+ (match (string_drop _s2150_ _s2151_) with
+ | _s2152_ =>
+ (sep_matches_prefix _s2152_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s2153_ _)) =>
+ match (string_drop _s2152_ _s2153_) with
+ | _s2154_ =>
+ match (hex_bits_7_matches_prefix _s2154_) with
+ | Some (v__780,(existT _ _s2155_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__780 1 0)
+ (vec_of_bits [B0;B0]
+ : mword (1 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__780 6 2 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__780 6 2 in
+ let p0_ :=
+ string_drop _s2154_ _s2155_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rdc, rsc, uimm))
+ else None
+ else
+ let g__23 := Some ((v__780, _s2155_)) in
+ None
+ | g__23 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5))))
+ : M (option ((mword 3 * mword 3 * mword 5))).
+
+Definition _s2129_ (_s2130_ : string)
+: M (option ((mword 3 * mword 8))) :=
+
+ let _s2131_ := _s2130_ in
+ (if ((string_startswith _s2131_ "c.addi4spn")) then
+ (match (string_drop _s2131_ (projT1 (string_length "c.addi4spn"))) with
+ | _s2132_ =>
+ (spc_matches_prefix _s2132_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2133_ _)) =>
+ (match (string_drop _s2132_ _s2133_) with
+ | _s2134_ =>
+ (creg_name_matches_prefix _s2134_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s2135_ _)) =>
+ (match (string_drop _s2134_ _s2135_) with
+ | _s2136_ =>
+ (sep_matches_prefix _s2136_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2137_ _)) =>
+ match (string_drop _s2136_ _s2137_) with
+ | _s2138_ =>
+ match (hex_bits_10_matches_prefix _s2138_) with
+ | Some (v__782,(existT _ _s2139_ _)) =>
+ if ((eq_vec (subrange_vec_dec v__782 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))
+ then
+ let nzimm : mword 8 := subrange_vec_dec v__782 9 2 in
+ let nzimm : mword 8 := subrange_vec_dec v__782 9 2 in
+ let p0_ := string_drop _s2138_ _s2139_ in
+ if ((generic_eq p0_ "")) then Some ((rdc, nzimm))
+ else None
+ else
+ let g__22 := Some ((v__782, _s2139_)) in
+ None
+ | g__22 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ | _ => returnm (None : option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ end)
+ : M (option ((mword 3 * mword 8)))
+ else returnm (None : option ((mword 3 * mword 8))))
+ : M (option ((mword 3 * mword 8))).
+
+Definition _s2112_ (_s2113_ : string)
+: M (option ((csrop * mword 5 * mword 5 * mword 12))) :=
+
+ (match _s2113_ with
+ | _s2114_ =>
+ (csr_mnemonic_matches_prefix _s2114_) >>= fun w__0 : option ((csrop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2115_ _)) =>
+ (match (string_drop _s2114_ _s2115_) with
+ | _s2116_ =>
+ (spc_matches_prefix _s2116_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2117_ _)) =>
+ (match (string_drop _s2116_ _s2117_) with
+ | _s2118_ =>
+ (reg_name_matches_prefix _s2118_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2119_ _)) =>
+ (match (string_drop _s2118_ _s2119_) with
+ | _s2120_ =>
+ (sep_matches_prefix _s2120_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2121_ _)) =>
+ (match (string_drop _s2120_ _s2121_) with
+ | _s2122_ =>
+ (reg_name_matches_prefix _s2122_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2123_ _)) =>
+ (match (string_drop _s2122_ _s2123_) with
+ | _s2124_ =>
+ (sep_matches_prefix _s2124_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2125_ _)) =>
+ (match (string_drop _s2124_ _s2125_) with
+ | _s2126_ =>
+ (csr_name_map_matches_prefix _s2126_) >>= fun w__6 : option ((mword 12 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (csr,(existT _ _s2127_ _)) =>
+ let p0_ :=
+ string_drop _s2126_ _s2127_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, csr))
+ else None
+ | _ => None
+ end)
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12))).
+
+Definition _s2094_ (_s2095_ : string)
+: M (option ((csrop * mword 5 * mword 5 * mword 12))) :=
+
+ (match _s2095_ with
+ | _s2096_ =>
+ (csr_mnemonic_matches_prefix _s2096_) >>= fun w__0 : option ((csrop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2097_ _)) =>
+ let _s2098_ := string_drop _s2096_ _s2097_ in
+ (if ((string_startswith _s2098_ "i")) then
+ (match (string_drop _s2098_ (projT1 (string_length "i"))) with
+ | _s2099_ =>
+ (spc_matches_prefix _s2099_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2100_ _)) =>
+ (match (string_drop _s2099_ _s2100_) with
+ | _s2101_ =>
+ (reg_name_matches_prefix _s2101_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2102_ _)) =>
+ (match (string_drop _s2101_ _s2102_) with
+ | _s2103_ =>
+ (sep_matches_prefix _s2103_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2104_ _)) =>
+ (match (string_drop _s2103_ _s2104_) with
+ | _s2105_ =>
+ (match (hex_bits_5_matches_prefix _s2105_) with
+ | Some (rs1,(existT _ _s2106_ _)) =>
+ (match (string_drop _s2105_ _s2106_) with
+ | _s2107_ =>
+ (sep_matches_prefix _s2107_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s2108_ _)) =>
+ (match (string_drop _s2107_ _s2108_) with
+ | _s2109_ =>
+ (csr_name_map_matches_prefix _s2109_) >>= fun w__5 : option ((mword 12 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some
+ (csr,(existT _ _s2110_ _)) =>
+ let p0_ :=
+ string_drop _s2109_ _s2110_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, csr))
+ else None
+ | _ => None
+ end)
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((csrop * mword 5 * mword 5 * mword 12))))
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12))).
+
+Definition _s2070_ (_s2071_ : string)
+: M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s2071_ with
+ | _s2072_ =>
+ (amo_mnemonic_matches_prefix _s2072_) >>= fun w__0 : option ((amoop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2073_ _)) =>
+ let _s2074_ := string_drop _s2072_ _s2073_ in
+ (if ((string_startswith _s2074_ ".")) then
+ (match (string_drop _s2074_ (projT1 (string_length "."))) with
+ | _s2075_ =>
+ (size_mnemonic_matches_prefix _s2075_) >>= fun w__1 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (width,(existT _ _s2076_ _)) =>
+ (match (string_drop _s2075_ _s2076_) with
+ | _s2077_ =>
+ (maybe_aq_matches_prefix _s2077_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (aq,(existT _ _s2078_ _)) =>
+ (match (string_drop _s2077_ _s2078_) with
+ | _s2079_ =>
+ (maybe_rl_matches_prefix _s2079_) >>= fun w__3 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rl,(existT _ _s2080_ _)) =>
+ (match (string_drop _s2079_ _s2080_) with
+ | _s2081_ =>
+ (spc_matches_prefix _s2081_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s2082_ _)) =>
+ (match (string_drop _s2081_ _s2082_) with
+ | _s2083_ =>
+ (reg_name_matches_prefix _s2083_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (rd,(existT _ _s2084_ _)) =>
+ (match (string_drop _s2083_ _s2084_) with
+ | _s2085_ =>
+ (sep_matches_prefix _s2085_) >>= fun w__6 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (tt,(existT _ _s2086_ _)) =>
+ (match (string_drop _s2085_ _s2086_) with
+ | _s2087_ =>
+ (reg_name_matches_prefix _s2087_) >>= fun w__7 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (rs1,(existT _ _s2088_ _)) =>
+ (match (string_drop _s2087_
+ _s2088_) with
+ | _s2089_ =>
+ (sep_matches_prefix
+ _s2089_) >>= fun w__8 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__8 with
+ | Some
+ (tt,(existT _ _s2090_ _)) =>
+ (match (string_drop
+ _s2089_
+ _s2090_) with
+ | _s2091_ =>
+ (reg_name_matches_prefix
+ _s2091_) >>= fun w__9 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__9 with
+ | Some
+ (rs2,(existT _ _s2092_ _)) =>
+ let p0_ :=
+ string_drop
+ _s2091_
+ _s2092_ in
+ if ((generic_eq
+ p0_
+ ""))
+ then
+ Some
+ ((op, width, aq, rl, rd, rs1, rs2))
+ else
+ None
+ | _ =>
+ None
+ end)
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ else
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s2048_ (_s2049_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s2050_ := _s2049_ in
+ (if ((string_startswith _s2050_ "sc.")) then
+ (match (string_drop _s2050_ (projT1 (string_length "sc."))) with
+ | _s2051_ =>
+ (size_mnemonic_matches_prefix _s2051_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s2052_ _)) =>
+ (match (string_drop _s2051_ _s2052_) with
+ | _s2053_ =>
+ (maybe_aq_matches_prefix _s2053_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s2054_ _)) =>
+ (match (string_drop _s2053_ _s2054_) with
+ | _s2055_ =>
+ (maybe_rl_matches_prefix _s2055_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s2056_ _)) =>
+ (match (string_drop _s2055_ _s2056_) with
+ | _s2057_ =>
+ (spc_matches_prefix _s2057_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2058_ _)) =>
+ (match (string_drop _s2057_ _s2058_) with
+ | _s2059_ =>
+ (reg_name_matches_prefix _s2059_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s2060_ _)) =>
+ (match (string_drop _s2059_ _s2060_) with
+ | _s2061_ =>
+ (sep_matches_prefix _s2061_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2062_ _)) =>
+ (match (string_drop _s2061_ _s2062_) with
+ | _s2063_ =>
+ (reg_name_matches_prefix _s2063_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (rs1,(existT _ _s2064_ _)) =>
+ (match (string_drop _s2063_ _s2064_) with
+ | _s2065_ =>
+ (sep_matches_prefix _s2065_) >>= fun w__7 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (tt,(existT _ _s2066_ _)) =>
+ (match (string_drop _s2065_
+ _s2066_) with
+ | _s2067_ =>
+ (reg_name_matches_prefix
+ _s2067_) >>= fun w__8 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__8 with
+ | Some
+ (rs2,(existT _ _s2068_ _)) =>
+ let p0_ :=
+ string_drop
+ _s2067_
+ _s2068_ in
+ if ((generic_eq
+ p0_ ""))
+ then
+ Some
+ ((size, aq, rl, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s2030_ (_s2031_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5))) :=
+
+ let _s2032_ := _s2031_ in
+ (if ((string_startswith _s2032_ "lr.")) then
+ (match (string_drop _s2032_ (projT1 (string_length "lr."))) with
+ | _s2033_ =>
+ (size_mnemonic_matches_prefix _s2033_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s2034_ _)) =>
+ (match (string_drop _s2033_ _s2034_) with
+ | _s2035_ =>
+ (maybe_aq_matches_prefix _s2035_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s2036_ _)) =>
+ (match (string_drop _s2035_ _s2036_) with
+ | _s2037_ =>
+ (maybe_rl_matches_prefix _s2037_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s2038_ _)) =>
+ (match (string_drop _s2037_ _s2038_) with
+ | _s2039_ =>
+ (spc_matches_prefix _s2039_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2040_ _)) =>
+ (match (string_drop _s2039_ _s2040_) with
+ | _s2041_ =>
+ (reg_name_matches_prefix _s2041_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s2042_ _)) =>
+ (match (string_drop _s2041_ _s2042_) with
+ | _s2043_ =>
+ (sep_matches_prefix _s2043_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2044_ _)) =>
+ (match (string_drop _s2043_ _s2044_) with
+ | _s2045_ =>
+ (reg_name_matches_prefix _s2045_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs1,(existT _ _s2046_ _)) =>
+ let p0_ :=
+ string_drop _s2045_ _s2046_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((size, aq, rl, rd, rs1))
+ else None
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ => returnm (None : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ | _ => returnm (None : option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5))).
+
+Definition _s2018_ (_s2019_ : string)
+: M (option ((mword 5 * mword 5))) :=
+
+ let _s2020_ := _s2019_ in
+ (if ((string_startswith _s2020_ "sfence.vma")) then
+ (match (string_drop _s2020_ (projT1 (string_length "sfence.vma"))) with
+ | _s2021_ =>
+ (spc_matches_prefix _s2021_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2022_ _)) =>
+ (match (string_drop _s2021_ _s2022_) with
+ | _s2023_ =>
+ (reg_name_matches_prefix _s2023_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs1,(existT _ _s2024_ _)) =>
+ (match (string_drop _s2023_ _s2024_) with
+ | _s2025_ =>
+ (sep_matches_prefix _s2025_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2026_ _)) =>
+ (match (string_drop _s2025_ _s2026_) with
+ | _s2027_ =>
+ (reg_name_matches_prefix _s2027_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2028_ _)) =>
+ let p0_ := string_drop _s2027_ _s2028_ in
+ if ((generic_eq p0_ "")) then Some ((rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5))).
+
+Definition _s2006_ (_s2007_ : string)
+: M (option ((mword 4 * mword 4))) :=
+
+ let _s2008_ := _s2007_ in
+ (if ((string_startswith _s2008_ "fence.tso")) then
+ (match (string_drop _s2008_ (projT1 (string_length "fence.tso"))) with
+ | _s2009_ =>
+ (spc_matches_prefix _s2009_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2010_ _)) =>
+ (match (string_drop _s2009_ _s2010_) with
+ | _s2011_ =>
+ (fence_bits_matches_prefix _s2011_) >>= fun w__1 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (pred,(existT _ _s2012_ _)) =>
+ (match (string_drop _s2011_ _s2012_) with
+ | _s2013_ =>
+ (sep_matches_prefix _s2013_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2014_ _)) =>
+ (match (string_drop _s2013_ _s2014_) with
+ | _s2015_ =>
+ (fence_bits_matches_prefix _s2015_) >>= fun w__3 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (succ,(existT _ _s2016_ _)) =>
+ let p0_ := string_drop _s2015_ _s2016_ in
+ if ((generic_eq p0_ "")) then Some ((pred, succ))
+ else None
+ | _ => None
+ end)
+ : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ else returnm (None : option ((mword 4 * mword 4))))
+ : M (option ((mword 4 * mword 4))).
+
+Definition _s1994_ (_s1995_ : string)
+: M (option ((mword 4 * mword 4))) :=
+
+ let _s1996_ := _s1995_ in
+ (if ((string_startswith _s1996_ "fence")) then
+ (match (string_drop _s1996_ (projT1 (string_length "fence"))) with
+ | _s1997_ =>
+ (spc_matches_prefix _s1997_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1998_ _)) =>
+ (match (string_drop _s1997_ _s1998_) with
+ | _s1999_ =>
+ (fence_bits_matches_prefix _s1999_) >>= fun w__1 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (pred,(existT _ _s2000_ _)) =>
+ (match (string_drop _s1999_ _s2000_) with
+ | _s2001_ =>
+ (sep_matches_prefix _s2001_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2002_ _)) =>
+ (match (string_drop _s2001_ _s2002_) with
+ | _s2003_ =>
+ (fence_bits_matches_prefix _s2003_) >>= fun w__3 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (succ,(existT _ _s2004_ _)) =>
+ let p0_ := string_drop _s2003_ _s2004_ in
+ if ((generic_eq p0_ "")) then Some ((pred, succ))
+ else None
+ | _ => None
+ end)
+ : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ | _ => returnm (None : option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ end)
+ : M (option ((mword 4 * mword 4)))
+ else returnm (None : option ((mword 4 * mword 4))))
+ : M (option ((mword 4 * mword 4))).
+
+Definition _s1975_ (_s1976_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1977_ := _s1976_ in
+ (if ((string_startswith _s1977_ "rem")) then
+ (match (string_drop _s1977_ (projT1 (string_length "rem"))) with
+ | _s1978_ =>
+ (maybe_not_u_matches_prefix _s1978_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1979_ _)) =>
+ let _s1980_ := string_drop _s1978_ _s1979_ in
+ (if ((string_startswith _s1980_ "w")) then
+ (match (string_drop _s1980_ (projT1 (string_length "w"))) with
+ | _s1981_ =>
+ (spc_matches_prefix _s1981_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1982_ _)) =>
+ (match (string_drop _s1981_ _s1982_) with
+ | _s1983_ =>
+ (reg_name_matches_prefix _s1983_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1984_ _)) =>
+ (match (string_drop _s1983_ _s1984_) with
+ | _s1985_ =>
+ (sep_matches_prefix _s1985_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1986_ _)) =>
+ (match (string_drop _s1985_ _s1986_) with
+ | _s1987_ =>
+ (reg_name_matches_prefix _s1987_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1988_ _)) =>
+ (match (string_drop _s1987_ _s1988_) with
+ | _s1989_ =>
+ (sep_matches_prefix _s1989_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1990_ _)) =>
+ (match (string_drop _s1989_ _s1990_) with
+ | _s1991_ =>
+ (reg_name_matches_prefix _s1991_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1992_ _)) =>
+ let p0_ :=
+ string_drop _s1991_
+ _s1992_ in
+ if ((generic_eq p0_ ""))
+ then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1956_ (_s1957_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1958_ := _s1957_ in
+ (if ((string_startswith _s1958_ "div")) then
+ (match (string_drop _s1958_ (projT1 (string_length "div"))) with
+ | _s1959_ =>
+ (maybe_not_u_matches_prefix _s1959_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1960_ _)) =>
+ let _s1961_ := string_drop _s1959_ _s1960_ in
+ (if ((string_startswith _s1961_ "w")) then
+ (match (string_drop _s1961_ (projT1 (string_length "w"))) with
+ | _s1962_ =>
+ (spc_matches_prefix _s1962_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1963_ _)) =>
+ (match (string_drop _s1962_ _s1963_) with
+ | _s1964_ =>
+ (reg_name_matches_prefix _s1964_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1965_ _)) =>
+ (match (string_drop _s1964_ _s1965_) with
+ | _s1966_ =>
+ (sep_matches_prefix _s1966_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1967_ _)) =>
+ (match (string_drop _s1966_ _s1967_) with
+ | _s1968_ =>
+ (reg_name_matches_prefix _s1968_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1969_ _)) =>
+ (match (string_drop _s1968_ _s1969_) with
+ | _s1970_ =>
+ (sep_matches_prefix _s1970_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1971_ _)) =>
+ (match (string_drop _s1970_ _s1971_) with
+ | _s1972_ =>
+ (reg_name_matches_prefix _s1972_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1973_ _)) =>
+ let p0_ :=
+ string_drop _s1972_
+ _s1973_ in
+ if ((generic_eq p0_ ""))
+ then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1940_ (_s1941_ : string)
+: M (option ((mword 5 * mword 5 * mword 5))) :=
+
+ let _s1942_ := _s1941_ in
+ (if ((string_startswith _s1942_ "mulw")) then
+ (match (string_drop _s1942_ (projT1 (string_length "mulw"))) with
+ | _s1943_ =>
+ (spc_matches_prefix _s1943_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1944_ _)) =>
+ (match (string_drop _s1943_ _s1944_) with
+ | _s1945_ =>
+ (reg_name_matches_prefix _s1945_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1946_ _)) =>
+ (match (string_drop _s1945_ _s1946_) with
+ | _s1947_ =>
+ (sep_matches_prefix _s1947_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1948_ _)) =>
+ (match (string_drop _s1947_ _s1948_) with
+ | _s1949_ =>
+ (reg_name_matches_prefix _s1949_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s1950_ _)) =>
+ (match (string_drop _s1949_ _s1950_) with
+ | _s1951_ =>
+ (sep_matches_prefix _s1951_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s1952_ _)) =>
+ (match (string_drop _s1951_ _s1952_) with
+ | _s1953_ =>
+ (reg_name_matches_prefix _s1953_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (rs2,(existT _ _s1954_ _)) =>
+ let p0_ :=
+ string_drop _s1953_ _s1954_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 5))))
+ : M (option ((mword 5 * mword 5 * mword 5))).
+
+Definition _s1922_ (_s1923_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1924_ := _s1923_ in
+ (if ((string_startswith _s1924_ "rem")) then
+ (match (string_drop _s1924_ (projT1 (string_length "rem"))) with
+ | _s1925_ =>
+ (maybe_not_u_matches_prefix _s1925_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1926_ _)) =>
+ (match (string_drop _s1925_ _s1926_) with
+ | _s1927_ =>
+ (spc_matches_prefix _s1927_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1928_ _)) =>
+ (match (string_drop _s1927_ _s1928_) with
+ | _s1929_ =>
+ (reg_name_matches_prefix _s1929_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1930_ _)) =>
+ (match (string_drop _s1929_ _s1930_) with
+ | _s1931_ =>
+ (sep_matches_prefix _s1931_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1932_ _)) =>
+ (match (string_drop _s1931_ _s1932_) with
+ | _s1933_ =>
+ (reg_name_matches_prefix _s1933_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1934_ _)) =>
+ (match (string_drop _s1933_ _s1934_) with
+ | _s1935_ =>
+ (sep_matches_prefix _s1935_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1936_ _)) =>
+ (match (string_drop _s1935_ _s1936_) with
+ | _s1937_ =>
+ (reg_name_matches_prefix _s1937_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1938_ _)) =>
+ let p0_ :=
+ string_drop _s1937_ _s1938_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1904_ (_s1905_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5))) :=
+
+ let _s1906_ := _s1905_ in
+ (if ((string_startswith _s1906_ "div")) then
+ (match (string_drop _s1906_ (projT1 (string_length "div"))) with
+ | _s1907_ =>
+ (maybe_not_u_matches_prefix _s1907_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s1908_ _)) =>
+ (match (string_drop _s1907_ _s1908_) with
+ | _s1909_ =>
+ (spc_matches_prefix _s1909_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1910_ _)) =>
+ (match (string_drop _s1909_ _s1910_) with
+ | _s1911_ =>
+ (reg_name_matches_prefix _s1911_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1912_ _)) =>
+ (match (string_drop _s1911_ _s1912_) with
+ | _s1913_ =>
+ (sep_matches_prefix _s1913_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1914_ _)) =>
+ (match (string_drop _s1913_ _s1914_) with
+ | _s1915_ =>
+ (reg_name_matches_prefix _s1915_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1916_ _)) =>
+ (match (string_drop _s1915_ _s1916_) with
+ | _s1917_ =>
+ (sep_matches_prefix _s1917_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1918_ _)) =>
+ (match (string_drop _s1917_ _s1918_) with
+ | _s1919_ =>
+ (reg_name_matches_prefix _s1919_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s1920_ _)) =>
+ let p0_ :=
+ string_drop _s1919_ _s1920_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((s, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1887_ (_s1888_ : string)
+: M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1888_ with
+ | _s1889_ =>
+ (mul_mnemonic_matches_prefix _s1889_) >>= fun w__0 : option (((bool * bool * bool) * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some ((high, signed1, signed2),(existT _ _s1890_ _)) =>
+ (match (string_drop _s1889_ _s1890_) with
+ | _s1891_ =>
+ (spc_matches_prefix _s1891_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1892_ _)) =>
+ (match (string_drop _s1891_ _s1892_) with
+ | _s1893_ =>
+ (reg_name_matches_prefix _s1893_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1894_ _)) =>
+ (match (string_drop _s1893_ _s1894_) with
+ | _s1895_ =>
+ (sep_matches_prefix _s1895_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1896_ _)) =>
+ (match (string_drop _s1895_ _s1896_) with
+ | _s1897_ =>
+ (reg_name_matches_prefix _s1897_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1898_ _)) =>
+ (match (string_drop _s1897_ _s1898_) with
+ | _s1899_ =>
+ (sep_matches_prefix _s1899_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1900_ _)) =>
+ (match (string_drop _s1899_ _s1900_) with
+ | _s1901_ =>
+ (reg_name_matches_prefix _s1901_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s1902_ _)) =>
+ let p0_ :=
+ string_drop _s1901_ _s1902_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((high, signed1, signed2, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5))).
+
+Definition _s1872_ (_s1873_ : string)
+: M (option ((sopw * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1873_ with
+ | _s1874_ =>
+ (shiftiwop_mnemonic_matches_prefix _s1874_) >>= fun w__0 : option ((sopw * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1875_ _)) =>
+ (match (string_drop _s1874_ _s1875_) with
+ | _s1876_ =>
+ (spc_matches_prefix _s1876_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1877_ _)) =>
+ (match (string_drop _s1876_ _s1877_) with
+ | _s1878_ =>
+ (reg_name_matches_prefix _s1878_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1879_ _)) =>
+ (match (string_drop _s1878_ _s1879_) with
+ | _s1880_ =>
+ (sep_matches_prefix _s1880_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1881_ _)) =>
+ (match (string_drop _s1880_ _s1881_) with
+ | _s1882_ =>
+ (reg_name_matches_prefix _s1882_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (rs1,(existT _ _s1883_ _)) =>
+ match (string_drop _s1882_ _s1883_) with
+ | _s1884_ =>
+ match (hex_bits_5_matches_prefix _s1884_) with
+ | Some (shamt,(existT _ _s1885_ _)) =>
+ let p0_ := string_drop _s1884_ _s1885_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5))).
+
+Definition _s1855_ (_s1856_ : string)
+: M (option ((ropw * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1856_ with
+ | _s1857_ =>
+ (rtypew_mnemonic_matches_prefix _s1857_) >>= fun w__0 : option ((ropw * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1858_ _)) =>
+ (match (string_drop _s1857_ _s1858_) with
+ | _s1859_ =>
+ (spc_matches_prefix _s1859_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1860_ _)) =>
+ (match (string_drop _s1859_ _s1860_) with
+ | _s1861_ =>
+ (reg_name_matches_prefix _s1861_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1862_ _)) =>
+ (match (string_drop _s1861_ _s1862_) with
+ | _s1863_ =>
+ (sep_matches_prefix _s1863_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1864_ _)) =>
+ (match (string_drop _s1863_ _s1864_) with
+ | _s1865_ =>
+ (reg_name_matches_prefix _s1865_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1866_ _)) =>
+ (match (string_drop _s1865_ _s1866_) with
+ | _s1867_ =>
+ (sep_matches_prefix _s1867_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1868_ _)) =>
+ (match (string_drop _s1867_ _s1868_) with
+ | _s1869_ =>
+ (reg_name_matches_prefix _s1869_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s1870_ _)) =>
+ let p0_ :=
+ string_drop _s1869_ _s1870_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5))).
+
+Definition _s1838_ (_s1839_ : string)
+: M (option ((sop * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1839_ with
+ | _s1840_ =>
+ (shiftw_mnemonic_matches_prefix _s1840_) >>= fun w__0 : option ((sop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1841_ _)) =>
+ (match (string_drop _s1840_ _s1841_) with
+ | _s1842_ =>
+ (spc_matches_prefix _s1842_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1843_ _)) =>
+ (match (string_drop _s1842_ _s1843_) with
+ | _s1844_ =>
+ (reg_name_matches_prefix _s1844_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1845_ _)) =>
+ (match (string_drop _s1844_ _s1845_) with
+ | _s1846_ =>
+ (sep_matches_prefix _s1846_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1847_ _)) =>
+ (match (string_drop _s1846_ _s1847_) with
+ | _s1848_ =>
+ (reg_name_matches_prefix _s1848_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1849_ _)) =>
+ (match (string_drop _s1848_ _s1849_) with
+ | _s1850_ =>
+ (sep_matches_prefix _s1850_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s1851_ _)) =>
+ match (string_drop _s1850_ _s1851_) with
+ | _s1852_ =>
+ match (hex_bits_5_matches_prefix
+ _s1852_) with
+ | Some (shamt,(existT _ _s1853_ _)) =>
+ let p0_ :=
+ string_drop _s1852_ _s1853_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5))).
+
+Definition _s1822_ (_s1823_ : string)
+: M (option ((mword 5 * mword 5 * mword 12))) :=
+
+ let _s1824_ := _s1823_ in
+ (if ((string_startswith _s1824_ "addiw")) then
+ (match (string_drop _s1824_ (projT1 (string_length "addiw"))) with
+ | _s1825_ =>
+ (spc_matches_prefix _s1825_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1826_ _)) =>
+ (match (string_drop _s1825_ _s1826_) with
+ | _s1827_ =>
+ (reg_name_matches_prefix _s1827_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1828_ _)) =>
+ (match (string_drop _s1827_ _s1828_) with
+ | _s1829_ =>
+ (sep_matches_prefix _s1829_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1830_ _)) =>
+ (match (string_drop _s1829_ _s1830_) with
+ | _s1831_ =>
+ (reg_name_matches_prefix _s1831_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s1832_ _)) =>
+ (match (string_drop _s1831_ _s1832_) with
+ | _s1833_ =>
+ (sep_matches_prefix _s1833_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s1834_ _)) =>
+ match (string_drop _s1833_ _s1834_) with
+ | _s1835_ =>
+ match (hex_bits_12_matches_prefix _s1835_) with
+ | Some (imm,(existT _ _s1836_ _)) =>
+ let p0_ := string_drop _s1835_ _s1836_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 12))))
+ : M (option ((mword 5 * mword 5 * mword 12))).
+
+Definition _s1800_ (_s1801_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12))) :=
+
+ let _s1802_ := _s1801_ in
+ (if ((string_startswith _s1802_ "s")) then
+ (match (string_drop _s1802_ (projT1 (string_length "s"))) with
+ | _s1803_ =>
+ (size_mnemonic_matches_prefix _s1803_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s1804_ _)) =>
+ (match (string_drop _s1803_ _s1804_) with
+ | _s1805_ =>
+ (maybe_aq_matches_prefix _s1805_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s1806_ _)) =>
+ (match (string_drop _s1805_ _s1806_) with
+ | _s1807_ =>
+ (maybe_rl_matches_prefix _s1807_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s1808_ _)) =>
+ (match (string_drop _s1807_ _s1808_) with
+ | _s1809_ =>
+ (spc_matches_prefix _s1809_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1810_ _)) =>
+ (match (string_drop _s1809_ _s1810_) with
+ | _s1811_ =>
+ (reg_name_matches_prefix _s1811_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s1812_ _)) =>
+ (match (string_drop _s1811_ _s1812_) with
+ | _s1813_ =>
+ (sep_matches_prefix _s1813_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1814_ _)) =>
+ (match (string_drop _s1813_ _s1814_) with
+ | _s1815_ =>
+ (reg_name_matches_prefix _s1815_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (rs1,(existT _ _s1816_ _)) =>
+ (match (string_drop _s1815_ _s1816_) with
+ | _s1817_ =>
+ (sep_matches_prefix _s1817_) >>= fun w__7 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__7 with
+ | Some
+ (tt,(existT _ _s1818_ _)) =>
+ match (string_drop
+ _s1817_
+ _s1818_) with
+ | _s1819_ =>
+ match (hex_bits_12_matches_prefix
+ _s1819_) with
+ | Some
+ (imm,(existT _ _s1820_ _)) =>
+ let p0_ :=
+ string_drop
+ _s1819_
+ _s1820_ in
+ if ((generic_eq
+ p0_ ""))
+ then
+ Some
+ ((size, aq, rl, rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12))).
+
+Definition _s1776_ (_s1777_ : string)
+: M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12))) :=
+
+ let _s1778_ := _s1777_ in
+ (if ((string_startswith _s1778_ "l")) then
+ (match (string_drop _s1778_ (projT1 (string_length "l"))) with
+ | _s1779_ =>
+ (size_mnemonic_matches_prefix _s1779_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s1780_ _)) =>
+ (match (string_drop _s1779_ _s1780_) with
+ | _s1781_ =>
+ (maybe_u_matches_prefix _s1781_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (is_unsigned,(existT _ _s1782_ _)) =>
+ (match (string_drop _s1781_ _s1782_) with
+ | _s1783_ =>
+ (maybe_aq_matches_prefix _s1783_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (aq,(existT _ _s1784_ _)) =>
+ (match (string_drop _s1783_ _s1784_) with
+ | _s1785_ =>
+ (maybe_rl_matches_prefix _s1785_) >>= fun w__3 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rl,(existT _ _s1786_ _)) =>
+ (match (string_drop _s1785_ _s1786_) with
+ | _s1787_ =>
+ (spc_matches_prefix _s1787_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s1788_ _)) =>
+ (match (string_drop _s1787_ _s1788_) with
+ | _s1789_ =>
+ (reg_name_matches_prefix _s1789_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (rd,(existT _ _s1790_ _)) =>
+ (match (string_drop _s1789_ _s1790_) with
+ | _s1791_ =>
+ (sep_matches_prefix _s1791_) >>= fun w__6 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (tt,(existT _ _s1792_ _)) =>
+ (match (string_drop _s1791_ _s1792_) with
+ | _s1793_ =>
+ (reg_name_matches_prefix _s1793_) >>= fun w__7 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (rs1,(existT _ _s1794_ _)) =>
+ (match (string_drop _s1793_
+ _s1794_) with
+ | _s1795_ =>
+ (sep_matches_prefix
+ _s1795_) >>= fun w__8 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__8 with
+ | Some
+ (tt,(existT _ _s1796_ _)) =>
+ match (string_drop
+ _s1795_
+ _s1796_) with
+ | _s1797_ =>
+ match (hex_bits_12_matches_prefix
+ _s1797_) with
+ | Some
+ (imm,(existT _ _s1798_ _)) =>
+ let p0_ :=
+ string_drop
+ _s1797_
+ _s1798_ in
+ if ((generic_eq
+ p0_
+ ""))
+ then
+ Some
+ ((size, is_unsigned, aq, rl, rd, rs1, imm))
+ else
+ None
+ | _ =>
+ None
+ end
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12))))
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12))).
+
+Definition _s1759_ (_s1760_ : string)
+: M (option ((rop * mword 5 * mword 5 * mword 5))) :=
+
+ (match _s1760_ with
+ | _s1761_ =>
+ (rtype_mnemonic_matches_prefix _s1761_) >>= fun w__0 : option ((rop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1762_ _)) =>
+ (match (string_drop _s1761_ _s1762_) with
+ | _s1763_ =>
+ (spc_matches_prefix _s1763_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1764_ _)) =>
+ (match (string_drop _s1763_ _s1764_) with
+ | _s1765_ =>
+ (reg_name_matches_prefix _s1765_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1766_ _)) =>
+ (match (string_drop _s1765_ _s1766_) with
+ | _s1767_ =>
+ (sep_matches_prefix _s1767_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1768_ _)) =>
+ (match (string_drop _s1767_ _s1768_) with
+ | _s1769_ =>
+ (reg_name_matches_prefix _s1769_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1770_ _)) =>
+ (match (string_drop _s1769_ _s1770_) with
+ | _s1771_ =>
+ (sep_matches_prefix _s1771_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s1772_ _)) =>
+ (match (string_drop _s1771_ _s1772_) with
+ | _s1773_ =>
+ (reg_name_matches_prefix _s1773_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s1774_ _)) =>
+ let p0_ :=
+ string_drop _s1773_ _s1774_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, rs2))
+ else None
+ | _ => None
+ end)
+ : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ =>
+ returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5))).
+
+Definition _s1744_ (_s1745_ : string)
+: M (option ((sop * mword 5 * mword 5 * mword 6))) :=
+
+ (match _s1745_ with
+ | _s1746_ =>
+ (shiftiop_mnemonic_matches_prefix _s1746_) >>= fun w__0 : option ((sop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1747_ _)) =>
+ (match (string_drop _s1746_ _s1747_) with
+ | _s1748_ =>
+ (spc_matches_prefix _s1748_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1749_ _)) =>
+ (match (string_drop _s1748_ _s1749_) with
+ | _s1750_ =>
+ (reg_name_matches_prefix _s1750_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1751_ _)) =>
+ (match (string_drop _s1750_ _s1751_) with
+ | _s1752_ =>
+ (sep_matches_prefix _s1752_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1753_ _)) =>
+ (match (string_drop _s1752_ _s1753_) with
+ | _s1754_ =>
+ (reg_name_matches_prefix _s1754_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (rs1,(existT _ _s1755_ _)) =>
+ match (string_drop _s1754_ _s1755_) with
+ | _s1756_ =>
+ match (hex_bits_6_matches_prefix _s1756_) with
+ | Some (shamt,(existT _ _s1757_ _)) =>
+ let p0_ := string_drop _s1756_ _s1757_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, shamt))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ =>
+ returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6))).
+
+Definition _s1727_ (_s1728_ : string)
+: M (option ((iop * mword 5 * mword 5 * mword 12))) :=
+
+ (match _s1728_ with
+ | _s1729_ =>
+ (itype_mnemonic_matches_prefix _s1729_) >>= fun w__0 : option ((iop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1730_ _)) =>
+ (match (string_drop _s1729_ _s1730_) with
+ | _s1731_ =>
+ (spc_matches_prefix _s1731_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1732_ _)) =>
+ (match (string_drop _s1731_ _s1732_) with
+ | _s1733_ =>
+ (reg_name_matches_prefix _s1733_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1734_ _)) =>
+ (match (string_drop _s1733_ _s1734_) with
+ | _s1735_ =>
+ (sep_matches_prefix _s1735_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1736_ _)) =>
+ (match (string_drop _s1735_ _s1736_) with
+ | _s1737_ =>
+ (reg_name_matches_prefix _s1737_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s1738_ _)) =>
+ (match (string_drop _s1737_ _s1738_) with
+ | _s1739_ =>
+ (sep_matches_prefix _s1739_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s1740_ _)) =>
+ match (string_drop _s1739_ _s1740_) with
+ | _s1741_ =>
+ match (hex_bits_12_matches_prefix
+ _s1741_) with
+ | Some (imm,(existT _ _s1742_ _)) =>
+ let p0_ :=
+ string_drop _s1741_ _s1742_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None
+ : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ =>
+ returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12))).
+
+Definition _s1710_ (_s1711_ : string)
+: M (option ((bop * mword 5 * mword 5 * mword 13))) :=
+
+ (match _s1711_ with
+ | _s1712_ =>
+ (btype_mnemonic_matches_prefix _s1712_) >>= fun w__0 : option ((bop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1713_ _)) =>
+ (match (string_drop _s1712_ _s1713_) with
+ | _s1714_ =>
+ (spc_matches_prefix _s1714_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1715_ _)) =>
+ (match (string_drop _s1714_ _s1715_) with
+ | _s1716_ =>
+ (reg_name_matches_prefix _s1716_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rs1,(existT _ _s1717_ _)) =>
+ (match (string_drop _s1716_ _s1717_) with
+ | _s1718_ =>
+ (sep_matches_prefix _s1718_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s1719_ _)) =>
+ (match (string_drop _s1718_ _s1719_) with
+ | _s1720_ =>
+ (reg_name_matches_prefix _s1720_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs2,(existT _ _s1721_ _)) =>
+ (match (string_drop _s1720_ _s1721_) with
+ | _s1722_ =>
+ (sep_matches_prefix _s1722_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s1723_ _)) =>
+ match (string_drop _s1722_ _s1723_) with
+ | _s1724_ =>
+ match (hex_bits_13_matches_prefix
+ _s1724_) with
+ | Some (imm,(existT _ _s1725_ _)) =>
+ let p0_ :=
+ string_drop _s1724_ _s1725_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((op, rs1, rs2, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ =>
+ returnm (None
+ : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ =>
+ returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13))).
+
+Definition _s1694_ (_s1695_ : string)
+: M (option ((mword 5 * mword 5 * mword 12))) :=
+
+ let _s1696_ := _s1695_ in
+ (if ((string_startswith _s1696_ "jalr")) then
+ (match (string_drop _s1696_ (projT1 (string_length "jalr"))) with
+ | _s1697_ =>
+ (spc_matches_prefix _s1697_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1698_ _)) =>
+ (match (string_drop _s1697_ _s1698_) with
+ | _s1699_ =>
+ (reg_name_matches_prefix _s1699_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1700_ _)) =>
+ (match (string_drop _s1699_ _s1700_) with
+ | _s1701_ =>
+ (sep_matches_prefix _s1701_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s1702_ _)) =>
+ (match (string_drop _s1701_ _s1702_) with
+ | _s1703_ =>
+ (reg_name_matches_prefix _s1703_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s1704_ _)) =>
+ (match (string_drop _s1703_ _s1704_) with
+ | _s1705_ =>
+ (sep_matches_prefix _s1705_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s1706_ _)) =>
+ match (string_drop _s1705_ _s1706_) with
+ | _s1707_ =>
+ match (hex_bits_12_matches_prefix _s1707_) with
+ | Some (imm,(existT _ _s1708_ _)) =>
+ let p0_ := string_drop _s1707_ _s1708_ in
+ if ((generic_eq p0_ "")) then
+ Some
+ ((rd, rs1, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 12))))
+ : M (option ((mword 5 * mword 5 * mword 12))).
+
+Definition _s1682_ (_s1683_ : string)
+: M (option ((mword 5 * mword 21))) :=
+
+ let _s1684_ := _s1683_ in
+ (if ((string_startswith _s1684_ "jal")) then
+ (match (string_drop _s1684_ (projT1 (string_length "jal"))) with
+ | _s1685_ =>
+ (spc_matches_prefix _s1685_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s1686_ _)) =>
+ (match (string_drop _s1685_ _s1686_) with
+ | _s1687_ =>
+ (reg_name_matches_prefix _s1687_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s1688_ _)) =>
+ (match (string_drop _s1687_ _s1688_) with
+ | _s1689_ =>
+ (sep_matches_prefix _s1689_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s1690_ _)) =>
+ match (string_drop _s1689_ _s1690_) with
+ | _s1691_ =>
+ match (hex_bits_21_matches_prefix _s1691_) with
+ | Some (imm,(existT _ _s1692_ _)) =>
+ let p0_ := string_drop _s1691_ _s1692_ in
+ if ((generic_eq p0_ "")) then Some ((rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ | _ => returnm (None : option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ | _ => returnm (None : option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ end)
+ : M (option ((mword 5 * mword 21)))
+ else returnm (None : option ((mword 5 * mword 21))))
+ : M (option ((mword 5 * mword 21))).
+
+Definition _s1669_ (_s1670_ : string)
+: M (option ((uop * mword 5 * mword 20))) :=
+
+ (match _s1670_ with
+ | _s1671_ =>
+ (utype_mnemonic_matches_prefix _s1671_) >>= fun w__0 : option ((uop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s1672_ _)) =>
+ (match (string_drop _s1671_ _s1672_) with
+ | _s1673_ =>
+ (spc_matches_prefix _s1673_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s1674_ _)) =>
+ (match (string_drop _s1673_ _s1674_) with
+ | _s1675_ =>
+ (reg_name_matches_prefix _s1675_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s1676_ _)) =>
+ (match (string_drop _s1675_ _s1676_) with
+ | _s1677_ =>
+ (sep_matches_prefix _s1677_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (tt,(existT _ _s1678_ _)) =>
+ match (string_drop _s1677_ _s1678_) with
+ | _s1679_ =>
+ match (hex_bits_20_matches_prefix _s1679_) with
+ | Some (imm,(existT _ _s1680_ _)) =>
+ let p0_ := string_drop _s1679_ _s1680_ in
+ if ((generic_eq p0_ "")) then Some ((op, rd, imm))
+ else None
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20)))
+ end)
+ : M (option ((uop * mword 5 * mword 20))).
+
+Definition assembly_backwards_matches (arg_ : string)
+: M (bool) :=
+
+ let _s1681_ := arg_ in
+ (_s1669_ _s1681_) >>= fun w__0 : option ((uop * mword 5 * mword 20)) =>
+ (if ((match w__0 with | Some (op,rd,imm) => true | _ => false end)) then
+ (_s1669_ _s1681_) >>= fun w__1 : option ((uop * mword 5 * mword 20)) =>
+ (match w__1 with | Some (op,rd,imm) => returnm (true : bool) | _ => exit tt : M (bool) end)
+ : M (bool)
+ else
+ (_s1682_ _s1681_) >>= fun w__4 : option ((mword 5 * mword 21)) =>
+ (if ((match w__4 with | Some (rd,imm) => true | _ => false end)) then
+ (_s1682_ _s1681_) >>= fun w__5 : option ((mword 5 * mword 21)) =>
+ (match w__5 with | Some (rd,imm) => returnm (true : bool) | _ => exit tt : M (bool) end)
+ : M (bool)
+ else
+ (_s1694_ _s1681_) >>= fun w__8 : option ((mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__8 with | Some (rd,rs1,imm) => true | _ => false end)) then
+ (_s1694_ _s1681_) >>= fun w__9 : option ((mword 5 * mword 5 * mword 12)) =>
+ (match w__9 with
+ | Some (rd,rs1,imm) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1710_ _s1681_) >>= fun w__12 : option ((bop * mword 5 * mword 5 * mword 13)) =>
+ (if ((match w__12 with | Some (op,rs1,rs2,imm) => true | _ => false end)) then
+ (_s1710_ _s1681_) >>= fun w__13 : option ((bop * mword 5 * mword 5 * mword 13)) =>
+ (match w__13 with
+ | Some (op,rs1,rs2,imm) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1727_ _s1681_) >>= fun w__16 : option ((iop * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__16 with | Some (op,rd,rs1,imm) => true | _ => false end)) then
+ (_s1727_ _s1681_) >>= fun w__17 : option ((iop * mword 5 * mword 5 * mword 12)) =>
+ (match w__17 with
+ | Some (op,rd,rs1,imm) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1744_ _s1681_) >>= fun w__20 : option ((sop * mword 5 * mword 5 * mword 6)) =>
+ (if ((match w__20 with | Some (op,rd,rs1,shamt) => true | _ => false end)) then
+ (_s1744_ _s1681_) >>= fun w__21 : option ((sop * mword 5 * mword 5 * mword 6)) =>
+ (match w__21 with
+ | Some (op,rd,rs1,shamt) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1759_ _s1681_) >>= fun w__24 : option ((rop * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__24 with | Some (op,rd,rs1,rs2) => true | _ => false end)) then
+ (_s1759_ _s1681_) >>= fun w__25 : option ((rop * mword 5 * mword 5 * mword 5)) =>
+ (match w__25 with
+ | Some (op,rd,rs1,rs2) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1776_ _s1681_) >>= fun w__28 : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__28 with
+ | Some (size,is_unsigned,aq,rl,rd,rs1,imm) => true
+ | _ => false
+ end)) then
+ (_s1776_ _s1681_) >>= fun w__29 : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (match w__29 with
+ | Some (size,is_unsigned,aq,rl,rd,rs1,imm) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1800_ _s1681_) >>= fun w__32 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__32 with
+ | Some (size,aq,rl,rd,rs1,imm) => true
+ | _ => false
+ end)) then
+ (_s1800_ _s1681_) >>= fun w__33 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12)) =>
+ (match w__33 with
+ | Some (size,aq,rl,rd,rs1,imm) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1822_ _s1681_) >>= fun w__36 : option ((mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__36 with | Some (rd,rs1,imm) => true | _ => false end))
+ then
+ (_s1822_ _s1681_) >>= fun w__37 : option ((mword 5 * mword 5 * mword 12)) =>
+ (match w__37 with
+ | Some (rd,rs1,imm) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1838_ _s1681_) >>= fun w__40 : option ((sop * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__40 with
+ | Some (op,rd,rs1,shamt) => true
+ | _ => false
+ end)) then
+ (_s1838_ _s1681_) >>= fun w__41 : option ((sop * mword 5 * mword 5 * mword 5)) =>
+ (match w__41 with
+ | Some (op,rd,rs1,shamt) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1855_ _s1681_) >>= fun w__44 : option ((ropw * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__44 with
+ | Some (op,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1855_ _s1681_) >>= fun w__45 : option ((ropw * mword 5 * mword 5 * mword 5)) =>
+ (match w__45 with
+ | Some (op,rd,rs1,rs2) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1872_ _s1681_) >>= fun w__48 : option ((sopw * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__48 with
+ | Some (op,rd,rs1,shamt) => true
+ | _ => false
+ end)) then
+ (_s1872_ _s1681_) >>= fun w__49 : option ((sopw * mword 5 * mword 5 * mword 5)) =>
+ (match w__49 with
+ | Some (op,rd,rs1,shamt) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1887_ _s1681_) >>= fun w__52 : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__52 with
+ | Some (high,signed1,signed2,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1887_ _s1681_) >>= fun w__53 : option ((bool * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__53 with
+ | Some (high,signed1,signed2,rd,rs1,rs2) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1904_ _s1681_) >>= fun w__56 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__56 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1904_ _s1681_) >>= fun w__57 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__57 with
+ | Some (s,rd,rs1,rs2) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1922_ _s1681_) >>= fun w__60 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__60 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1922_ _s1681_) >>= fun w__61 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__61 with
+ | Some (s,rd,rs1,rs2) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1940_ _s1681_) >>= fun w__64 : option ((mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__64 with
+ | Some (rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1940_ _s1681_) >>= fun w__65 : option ((mword 5 * mword 5 * mword 5)) =>
+ (match w__65 with
+ | Some (rd,rs1,rs2) => returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1956_ _s1681_) >>= fun w__68 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__68 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1956_ _s1681_) >>= fun w__69 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__69 with
+ | Some (s,rd,rs1,rs2) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1975_ _s1681_) >>= fun w__72 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__72 with
+ | Some (s,rd,rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s1975_ _s1681_) >>= fun w__73 : option ((bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__73 with
+ | Some (s,rd,rs1,rs2) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s1994_ _s1681_) >>= fun w__76 : option ((mword 4 * mword 4)) =>
+ (if ((match w__76 with
+ | Some (pred,succ) => true
+ | _ => false
+ end)) then
+ (_s1994_ _s1681_) >>= fun w__77 : option ((mword 4 * mword 4)) =>
+ (match w__77 with
+ | Some (pred,succ) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2006_ _s1681_) >>= fun w__80 : option ((mword 4 * mword 4)) =>
+ (if ((match w__80 with
+ | Some (pred,succ) => true
+ | _ => false
+ end)) then
+ (_s2006_ _s1681_) >>= fun w__81 : option ((mword 4 * mword 4)) =>
+ (match w__81 with
+ | Some (pred,succ) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else if ((generic_eq _s1681_
+ "fence.i")) then
+ returnm (true
+ : bool)
+ else if ((generic_eq _s1681_ "ecall"))
+ then
+ returnm (true
+ : bool)
+ else if ((generic_eq _s1681_ "mret"))
+ then
+ returnm (true
+ : bool)
+ else if ((generic_eq _s1681_ "sret"))
+ then
+ returnm (true
+ : bool)
+ else if ((generic_eq _s1681_
+ "ebreak")) then
+ returnm (true
+ : bool)
+ else if ((generic_eq _s1681_ "wfi"))
+ then
+ returnm (true
+ : bool)
+ else
+ (_s2018_ _s1681_) >>= fun w__84 : option ((mword 5 * mword 5)) =>
+ (if ((match w__84 with
+ | Some (rs1,rs2) => true
+ | _ => false
+ end)) then
+ (_s2018_ _s1681_) >>= fun w__85 : option ((mword 5 * mword 5)) =>
+ (match w__85 with
+ | Some (rs1,rs2) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2030_ _s1681_) >>= fun w__88 : option ((word_width * bool * bool * mword 5 * mword 5)) =>
+ (if ((match w__88 with
+ | Some
+ (size,aq,rl,rd,rs1) =>
+ true
+ | _ => false
+ end)) then
+ (_s2030_ _s1681_) >>= fun w__89 : option ((word_width * bool * bool * mword 5 * mword 5)) =>
+ (match w__89 with
+ | Some (size,aq,rl,rd,rs1) =>
+ returnm (true : bool)
+ | _ => exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2048_ _s1681_) >>= fun w__92 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__92 with
+ | Some
+ (size,aq,rl,rd,rs1,rs2) =>
+ true
+ | _ => false
+ end)) then
+ (_s2048_ _s1681_) >>= fun w__93 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__93 with
+ | Some
+ (size,aq,rl,rd,rs1,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2070_ _s1681_) >>= fun w__96 : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (if ((match w__96 with
+ | Some
+ (op,width,aq,rl,rd,rs1,rs2) =>
+ true
+ | _ => false
+ end)) then
+ (_s2070_ _s1681_) >>= fun w__97 : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5)) =>
+ (match w__97 with
+ | Some
+ (op,width,aq,rl,rd,rs1,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2094_ _s1681_) >>= fun w__100 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__100 with
+ | Some
+ (op,rd,rs1,csr) =>
+ true
+ | _ => false
+ end)) then
+ (_s2094_ _s1681_) >>= fun w__101 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (match w__101 with
+ | Some
+ (op,rd,rs1,csr) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2112_ _s1681_) >>= fun w__104 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (if ((match w__104 with
+ | Some
+ (op,rd,rs1,csr) =>
+ true
+ | _ => false
+ end)) then
+ (_s2112_ _s1681_) >>= fun w__105 : option ((csrop * mword 5 * mword 5 * mword 12)) =>
+ (match w__105 with
+ | Some
+ (op,rd,rs1,csr) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else if ((generic_eq
+ _s1681_
+ "c.nop"))
+ then
+ returnm (true
+ : bool)
+ else
+ (_s2129_ _s1681_) >>= fun w__108 : option ((mword 3 * mword 8)) =>
+ (if ((match w__108 with
+ | Some
+ (rdc,nzimm) =>
+ neq_vec
+ nzimm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 8)
+ | _ =>
+ false
+ end)) then
+ (_s2129_
+ _s1681_) >>= fun w__109 : option ((mword 3 * mword 8)) =>
+ (match w__109 with
+ | Some
+ (rdc,nzimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2141_
+ _s1681_) >>= fun w__112 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__112 with
+ | Some
+ (rdc,rsc,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2141_
+ _s1681_) >>= fun w__113 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__113 with
+ | Some
+ (rdc,rsc,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2157_
+ _s1681_) >>= fun w__116 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__116 with
+ | Some
+ (rdc,rsc,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2157_
+ _s1681_) >>= fun w__117 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__117 with
+ | Some
+ (rdc,rsc,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2173_
+ _s1681_) >>= fun w__120 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__120 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2173_
+ _s1681_) >>= fun w__121 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__121 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2189_
+ _s1681_) >>= fun w__124 : option ((mword 3 * mword 3 * mword 5)) =>
+ (if ((match w__124 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2189_
+ _s1681_) >>= fun w__125 : option ((mword 3 * mword 3 * mword 5)) =>
+ (match w__125 with
+ | Some
+ (rsc1,rsc2,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2205_
+ _s1681_) >>= fun w__128 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__128 with
+ | Some
+ (rsd,nzi) =>
+ andb
+ (neq_vec
+ nzi
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s2205_
+ _s1681_) >>= fun w__129 : option ((mword 5 * mword 6)) =>
+ (match w__129 with
+ | Some
+ (rsd,nzi) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2217_
+ _s1681_) >>= fun w__132 : option (mword 11) =>
+ (if
+ ((match w__132 with
+ | Some
+ (imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2217_
+ _s1681_) >>= fun w__133 : option (mword 11) =>
+ (match w__133 with
+ | Some
+ (imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2225_
+ _s1681_) >>= fun w__136 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__136 with
+ | Some
+ (rsd,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2225_
+ _s1681_) >>= fun w__137 : option ((mword 5 * mword 6)) =>
+ (match w__137 with
+ | Some
+ (rsd,imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2237_
+ _s1681_) >>= fun w__140 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__140 with
+ | Some
+ (rd,imm) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s2237_
+ _s1681_) >>= fun w__141 : option ((mword 5 * mword 6)) =>
+ (match w__141 with
+ | Some
+ (rd,imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2249_
+ _s1681_) >>= fun w__144 : option (mword 6) =>
+ (if
+ ((match w__144 with
+ | Some
+ (imm) =>
+ neq_vec
+ imm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s2249_
+ _s1681_) >>= fun w__145 : option (mword 6) =>
+ (match w__145 with
+ | Some
+ (imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2257_
+ _s1681_) >>= fun w__148 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__148 with
+ | Some
+ (rd,imm) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ sp)))
+ (neq_vec
+ imm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)))
+ | _ =>
+ false
+ end))
+ then
+ (_s2257_
+ _s1681_) >>= fun w__149 : option ((mword 5 * mword 6)) =>
+ (match w__149 with
+ | Some
+ (rd,imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2269_
+ _s1681_) >>= fun w__152 : option ((mword 3 * mword 6)) =>
+ (if
+ ((match w__152 with
+ | Some
+ (rsd,shamt) =>
+ neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s2269_
+ _s1681_) >>= fun w__153 : option ((mword 3 * mword 6)) =>
+ (match w__153 with
+ | Some
+ (rsd,shamt) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2281_
+ _s1681_) >>= fun w__156 : option ((mword 3 * mword 6)) =>
+ (if
+ ((match w__156 with
+ | Some
+ (rsd,shamt) =>
+ neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s2281_
+ _s1681_) >>= fun w__157 : option ((mword 3 * mword 6)) =>
+ (match w__157 with
+ | Some
+ (rsd,shamt) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2293_
+ _s1681_) >>= fun w__160 : option ((mword 3 * mword 6)) =>
+ (if
+ ((match w__160 with
+ | Some
+ (rsd,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2293_
+ _s1681_) >>= fun w__161 : option ((mword 3 * mword 6)) =>
+ (match w__161 with
+ | Some
+ (rsd,imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2305_
+ _s1681_) >>= fun w__164 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__164 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2305_
+ _s1681_) >>= fun w__165 : option ((mword 3 * mword 3)) =>
+ (match w__165 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2317_
+ _s1681_) >>= fun w__168 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__168 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2317_
+ _s1681_) >>= fun w__169 : option ((mword 3 * mword 3)) =>
+ (match w__169 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2329_
+ _s1681_) >>= fun w__172 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__172 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2329_
+ _s1681_) >>= fun w__173 : option ((mword 3 * mword 3)) =>
+ (match w__173 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2341_
+ _s1681_) >>= fun w__176 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__176 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2341_
+ _s1681_) >>= fun w__177 : option ((mword 3 * mword 3)) =>
+ (match w__177 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2353_
+ _s1681_) >>= fun w__180 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__180 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2353_
+ _s1681_) >>= fun w__181 : option ((mword 3 * mword 3)) =>
+ (match w__181 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2365_
+ _s1681_) >>= fun w__184 : option ((mword 3 * mword 3)) =>
+ (if
+ ((match w__184 with
+ | Some
+ (rsd,rs2) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2365_
+ _s1681_) >>= fun w__185 : option ((mword 3 * mword 3)) =>
+ (match w__185 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2377_
+ _s1681_) >>= fun w__188 : option (mword 11) =>
+ (if
+ ((match w__188 with
+ | Some
+ (imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2377_
+ _s1681_) >>= fun w__189 : option (mword 11) =>
+ (match w__189 with
+ | Some
+ (imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2385_
+ _s1681_) >>= fun w__192 : option ((mword 3 * mword 8)) =>
+ (if
+ ((match w__192 with
+ | Some
+ (rs,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2385_
+ _s1681_) >>= fun w__193 : option ((mword 3 * mword 8)) =>
+ (match w__193 with
+ | Some
+ (rs,imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2397_
+ _s1681_) >>= fun w__196 : option ((mword 3 * mword 8)) =>
+ (if
+ ((match w__196 with
+ | Some
+ (rs,imm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2397_
+ _s1681_) >>= fun w__197 : option ((mword 3 * mword 8)) =>
+ (match w__197 with
+ | Some
+ (rs,imm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2409_
+ _s1681_) >>= fun w__200 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__200 with
+ | Some
+ (rsd,shamt) =>
+ andb
+ (neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s2409_
+ _s1681_) >>= fun w__201 : option ((mword 5 * mword 6)) =>
+ (match w__201 with
+ | Some
+ (rsd,shamt) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2421_
+ _s1681_) >>= fun w__204 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__204 with
+ | Some
+ (rd,uimm) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s2421_
+ _s1681_) >>= fun w__205 : option ((mword 5 * mword 6)) =>
+ (match w__205 with
+ | Some
+ (rd,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2433_
+ _s1681_) >>= fun w__208 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__208 with
+ | Some
+ (rd,uimm) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s2433_
+ _s1681_) >>= fun w__209 : option ((mword 5 * mword 6)) =>
+ (match w__209 with
+ | Some
+ (rd,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2445_
+ _s1681_) >>= fun w__212 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__212 with
+ | Some
+ (rd,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2445_
+ _s1681_) >>= fun w__213 : option ((mword 5 * mword 6)) =>
+ (match w__213 with
+ | Some
+ (rd,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2457_
+ _s1681_) >>= fun w__216 : option ((mword 5 * mword 6)) =>
+ (if
+ ((match w__216 with
+ | Some
+ (rs2,uimm) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2457_
+ _s1681_) >>= fun w__217 : option ((mword 5 * mword 6)) =>
+ (match w__217 with
+ | Some
+ (rs2,uimm) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2469_
+ _s1681_) >>= fun w__220 : option (mword 5) =>
+ (if
+ ((match w__220 with
+ | Some
+ (rs1) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rs1))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s2469_
+ _s1681_) >>= fun w__221 : option (mword 5) =>
+ (match w__221 with
+ | Some
+ (rs1) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2477_
+ _s1681_) >>= fun w__224 : option (mword 5) =>
+ (if
+ ((match w__224 with
+ | Some
+ (rs1) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rs1))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s2477_
+ _s1681_) >>= fun w__225 : option (mword 5) =>
+ (match w__225 with
+ | Some
+ (rs1) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2485_
+ _s1681_) >>= fun w__228 : option ((mword 5 * mword 5)) =>
+ (if
+ ((match w__228 with
+ | Some
+ (rd,rs2) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rs2))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s2485_
+ _s1681_) >>= fun w__229 : option ((mword 5 * mword 5)) =>
+ (match w__229 with
+ | Some
+ (rd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else if
+ ((generic_eq
+ _s1681_
+ "c.ebreak"))
+ then
+ returnm (true
+ : bool)
+ else
+ (_s2497_
+ _s1681_) >>= fun w__232 : option ((mword 5 * mword 5)) =>
+ (if
+ ((match w__232 with
+ | Some
+ (rsd,rs2) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rs2))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s2497_
+ _s1681_) >>= fun w__233 : option ((mword 5 * mword 5)) =>
+ (match w__233 with
+ | Some
+ (rsd,rs2) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else if
+ ((generic_eq
+ _s1681_
+ "stop_fetching"))
+ then
+ returnm (true
+ : bool)
+ else if
+ ((generic_eq
+ _s1681_
+ "thread_start"))
+ then
+ returnm (true
+ : bool)
+ else
+ (_s2509_
+ _s1681_) >>= fun w__236 : option (mword 32) =>
+ (if
+ ((match w__236 with
+ | Some
+ (s) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2509_
+ _s1681_) >>= fun w__237 : option (mword 32) =>
+ (match w__237 with
+ | Some
+ (s) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ (_s2517_
+ _s1681_) >>= fun w__240 : option (mword 16) =>
+ (if
+ ((match w__240 with
+ | Some
+ (s) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s2517_
+ _s1681_) >>= fun w__241 : option (mword 16) =>
+ (match w__241 with
+ | Some
+ (s) =>
+ returnm (true
+ : bool)
+ | _ =>
+ exit tt
+ : M (bool)
+ end)
+ : M (bool)
+ else
+ returnm (false
+ : bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool))
+ : M (bool).
+
+Definition _s3413_ (_s3414_ : string)
+: M (option ((mword 16 * string))) :=
+
+ let _s3415_ := _s3414_ in
+ (if ((string_startswith _s3415_ "c.illegal")) then
+ (match (string_drop _s3415_ (projT1 (string_length "c.illegal"))) with
+ | _s3416_ =>
+ (spc_matches_prefix _s3416_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s3417_ _)) =>
+ match (string_drop _s3416_ _s3417_) with
+ | _s3418_ =>
+ match (hex_bits_16_matches_prefix _s3418_) with
+ | Some (s,(existT _ _s3419_ _)) =>
+ match (string_drop _s3418_ _s3419_) with | s_ => Some ((s, s_)) end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 16 * string)))
+ end)
+ : M (option ((mword 16 * string)))
+ else returnm (None : option ((mword 16 * string))))
+ : M (option ((mword 16 * string))).
+
+Definition _s3405_ (_s3406_ : string)
+: M (option ((mword 32 * string))) :=
+
+ let _s3407_ := _s3406_ in
+ (if ((string_startswith _s3407_ "illegal")) then
+ (match (string_drop _s3407_ (projT1 (string_length "illegal"))) with
+ | _s3408_ =>
+ (spc_matches_prefix _s3408_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s3409_ _)) =>
+ match (string_drop _s3408_ _s3409_) with
+ | _s3410_ =>
+ match (hex_bits_32_matches_prefix _s3410_) with
+ | Some (s,(existT _ _s3411_ _)) =>
+ match (string_drop _s3410_ _s3411_) with | s_ => Some ((s, s_)) end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 32 * string)))
+ end)
+ : M (option ((mword 32 * string)))
+ else returnm (None : option ((mword 32 * string))))
+ : M (option ((mword 32 * string))).
+
+Definition _s3401_ (_s3402_ : string)
+: option string :=
+
+ let _s3403_ := _s3402_ in
+ if ((string_startswith _s3403_ "thread_start")) then
+ match (string_drop _s3403_ (projT1 (string_length "thread_start"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s3397_ (_s3398_ : string)
+: option string :=
+
+ let _s3399_ := _s3398_ in
+ if ((string_startswith _s3399_ "stop_fetching")) then
+ match (string_drop _s3399_ (projT1 (string_length "stop_fetching"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s3385_ (_s3386_ : string)
+: M (option ((mword 5 * mword 5 * string))) :=
+
+ let _s3387_ := _s3386_ in
+ (if ((string_startswith _s3387_ "c.add")) then
+ (match (string_drop _s3387_ (projT1 (string_length "c.add"))) with
+ | _s3388_ =>
+ (spc_matches_prefix _s3388_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3389_ _)) =>
+ (match (string_drop _s3388_ _s3389_) with
+ | _s3390_ =>
+ (reg_name_matches_prefix _s3390_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3391_ _)) =>
+ (match (string_drop _s3390_ _s3391_) with
+ | _s3392_ =>
+ (sep_matches_prefix _s3392_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3393_ _)) =>
+ (match (string_drop _s3392_ _s3393_) with
+ | _s3394_ =>
+ (reg_name_matches_prefix _s3394_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3395_ _)) =>
+ match (string_drop _s3394_ _s3395_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ else returnm (None : option ((mword 5 * mword 5 * string))))
+ : M (option ((mword 5 * mword 5 * string))).
+
+Definition _s3381_ (_s3382_ : string)
+: option string :=
+
+ let _s3383_ := _s3382_ in
+ if ((string_startswith _s3383_ "c.ebreak")) then
+ match (string_drop _s3383_ (projT1 (string_length "c.ebreak"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s3369_ (_s3370_ : string)
+: M (option ((mword 5 * mword 5 * string))) :=
+
+ let _s3371_ := _s3370_ in
+ (if ((string_startswith _s3371_ "c.mv")) then
+ (match (string_drop _s3371_ (projT1 (string_length "c.mv"))) with
+ | _s3372_ =>
+ (spc_matches_prefix _s3372_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3373_ _)) =>
+ (match (string_drop _s3372_ _s3373_) with
+ | _s3374_ =>
+ (reg_name_matches_prefix _s3374_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s3375_ _)) =>
+ (match (string_drop _s3374_ _s3375_) with
+ | _s3376_ =>
+ (sep_matches_prefix _s3376_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3377_ _)) =>
+ (match (string_drop _s3376_ _s3377_) with
+ | _s3378_ =>
+ (reg_name_matches_prefix _s3378_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3379_ _)) =>
+ match (string_drop _s3378_ _s3379_) with
+ | s_ => Some ((rd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ else returnm (None : option ((mword 5 * mword 5 * string))))
+ : M (option ((mword 5 * mword 5 * string))).
+
+Definition _s3361_ (_s3362_ : string)
+: M (option ((mword 5 * string))) :=
+
+ let _s3363_ := _s3362_ in
+ (if ((string_startswith _s3363_ "c.jalr")) then
+ (match (string_drop _s3363_ (projT1 (string_length "c.jalr"))) with
+ | _s3364_ =>
+ (spc_matches_prefix _s3364_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3365_ _)) =>
+ (match (string_drop _s3364_ _s3365_) with
+ | _s3366_ =>
+ (reg_name_matches_prefix _s3366_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (rs1,(existT _ _s3367_ _)) =>
+ match (string_drop _s3366_ _s3367_) with | s_ => Some ((rs1, s_)) end
+ | _ => None
+ end)
+ : option ((mword 5 * string)))
+ end)
+ : M (option ((mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * string)))
+ end)
+ : M (option ((mword 5 * string)))
+ end)
+ : M (option ((mword 5 * string)))
+ else returnm (None : option ((mword 5 * string))))
+ : M (option ((mword 5 * string))).
+
+Definition _s3353_ (_s3354_ : string)
+: M (option ((mword 5 * string))) :=
+
+ let _s3355_ := _s3354_ in
+ (if ((string_startswith _s3355_ "c.jr")) then
+ (match (string_drop _s3355_ (projT1 (string_length "c.jr"))) with
+ | _s3356_ =>
+ (spc_matches_prefix _s3356_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3357_ _)) =>
+ (match (string_drop _s3356_ _s3357_) with
+ | _s3358_ =>
+ (reg_name_matches_prefix _s3358_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__1 with
+ | Some (rs1,(existT _ _s3359_ _)) =>
+ match (string_drop _s3358_ _s3359_) with | s_ => Some ((rs1, s_)) end
+ | _ => None
+ end)
+ : option ((mword 5 * string)))
+ end)
+ : M (option ((mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * string)))
+ end)
+ : M (option ((mword 5 * string)))
+ end)
+ : M (option ((mword 5 * string)))
+ else returnm (None : option ((mword 5 * string))))
+ : M (option ((mword 5 * string))).
+
+Definition _s3341_ (_s3342_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3343_ := _s3342_ in
+ (if ((string_startswith _s3343_ "c.sdsp")) then
+ (match (string_drop _s3343_ (projT1 (string_length "c.sdsp"))) with
+ | _s3344_ =>
+ (spc_matches_prefix _s3344_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3345_ _)) =>
+ (match (string_drop _s3344_ _s3345_) with
+ | _s3346_ =>
+ (reg_name_matches_prefix _s3346_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs2,(existT _ _s3347_ _)) =>
+ (match (string_drop _s3346_ _s3347_) with
+ | _s3348_ =>
+ (sep_matches_prefix _s3348_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3349_ _)) =>
+ match (string_drop _s3348_ _s3349_) with
+ | _s3350_ =>
+ match (hex_bits_6_matches_prefix _s3350_) with
+ | Some (uimm,(existT _ _s3351_ _)) =>
+ match (string_drop _s3350_ _s3351_) with
+ | s_ => Some ((rs2, uimm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3329_ (_s3330_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3331_ := _s3330_ in
+ (if ((string_startswith _s3331_ "c.swsp")) then
+ (match (string_drop _s3331_ (projT1 (string_length "c.swsp"))) with
+ | _s3332_ =>
+ (spc_matches_prefix _s3332_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3333_ _)) =>
+ (match (string_drop _s3332_ _s3333_) with
+ | _s3334_ =>
+ (reg_name_matches_prefix _s3334_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s3335_ _)) =>
+ (match (string_drop _s3334_ _s3335_) with
+ | _s3336_ =>
+ (sep_matches_prefix _s3336_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3337_ _)) =>
+ match (string_drop _s3336_ _s3337_) with
+ | _s3338_ =>
+ match (hex_bits_6_matches_prefix _s3338_) with
+ | Some (uimm,(existT _ _s3339_ _)) =>
+ match (string_drop _s3338_ _s3339_) with
+ | s_ => Some ((rd, uimm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3317_ (_s3318_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3319_ := _s3318_ in
+ (if ((string_startswith _s3319_ "c.ldsp")) then
+ (match (string_drop _s3319_ (projT1 (string_length "c.ldsp"))) with
+ | _s3320_ =>
+ (spc_matches_prefix _s3320_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3321_ _)) =>
+ (match (string_drop _s3320_ _s3321_) with
+ | _s3322_ =>
+ (reg_name_matches_prefix _s3322_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s3323_ _)) =>
+ (match (string_drop _s3322_ _s3323_) with
+ | _s3324_ =>
+ (sep_matches_prefix _s3324_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3325_ _)) =>
+ match (string_drop _s3324_ _s3325_) with
+ | _s3326_ =>
+ match (hex_bits_6_matches_prefix _s3326_) with
+ | Some (uimm,(existT _ _s3327_ _)) =>
+ match (string_drop _s3326_ _s3327_) with
+ | s_ => Some ((rd, uimm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3305_ (_s3306_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3307_ := _s3306_ in
+ (if ((string_startswith _s3307_ "c.lwsp")) then
+ (match (string_drop _s3307_ (projT1 (string_length "c.lwsp"))) with
+ | _s3308_ =>
+ (spc_matches_prefix _s3308_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3309_ _)) =>
+ (match (string_drop _s3308_ _s3309_) with
+ | _s3310_ =>
+ (reg_name_matches_prefix _s3310_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s3311_ _)) =>
+ (match (string_drop _s3310_ _s3311_) with
+ | _s3312_ =>
+ (sep_matches_prefix _s3312_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3313_ _)) =>
+ match (string_drop _s3312_ _s3313_) with
+ | _s3314_ =>
+ match (hex_bits_6_matches_prefix _s3314_) with
+ | Some (uimm,(existT _ _s3315_ _)) =>
+ match (string_drop _s3314_ _s3315_) with
+ | s_ => Some ((rd, uimm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3293_ (_s3294_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3295_ := _s3294_ in
+ (if ((string_startswith _s3295_ "c.slli")) then
+ (match (string_drop _s3295_ (projT1 (string_length "c.slli"))) with
+ | _s3296_ =>
+ (spc_matches_prefix _s3296_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3297_ _)) =>
+ (match (string_drop _s3296_ _s3297_) with
+ | _s3298_ =>
+ (reg_name_matches_prefix _s3298_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3299_ _)) =>
+ (match (string_drop _s3298_ _s3299_) with
+ | _s3300_ =>
+ (sep_matches_prefix _s3300_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3301_ _)) =>
+ match (string_drop _s3300_ _s3301_) with
+ | _s3302_ =>
+ match (hex_bits_6_matches_prefix _s3302_) with
+ | Some (shamt,(existT _ _s3303_ _)) =>
+ match (string_drop _s3302_ _s3303_) with
+ | s_ => Some ((rsd, shamt, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3281_ (_s3282_ : string)
+: M (option ((mword 3 * mword 8 * string))) :=
+
+ let _s3283_ := _s3282_ in
+ (if ((string_startswith _s3283_ "c.bnez")) then
+ (match (string_drop _s3283_ (projT1 (string_length "c.bnez"))) with
+ | _s3284_ =>
+ (spc_matches_prefix _s3284_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3285_ _)) =>
+ (match (string_drop _s3284_ _s3285_) with
+ | _s3286_ =>
+ (creg_name_matches_prefix _s3286_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs,(existT _ _s3287_ _)) =>
+ (match (string_drop _s3286_ _s3287_) with
+ | _s3288_ =>
+ (sep_matches_prefix _s3288_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3289_ _)) =>
+ match (string_drop _s3288_ _s3289_) with
+ | _s3290_ =>
+ match (hex_bits_8_matches_prefix _s3290_) with
+ | Some (imm,(existT _ _s3291_ _)) =>
+ match (string_drop _s3290_ _s3291_) with
+ | s_ => Some ((rs, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ else returnm (None : option ((mword 3 * mword 8 * string))))
+ : M (option ((mword 3 * mword 8 * string))).
+
+Definition _s3269_ (_s3270_ : string)
+: M (option ((mword 3 * mword 8 * string))) :=
+
+ let _s3271_ := _s3270_ in
+ (if ((string_startswith _s3271_ "c.beqz")) then
+ (match (string_drop _s3271_ (projT1 (string_length "c.beqz"))) with
+ | _s3272_ =>
+ (spc_matches_prefix _s3272_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3273_ _)) =>
+ (match (string_drop _s3272_ _s3273_) with
+ | _s3274_ =>
+ (creg_name_matches_prefix _s3274_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs,(existT _ _s3275_ _)) =>
+ (match (string_drop _s3274_ _s3275_) with
+ | _s3276_ =>
+ (sep_matches_prefix _s3276_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3277_ _)) =>
+ match (string_drop _s3276_ _s3277_) with
+ | _s3278_ =>
+ match (hex_bits_8_matches_prefix _s3278_) with
+ | Some (imm,(existT _ _s3279_ _)) =>
+ match (string_drop _s3278_ _s3279_) with
+ | s_ => Some ((rs, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ else returnm (None : option ((mword 3 * mword 8 * string))))
+ : M (option ((mword 3 * mword 8 * string))).
+
+Definition _s3261_ (_s3262_ : string)
+: M (option ((mword 11 * string))) :=
+
+ let _s3263_ := _s3262_ in
+ (if ((string_startswith _s3263_ "c.j")) then
+ (match (string_drop _s3263_ (projT1 (string_length "c.j"))) with
+ | _s3264_ =>
+ (spc_matches_prefix _s3264_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s3265_ _)) =>
+ match (string_drop _s3264_ _s3265_) with
+ | _s3266_ =>
+ match (hex_bits_11_matches_prefix _s3266_) with
+ | Some (imm,(existT _ _s3267_ _)) =>
+ match (string_drop _s3266_ _s3267_) with | s_ => Some ((imm, s_)) end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 11 * string)))
+ end)
+ : M (option ((mword 11 * string)))
+ else returnm (None : option ((mword 11 * string))))
+ : M (option ((mword 11 * string))).
+
+Definition _s3249_ (_s3250_ : string)
+: M (option ((mword 3 * mword 3 * string))) :=
+
+ let _s3251_ := _s3250_ in
+ (if ((string_startswith _s3251_ "c.addw")) then
+ (match (string_drop _s3251_ (projT1 (string_length "c.addw"))) with
+ | _s3252_ =>
+ (spc_matches_prefix _s3252_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3253_ _)) =>
+ (match (string_drop _s3252_ _s3253_) with
+ | _s3254_ =>
+ (creg_name_matches_prefix _s3254_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3255_ _)) =>
+ (match (string_drop _s3254_ _s3255_) with
+ | _s3256_ =>
+ (sep_matches_prefix _s3256_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3257_ _)) =>
+ (match (string_drop _s3256_ _s3257_) with
+ | _s3258_ =>
+ (creg_name_matches_prefix _s3258_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3259_ _)) =>
+ match (string_drop _s3258_ _s3259_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * string))))
+ : M (option ((mword 3 * mword 3 * string))).
+
+Definition _s3237_ (_s3238_ : string)
+: M (option ((mword 3 * mword 3 * string))) :=
+
+ let _s3239_ := _s3238_ in
+ (if ((string_startswith _s3239_ "c.subw")) then
+ (match (string_drop _s3239_ (projT1 (string_length "c.subw"))) with
+ | _s3240_ =>
+ (spc_matches_prefix _s3240_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3241_ _)) =>
+ (match (string_drop _s3240_ _s3241_) with
+ | _s3242_ =>
+ (creg_name_matches_prefix _s3242_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3243_ _)) =>
+ (match (string_drop _s3242_ _s3243_) with
+ | _s3244_ =>
+ (sep_matches_prefix _s3244_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3245_ _)) =>
+ (match (string_drop _s3244_ _s3245_) with
+ | _s3246_ =>
+ (creg_name_matches_prefix _s3246_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3247_ _)) =>
+ match (string_drop _s3246_ _s3247_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * string))))
+ : M (option ((mword 3 * mword 3 * string))).
+
+Definition _s3225_ (_s3226_ : string)
+: M (option ((mword 3 * mword 3 * string))) :=
+
+ let _s3227_ := _s3226_ in
+ (if ((string_startswith _s3227_ "c.and")) then
+ (match (string_drop _s3227_ (projT1 (string_length "c.and"))) with
+ | _s3228_ =>
+ (spc_matches_prefix _s3228_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3229_ _)) =>
+ (match (string_drop _s3228_ _s3229_) with
+ | _s3230_ =>
+ (creg_name_matches_prefix _s3230_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3231_ _)) =>
+ (match (string_drop _s3230_ _s3231_) with
+ | _s3232_ =>
+ (sep_matches_prefix _s3232_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3233_ _)) =>
+ (match (string_drop _s3232_ _s3233_) with
+ | _s3234_ =>
+ (creg_name_matches_prefix _s3234_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3235_ _)) =>
+ match (string_drop _s3234_ _s3235_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * string))))
+ : M (option ((mword 3 * mword 3 * string))).
+
+Definition _s3213_ (_s3214_ : string)
+: M (option ((mword 3 * mword 3 * string))) :=
+
+ let _s3215_ := _s3214_ in
+ (if ((string_startswith _s3215_ "c.or")) then
+ (match (string_drop _s3215_ (projT1 (string_length "c.or"))) with
+ | _s3216_ =>
+ (spc_matches_prefix _s3216_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3217_ _)) =>
+ (match (string_drop _s3216_ _s3217_) with
+ | _s3218_ =>
+ (creg_name_matches_prefix _s3218_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3219_ _)) =>
+ (match (string_drop _s3218_ _s3219_) with
+ | _s3220_ =>
+ (sep_matches_prefix _s3220_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3221_ _)) =>
+ (match (string_drop _s3220_ _s3221_) with
+ | _s3222_ =>
+ (creg_name_matches_prefix _s3222_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3223_ _)) =>
+ match (string_drop _s3222_ _s3223_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * string))))
+ : M (option ((mword 3 * mword 3 * string))).
+
+Definition _s3201_ (_s3202_ : string)
+: M (option ((mword 3 * mword 3 * string))) :=
+
+ let _s3203_ := _s3202_ in
+ (if ((string_startswith _s3203_ "c.xor")) then
+ (match (string_drop _s3203_ (projT1 (string_length "c.xor"))) with
+ | _s3204_ =>
+ (spc_matches_prefix _s3204_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3205_ _)) =>
+ (match (string_drop _s3204_ _s3205_) with
+ | _s3206_ =>
+ (creg_name_matches_prefix _s3206_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3207_ _)) =>
+ (match (string_drop _s3206_ _s3207_) with
+ | _s3208_ =>
+ (sep_matches_prefix _s3208_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3209_ _)) =>
+ (match (string_drop _s3208_ _s3209_) with
+ | _s3210_ =>
+ (creg_name_matches_prefix _s3210_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3211_ _)) =>
+ match (string_drop _s3210_ _s3211_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * string))))
+ : M (option ((mword 3 * mword 3 * string))).
+
+Definition _s3189_ (_s3190_ : string)
+: M (option ((mword 3 * mword 3 * string))) :=
+
+ let _s3191_ := _s3190_ in
+ (if ((string_startswith _s3191_ "c.sub")) then
+ (match (string_drop _s3191_ (projT1 (string_length "c.sub"))) with
+ | _s3192_ =>
+ (spc_matches_prefix _s3192_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3193_ _)) =>
+ (match (string_drop _s3192_ _s3193_) with
+ | _s3194_ =>
+ (creg_name_matches_prefix _s3194_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3195_ _)) =>
+ (match (string_drop _s3194_ _s3195_) with
+ | _s3196_ =>
+ (sep_matches_prefix _s3196_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3197_ _)) =>
+ (match (string_drop _s3196_ _s3197_) with
+ | _s3198_ =>
+ (creg_name_matches_prefix _s3198_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s3199_ _)) =>
+ match (string_drop _s3198_ _s3199_) with
+ | s_ => Some ((rsd, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * string))))
+ : M (option ((mword 3 * mword 3 * string))).
+
+Definition _s3177_ (_s3178_ : string)
+: M (option ((mword 3 * mword 6 * string))) :=
+
+ let _s3179_ := _s3178_ in
+ (if ((string_startswith _s3179_ "c.andi")) then
+ (match (string_drop _s3179_ (projT1 (string_length "c.andi"))) with
+ | _s3180_ =>
+ (spc_matches_prefix _s3180_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3181_ _)) =>
+ (match (string_drop _s3180_ _s3181_) with
+ | _s3182_ =>
+ (creg_name_matches_prefix _s3182_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3183_ _)) =>
+ (match (string_drop _s3182_ _s3183_) with
+ | _s3184_ =>
+ (sep_matches_prefix _s3184_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3185_ _)) =>
+ match (string_drop _s3184_ _s3185_) with
+ | _s3186_ =>
+ match (hex_bits_6_matches_prefix _s3186_) with
+ | Some (imm,(existT _ _s3187_ _)) =>
+ match (string_drop _s3186_ _s3187_) with
+ | s_ => Some ((rsd, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ else returnm (None : option ((mword 3 * mword 6 * string))))
+ : M (option ((mword 3 * mword 6 * string))).
+
+Definition _s3165_ (_s3166_ : string)
+: M (option ((mword 3 * mword 6 * string))) :=
+
+ let _s3167_ := _s3166_ in
+ (if ((string_startswith _s3167_ "c.srai")) then
+ (match (string_drop _s3167_ (projT1 (string_length "c.srai"))) with
+ | _s3168_ =>
+ (spc_matches_prefix _s3168_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3169_ _)) =>
+ (match (string_drop _s3168_ _s3169_) with
+ | _s3170_ =>
+ (creg_name_matches_prefix _s3170_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3171_ _)) =>
+ (match (string_drop _s3170_ _s3171_) with
+ | _s3172_ =>
+ (sep_matches_prefix _s3172_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3173_ _)) =>
+ match (string_drop _s3172_ _s3173_) with
+ | _s3174_ =>
+ match (hex_bits_6_matches_prefix _s3174_) with
+ | Some (shamt,(existT _ _s3175_ _)) =>
+ match (string_drop _s3174_ _s3175_) with
+ | s_ => Some ((rsd, shamt, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ else returnm (None : option ((mword 3 * mword 6 * string))))
+ : M (option ((mword 3 * mword 6 * string))).
+
+Definition _s3153_ (_s3154_ : string)
+: M (option ((mword 3 * mword 6 * string))) :=
+
+ let _s3155_ := _s3154_ in
+ (if ((string_startswith _s3155_ "c.srli")) then
+ (match (string_drop _s3155_ (projT1 (string_length "c.srli"))) with
+ | _s3156_ =>
+ (spc_matches_prefix _s3156_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3157_ _)) =>
+ (match (string_drop _s3156_ _s3157_) with
+ | _s3158_ =>
+ (creg_name_matches_prefix _s3158_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3159_ _)) =>
+ (match (string_drop _s3158_ _s3159_) with
+ | _s3160_ =>
+ (sep_matches_prefix _s3160_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3161_ _)) =>
+ match (string_drop _s3160_ _s3161_) with
+ | _s3162_ =>
+ match (hex_bits_6_matches_prefix _s3162_) with
+ | Some (shamt,(existT _ _s3163_ _)) =>
+ match (string_drop _s3162_ _s3163_) with
+ | s_ => Some ((rsd, shamt, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ end)
+ : M (option ((mword 3 * mword 6 * string)))
+ else returnm (None : option ((mword 3 * mword 6 * string))))
+ : M (option ((mword 3 * mword 6 * string))).
+
+Definition _s3141_ (_s3142_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3143_ := _s3142_ in
+ (if ((string_startswith _s3143_ "c.lui")) then
+ (match (string_drop _s3143_ (projT1 (string_length "c.lui"))) with
+ | _s3144_ =>
+ (spc_matches_prefix _s3144_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3145_ _)) =>
+ (match (string_drop _s3144_ _s3145_) with
+ | _s3146_ =>
+ (reg_name_matches_prefix _s3146_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s3147_ _)) =>
+ (match (string_drop _s3146_ _s3147_) with
+ | _s3148_ =>
+ (sep_matches_prefix _s3148_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3149_ _)) =>
+ match (string_drop _s3148_ _s3149_) with
+ | _s3150_ =>
+ match (hex_bits_6_matches_prefix _s3150_) with
+ | Some (imm,(existT _ _s3151_ _)) =>
+ match (string_drop _s3150_ _s3151_) with
+ | s_ => Some ((rd, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3133_ (_s3134_ : string)
+: M (option ((mword 6 * string))) :=
+
+ let _s3135_ := _s3134_ in
+ (if ((string_startswith _s3135_ "c.addi16sp")) then
+ (match (string_drop _s3135_ (projT1 (string_length "c.addi16sp"))) with
+ | _s3136_ =>
+ (spc_matches_prefix _s3136_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s3137_ _)) =>
+ match (string_drop _s3136_ _s3137_) with
+ | _s3138_ =>
+ match (hex_bits_6_matches_prefix _s3138_) with
+ | Some (imm,(existT _ _s3139_ _)) =>
+ match (string_drop _s3138_ _s3139_) with | s_ => Some ((imm, s_)) end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 6 * string)))
+ end)
+ : M (option ((mword 6 * string)))
+ else returnm (None : option ((mword 6 * string))))
+ : M (option ((mword 6 * string))).
+
+Definition _s3121_ (_s3122_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3123_ := _s3122_ in
+ (if ((string_startswith _s3123_ "c.li")) then
+ (match (string_drop _s3123_ (projT1 (string_length "c.li"))) with
+ | _s3124_ =>
+ (spc_matches_prefix _s3124_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3125_ _)) =>
+ (match (string_drop _s3124_ _s3125_) with
+ | _s3126_ =>
+ (reg_name_matches_prefix _s3126_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s3127_ _)) =>
+ (match (string_drop _s3126_ _s3127_) with
+ | _s3128_ =>
+ (sep_matches_prefix _s3128_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3129_ _)) =>
+ match (string_drop _s3128_ _s3129_) with
+ | _s3130_ =>
+ match (hex_bits_6_matches_prefix _s3130_) with
+ | Some (imm,(existT _ _s3131_ _)) =>
+ match (string_drop _s3130_ _s3131_) with
+ | s_ => Some ((rd, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3109_ (_s3110_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3111_ := _s3110_ in
+ (if ((string_startswith _s3111_ "c.addiw")) then
+ (match (string_drop _s3111_ (projT1 (string_length "c.addiw"))) with
+ | _s3112_ =>
+ (spc_matches_prefix _s3112_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3113_ _)) =>
+ (match (string_drop _s3112_ _s3113_) with
+ | _s3114_ =>
+ (reg_name_matches_prefix _s3114_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3115_ _)) =>
+ (match (string_drop _s3114_ _s3115_) with
+ | _s3116_ =>
+ (sep_matches_prefix _s3116_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3117_ _)) =>
+ match (string_drop _s3116_ _s3117_) with
+ | _s3118_ =>
+ match (hex_bits_6_matches_prefix _s3118_) with
+ | Some (imm,(existT _ _s3119_ _)) =>
+ match (string_drop _s3118_ _s3119_) with
+ | s_ => Some ((rsd, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3101_ (_s3102_ : string)
+: M (option ((mword 11 * string))) :=
+
+ let _s3103_ := _s3102_ in
+ (if ((string_startswith _s3103_ "c.jal")) then
+ (match (string_drop _s3103_ (projT1 (string_length "c.jal"))) with
+ | _s3104_ =>
+ (spc_matches_prefix _s3104_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ returnm ((match w__0 with
+ | Some (tt,(existT _ _s3105_ _)) =>
+ match (string_drop _s3104_ _s3105_) with
+ | _s3106_ =>
+ match (hex_bits_12_matches_prefix _s3106_) with
+ | Some (v__784,(existT _ _s3107_ _)) =>
+ if ((eq_vec (subrange_vec_dec v__784 0 0)
+ (vec_of_bits [B0] : mword (0 - 0 + 1)))) then
+ let imm : mword 11 := subrange_vec_dec v__784 11 1 in
+ let imm : mword 11 := subrange_vec_dec v__784 11 1 in
+ match (string_drop _s3106_ _s3107_) with | s_ => Some ((imm, s_)) end
+ else
+ let g__21 := Some ((v__784, _s3107_)) in
+ None
+ | g__21 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 11 * string)))
+ end)
+ : M (option ((mword 11 * string)))
+ else returnm (None : option ((mword 11 * string))))
+ : M (option ((mword 11 * string))).
+
+Definition _s3089_ (_s3090_ : string)
+: M (option ((mword 5 * mword 6 * string))) :=
+
+ let _s3091_ := _s3090_ in
+ (if ((string_startswith _s3091_ "c.addi")) then
+ (match (string_drop _s3091_ (projT1 (string_length "c.addi"))) with
+ | _s3092_ =>
+ (spc_matches_prefix _s3092_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3093_ _)) =>
+ (match (string_drop _s3092_ _s3093_) with
+ | _s3094_ =>
+ (reg_name_matches_prefix _s3094_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsd,(existT _ _s3095_ _)) =>
+ (match (string_drop _s3094_ _s3095_) with
+ | _s3096_ =>
+ (sep_matches_prefix _s3096_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3097_ _)) =>
+ match (string_drop _s3096_ _s3097_) with
+ | _s3098_ =>
+ match (hex_bits_6_matches_prefix _s3098_) with
+ | Some (nzi,(existT _ _s3099_ _)) =>
+ match (string_drop _s3098_ _s3099_) with
+ | s_ => Some ((rsd, nzi, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ end)
+ : M (option ((mword 5 * mword 6 * string)))
+ else returnm (None : option ((mword 5 * mword 6 * string))))
+ : M (option ((mword 5 * mword 6 * string))).
+
+Definition _s3073_ (_s3074_ : string)
+: M (option ((mword 3 * mword 3 * mword 5 * string))) :=
+
+ let _s3075_ := _s3074_ in
+ (if ((string_startswith _s3075_ "c.sd")) then
+ (match (string_drop _s3075_ (projT1 (string_length "c.sd"))) with
+ | _s3076_ =>
+ (spc_matches_prefix _s3076_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3077_ _)) =>
+ (match (string_drop _s3076_ _s3077_) with
+ | _s3078_ =>
+ (creg_name_matches_prefix _s3078_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsc1,(existT _ _s3079_ _)) =>
+ (match (string_drop _s3078_ _s3079_) with
+ | _s3080_ =>
+ (sep_matches_prefix _s3080_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3081_ _)) =>
+ (match (string_drop _s3080_ _s3081_) with
+ | _s3082_ =>
+ (creg_name_matches_prefix _s3082_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc2,(existT _ _s3083_ _)) =>
+ (match (string_drop _s3082_ _s3083_) with
+ | _s3084_ =>
+ (sep_matches_prefix _s3084_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s3085_ _)) =>
+ match (string_drop _s3084_ _s3085_) with
+ | _s3086_ =>
+ match (hex_bits_8_matches_prefix _s3086_) with
+ | Some (v__786,(existT _ _s3087_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__786 2 0)
+ (vec_of_bits [B0;B0;B0]
+ : mword (2 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__786 7 3 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__786 7 3 in
+ match (string_drop _s3086_ _s3087_) with
+ | s_ => Some ((rsc1, rsc2, uimm, s_))
+ end
+ else
+ let g__20 := Some ((v__786, _s3087_)) in
+ None
+ | g__20 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5 * string))))
+ : M (option ((mword 3 * mword 3 * mword 5 * string))).
+
+Definition _s3057_ (_s3058_ : string)
+: M (option ((mword 3 * mword 3 * mword 5 * string))) :=
+
+ let _s3059_ := _s3058_ in
+ (if ((string_startswith _s3059_ "c.sw")) then
+ (match (string_drop _s3059_ (projT1 (string_length "c.sw"))) with
+ | _s3060_ =>
+ (spc_matches_prefix _s3060_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3061_ _)) =>
+ (match (string_drop _s3060_ _s3061_) with
+ | _s3062_ =>
+ (creg_name_matches_prefix _s3062_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rsc1,(existT _ _s3063_ _)) =>
+ (match (string_drop _s3062_ _s3063_) with
+ | _s3064_ =>
+ (sep_matches_prefix _s3064_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3065_ _)) =>
+ (match (string_drop _s3064_ _s3065_) with
+ | _s3066_ =>
+ (creg_name_matches_prefix _s3066_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc2,(existT _ _s3067_ _)) =>
+ (match (string_drop _s3066_ _s3067_) with
+ | _s3068_ =>
+ (sep_matches_prefix _s3068_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s3069_ _)) =>
+ match (string_drop _s3068_ _s3069_) with
+ | _s3070_ =>
+ match (hex_bits_7_matches_prefix _s3070_) with
+ | Some (v__788,(existT _ _s3071_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__788 1 0)
+ (vec_of_bits [B0;B0]
+ : mword (1 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__788 6 2 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__788 6 2 in
+ match (string_drop _s3070_ _s3071_) with
+ | s_ => Some ((rsc1, rsc2, uimm, s_))
+ end
+ else
+ let g__19 := Some ((v__788, _s3071_)) in
+ None
+ | g__19 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5 * string))))
+ : M (option ((mword 3 * mword 3 * mword 5 * string))).
+
+Definition _s3041_ (_s3042_ : string)
+: M (option ((mword 3 * mword 3 * mword 5 * string))) :=
+
+ let _s3043_ := _s3042_ in
+ (if ((string_startswith _s3043_ "c.ld")) then
+ (match (string_drop _s3043_ (projT1 (string_length "c.ld"))) with
+ | _s3044_ =>
+ (spc_matches_prefix _s3044_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3045_ _)) =>
+ (match (string_drop _s3044_ _s3045_) with
+ | _s3046_ =>
+ (creg_name_matches_prefix _s3046_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s3047_ _)) =>
+ (match (string_drop _s3046_ _s3047_) with
+ | _s3048_ =>
+ (sep_matches_prefix _s3048_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3049_ _)) =>
+ (match (string_drop _s3048_ _s3049_) with
+ | _s3050_ =>
+ (creg_name_matches_prefix _s3050_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc,(existT _ _s3051_ _)) =>
+ (match (string_drop _s3050_ _s3051_) with
+ | _s3052_ =>
+ (sep_matches_prefix _s3052_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s3053_ _)) =>
+ match (string_drop _s3052_ _s3053_) with
+ | _s3054_ =>
+ match (hex_bits_8_matches_prefix _s3054_) with
+ | Some (v__790,(existT _ _s3055_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__790 2 0)
+ (vec_of_bits [B0;B0;B0]
+ : mword (2 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__790 7 3 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__790 7 3 in
+ match (string_drop _s3054_ _s3055_) with
+ | s_ => Some ((rdc, rsc, uimm, s_))
+ end
+ else
+ let g__18 := Some ((v__790, _s3055_)) in
+ None
+ | g__18 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5 * string))))
+ : M (option ((mword 3 * mword 3 * mword 5 * string))).
+
+Definition _s3025_ (_s3026_ : string)
+: M (option ((mword 3 * mword 3 * mword 5 * string))) :=
+
+ let _s3027_ := _s3026_ in
+ (if ((string_startswith _s3027_ "c.lw")) then
+ (match (string_drop _s3027_ (projT1 (string_length "c.lw"))) with
+ | _s3028_ =>
+ (spc_matches_prefix _s3028_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3029_ _)) =>
+ (match (string_drop _s3028_ _s3029_) with
+ | _s3030_ =>
+ (creg_name_matches_prefix _s3030_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s3031_ _)) =>
+ (match (string_drop _s3030_ _s3031_) with
+ | _s3032_ =>
+ (sep_matches_prefix _s3032_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s3033_ _)) =>
+ (match (string_drop _s3032_ _s3033_) with
+ | _s3034_ =>
+ (creg_name_matches_prefix _s3034_) >>= fun w__3 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rsc,(existT _ _s3035_ _)) =>
+ (match (string_drop _s3034_ _s3035_) with
+ | _s3036_ =>
+ (sep_matches_prefix _s3036_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s3037_ _)) =>
+ match (string_drop _s3036_ _s3037_) with
+ | _s3038_ =>
+ match (hex_bits_7_matches_prefix _s3038_) with
+ | Some (v__792,(existT _ _s3039_ _)) =>
+ if ((eq_vec
+ (subrange_vec_dec v__792 1 0)
+ (vec_of_bits [B0;B0]
+ : mword (1 - 0 + 1)))) then
+ let uimm : mword 5 :=
+ subrange_vec_dec v__792 6 2 in
+ let uimm : mword 5 :=
+ subrange_vec_dec v__792 6 2 in
+ match (string_drop _s3038_ _s3039_) with
+ | s_ => Some ((rdc, rsc, uimm, s_))
+ end
+ else
+ let g__17 := Some ((v__792, _s3039_)) in
+ None
+ | g__17 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ end)
+ : M (option ((mword 3 * mword 3 * mword 5 * string)))
+ else returnm (None : option ((mword 3 * mword 3 * mword 5 * string))))
+ : M (option ((mword 3 * mword 3 * mword 5 * string))).
+
+Definition _s3013_ (_s3014_ : string)
+: M (option ((mword 3 * mword 8 * string))) :=
+
+ let _s3015_ := _s3014_ in
+ (if ((string_startswith _s3015_ "c.addi4spn")) then
+ (match (string_drop _s3015_ (projT1 (string_length "c.addi4spn"))) with
+ | _s3016_ =>
+ (spc_matches_prefix _s3016_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s3017_ _)) =>
+ (match (string_drop _s3016_ _s3017_) with
+ | _s3018_ =>
+ (creg_name_matches_prefix _s3018_) >>= fun w__1 : option ((mword 3 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rdc,(existT _ _s3019_ _)) =>
+ (match (string_drop _s3018_ _s3019_) with
+ | _s3020_ =>
+ (sep_matches_prefix _s3020_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s3021_ _)) =>
+ match (string_drop _s3020_ _s3021_) with
+ | _s3022_ =>
+ match (hex_bits_10_matches_prefix _s3022_) with
+ | Some (v__794,(existT _ _s3023_ _)) =>
+ if ((eq_vec (subrange_vec_dec v__794 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))
+ then
+ let nzimm : mword 8 := subrange_vec_dec v__794 9 2 in
+ let nzimm : mword 8 := subrange_vec_dec v__794 9 2 in
+ match (string_drop _s3022_ _s3023_) with
+ | s_ => Some ((rdc, nzimm, s_))
+ end
+ else
+ let g__16 := Some ((v__794, _s3023_)) in
+ None
+ | g__16 => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ | _ => returnm (None : option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ end)
+ : M (option ((mword 3 * mword 8 * string)))
+ else returnm (None : option ((mword 3 * mword 8 * string))))
+ : M (option ((mword 3 * mword 8 * string))).
+
+Definition _s3009_ (_s3010_ : string)
+: option string :=
+
+ let _s3011_ := _s3010_ in
+ if ((string_startswith _s3011_ "c.nop")) then
+ match (string_drop _s3011_ (projT1 (string_length "c.nop"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2992_ (_s2993_ : string)
+: M (option ((csrop * mword 5 * mword 5 * mword 12 * string))) :=
+
+ (match _s2993_ with
+ | _s2994_ =>
+ (csr_mnemonic_matches_prefix _s2994_) >>= fun w__0 : option ((csrop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2995_ _)) =>
+ (match (string_drop _s2994_ _s2995_) with
+ | _s2996_ =>
+ (spc_matches_prefix _s2996_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2997_ _)) =>
+ (match (string_drop _s2996_ _s2997_) with
+ | _s2998_ =>
+ (reg_name_matches_prefix _s2998_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2999_ _)) =>
+ (match (string_drop _s2998_ _s2999_) with
+ | _s3000_ =>
+ (sep_matches_prefix _s3000_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s3001_ _)) =>
+ (match (string_drop _s3000_ _s3001_) with
+ | _s3002_ =>
+ (reg_name_matches_prefix _s3002_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s3003_ _)) =>
+ (match (string_drop _s3002_ _s3003_) with
+ | _s3004_ =>
+ (sep_matches_prefix _s3004_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s3005_ _)) =>
+ (match (string_drop _s3004_ _s3005_) with
+ | _s3006_ =>
+ (csr_name_map_matches_prefix _s3006_) >>= fun w__6 : option ((mword 12 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (csr,(existT _ _s3007_ _)) =>
+ match (string_drop _s3006_
+ _s3007_) with
+ | s_ =>
+ Some ((op, rd, rs1, csr, s_))
+ end
+ | _ => None
+ end)
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2974_ (_s2975_ : string)
+: M (option ((csrop * mword 5 * mword 5 * mword 12 * string))) :=
+
+ (match _s2975_ with
+ | _s2976_ =>
+ (csr_mnemonic_matches_prefix _s2976_) >>= fun w__0 : option ((csrop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2977_ _)) =>
+ let _s2978_ := string_drop _s2976_ _s2977_ in
+ (if ((string_startswith _s2978_ "i")) then
+ (match (string_drop _s2978_ (projT1 (string_length "i"))) with
+ | _s2979_ =>
+ (spc_matches_prefix _s2979_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2980_ _)) =>
+ (match (string_drop _s2979_ _s2980_) with
+ | _s2981_ =>
+ (reg_name_matches_prefix _s2981_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2982_ _)) =>
+ (match (string_drop _s2981_ _s2982_) with
+ | _s2983_ =>
+ (sep_matches_prefix _s2983_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2984_ _)) =>
+ (match (string_drop _s2983_ _s2984_) with
+ | _s2985_ =>
+ (match (hex_bits_5_matches_prefix _s2985_) with
+ | Some (rs1,(existT _ _s2986_ _)) =>
+ (match (string_drop _s2985_ _s2986_) with
+ | _s2987_ =>
+ (sep_matches_prefix _s2987_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s2988_ _)) =>
+ (match (string_drop _s2987_ _s2988_) with
+ | _s2989_ =>
+ (csr_name_map_matches_prefix _s2989_) >>= fun w__5 : option ((mword 12 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some
+ (csr,(existT _ _s2990_ _)) =>
+ match (string_drop _s2989_
+ _s2990_) with
+ | s_ =>
+ Some
+ ((op, rd, rs1, csr, s_))
+ end
+ | _ => None
+ end)
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ else returnm (None : option ((csrop * mword 5 * mword 5 * mword 12 * string))))
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((csrop * mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2950_ (_s2951_ : string)
+: M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ (match _s2951_ with
+ | _s2952_ =>
+ (amo_mnemonic_matches_prefix _s2952_) >>= fun w__0 : option ((amoop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2953_ _)) =>
+ let _s2954_ := string_drop _s2952_ _s2953_ in
+ (if ((string_startswith _s2954_ ".")) then
+ (match (string_drop _s2954_ (projT1 (string_length "."))) with
+ | _s2955_ =>
+ (size_mnemonic_matches_prefix _s2955_) >>= fun w__1 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (width,(existT _ _s2956_ _)) =>
+ (match (string_drop _s2955_ _s2956_) with
+ | _s2957_ =>
+ (maybe_aq_matches_prefix _s2957_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (aq,(existT _ _s2958_ _)) =>
+ (match (string_drop _s2957_ _s2958_) with
+ | _s2959_ =>
+ (maybe_rl_matches_prefix _s2959_) >>= fun w__3 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rl,(existT _ _s2960_ _)) =>
+ (match (string_drop _s2959_ _s2960_) with
+ | _s2961_ =>
+ (spc_matches_prefix _s2961_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s2962_ _)) =>
+ (match (string_drop _s2961_ _s2962_) with
+ | _s2963_ =>
+ (reg_name_matches_prefix _s2963_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (rd,(existT _ _s2964_ _)) =>
+ (match (string_drop _s2963_ _s2964_) with
+ | _s2965_ =>
+ (sep_matches_prefix _s2965_) >>= fun w__6 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (tt,(existT _ _s2966_ _)) =>
+ (match (string_drop _s2965_ _s2966_) with
+ | _s2967_ =>
+ (reg_name_matches_prefix _s2967_) >>= fun w__7 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (rs1,(existT _ _s2968_ _)) =>
+ (match (string_drop _s2967_
+ _s2968_) with
+ | _s2969_ =>
+ (sep_matches_prefix
+ _s2969_) >>= fun w__8 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__8 with
+ | Some
+ (tt,(existT _ _s2970_ _)) =>
+ (match (string_drop
+ _s2969_
+ _s2970_) with
+ | _s2971_ =>
+ (reg_name_matches_prefix
+ _s2971_) >>= fun w__9 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__9 with
+ | Some
+ (rs2,(existT _ _s2972_ _)) =>
+ match (string_drop
+ _s2971_
+ _s2972_) with
+ | s_ =>
+ Some
+ ((op, width, aq, rl, rd, rs1, rs2, s_))
+ end
+ | _ =>
+ None
+ end)
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ else
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2928_ (_s2929_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ let _s2930_ := _s2929_ in
+ (if ((string_startswith _s2930_ "sc.")) then
+ (match (string_drop _s2930_ (projT1 (string_length "sc."))) with
+ | _s2931_ =>
+ (size_mnemonic_matches_prefix _s2931_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s2932_ _)) =>
+ (match (string_drop _s2931_ _s2932_) with
+ | _s2933_ =>
+ (maybe_aq_matches_prefix _s2933_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s2934_ _)) =>
+ (match (string_drop _s2933_ _s2934_) with
+ | _s2935_ =>
+ (maybe_rl_matches_prefix _s2935_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s2936_ _)) =>
+ (match (string_drop _s2935_ _s2936_) with
+ | _s2937_ =>
+ (spc_matches_prefix _s2937_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2938_ _)) =>
+ (match (string_drop _s2937_ _s2938_) with
+ | _s2939_ =>
+ (reg_name_matches_prefix _s2939_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s2940_ _)) =>
+ (match (string_drop _s2939_ _s2940_) with
+ | _s2941_ =>
+ (sep_matches_prefix _s2941_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2942_ _)) =>
+ (match (string_drop _s2941_ _s2942_) with
+ | _s2943_ =>
+ (reg_name_matches_prefix _s2943_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (rs1,(existT _ _s2944_ _)) =>
+ (match (string_drop _s2943_ _s2944_) with
+ | _s2945_ =>
+ (sep_matches_prefix _s2945_) >>= fun w__7 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (tt,(existT _ _s2946_ _)) =>
+ (match (string_drop _s2945_
+ _s2946_) with
+ | _s2947_ =>
+ (reg_name_matches_prefix
+ _s2947_) >>= fun w__8 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__8 with
+ | Some
+ (rs2,(existT _ _s2948_ _)) =>
+ match (string_drop
+ _s2947_
+ _s2948_) with
+ | s_ =>
+ Some
+ ((size, aq, rl, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ else
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2910_ (_s2911_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * string))) :=
+
+ let _s2912_ := _s2911_ in
+ (if ((string_startswith _s2912_ "lr.")) then
+ (match (string_drop _s2912_ (projT1 (string_length "lr."))) with
+ | _s2913_ =>
+ (size_mnemonic_matches_prefix _s2913_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s2914_ _)) =>
+ (match (string_drop _s2913_ _s2914_) with
+ | _s2915_ =>
+ (maybe_aq_matches_prefix _s2915_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s2916_ _)) =>
+ (match (string_drop _s2915_ _s2916_) with
+ | _s2917_ =>
+ (maybe_rl_matches_prefix _s2917_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s2918_ _)) =>
+ (match (string_drop _s2917_ _s2918_) with
+ | _s2919_ =>
+ (spc_matches_prefix _s2919_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2920_ _)) =>
+ (match (string_drop _s2919_ _s2920_) with
+ | _s2921_ =>
+ (reg_name_matches_prefix _s2921_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s2922_ _)) =>
+ (match (string_drop _s2921_ _s2922_) with
+ | _s2923_ =>
+ (sep_matches_prefix _s2923_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2924_ _)) =>
+ (match (string_drop _s2923_ _s2924_) with
+ | _s2925_ =>
+ (reg_name_matches_prefix _s2925_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs1,(existT _ _s2926_ _)) =>
+ match (string_drop _s2925_
+ _s2926_) with
+ | s_ =>
+ Some
+ ((size, aq, rl, rd, rs1, s_))
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string)))
+ else returnm (None : option ((word_width * bool * bool * mword 5 * mword 5 * string))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * string))).
+
+Definition _s2898_ (_s2899_ : string)
+: M (option ((mword 5 * mword 5 * string))) :=
+
+ let _s2900_ := _s2899_ in
+ (if ((string_startswith _s2900_ "sfence.vma")) then
+ (match (string_drop _s2900_ (projT1 (string_length "sfence.vma"))) with
+ | _s2901_ =>
+ (spc_matches_prefix _s2901_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2902_ _)) =>
+ (match (string_drop _s2901_ _s2902_) with
+ | _s2903_ =>
+ (reg_name_matches_prefix _s2903_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rs1,(existT _ _s2904_ _)) =>
+ (match (string_drop _s2903_ _s2904_) with
+ | _s2905_ =>
+ (sep_matches_prefix _s2905_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2906_ _)) =>
+ (match (string_drop _s2905_ _s2906_) with
+ | _s2907_ =>
+ (reg_name_matches_prefix _s2907_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (rs2,(existT _ _s2908_ _)) =>
+ match (string_drop _s2907_ _s2908_) with
+ | s_ => Some ((rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * string)))
+ else returnm (None : option ((mword 5 * mword 5 * string))))
+ : M (option ((mword 5 * mword 5 * string))).
+
+Definition _s2894_ (_s2895_ : string)
+: option string :=
+
+ let _s2896_ := _s2895_ in
+ if ((string_startswith _s2896_ "wfi")) then
+ match (string_drop _s2896_ (projT1 (string_length "wfi"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2890_ (_s2891_ : string)
+: option string :=
+
+ let _s2892_ := _s2891_ in
+ if ((string_startswith _s2892_ "ebreak")) then
+ match (string_drop _s2892_ (projT1 (string_length "ebreak"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2886_ (_s2887_ : string)
+: option string :=
+
+ let _s2888_ := _s2887_ in
+ if ((string_startswith _s2888_ "sret")) then
+ match (string_drop _s2888_ (projT1 (string_length "sret"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2882_ (_s2883_ : string)
+: option string :=
+
+ let _s2884_ := _s2883_ in
+ if ((string_startswith _s2884_ "mret")) then
+ match (string_drop _s2884_ (projT1 (string_length "mret"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2878_ (_s2879_ : string)
+: option string :=
+
+ let _s2880_ := _s2879_ in
+ if ((string_startswith _s2880_ "ecall")) then
+ match (string_drop _s2880_ (projT1 (string_length "ecall"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2874_ (_s2875_ : string)
+: option string :=
+
+ let _s2876_ := _s2875_ in
+ if ((string_startswith _s2876_ "fence.i")) then
+ match (string_drop _s2876_ (projT1 (string_length "fence.i"))) with | s_ => Some (s_) end
+ else None.
+
+Definition _s2862_ (_s2863_ : string)
+: M (option ((mword 4 * mword 4 * string))) :=
+
+ let _s2864_ := _s2863_ in
+ (if ((string_startswith _s2864_ "fence.tso")) then
+ (match (string_drop _s2864_ (projT1 (string_length "fence.tso"))) with
+ | _s2865_ =>
+ (spc_matches_prefix _s2865_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2866_ _)) =>
+ (match (string_drop _s2865_ _s2866_) with
+ | _s2867_ =>
+ (fence_bits_matches_prefix _s2867_) >>= fun w__1 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (pred,(existT _ _s2868_ _)) =>
+ (match (string_drop _s2867_ _s2868_) with
+ | _s2869_ =>
+ (sep_matches_prefix _s2869_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2870_ _)) =>
+ (match (string_drop _s2869_ _s2870_) with
+ | _s2871_ =>
+ (fence_bits_matches_prefix _s2871_) >>= fun w__3 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (succ,(existT _ _s2872_ _)) =>
+ match (string_drop _s2871_ _s2872_) with
+ | s_ => Some ((pred, succ, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ | _ => returnm (None : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ | _ => returnm (None : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ | _ => returnm (None : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ else returnm (None : option ((mword 4 * mword 4 * string))))
+ : M (option ((mword 4 * mword 4 * string))).
+
+Definition _s2850_ (_s2851_ : string)
+: M (option ((mword 4 * mword 4 * string))) :=
+
+ let _s2852_ := _s2851_ in
+ (if ((string_startswith _s2852_ "fence")) then
+ (match (string_drop _s2852_ (projT1 (string_length "fence"))) with
+ | _s2853_ =>
+ (spc_matches_prefix _s2853_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2854_ _)) =>
+ (match (string_drop _s2853_ _s2854_) with
+ | _s2855_ =>
+ (fence_bits_matches_prefix _s2855_) >>= fun w__1 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (pred,(existT _ _s2856_ _)) =>
+ (match (string_drop _s2855_ _s2856_) with
+ | _s2857_ =>
+ (sep_matches_prefix _s2857_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2858_ _)) =>
+ (match (string_drop _s2857_ _s2858_) with
+ | _s2859_ =>
+ (fence_bits_matches_prefix _s2859_) >>= fun w__3 : option ((mword 4 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (succ,(existT _ _s2860_ _)) =>
+ match (string_drop _s2859_ _s2860_) with
+ | s_ => Some ((pred, succ, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ | _ => returnm (None : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ | _ => returnm (None : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ | _ => returnm (None : option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ end)
+ : M (option ((mword 4 * mword 4 * string)))
+ else returnm (None : option ((mword 4 * mword 4 * string))))
+ : M (option ((mword 4 * mword 4 * string))).
+
+Definition _s2831_ (_s2832_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ let _s2833_ := _s2832_ in
+ (if ((string_startswith _s2833_ "rem")) then
+ (match (string_drop _s2833_ (projT1 (string_length "rem"))) with
+ | _s2834_ =>
+ (maybe_not_u_matches_prefix _s2834_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s2835_ _)) =>
+ let _s2836_ := string_drop _s2834_ _s2835_ in
+ (if ((string_startswith _s2836_ "w")) then
+ (match (string_drop _s2836_ (projT1 (string_length "w"))) with
+ | _s2837_ =>
+ (spc_matches_prefix _s2837_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2838_ _)) =>
+ (match (string_drop _s2837_ _s2838_) with
+ | _s2839_ =>
+ (reg_name_matches_prefix _s2839_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2840_ _)) =>
+ (match (string_drop _s2839_ _s2840_) with
+ | _s2841_ =>
+ (sep_matches_prefix _s2841_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2842_ _)) =>
+ (match (string_drop _s2841_ _s2842_) with
+ | _s2843_ =>
+ (reg_name_matches_prefix _s2843_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2844_ _)) =>
+ (match (string_drop _s2843_ _s2844_) with
+ | _s2845_ =>
+ (sep_matches_prefix _s2845_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2846_ _)) =>
+ (match (string_drop _s2845_ _s2846_) with
+ | _s2847_ =>
+ (reg_name_matches_prefix _s2847_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s2848_ _)) =>
+ match (string_drop _s2847_
+ _s2848_) with
+ | s_ =>
+ Some
+ ((s, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2812_ (_s2813_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ let _s2814_ := _s2813_ in
+ (if ((string_startswith _s2814_ "div")) then
+ (match (string_drop _s2814_ (projT1 (string_length "div"))) with
+ | _s2815_ =>
+ (maybe_not_u_matches_prefix _s2815_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s2816_ _)) =>
+ let _s2817_ := string_drop _s2815_ _s2816_ in
+ (if ((string_startswith _s2817_ "w")) then
+ (match (string_drop _s2817_ (projT1 (string_length "w"))) with
+ | _s2818_ =>
+ (spc_matches_prefix _s2818_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2819_ _)) =>
+ (match (string_drop _s2818_ _s2819_) with
+ | _s2820_ =>
+ (reg_name_matches_prefix _s2820_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2821_ _)) =>
+ (match (string_drop _s2820_ _s2821_) with
+ | _s2822_ =>
+ (sep_matches_prefix _s2822_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2823_ _)) =>
+ (match (string_drop _s2822_ _s2823_) with
+ | _s2824_ =>
+ (reg_name_matches_prefix _s2824_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2825_ _)) =>
+ (match (string_drop _s2824_ _s2825_) with
+ | _s2826_ =>
+ (sep_matches_prefix _s2826_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2827_ _)) =>
+ (match (string_drop _s2826_ _s2827_) with
+ | _s2828_ =>
+ (reg_name_matches_prefix _s2828_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s2829_ _)) =>
+ match (string_drop _s2828_
+ _s2829_) with
+ | s_ =>
+ Some
+ ((s, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2796_ (_s2797_ : string)
+: M (option ((mword 5 * mword 5 * mword 5 * string))) :=
+
+ let _s2798_ := _s2797_ in
+ (if ((string_startswith _s2798_ "mulw")) then
+ (match (string_drop _s2798_ (projT1 (string_length "mulw"))) with
+ | _s2799_ =>
+ (spc_matches_prefix _s2799_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2800_ _)) =>
+ (match (string_drop _s2799_ _s2800_) with
+ | _s2801_ =>
+ (reg_name_matches_prefix _s2801_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2802_ _)) =>
+ (match (string_drop _s2801_ _s2802_) with
+ | _s2803_ =>
+ (sep_matches_prefix _s2803_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2804_ _)) =>
+ (match (string_drop _s2803_ _s2804_) with
+ | _s2805_ =>
+ (reg_name_matches_prefix _s2805_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s2806_ _)) =>
+ (match (string_drop _s2805_ _s2806_) with
+ | _s2807_ =>
+ (sep_matches_prefix _s2807_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s2808_ _)) =>
+ (match (string_drop _s2807_ _s2808_) with
+ | _s2809_ =>
+ (reg_name_matches_prefix _s2809_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (rs2,(existT _ _s2810_ _)) =>
+ match (string_drop _s2809_ _s2810_) with
+ | s_ => Some ((rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2778_ (_s2779_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ let _s2780_ := _s2779_ in
+ (if ((string_startswith _s2780_ "rem")) then
+ (match (string_drop _s2780_ (projT1 (string_length "rem"))) with
+ | _s2781_ =>
+ (maybe_not_u_matches_prefix _s2781_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s2782_ _)) =>
+ (match (string_drop _s2781_ _s2782_) with
+ | _s2783_ =>
+ (spc_matches_prefix _s2783_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2784_ _)) =>
+ (match (string_drop _s2783_ _s2784_) with
+ | _s2785_ =>
+ (reg_name_matches_prefix _s2785_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2786_ _)) =>
+ (match (string_drop _s2785_ _s2786_) with
+ | _s2787_ =>
+ (sep_matches_prefix _s2787_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2788_ _)) =>
+ (match (string_drop _s2787_ _s2788_) with
+ | _s2789_ =>
+ (reg_name_matches_prefix _s2789_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2790_ _)) =>
+ (match (string_drop _s2789_ _s2790_) with
+ | _s2791_ =>
+ (sep_matches_prefix _s2791_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2792_ _)) =>
+ (match (string_drop _s2791_ _s2792_) with
+ | _s2793_ =>
+ (reg_name_matches_prefix _s2793_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s2794_ _)) =>
+ match (string_drop _s2793_
+ _s2794_) with
+ | s_ =>
+ Some
+ ((s, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2760_ (_s2761_ : string)
+: M (option ((bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ let _s2762_ := _s2761_ in
+ (if ((string_startswith _s2762_ "div")) then
+ (match (string_drop _s2762_ (projT1 (string_length "div"))) with
+ | _s2763_ =>
+ (maybe_not_u_matches_prefix _s2763_) >>= fun w__0 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (s,(existT _ _s2764_ _)) =>
+ (match (string_drop _s2763_ _s2764_) with
+ | _s2765_ =>
+ (spc_matches_prefix _s2765_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2766_ _)) =>
+ (match (string_drop _s2765_ _s2766_) with
+ | _s2767_ =>
+ (reg_name_matches_prefix _s2767_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2768_ _)) =>
+ (match (string_drop _s2767_ _s2768_) with
+ | _s2769_ =>
+ (sep_matches_prefix _s2769_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2770_ _)) =>
+ (match (string_drop _s2769_ _s2770_) with
+ | _s2771_ =>
+ (reg_name_matches_prefix _s2771_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2772_ _)) =>
+ (match (string_drop _s2771_ _s2772_) with
+ | _s2773_ =>
+ (sep_matches_prefix _s2773_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2774_ _)) =>
+ (match (string_drop _s2773_ _s2774_) with
+ | _s2775_ =>
+ (reg_name_matches_prefix _s2775_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some
+ (rs2,(existT _ _s2776_ _)) =>
+ match (string_drop _s2775_
+ _s2776_) with
+ | s_ =>
+ Some
+ ((s, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string)))
+ else returnm (None : option ((bool * mword 5 * mword 5 * mword 5 * string))))
+ : M (option ((bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2743_ (_s2744_ : string)
+: M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string))) :=
+
+ (match _s2744_ with
+ | _s2745_ =>
+ (mul_mnemonic_matches_prefix _s2745_) >>= fun w__0 : option (((bool * bool * bool) * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some ((high, signed1, signed2),(existT _ _s2746_ _)) =>
+ (match (string_drop _s2745_ _s2746_) with
+ | _s2747_ =>
+ (spc_matches_prefix _s2747_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2748_ _)) =>
+ (match (string_drop _s2747_ _s2748_) with
+ | _s2749_ =>
+ (reg_name_matches_prefix _s2749_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2750_ _)) =>
+ (match (string_drop _s2749_ _s2750_) with
+ | _s2751_ =>
+ (sep_matches_prefix _s2751_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2752_ _)) =>
+ (match (string_drop _s2751_ _s2752_) with
+ | _s2753_ =>
+ (reg_name_matches_prefix _s2753_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2754_ _)) =>
+ (match (string_drop _s2753_ _s2754_) with
+ | _s2755_ =>
+ (sep_matches_prefix _s2755_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2756_ _)) =>
+ (match (string_drop _s2755_ _s2756_) with
+ | _s2757_ =>
+ (reg_name_matches_prefix _s2757_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s2758_ _)) =>
+ match (string_drop _s2757_
+ _s2758_) with
+ | s_ =>
+ Some
+ ((high, signed1, signed2, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2728_ (_s2729_ : string)
+: M (option ((sopw * mword 5 * mword 5 * mword 5 * string))) :=
+
+ (match _s2729_ with
+ | _s2730_ =>
+ (shiftiwop_mnemonic_matches_prefix _s2730_) >>= fun w__0 : option ((sopw * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2731_ _)) =>
+ (match (string_drop _s2730_ _s2731_) with
+ | _s2732_ =>
+ (spc_matches_prefix _s2732_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2733_ _)) =>
+ (match (string_drop _s2732_ _s2733_) with
+ | _s2734_ =>
+ (reg_name_matches_prefix _s2734_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2735_ _)) =>
+ (match (string_drop _s2734_ _s2735_) with
+ | _s2736_ =>
+ (sep_matches_prefix _s2736_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2737_ _)) =>
+ (match (string_drop _s2736_ _s2737_) with
+ | _s2738_ =>
+ (reg_name_matches_prefix _s2738_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (rs1,(existT _ _s2739_ _)) =>
+ match (string_drop _s2738_ _s2739_) with
+ | _s2740_ =>
+ match (hex_bits_5_matches_prefix _s2740_) with
+ | Some (shamt,(existT _ _s2741_ _)) =>
+ match (string_drop _s2740_ _s2741_) with
+ | s_ => Some ((op, rd, rs1, shamt, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sopw * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2711_ (_s2712_ : string)
+: M (option ((ropw * mword 5 * mword 5 * mword 5 * string))) :=
+
+ (match _s2712_ with
+ | _s2713_ =>
+ (rtypew_mnemonic_matches_prefix _s2713_) >>= fun w__0 : option ((ropw * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2714_ _)) =>
+ (match (string_drop _s2713_ _s2714_) with
+ | _s2715_ =>
+ (spc_matches_prefix _s2715_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2716_ _)) =>
+ (match (string_drop _s2715_ _s2716_) with
+ | _s2717_ =>
+ (reg_name_matches_prefix _s2717_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2718_ _)) =>
+ (match (string_drop _s2717_ _s2718_) with
+ | _s2719_ =>
+ (sep_matches_prefix _s2719_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2720_ _)) =>
+ (match (string_drop _s2719_ _s2720_) with
+ | _s2721_ =>
+ (reg_name_matches_prefix _s2721_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2722_ _)) =>
+ (match (string_drop _s2721_ _s2722_) with
+ | _s2723_ =>
+ (sep_matches_prefix _s2723_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2724_ _)) =>
+ (match (string_drop _s2723_ _s2724_) with
+ | _s2725_ =>
+ (reg_name_matches_prefix _s2725_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s2726_ _)) =>
+ match (string_drop _s2725_
+ _s2726_) with
+ | s_ =>
+ Some ((op, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((ropw * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2694_ (_s2695_ : string)
+: M (option ((sop * mword 5 * mword 5 * mword 5 * string))) :=
+
+ (match _s2695_ with
+ | _s2696_ =>
+ (shiftw_mnemonic_matches_prefix _s2696_) >>= fun w__0 : option ((sop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2697_ _)) =>
+ (match (string_drop _s2696_ _s2697_) with
+ | _s2698_ =>
+ (spc_matches_prefix _s2698_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2699_ _)) =>
+ (match (string_drop _s2698_ _s2699_) with
+ | _s2700_ =>
+ (reg_name_matches_prefix _s2700_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2701_ _)) =>
+ (match (string_drop _s2700_ _s2701_) with
+ | _s2702_ =>
+ (sep_matches_prefix _s2702_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2703_ _)) =>
+ (match (string_drop _s2702_ _s2703_) with
+ | _s2704_ =>
+ (reg_name_matches_prefix _s2704_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2705_ _)) =>
+ (match (string_drop _s2704_ _s2705_) with
+ | _s2706_ =>
+ (sep_matches_prefix _s2706_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s2707_ _)) =>
+ match (string_drop _s2706_ _s2707_) with
+ | _s2708_ =>
+ match (hex_bits_5_matches_prefix
+ _s2708_) with
+ | Some (shamt,(existT _ _s2709_ _)) =>
+ match (string_drop _s2708_ _s2709_) with
+ | s_ =>
+ Some ((op, rd, rs1, shamt, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2678_ (_s2679_ : string)
+: M (option ((mword 5 * mword 5 * mword 12 * string))) :=
+
+ let _s2680_ := _s2679_ in
+ (if ((string_startswith _s2680_ "addiw")) then
+ (match (string_drop _s2680_ (projT1 (string_length "addiw"))) with
+ | _s2681_ =>
+ (spc_matches_prefix _s2681_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2682_ _)) =>
+ (match (string_drop _s2681_ _s2682_) with
+ | _s2683_ =>
+ (reg_name_matches_prefix _s2683_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2684_ _)) =>
+ (match (string_drop _s2683_ _s2684_) with
+ | _s2685_ =>
+ (sep_matches_prefix _s2685_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2686_ _)) =>
+ (match (string_drop _s2685_ _s2686_) with
+ | _s2687_ =>
+ (reg_name_matches_prefix _s2687_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s2688_ _)) =>
+ (match (string_drop _s2687_ _s2688_) with
+ | _s2689_ =>
+ (sep_matches_prefix _s2689_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s2690_ _)) =>
+ match (string_drop _s2689_ _s2690_) with
+ | _s2691_ =>
+ match (hex_bits_12_matches_prefix _s2691_) with
+ | Some (imm,(existT _ _s2692_ _)) =>
+ match (string_drop _s2691_ _s2692_) with
+ | s_ => Some ((rd, rs1, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 12 * string))))
+ : M (option ((mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2656_ (_s2657_ : string)
+: M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string))) :=
+
+ let _s2658_ := _s2657_ in
+ (if ((string_startswith _s2658_ "s")) then
+ (match (string_drop _s2658_ (projT1 (string_length "s"))) with
+ | _s2659_ =>
+ (size_mnemonic_matches_prefix _s2659_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s2660_ _)) =>
+ (match (string_drop _s2659_ _s2660_) with
+ | _s2661_ =>
+ (maybe_aq_matches_prefix _s2661_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (aq,(existT _ _s2662_ _)) =>
+ (match (string_drop _s2661_ _s2662_) with
+ | _s2663_ =>
+ (maybe_rl_matches_prefix _s2663_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rl,(existT _ _s2664_ _)) =>
+ (match (string_drop _s2663_ _s2664_) with
+ | _s2665_ =>
+ (spc_matches_prefix _s2665_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2666_ _)) =>
+ (match (string_drop _s2665_ _s2666_) with
+ | _s2667_ =>
+ (reg_name_matches_prefix _s2667_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rd,(existT _ _s2668_ _)) =>
+ (match (string_drop _s2667_ _s2668_) with
+ | _s2669_ =>
+ (sep_matches_prefix _s2669_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2670_ _)) =>
+ (match (string_drop _s2669_ _s2670_) with
+ | _s2671_ =>
+ (reg_name_matches_prefix _s2671_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (rs1,(existT _ _s2672_ _)) =>
+ (match (string_drop _s2671_ _s2672_) with
+ | _s2673_ =>
+ (sep_matches_prefix _s2673_) >>= fun w__7 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__7 with
+ | Some
+ (tt,(existT _ _s2674_ _)) =>
+ match (string_drop
+ _s2673_
+ _s2674_) with
+ | _s2675_ =>
+ match (hex_bits_12_matches_prefix
+ _s2675_) with
+ | Some
+ (imm,(existT _ _s2676_ _)) =>
+ match (string_drop
+ _s2675_
+ _s2676_) with
+ | s_ =>
+ Some
+ ((size, aq, rl, rd, rs1, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ else
+ returnm (None
+ : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string))))
+ : M (option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2632_ (_s2633_ : string)
+: M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string))) :=
+
+ let _s2634_ := _s2633_ in
+ (if ((string_startswith _s2634_ "l")) then
+ (match (string_drop _s2634_ (projT1 (string_length "l"))) with
+ | _s2635_ =>
+ (size_mnemonic_matches_prefix _s2635_) >>= fun w__0 : option ((word_width * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (size,(existT _ _s2636_ _)) =>
+ (match (string_drop _s2635_ _s2636_) with
+ | _s2637_ =>
+ (maybe_u_matches_prefix _s2637_) >>= fun w__1 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (is_unsigned,(existT _ _s2638_ _)) =>
+ (match (string_drop _s2637_ _s2638_) with
+ | _s2639_ =>
+ (maybe_aq_matches_prefix _s2639_) >>= fun w__2 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (aq,(existT _ _s2640_ _)) =>
+ (match (string_drop _s2639_ _s2640_) with
+ | _s2641_ =>
+ (maybe_rl_matches_prefix _s2641_) >>= fun w__3 : option ((bool * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rl,(existT _ _s2642_ _)) =>
+ (match (string_drop _s2641_ _s2642_) with
+ | _s2643_ =>
+ (spc_matches_prefix _s2643_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (tt,(existT _ _s2644_ _)) =>
+ (match (string_drop _s2643_ _s2644_) with
+ | _s2645_ =>
+ (reg_name_matches_prefix _s2645_) >>= fun w__5 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (rd,(existT _ _s2646_ _)) =>
+ (match (string_drop _s2645_ _s2646_) with
+ | _s2647_ =>
+ (sep_matches_prefix _s2647_) >>= fun w__6 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__6 with
+ | Some (tt,(existT _ _s2648_ _)) =>
+ (match (string_drop _s2647_ _s2648_) with
+ | _s2649_ =>
+ (reg_name_matches_prefix _s2649_) >>= fun w__7 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__7 with
+ | Some (rs1,(existT _ _s2650_ _)) =>
+ (match (string_drop _s2649_
+ _s2650_) with
+ | _s2651_ =>
+ (sep_matches_prefix
+ _s2651_) >>= fun w__8 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__8 with
+ | Some
+ (tt,(existT _ _s2652_ _)) =>
+ match (string_drop
+ _s2651_
+ _s2652_) with
+ | _s2653_ =>
+ match (hex_bits_12_matches_prefix
+ _s2653_) with
+ | Some
+ (imm,(existT _ _s2654_ _)) =>
+ match (string_drop
+ _s2653_
+ _s2654_) with
+ | s_ =>
+ Some
+ ((size, is_unsigned, aq, rl, rd, rs1, imm, s_))
+ end
+ | _ =>
+ None
+ end
+ end
+ | _ => None
+ end)
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)))
+ else
+ returnm (None
+ : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string))))
+ : M (option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2615_ (_s2616_ : string)
+: M (option ((rop * mword 5 * mword 5 * mword 5 * string))) :=
+
+ (match _s2616_ with
+ | _s2617_ =>
+ (rtype_mnemonic_matches_prefix _s2617_) >>= fun w__0 : option ((rop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2618_ _)) =>
+ (match (string_drop _s2617_ _s2618_) with
+ | _s2619_ =>
+ (spc_matches_prefix _s2619_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2620_ _)) =>
+ (match (string_drop _s2619_ _s2620_) with
+ | _s2621_ =>
+ (reg_name_matches_prefix _s2621_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2622_ _)) =>
+ (match (string_drop _s2621_ _s2622_) with
+ | _s2623_ =>
+ (sep_matches_prefix _s2623_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2624_ _)) =>
+ (match (string_drop _s2623_ _s2624_) with
+ | _s2625_ =>
+ (reg_name_matches_prefix _s2625_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2626_ _)) =>
+ (match (string_drop _s2625_ _s2626_) with
+ | _s2627_ =>
+ (sep_matches_prefix _s2627_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__5 with
+ | Some (tt,(existT _ _s2628_ _)) =>
+ (match (string_drop _s2627_ _s2628_) with
+ | _s2629_ =>
+ (reg_name_matches_prefix _s2629_) >>= fun w__6 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__6 with
+ | Some (rs2,(existT _ _s2630_ _)) =>
+ match (string_drop _s2629_
+ _s2630_) with
+ | s_ =>
+ Some ((op, rd, rs1, rs2, s_))
+ end
+ | _ => None
+ end)
+ : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None
+ : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ | _ =>
+ returnm (None : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ | _ => returnm (None : option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string)))
+ end)
+ : M (option ((rop * mword 5 * mword 5 * mword 5 * string))).
+
+Definition _s2600_ (_s2601_ : string)
+: M (option ((sop * mword 5 * mword 5 * mword 6 * string))) :=
+
+ (match _s2601_ with
+ | _s2602_ =>
+ (shiftiop_mnemonic_matches_prefix _s2602_) >>= fun w__0 : option ((sop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2603_ _)) =>
+ (match (string_drop _s2602_ _s2603_) with
+ | _s2604_ =>
+ (spc_matches_prefix _s2604_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2605_ _)) =>
+ (match (string_drop _s2604_ _s2605_) with
+ | _s2606_ =>
+ (reg_name_matches_prefix _s2606_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2607_ _)) =>
+ (match (string_drop _s2606_ _s2607_) with
+ | _s2608_ =>
+ (sep_matches_prefix _s2608_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2609_ _)) =>
+ (match (string_drop _s2608_ _s2609_) with
+ | _s2610_ =>
+ (reg_name_matches_prefix _s2610_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (rs1,(existT _ _s2611_ _)) =>
+ match (string_drop _s2610_ _s2611_) with
+ | _s2612_ =>
+ match (hex_bits_6_matches_prefix _s2612_) with
+ | Some (shamt,(existT _ _s2613_ _)) =>
+ match (string_drop _s2612_ _s2613_) with
+ | s_ => Some ((op, rd, rs1, shamt, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ | _ =>
+ returnm (None
+ : option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ | _ =>
+ returnm (None : option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ | _ => returnm (None : option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string)))
+ end)
+ : M (option ((sop * mword 5 * mword 5 * mword 6 * string))).
+
+Definition _s2583_ (_s2584_ : string)
+: M (option ((iop * mword 5 * mword 5 * mword 12 * string))) :=
+
+ (match _s2584_ with
+ | _s2585_ =>
+ (itype_mnemonic_matches_prefix _s2585_) >>= fun w__0 : option ((iop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2586_ _)) =>
+ (match (string_drop _s2585_ _s2586_) with
+ | _s2587_ =>
+ (spc_matches_prefix _s2587_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2588_ _)) =>
+ (match (string_drop _s2587_ _s2588_) with
+ | _s2589_ =>
+ (reg_name_matches_prefix _s2589_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2590_ _)) =>
+ (match (string_drop _s2589_ _s2590_) with
+ | _s2591_ =>
+ (sep_matches_prefix _s2591_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2592_ _)) =>
+ (match (string_drop _s2591_ _s2592_) with
+ | _s2593_ =>
+ (reg_name_matches_prefix _s2593_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs1,(existT _ _s2594_ _)) =>
+ (match (string_drop _s2593_ _s2594_) with
+ | _s2595_ =>
+ (sep_matches_prefix _s2595_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s2596_ _)) =>
+ match (string_drop _s2595_ _s2596_) with
+ | _s2597_ =>
+ match (hex_bits_12_matches_prefix
+ _s2597_) with
+ | Some (imm,(existT _ _s2598_ _)) =>
+ match (string_drop _s2597_ _s2598_) with
+ | s_ =>
+ Some ((op, rd, rs1, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None : option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((iop * mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2566_ (_s2567_ : string)
+: M (option ((bop * mword 5 * mword 5 * mword 13 * string))) :=
+
+ (match _s2567_ with
+ | _s2568_ =>
+ (btype_mnemonic_matches_prefix _s2568_) >>= fun w__0 : option ((bop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2569_ _)) =>
+ (match (string_drop _s2568_ _s2569_) with
+ | _s2570_ =>
+ (spc_matches_prefix _s2570_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2571_ _)) =>
+ (match (string_drop _s2570_ _s2571_) with
+ | _s2572_ =>
+ (reg_name_matches_prefix _s2572_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rs1,(existT _ _s2573_ _)) =>
+ (match (string_drop _s2572_ _s2573_) with
+ | _s2574_ =>
+ (sep_matches_prefix _s2574_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (tt,(existT _ _s2575_ _)) =>
+ (match (string_drop _s2574_ _s2575_) with
+ | _s2576_ =>
+ (reg_name_matches_prefix _s2576_) >>= fun w__4 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__4 with
+ | Some (rs2,(existT _ _s2577_ _)) =>
+ (match (string_drop _s2576_ _s2577_) with
+ | _s2578_ =>
+ (sep_matches_prefix _s2578_) >>= fun w__5 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__5 with
+ | Some (tt,(existT _ _s2579_ _)) =>
+ match (string_drop _s2578_ _s2579_) with
+ | _s2580_ =>
+ match (hex_bits_13_matches_prefix
+ _s2580_) with
+ | Some (imm,(existT _ _s2581_ _)) =>
+ match (string_drop _s2580_ _s2581_) with
+ | s_ =>
+ Some ((op, rs1, rs2, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ | _ =>
+ returnm (None
+ : option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ | _ =>
+ returnm (None
+ : option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ | _ =>
+ returnm (None : option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ | _ => returnm (None : option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string)))
+ end)
+ : M (option ((bop * mword 5 * mword 5 * mword 13 * string))).
+
+Definition _s2550_ (_s2551_ : string)
+: M (option ((mword 5 * mword 5 * mword 12 * string))) :=
+
+ let _s2552_ := _s2551_ in
+ (if ((string_startswith _s2552_ "jalr")) then
+ (match (string_drop _s2552_ (projT1 (string_length "jalr"))) with
+ | _s2553_ =>
+ (spc_matches_prefix _s2553_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2554_ _)) =>
+ (match (string_drop _s2553_ _s2554_) with
+ | _s2555_ =>
+ (reg_name_matches_prefix _s2555_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2556_ _)) =>
+ (match (string_drop _s2555_ _s2556_) with
+ | _s2557_ =>
+ (sep_matches_prefix _s2557_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (tt,(existT _ _s2558_ _)) =>
+ (match (string_drop _s2557_ _s2558_) with
+ | _s2559_ =>
+ (reg_name_matches_prefix _s2559_) >>= fun w__3 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__3 with
+ | Some (rs1,(existT _ _s2560_ _)) =>
+ (match (string_drop _s2559_ _s2560_) with
+ | _s2561_ =>
+ (sep_matches_prefix _s2561_) >>= fun w__4 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__4 with
+ | Some (tt,(existT _ _s2562_ _)) =>
+ match (string_drop _s2561_ _s2562_) with
+ | _s2563_ =>
+ match (hex_bits_12_matches_prefix _s2563_) with
+ | Some (imm,(existT _ _s2564_ _)) =>
+ match (string_drop _s2563_ _s2564_) with
+ | s_ => Some ((rd, rs1, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ =>
+ returnm (None
+ : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ end)
+ : M (option ((mword 5 * mword 5 * mword 12 * string)))
+ else returnm (None : option ((mword 5 * mword 5 * mword 12 * string))))
+ : M (option ((mword 5 * mword 5 * mword 12 * string))).
+
+Definition _s2538_ (_s2539_ : string)
+: M (option ((mword 5 * mword 21 * string))) :=
+
+ let _s2540_ := _s2539_ in
+ (if ((string_startswith _s2540_ "jal")) then
+ (match (string_drop _s2540_ (projT1 (string_length "jal"))) with
+ | _s2541_ =>
+ (spc_matches_prefix _s2541_) >>= fun w__0 : option ((unit * {n : Z & ArithFact (n >= 0)})) =>
+ (match w__0 with
+ | Some (tt,(existT _ _s2542_ _)) =>
+ (match (string_drop _s2541_ _s2542_) with
+ | _s2543_ =>
+ (reg_name_matches_prefix _s2543_) >>= fun w__1 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (rd,(existT _ _s2544_ _)) =>
+ (match (string_drop _s2543_ _s2544_) with
+ | _s2545_ =>
+ (sep_matches_prefix _s2545_) >>= fun w__2 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__2 with
+ | Some (tt,(existT _ _s2546_ _)) =>
+ match (string_drop _s2545_ _s2546_) with
+ | _s2547_ =>
+ match (hex_bits_21_matches_prefix _s2547_) with
+ | Some (imm,(existT _ _s2548_ _)) =>
+ match (string_drop _s2547_ _s2548_) with
+ | s_ => Some ((rd, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((mword 5 * mword 21 * string)))
+ end)
+ : M (option ((mword 5 * mword 21 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 21 * string)))
+ end)
+ : M (option ((mword 5 * mword 21 * string)))
+ end)
+ : M (option ((mword 5 * mword 21 * string)))
+ | _ => returnm (None : option ((mword 5 * mword 21 * string)))
+ end)
+ : M (option ((mword 5 * mword 21 * string)))
+ end)
+ : M (option ((mword 5 * mword 21 * string)))
+ else returnm (None : option ((mword 5 * mword 21 * string))))
+ : M (option ((mword 5 * mword 21 * string))).
+
+Definition _s2525_ (_s2526_ : string)
+: M (option ((uop * mword 5 * mword 20 * string))) :=
+
+ (match _s2526_ with
+ | _s2527_ =>
+ (utype_mnemonic_matches_prefix _s2527_) >>= fun w__0 : option ((uop * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__0 with
+ | Some (op,(existT _ _s2528_ _)) =>
+ (match (string_drop _s2527_ _s2528_) with
+ | _s2529_ =>
+ (spc_matches_prefix _s2529_) >>= fun w__1 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__1 with
+ | Some (tt,(existT _ _s2530_ _)) =>
+ (match (string_drop _s2529_ _s2530_) with
+ | _s2531_ =>
+ (reg_name_matches_prefix _s2531_) >>= fun w__2 : option ((mword 5 * {n : Z & ArithFact (n >=
+ 0)})) =>
+ (match w__2 with
+ | Some (rd,(existT _ _s2532_ _)) =>
+ (match (string_drop _s2531_ _s2532_) with
+ | _s2533_ =>
+ (sep_matches_prefix _s2533_) >>= fun w__3 : option ((unit * {n : Z & ArithFact (n >=
+ 0)})) =>
+ returnm ((match w__3 with
+ | Some (tt,(existT _ _s2534_ _)) =>
+ match (string_drop _s2533_ _s2534_) with
+ | _s2535_ =>
+ match (hex_bits_20_matches_prefix _s2535_) with
+ | Some (imm,(existT _ _s2536_ _)) =>
+ match (string_drop _s2535_ _s2536_) with
+ | s_ => Some ((op, rd, imm, s_))
+ end
+ | _ => None
+ end
+ end
+ | _ => None
+ end)
+ : option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string)))
+ | _ => returnm (None : option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string)))
+ end)
+ : M (option ((uop * mword 5 * mword 20 * string))).
+
+Definition assembly_matches_prefix (arg_ : string)
+: M (option ((ast * {n : Z & ArithFact (n >= 0)}))) :=
+
+ let _s2537_ := arg_ in
+ (_s2525_ _s2537_) >>= fun w__0 : option ((uop * mword 5 * mword 20 * string)) =>
+ (if ((match w__0 with | Some (op,rd,imm,s_) => true | _ => false end)) then
+ (_s2525_ _s2537_) >>= fun w__1 : option ((uop * mword 5 * mword 20 * string)) =>
+ (match w__1 with
+ | Some (op,rd,imm,s_) =>
+ returnm ((Some
+ ((UTYPE
+ ((imm, rd, op)), build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2538_ _s2537_) >>= fun w__4 : option ((mword 5 * mword 21 * string)) =>
+ (if ((match w__4 with | Some (rd,imm,s_) => true | _ => false end)) then
+ (_s2538_ _s2537_) >>= fun w__5 : option ((mword 5 * mword 21 * string)) =>
+ (match w__5 with
+ | Some (rd,imm,s_) =>
+ returnm ((Some
+ ((RISCV_JAL
+ ((imm, rd)), build_ex (projT1 (sub_nat (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2550_ _s2537_) >>= fun w__8 : option ((mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__8 with | Some (rd,rs1,imm,s_) => true | _ => false end)) then
+ (_s2550_ _s2537_) >>= fun w__9 : option ((mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__9 with
+ | Some (rd,rs1,imm,s_) =>
+ returnm ((Some
+ ((RISCV_JALR
+ ((imm, rs1, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length arg_))
+ (projT1 (string_length s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2566_ _s2537_) >>= fun w__12 : option ((bop * mword 5 * mword 5 * mword 13 * string)) =>
+ (if ((match w__12 with | Some (op,rs1,rs2,imm,s_) => true | _ => false end)) then
+ (_s2566_ _s2537_) >>= fun w__13 : option ((bop * mword 5 * mword 5 * mword 13 * string)) =>
+ (match w__13 with
+ | Some (op,rs1,rs2,imm,s_) =>
+ returnm ((Some
+ ((BTYPE
+ ((imm, rs2, rs1, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2583_ _s2537_) >>= fun w__16 : option ((iop * mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__16 with | Some (op,rd,rs1,imm,s_) => true | _ => false end)) then
+ (_s2583_ _s2537_) >>= fun w__17 : option ((iop * mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__17 with
+ | Some (op,rd,rs1,imm,s_) =>
+ returnm ((Some
+ ((ITYPE
+ ((imm, rs1, rd, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2600_ _s2537_) >>= fun w__20 : option ((sop * mword 5 * mword 5 * mword 6 * string)) =>
+ (if ((match w__20 with | Some (op,rd,rs1,shamt,s_) => true | _ => false end)) then
+ (_s2600_ _s2537_) >>= fun w__21 : option ((sop * mword 5 * mword 5 * mword 6 * string)) =>
+ (match w__21 with
+ | Some (op,rd,rs1,shamt,s_) =>
+ returnm ((Some
+ ((SHIFTIOP
+ ((shamt, rs1, rd, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2615_ _s2537_) >>= fun w__24 : option ((rop * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__24 with | Some (op,rd,rs1,rs2,s_) => true | _ => false end))
+ then
+ (_s2615_ _s2537_) >>= fun w__25 : option ((rop * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__25 with
+ | Some (op,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((RTYPE
+ ((rs2, rs1, rd, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2632_ _s2537_) >>= fun w__28 : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__28 with
+ | Some (size,is_unsigned,aq,rl,rd,rs1,imm,s_) => true
+ | _ => false
+ end)) then
+ (_s2632_ _s2537_) >>= fun w__29 : option ((word_width * bool * bool * bool * mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__29 with
+ | Some (size,is_unsigned,aq,rl,rd,rs1,imm,s_) =>
+ returnm ((Some
+ ((LOAD
+ ((imm, rs1, rd, is_unsigned, size, aq, rl)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2656_ _s2537_) >>= fun w__32 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__32 with
+ | Some (size,aq,rl,rd,rs1,imm,s_) => true
+ | _ => false
+ end)) then
+ (_s2656_ _s2537_) >>= fun w__33 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__33 with
+ | Some (size,aq,rl,rd,rs1,imm,s_) =>
+ returnm ((Some
+ ((STORE
+ ((imm, rs1, rd, size, aq, rl)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ => exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2678_ _s2537_) >>= fun w__36 : option ((mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__36 with | Some (rd,rs1,imm,s_) => true | _ => false end))
+ then
+ (_s2678_ _s2537_) >>= fun w__37 : option ((mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__37 with
+ | Some (rd,rs1,imm,s_) =>
+ returnm ((Some
+ ((ADDIW
+ ((imm, rs1, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2694_ _s2537_) >>= fun w__40 : option ((sop * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__40 with
+ | Some (op,rd,rs1,shamt,s_) => true
+ | _ => false
+ end)) then
+ (_s2694_ _s2537_) >>= fun w__41 : option ((sop * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__41 with
+ | Some (op,rd,rs1,shamt,s_) =>
+ returnm ((Some
+ ((SHIFTW
+ ((shamt, rs1, rd, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2711_ _s2537_) >>= fun w__44 : option ((ropw * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__44 with
+ | Some (op,rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2711_ _s2537_) >>= fun w__45 : option ((ropw * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__45 with
+ | Some (op,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((RTYPEW
+ ((rs2, rs1, rd, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2728_ _s2537_) >>= fun w__48 : option ((sopw * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__48 with
+ | Some (op,rd,rs1,shamt,s_) => true
+ | _ => false
+ end)) then
+ (_s2728_ _s2537_) >>= fun w__49 : option ((sopw * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__49 with
+ | Some (op,rd,rs1,shamt,s_) =>
+ returnm ((Some
+ ((SHIFTIWOP
+ ((shamt, rs1, rd, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2743_ _s2537_) >>= fun w__52 : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__52 with
+ | Some (high,signed1,signed2,rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2743_ _s2537_) >>= fun w__53 : option ((bool * bool * bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__53 with
+ | Some (high,signed1,signed2,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((MUL
+ ((rs2, rs1, rd, high, signed1, signed2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2760_ _s2537_) >>= fun w__56 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__56 with
+ | Some (s,rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2760_ _s2537_) >>= fun w__57 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__57 with
+ | Some (s,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((DIV
+ ((rs2, rs1, rd, s)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2778_ _s2537_) >>= fun w__60 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__60 with
+ | Some (s,rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2778_ _s2537_) >>= fun w__61 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__61 with
+ | Some (s,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((REM
+ ((rs2, rs1, rd, s)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >= 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)})))
+ else
+ (_s2796_ _s2537_) >>= fun w__64 : option ((mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__64 with
+ | Some (rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2796_ _s2537_) >>= fun w__65 : option ((mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__65 with
+ | Some (rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((MULW
+ ((rs2, rs1, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2812_ _s2537_) >>= fun w__68 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__68 with
+ | Some (s,rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2812_ _s2537_) >>= fun w__69 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__69 with
+ | Some (s,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((DIVW
+ ((rs2, rs1, rd, s)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2831_ _s2537_) >>= fun w__72 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__72 with
+ | Some (s,rd,rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2831_ _s2537_) >>= fun w__73 : option ((bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__73 with
+ | Some (s,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((REMW
+ ((rs2, rs1, rd, s)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2850_ _s2537_) >>= fun w__76 : option ((mword 4 * mword 4 * string)) =>
+ (if ((match w__76 with
+ | Some (pred,succ,s_) => true
+ | _ => false
+ end)) then
+ (_s2850_ _s2537_) >>= fun w__77 : option ((mword 4 * mword 4 * string)) =>
+ (match w__77 with
+ | Some (pred,succ,s_) =>
+ returnm ((Some
+ ((FENCE
+ ((pred, succ)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2862_ _s2537_) >>= fun w__80 : option ((mword 4 * mword 4 * string)) =>
+ (if ((match w__80 with
+ | Some (pred,succ,s_) => true
+ | _ => false
+ end)) then
+ (_s2862_ _s2537_) >>= fun w__81 : option ((mword 4 * mword 4 * string)) =>
+ (match w__81 with
+ | Some (pred,succ,s_) =>
+ returnm ((Some
+ ((FENCE_TSO
+ ((pred, succ)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s2874_ _s2537_) with
+ | Some (s_) => true
+ | _ => false
+ end)) then
+ (match (_s2874_ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((FENCEI
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s2878_ _s2537_) with
+ | Some (s_) => true
+ | _ => false
+ end)) then
+ (match (_s2878_ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((ECALL
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s2882_ _s2537_) with
+ | Some (s_) => true
+ | _ => false
+ end)) then
+ (match (_s2882_ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((MRET
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s2886_ _s2537_) with
+ | Some (s_) => true
+ | _ => false
+ end)) then
+ (match (_s2886_ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((SRET
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s2890_ _s2537_) with
+ | Some (s_) => true
+ | _ => false
+ end)) then
+ (match (_s2890_ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((EBREAK
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s2894_ _s2537_) with
+ | Some (s_) => true
+ | _ => false
+ end)) then
+ (match (_s2894_ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((WFI
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2898_ _s2537_) >>= fun w__96 : option ((mword 5 * mword 5 * string)) =>
+ (if ((match w__96 with
+ | Some (rs1,rs2,s_) => true
+ | _ => false
+ end)) then
+ (_s2898_ _s2537_) >>= fun w__97 : option ((mword 5 * mword 5 * string)) =>
+ (match w__97 with
+ | Some (rs1,rs2,s_) =>
+ returnm ((Some
+ ((SFENCE_VMA
+ ((rs1, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2910_ _s2537_) >>= fun w__100 : option ((word_width * bool * bool * mword 5 * mword 5 * string)) =>
+ (if ((match w__100 with
+ | Some
+ (size,aq,rl,rd,rs1,s_) =>
+ true
+ | _ => false
+ end)) then
+ (_s2910_ _s2537_) >>= fun w__101 : option ((word_width * bool * bool * mword 5 * mword 5 * string)) =>
+ (match w__101 with
+ | Some
+ (size,aq,rl,rd,rs1,s_) =>
+ returnm ((Some
+ ((LOADRES
+ ((aq, rl, rs1, size, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2928_ _s2537_) >>= fun w__104 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__104 with
+ | Some
+ (size,aq,rl,rd,rs1,rs2,s_) =>
+ true
+ | _ => false
+ end)) then
+ (_s2928_ _s2537_) >>= fun w__105 : option ((word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__105 with
+ | Some
+ (size,aq,rl,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((STORECON
+ ((aq, rl, rs2, rs1, size, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2950_ _s2537_) >>= fun w__108 : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (if ((match w__108 with
+ | Some
+ (op,width,aq,rl,rd,rs1,rs2,s_) =>
+ true
+ | _ => false
+ end)) then
+ (_s2950_ _s2537_) >>= fun w__109 : option ((amoop * word_width * bool * bool * mword 5 * mword 5 * mword 5 * string)) =>
+ (match w__109 with
+ | Some
+ (op,width,aq,rl,rd,rs1,rs2,s_) =>
+ returnm ((Some
+ ((AMO
+ ((op, aq, rl, rs2, rs1, width, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2974_ _s2537_) >>= fun w__112 : option ((csrop * mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__112 with
+ | Some
+ (op,rd,rs1,csr,s_) =>
+ true
+ | _ => false
+ end)) then
+ (_s2974_ _s2537_) >>= fun w__113 : option ((csrop * mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__113 with
+ | Some
+ (op,rd,rs1,csr,s_) =>
+ returnm ((Some
+ ((CSR
+ ((csr, rs1, rd, true, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s2992_ _s2537_) >>= fun w__116 : option ((csrop * mword 5 * mword 5 * mword 12 * string)) =>
+ (if ((match w__116 with
+ | Some
+ (op,rd,rs1,csr,s_) =>
+ true
+ | _ => false
+ end)) then
+ (_s2992_ _s2537_) >>= fun w__117 : option ((csrop * mword 5 * mword 5 * mword 12 * string)) =>
+ (match w__117 with
+ | Some
+ (op,rd,rs1,csr,s_) =>
+ returnm ((Some
+ ((CSR
+ ((csr, rs1, rd, false, op)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if ((match (_s3009_
+ _s2537_) with
+ | Some
+ (s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (match (_s3009_
+ _s2537_) with
+ | Some (s_) =>
+ returnm ((Some
+ ((C_NOP
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3013_ _s2537_) >>= fun w__122 : option ((mword 3 * mword 8 * string)) =>
+ (if ((match w__122 with
+ | Some
+ (rdc,nzimm,s_) =>
+ neq_vec
+ nzimm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 8)
+ | _ =>
+ false
+ end)) then
+ (_s3013_
+ _s2537_) >>= fun w__123 : option ((mword 3 * mword 8 * string)) =>
+ (match w__123 with
+ | Some
+ (rdc,nzimm,s_) =>
+ returnm ((Some
+ ((C_ADDI4SPN
+ ((rdc, nzimm)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3025_
+ _s2537_) >>= fun w__126 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (if ((match w__126 with
+ | Some
+ (rdc,rsc,uimm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3025_
+ _s2537_) >>= fun w__127 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (match w__127 with
+ | Some
+ (rdc,rsc,uimm,s_) =>
+ returnm ((Some
+ ((C_LW
+ ((uimm, rsc, rdc)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3041_
+ _s2537_) >>= fun w__130 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (if ((match w__130 with
+ | Some
+ (rdc,rsc,uimm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3041_
+ _s2537_) >>= fun w__131 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (match w__131 with
+ | Some
+ (rdc,rsc,uimm,s_) =>
+ returnm ((Some
+ ((C_LD
+ ((uimm, rsc, rdc)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3057_
+ _s2537_) >>= fun w__134 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (if ((match w__134 with
+ | Some
+ (rsc1,rsc2,uimm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3057_
+ _s2537_) >>= fun w__135 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (match w__135 with
+ | Some
+ (rsc1,rsc2,uimm,s_) =>
+ returnm ((Some
+ ((C_SW
+ ((uimm, rsc1, rsc2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3073_
+ _s2537_) >>= fun w__138 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (if ((match w__138 with
+ | Some
+ (rsc1,rsc2,uimm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3073_
+ _s2537_) >>= fun w__139 : option ((mword 3 * mword 3 * mword 5 * string)) =>
+ (match w__139 with
+ | Some
+ (rsc1,rsc2,uimm,s_) =>
+ returnm ((Some
+ ((C_SD
+ ((uimm, rsc1, rsc2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3089_
+ _s2537_) >>= fun w__142 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__142 with
+ | Some
+ (rsd,nzi,s_) =>
+ andb
+ (neq_vec
+ nzi
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s3089_
+ _s2537_) >>= fun w__143 : option ((mword 5 * mword 6 * string)) =>
+ (match w__143 with
+ | Some
+ (rsd,nzi,s_) =>
+ returnm ((Some
+ ((C_ADDI
+ ((nzi, rsd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3101_
+ _s2537_) >>= fun w__146 : option ((mword 11 * string)) =>
+ (if
+ ((match w__146 with
+ | Some
+ (imm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3101_
+ _s2537_) >>= fun w__147 : option ((mword 11 * string)) =>
+ (match w__147 with
+ | Some
+ (imm,s_) =>
+ returnm ((Some
+ ((C_JAL
+ (imm), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3109_
+ _s2537_) >>= fun w__150 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__150 with
+ | Some
+ (rsd,imm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3109_
+ _s2537_) >>= fun w__151 : option ((mword 5 * mword 6 * string)) =>
+ (match w__151 with
+ | Some
+ (rsd,imm,s_) =>
+ returnm ((Some
+ ((C_ADDIW
+ ((imm, rsd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3121_
+ _s2537_) >>= fun w__154 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__154 with
+ | Some
+ (rd,imm,s_) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s3121_
+ _s2537_) >>= fun w__155 : option ((mword 5 * mword 6 * string)) =>
+ (match w__155 with
+ | Some
+ (rd,imm,s_) =>
+ returnm ((Some
+ ((C_LI
+ ((imm, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3133_
+ _s2537_) >>= fun w__158 : option ((mword 6 * string)) =>
+ (if
+ ((match w__158 with
+ | Some
+ (imm,s_) =>
+ neq_vec
+ imm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s3133_
+ _s2537_) >>= fun w__159 : option ((mword 6 * string)) =>
+ (match w__159 with
+ | Some
+ (imm,s_) =>
+ returnm ((Some
+ ((C_ADDI16SP
+ (imm), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3141_
+ _s2537_) >>= fun w__162 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__162 with
+ | Some
+ (rd,imm,s_) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ sp)))
+ (neq_vec
+ imm
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)))
+ | _ =>
+ false
+ end))
+ then
+ (_s3141_
+ _s2537_) >>= fun w__163 : option ((mword 5 * mword 6 * string)) =>
+ (match w__163 with
+ | Some
+ (rd,imm,s_) =>
+ returnm ((Some
+ ((C_LUI
+ ((imm, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3153_
+ _s2537_) >>= fun w__166 : option ((mword 3 * mword 6 * string)) =>
+ (if
+ ((match w__166 with
+ | Some
+ (rsd,shamt,s_) =>
+ neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s3153_
+ _s2537_) >>= fun w__167 : option ((mword 3 * mword 6 * string)) =>
+ (match w__167 with
+ | Some
+ (rsd,shamt,s_) =>
+ returnm ((Some
+ ((C_SRLI
+ ((shamt, rsd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3165_
+ _s2537_) >>= fun w__170 : option ((mword 3 * mword 6 * string)) =>
+ (if
+ ((match w__170 with
+ | Some
+ (rsd,shamt,s_) =>
+ neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6)
+ | _ =>
+ false
+ end))
+ then
+ (_s3165_
+ _s2537_) >>= fun w__171 : option ((mword 3 * mword 6 * string)) =>
+ (match w__171 with
+ | Some
+ (rsd,shamt,s_) =>
+ returnm ((Some
+ ((C_SRAI
+ ((shamt, rsd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3177_
+ _s2537_) >>= fun w__174 : option ((mword 3 * mword 6 * string)) =>
+ (if
+ ((match w__174 with
+ | Some
+ (rsd,imm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3177_
+ _s2537_) >>= fun w__175 : option ((mword 3 * mword 6 * string)) =>
+ (match w__175 with
+ | Some
+ (rsd,imm,s_) =>
+ returnm ((Some
+ ((C_ANDI
+ ((imm, rsd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3189_
+ _s2537_) >>= fun w__178 : option ((mword 3 * mword 3 * string)) =>
+ (if
+ ((match w__178 with
+ | Some
+ (rsd,rs2,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3189_
+ _s2537_) >>= fun w__179 : option ((mword 3 * mword 3 * string)) =>
+ (match w__179 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_SUB
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3201_
+ _s2537_) >>= fun w__182 : option ((mword 3 * mword 3 * string)) =>
+ (if
+ ((match w__182 with
+ | Some
+ (rsd,rs2,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3201_
+ _s2537_) >>= fun w__183 : option ((mword 3 * mword 3 * string)) =>
+ (match w__183 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_XOR
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3213_
+ _s2537_) >>= fun w__186 : option ((mword 3 * mword 3 * string)) =>
+ (if
+ ((match w__186 with
+ | Some
+ (rsd,rs2,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3213_
+ _s2537_) >>= fun w__187 : option ((mword 3 * mword 3 * string)) =>
+ (match w__187 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_OR
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3225_
+ _s2537_) >>= fun w__190 : option ((mword 3 * mword 3 * string)) =>
+ (if
+ ((match w__190 with
+ | Some
+ (rsd,rs2,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3225_
+ _s2537_) >>= fun w__191 : option ((mword 3 * mword 3 * string)) =>
+ (match w__191 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_AND
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3237_
+ _s2537_) >>= fun w__194 : option ((mword 3 * mword 3 * string)) =>
+ (if
+ ((match w__194 with
+ | Some
+ (rsd,rs2,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3237_
+ _s2537_) >>= fun w__195 : option ((mword 3 * mword 3 * string)) =>
+ (match w__195 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_SUBW
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3249_
+ _s2537_) >>= fun w__198 : option ((mword 3 * mword 3 * string)) =>
+ (if
+ ((match w__198 with
+ | Some
+ (rsd,rs2,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3249_
+ _s2537_) >>= fun w__199 : option ((mword 3 * mword 3 * string)) =>
+ (match w__199 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_ADDW
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3261_
+ _s2537_) >>= fun w__202 : option ((mword 11 * string)) =>
+ (if
+ ((match w__202 with
+ | Some
+ (imm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3261_
+ _s2537_) >>= fun w__203 : option ((mword 11 * string)) =>
+ (match w__203 with
+ | Some
+ (imm,s_) =>
+ returnm ((Some
+ ((C_J
+ (imm), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3269_
+ _s2537_) >>= fun w__206 : option ((mword 3 * mword 8 * string)) =>
+ (if
+ ((match w__206 with
+ | Some
+ (rs,imm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3269_
+ _s2537_) >>= fun w__207 : option ((mword 3 * mword 8 * string)) =>
+ (match w__207 with
+ | Some
+ (rs,imm,s_) =>
+ returnm ((Some
+ ((C_BEQZ
+ ((imm, rs)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3281_
+ _s2537_) >>= fun w__210 : option ((mword 3 * mword 8 * string)) =>
+ (if
+ ((match w__210 with
+ | Some
+ (rs,imm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3281_
+ _s2537_) >>= fun w__211 : option ((mword 3 * mword 8 * string)) =>
+ (match w__211 with
+ | Some
+ (rs,imm,s_) =>
+ returnm ((Some
+ ((C_BNEZ
+ ((imm, rs)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3293_
+ _s2537_) >>= fun w__214 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__214 with
+ | Some
+ (rsd,shamt,s_) =>
+ andb
+ (neq_vec
+ shamt
+ (vec_of_bits [B0;B0;B0;B0;B0;B0]
+ : mword 6))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s3293_
+ _s2537_) >>= fun w__215 : option ((mword 5 * mword 6 * string)) =>
+ (match w__215 with
+ | Some
+ (rsd,shamt,s_) =>
+ returnm ((Some
+ ((C_SLLI
+ ((shamt, rsd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3305_
+ _s2537_) >>= fun w__218 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__218 with
+ | Some
+ (rd,uimm,s_) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s3305_
+ _s2537_) >>= fun w__219 : option ((mword 5 * mword 6 * string)) =>
+ (match w__219 with
+ | Some
+ (rd,uimm,s_) =>
+ returnm ((Some
+ ((C_LWSP
+ ((uimm, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3317_
+ _s2537_) >>= fun w__222 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__222 with
+ | Some
+ (rd,uimm,s_) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s3317_
+ _s2537_) >>= fun w__223 : option ((mword 5 * mword 6 * string)) =>
+ (match w__223 with
+ | Some
+ (rd,uimm,s_) =>
+ returnm ((Some
+ ((C_LDSP
+ ((uimm, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3329_
+ _s2537_) >>= fun w__226 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__226 with
+ | Some
+ (rd,uimm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3329_
+ _s2537_) >>= fun w__227 : option ((mword 5 * mword 6 * string)) =>
+ (match w__227 with
+ | Some
+ (rd,uimm,s_) =>
+ returnm ((Some
+ ((C_SWSP
+ ((uimm, rd)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3341_
+ _s2537_) >>= fun w__230 : option ((mword 5 * mword 6 * string)) =>
+ (if
+ ((match w__230 with
+ | Some
+ (rs2,uimm,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3341_
+ _s2537_) >>= fun w__231 : option ((mword 5 * mword 6 * string)) =>
+ (match w__231 with
+ | Some
+ (rs2,uimm,s_) =>
+ returnm ((Some
+ ((C_SDSP
+ ((uimm, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3353_
+ _s2537_) >>= fun w__234 : option ((mword 5 * string)) =>
+ (if
+ ((match w__234 with
+ | Some
+ (rs1,s_) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rs1))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s3353_
+ _s2537_) >>= fun w__235 : option ((mword 5 * string)) =>
+ (match w__235 with
+ | Some
+ (rs1,s_) =>
+ returnm ((Some
+ ((C_JR
+ (rs1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3361_
+ _s2537_) >>= fun w__238 : option ((mword 5 * string)) =>
+ (if
+ ((match w__238 with
+ | Some
+ (rs1,s_) =>
+ neq_int
+ (projT1 (regbits_to_regno
+ rs1))
+ (projT1 (regbits_to_regno
+ zreg))
+ | _ =>
+ false
+ end))
+ then
+ (_s3361_
+ _s2537_) >>= fun w__239 : option ((mword 5 * string)) =>
+ (match w__239 with
+ | Some
+ (rs1,s_) =>
+ returnm ((Some
+ ((C_JALR
+ (rs1), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3369_
+ _s2537_) >>= fun w__242 : option ((mword 5 * mword 5 * string)) =>
+ (if
+ ((match w__242 with
+ | Some
+ (rd,rs2,s_) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rs2))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s3369_
+ _s2537_) >>= fun w__243 : option ((mword 5 * mword 5 * string)) =>
+ (match w__243 with
+ | Some
+ (rd,rs2,s_) =>
+ returnm ((Some
+ ((C_MV
+ ((rd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if
+ ((match (_s3381_
+ _s2537_) with
+ | Some
+ (s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (match (_s3381_
+ _s2537_) with
+ | Some
+ (s_) =>
+ returnm ((Some
+ ((C_EBREAK
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3385_
+ _s2537_) >>= fun w__248 : option ((mword 5 * mword 5 * string)) =>
+ (if
+ ((match w__248 with
+ | Some
+ (rsd,rs2,s_) =>
+ andb
+ (neq_int
+ (projT1 (regbits_to_regno
+ rsd))
+ (projT1 (regbits_to_regno
+ zreg)))
+ (neq_int
+ (projT1 (regbits_to_regno
+ rs2))
+ (projT1 (regbits_to_regno
+ zreg)))
+ | _ =>
+ false
+ end))
+ then
+ (_s3385_
+ _s2537_) >>= fun w__249 : option ((mword 5 * mword 5 * string)) =>
+ (match w__249 with
+ | Some
+ (rsd,rs2,s_) =>
+ returnm ((Some
+ ((C_ADD
+ ((rsd, rs2)), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if
+ ((match (_s3397_
+ _s2537_) with
+ | Some
+ (s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (match (_s3397_
+ _s2537_) with
+ | Some
+ (s_) =>
+ returnm ((Some
+ ((STOP_FETCHING
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else if
+ ((match (_s3401_
+ _s2537_) with
+ | Some
+ (s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (match (_s3401_
+ _s2537_) with
+ | Some
+ (s_) =>
+ returnm ((Some
+ ((THREAD_START
+ (tt), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3405_
+ _s2537_) >>= fun w__256 : option ((mword 32 * string)) =>
+ (if
+ ((match w__256 with
+ | Some
+ (s,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3405_
+ _s2537_) >>= fun w__257 : option ((mword 32 * string)) =>
+ (match w__257 with
+ | Some
+ (s,s_) =>
+ returnm ((Some
+ ((ILLEGAL
+ (s), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ (_s3413_
+ _s2537_) >>= fun w__260 : option ((mword 16 * string)) =>
+ (if
+ ((match w__260 with
+ | Some
+ (s,s_) =>
+ true
+ | _ =>
+ false
+ end))
+ then
+ (_s3413_
+ _s2537_) >>= fun w__261 : option ((mword 16 * string)) =>
+ (match w__261 with
+ | Some
+ (s,s_) =>
+ returnm ((Some
+ ((C_ILLEGAL
+ (s), build_ex (projT1 (sub_nat
+ (projT1 (string_length
+ arg_))
+ (projT1 (string_length
+ s_)))))))
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ | _ =>
+ exit tt
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ end)
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)})))
+ else
+ returnm (None
+ : option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >=
+ 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))))
+ : M (option ((ast * {n : Z & ArithFact (n >= 0)}))).
+
+Definition execute_WFI '(tt : unit)
+: M (bool) :=
+
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ (match w__0 with
+ | Machine => (platform_wfi tt) >> returnm (true : bool)
+ | Supervisor =>
+ read_reg mstatus_ref >>= fun w__1 : Mstatus =>
+ (if ((eq_vec (_get_Mstatus_TW w__1) ((bool_to_bits true) : mword 1))) then
+ (handle_illegal tt) >> returnm (false : bool)
+ else (platform_wfi tt) >> returnm (true : bool))
+ : M (bool)
+ | User => (handle_illegal tt) >> returnm (false : bool)
+ end)
+ : M (bool).
+
+Definition execute_UTYPE (imm : mword 20) (rd : mword 5) (op : uop)
+: M (bool) :=
+
+ let off : xlenbits :=
+ EXTS 64 (concat_vec imm (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] : mword 12)) in
+ (match op with
+ | RISCV_LUI => returnm (off : xlenbits)
+ | RISCV_AUIPC =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ returnm ((add_vec w__0 off)
+ : mword 64)
+ end) >>= fun ret : xlenbits =>
+ (wX (projT1 (regbits_to_regno rd)) ret) >> returnm (true : bool).
+
+Definition execute_THREAD_START '(tt : unit) : bool := true.
+
+Definition execute_STORECON
+(aq : bool) (rl : bool) (rs2 : mword 5) (rs1 : mword 5) (width : word_width) (rd : mword 5)
+: M (bool) :=
+
+ (speculate_conditional tt) >>= fun w__0 : bool =>
+ (if ((Bool.eqb w__0 false)) then
+ (wX (projT1 (regbits_to_regno rd)) (EXTZ 64 (vec_of_bits [B1] : mword 1))) >>
+ returnm (true
+ : bool)
+ else
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun vaddr : xlenbits =>
+ (match width with
+ | BYTE => returnm (true : bool)
+ | HALF =>
+ (cast_unit_vec (access_vec_dec vaddr 0)) >>= fun w__1 : mword 1 =>
+ returnm ((eq_vec w__1 (vec_of_bits [B0] : mword 1))
+ : bool)
+ | WORD =>
+ returnm ((eq_vec (subrange_vec_dec vaddr 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))
+ : bool)
+ | DOUBLE =>
+ returnm ((eq_vec (subrange_vec_dec vaddr 2 0)
+ (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))
+ : bool)
+ end) >>= fun aligned : bool =>
+ (if ((negb aligned)) then
+ (handle_mem_exception vaddr E_SAMO_Addr_Align) >> returnm (false : bool)
+ else if ((Bool.eqb (match_reservation vaddr) false)) then
+ (wX (projT1 (regbits_to_regno rd)) (EXTZ 64 (vec_of_bits [B1] : mword 1))) >>
+ returnm (true
+ : bool)
+ else
+ (translateAddr vaddr Write Data) >>= fun w__2 : TR_Result =>
+ (match w__2 with
+ | TR_Failure (e) => (handle_mem_exception vaddr e) >> returnm (false : bool)
+ | TR_Address (addr) =>
+ (match width with
+ | WORD => (mem_write_ea addr 4 aq rl true) : M (MemoryOpResult unit)
+ | DOUBLE => (mem_write_ea addr 8 aq rl true) : M (MemoryOpResult unit)
+ | _ => (internal_error "STORECON expected word or double") : M (MemoryOpResult unit)
+ end) >>= fun eares : MemoryOpResult unit =>
+ (match eares with
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ | MemValue (_) =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ (match width with
+ | WORD =>
+ (mem_write_value addr 4 (subrange_vec_dec rs2_val 31 0) aq rl true)
+ : M (MemoryOpResult bool)
+ | DOUBLE => (mem_write_value addr 8 rs2_val aq rl true) : M (MemoryOpResult bool)
+ | _ =>
+ (internal_error "STORECON expected word or double") : M (MemoryOpResult bool)
+ end) >>= fun res : MemoryOpResult bool =>
+ (match res with
+ | MemValue (true) =>
+ (wX (projT1 (regbits_to_regno rd)) (EXTZ 64 (vec_of_bits [B0] : mword 1))) >>
+ let '_ := (cancel_reservation tt) : unit in
+ returnm (true
+ : bool)
+ | MemValue (false) =>
+ (wX (projT1 (regbits_to_regno rd)) (EXTZ 64 (vec_of_bits [B1] : mword 1))) >>
+ let '_ := (cancel_reservation tt) : unit in
+ returnm (true
+ : bool)
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool))
+ : M (bool))
+ : M (bool).
+
+Definition execute_STORE
+(imm : mword 12) (rs2 : mword 5) (rs1 : mword 5) (width : word_width) (aq : bool) (rl : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let vaddr : xlenbits := add_vec w__0 (EXTS 64 imm) in
+ (check_misaligned vaddr width) >>= fun w__1 : bool =>
+ (if (w__1) then (handle_mem_exception vaddr E_SAMO_Addr_Align) >> returnm (false : bool)
+ else
+ (translateAddr vaddr Write Data) >>= fun w__2 : TR_Result =>
+ (match w__2 with
+ | TR_Failure (e) => (handle_mem_exception vaddr e) >> returnm (false : bool)
+ | TR_Address (addr) =>
+ (match width with
+ | BYTE => (mem_write_ea addr 1 aq rl false) : M (MemoryOpResult unit)
+ | HALF => (mem_write_ea addr 2 aq rl false) : M (MemoryOpResult unit)
+ | WORD => (mem_write_ea addr 4 aq rl false) : M (MemoryOpResult unit)
+ | DOUBLE => (mem_write_ea addr 8 aq rl false) : M (MemoryOpResult unit)
+ end) >>= fun eares : MemoryOpResult unit =>
+ (match eares with
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ | MemValue (_) =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ (match width with
+ | BYTE =>
+ (mem_write_value addr 1 (subrange_vec_dec rs2_val 7 0) aq rl false)
+ : M (MemoryOpResult bool)
+ | HALF =>
+ (mem_write_value addr 2 (subrange_vec_dec rs2_val 15 0) aq rl false)
+ : M (MemoryOpResult bool)
+ | WORD =>
+ (mem_write_value addr 4 (subrange_vec_dec rs2_val 31 0) aq rl false)
+ : M (MemoryOpResult bool)
+ | DOUBLE => (mem_write_value addr 8 rs2_val aq rl false) : M (MemoryOpResult bool)
+ end) >>= fun res : MemoryOpResult bool =>
+ (match res with
+ | MemValue (true) => returnm (true : bool)
+ | MemValue (false) =>
+ (internal_error "store got false from mem_write_value") : M (bool)
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool))
+ : M (bool).
+
+Definition execute_STOP_FETCHING '(tt : unit) : bool := true.
+
+Definition execute_SRET '(tt : unit)
+: M (bool) :=
+
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ (match w__0 with
+ | User => (handle_illegal tt) : M (unit)
+ | Supervisor =>
+ read_reg mstatus_ref >>= fun w__1 : Mstatus =>
+ (if ((eq_vec (_get_Mstatus_TSR w__1) ((bool_to_bits true) : mword 1))) then
+ (handle_illegal tt)
+ : M (unit)
+ else
+ read_reg cur_privilege_ref >>= fun w__2 : Privilege =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__3 : xlenbits =>
+ (handle_exception w__2 (CTL_SRET (tt)) w__3) >>= fun w__4 : mword 64 =>
+ write_reg nextPC_ref w__4
+ : M (unit))
+ : M (unit)
+ | Machine =>
+ read_reg cur_privilege_ref >>= fun w__5 : Privilege =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__6 : xlenbits =>
+ (handle_exception w__5 (CTL_SRET (tt)) w__6) >>= fun w__7 : mword 64 =>
+ write_reg nextPC_ref w__7
+ : M (unit)
+ end) >>
+ returnm (false
+ : bool).
+
+Definition execute_SHIFTW (shamt : mword 5) (rs1 : mword 5) (rd : mword 5) (op : sop)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let rs1_val := subrange_vec_dec w__0 31 0 in
+ let result : bits 32 :=
+ match op with
+ | RISCV_SLLI => shift_bits_left rs1_val shamt
+ | RISCV_SRLI => shift_bits_right rs1_val shamt
+ | RISCV_SRAI => shift_right_arith32 rs1_val shamt
+ end in
+ (wX (projT1 (regbits_to_regno rd)) (EXTS 64 result)) >> returnm (true : bool).
+
+Definition execute_SHIFTIWOP (shamt : mword 5) (rs1 : mword 5) (rd : mword 5) (op : sopw)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ let result : xlenbits :=
+ match op with
+ | RISCV_SLLIW => EXTS 64 (shift_bits_left (subrange_vec_dec rs1_val 31 0) shamt)
+ | RISCV_SRLIW => EXTS 64 (shift_bits_right (subrange_vec_dec rs1_val 31 0) shamt)
+ | RISCV_SRAIW => EXTS 64 (shift_right_arith32 (subrange_vec_dec rs1_val 31 0) shamt)
+ end in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool).
+
+Definition execute_SHIFTIOP (shamt : mword 6) (rs1 : mword 5) (rd : mword 5) (op : sop)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ let result : xlenbits :=
+ match op with
+ | RISCV_SLLI => shift_bits_left rs1_val shamt
+ | RISCV_SRLI => shift_bits_right rs1_val shamt
+ | RISCV_SRAI => shift_right_arith64 rs1_val shamt
+ end in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool).
+
+Definition execute_SFENCE_VMA (rs1 : mword 5) (rs2 : mword 5)
+: M (bool) :=
+
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ (if ((eq_vec (privLevel_to_bits w__0) ((privLevel_to_bits User) : mword 2))) then
+ (handle_illegal tt) >> returnm (false : bool)
+ else
+ read_reg mstatus_ref >>= fun w__1 : Mstatus =>
+ read_reg mstatus_ref >>= fun w__2 : Mstatus =>
+ let p__15 := (architecture (_get_Mstatus_SXL w__1), _get_Mstatus_TVM w__2) in
+ (match p__15 with
+ | (Some (RV64), v_0) =>
+ (if ((eq_vec v_0 ((bool_to_bits true) : mword 1))) then
+ (handle_illegal tt) >> returnm (false : bool)
+ else if ((eq_vec v_0 ((bool_to_bits false) : mword 1))) then
+ (if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then
+ returnm (None
+ : option (mword 39))
+ else
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__3 : mword 64 =>
+ returnm ((Some
+ (subrange_vec_dec w__3 38 0))
+ : option (mword 39))) >>= fun addr : option vaddr39 =>
+ (if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then
+ returnm (None
+ : option (mword 16))
+ else
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun w__4 : mword 64 =>
+ returnm ((Some
+ (subrange_vec_dec w__4 15 0))
+ : option (mword 16))) >>= fun asid : option asid64 =>
+ (flushTLB asid addr) >> returnm (true : bool)
+ else
+ (match (Some
+ (RV64), v_0) with
+ | (g__13, g__14) => (internal_error "unimplemented sfence architecture") : M (bool)
+ end)
+ : M (bool))
+ : M (bool)
+ | (g__13, g__14) => (internal_error "unimplemented sfence architecture") : M (bool)
+ end)
+ : M (bool))
+ : M (bool).
+
+Definition execute_RTYPEW (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (op : ropw)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let rs1_val := subrange_vec_dec w__0 31 0 in
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun w__1 : mword 64 =>
+ let rs2_val := subrange_vec_dec w__1 31 0 in
+ let result : bits 32 :=
+ match op with
+ | RISCV_ADDW => add_vec rs1_val rs2_val
+ | RISCV_SUBW => sub_vec rs1_val rs2_val
+ | RISCV_SLLW => shift_bits_left rs1_val (subrange_vec_dec rs2_val 4 0)
+ | RISCV_SRLW => shift_bits_right rs1_val (subrange_vec_dec rs2_val 4 0)
+ | RISCV_SRAW => shift_right_arith32 rs1_val (subrange_vec_dec rs2_val 4 0)
+ end in
+ (wX (projT1 (regbits_to_regno rd)) (EXTS 64 result)) >> returnm (true : bool).
+
+Definition execute_RTYPE (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (op : rop)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ let result : xlenbits :=
+ match op with
+ | RISCV_ADD => add_vec rs1_val rs2_val
+ | RISCV_SUB => sub_vec rs1_val rs2_val
+ | RISCV_SLL => shift_bits_left rs1_val (subrange_vec_dec rs2_val 5 0)
+ | RISCV_SLT => EXTZ 64 (bool_to_bits (zopz0zI_s rs1_val rs2_val))
+ | RISCV_SLTU => EXTZ 64 (bool_to_bits (zopz0zI_u rs1_val rs2_val))
+ | RISCV_XOR => xor_vec rs1_val rs2_val
+ | RISCV_SRL => shift_bits_right rs1_val (subrange_vec_dec rs2_val 5 0)
+ | RISCV_SRA => shift_right_arith64 rs1_val (subrange_vec_dec rs2_val 5 0)
+ | RISCV_OR => or_vec rs1_val rs2_val
+ | RISCV_AND => and_vec rs1_val rs2_val
+ end in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool).
+
+Definition execute_RISCV_JALR (imm : mword 12) (rs1 : mword 5) (rd : mword 5)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let newPC : xlenbits :=
+ concat_vec (subrange_vec_dec (add_vec w__0 (EXTS 64 imm)) 63 1) (vec_of_bits [B0] : mword 1) in
+ (and_boolM ((bit_to_bool (access_vec_dec newPC 1)) : M (bool))
+ ((haveRVC tt) >>= fun w__2 : bool => returnm ((negb w__2) : bool))) >>= fun w__3 : bool =>
+ (if (w__3) then (handle_mem_exception newPC E_Fetch_Addr_Align) >> returnm (false : bool)
+ else
+ ((read_reg nextPC_ref) : M (mword 64)) >>= fun w__4 : xlenbits =>
+ (wX (projT1 (regbits_to_regno rd)) w__4) >>
+ write_reg nextPC_ref newPC >> returnm (true : bool))
+ : M (bool).
+
+Definition execute_RISCV_JAL (imm : mword 21) (rd : mword 5)
+: M (bool) :=
+
+ ((read_reg PC_ref) : M (mword 64)) >>= fun pc : xlenbits =>
+ let newPC : xlenbits := add_vec pc (EXTS 64 imm) in
+ (and_boolM ((bit_to_bool (access_vec_dec newPC 1)) : M (bool))
+ ((haveRVC tt) >>= fun w__1 : bool => returnm ((negb w__1) : bool))) >>= fun w__2 : bool =>
+ (if (w__2) then (handle_mem_exception newPC E_Fetch_Addr_Align) >> returnm (false : bool)
+ else
+ ((read_reg nextPC_ref) : M (mword 64)) >>= fun w__3 : xlenbits =>
+ (wX (projT1 (regbits_to_regno rd)) w__3) >>
+ write_reg nextPC_ref newPC >> returnm (true : bool))
+ : M (bool).
+
+Definition execute_REMW (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (s : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let rs1_val := subrange_vec_dec w__0 31 0 in
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun w__1 : mword 64 =>
+ let rs2_val := subrange_vec_dec w__1 31 0 in
+ let rs1_int : Z := if (s) then projT1 (sint rs1_val) else projT1 (uint rs1_val) in
+ let rs2_int : Z := if (s) then projT1 (sint rs2_val) else projT1 (uint rs2_val) in
+ let r : Z :=
+ if sumbool_of_bool ((Z.eqb rs2_int 0)) then rs1_int
+ else rem_round_zero rs1_int rs2_int in
+ (wX (projT1 (regbits_to_regno rd)) (EXTS 64 (to_bits 32 r))) >> returnm (true : bool).
+
+Definition execute_REM (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (s : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ let rs1_int : Z := if (s) then projT1 (sint rs1_val) else projT1 (uint rs1_val) in
+ let rs2_int : Z := if (s) then projT1 (sint rs2_val) else projT1 (uint rs2_val) in
+ let r : Z :=
+ if sumbool_of_bool ((Z.eqb rs2_int 0)) then rs1_int
+ else rem_round_zero rs1_int rs2_int in
+ (wX (projT1 (regbits_to_regno rd)) (to_bits xlen r)) >> returnm (true : bool).
+
+Definition execute_MULW (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let rs1_val := subrange_vec_dec w__0 31 0 in
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun w__1 : mword 64 =>
+ let rs2_val := subrange_vec_dec w__1 31 0 in
+ let rs1_int : Z := projT1 (sint rs1_val) in
+ let rs2_int : Z := projT1 (sint rs2_val) in
+ let result32 := subrange_vec_dec (to_bits 64 (Z.mul rs1_int rs2_int)) 31 0 in
+ let result : xlenbits := EXTS 64 result32 in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool).
+
+Definition execute_MUL
+(rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (high : bool) (signed1 : bool) (signed2 : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ let rs1_int : Z := if (signed1) then projT1 (sint rs1_val) else projT1 (uint rs1_val) in
+ let rs2_int : Z := if (signed2) then projT1 (sint rs2_val) else projT1 (uint rs2_val) in
+ let result128 := to_bits 128 (Z.mul rs1_int rs2_int) in
+ let result :=
+ if (high) then subrange_vec_dec result128 127 64
+ else subrange_vec_dec result128 63 0 in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool).
+
+Definition execute_MRET '(tt : unit)
+: M (bool) :=
+
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ (if ((eq_vec (privLevel_to_bits w__0) ((privLevel_to_bits Machine) : mword 2))) then
+ read_reg cur_privilege_ref >>= fun w__1 : Privilege =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : xlenbits =>
+ (handle_exception w__1 (CTL_MRET (tt)) w__2) >>= fun w__3 : mword 64 =>
+ write_reg nextPC_ref w__3
+ : M (unit)
+ else (handle_illegal tt) : M (unit)) >>
+ returnm (false
+ : bool).
+
+Definition execute_LOADRES
+(aq : bool) (rl : bool) (rs1 : mword 5) (width : word_width) (rd : mword 5)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun vaddr : xlenbits =>
+ (match width with
+ | BYTE => returnm (true : bool)
+ | HALF =>
+ (cast_unit_vec (access_vec_dec vaddr 0)) >>= fun w__0 : mword 1 =>
+ returnm ((eq_vec w__0 (vec_of_bits [B0] : mword 1))
+ : bool)
+ | WORD =>
+ returnm ((eq_vec (subrange_vec_dec vaddr 1 0) (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))
+ : bool)
+ | DOUBLE =>
+ returnm ((eq_vec (subrange_vec_dec vaddr 2 0) (vec_of_bits [B0;B0;B0] : mword (2 - 0 + 1)))
+ : bool)
+ end) >>= fun aligned : bool =>
+ (if ((negb aligned)) then
+ (handle_mem_exception vaddr E_Load_Addr_Align) >> returnm (false : bool)
+ else
+ (translateAddr vaddr Read Data) >>= fun w__1 : TR_Result =>
+ (match w__1 with
+ | TR_Failure (e) => (handle_mem_exception vaddr e) >> returnm (false : bool)
+ | TR_Address (addr) =>
+ (match width with
+ | WORD =>
+ (mem_read addr 4 aq rl true) >>= fun w__2 : MemoryOpResult (mword (8 * 4)) =>
+ (process_loadres rd vaddr w__2 false)
+ : M (bool)
+ | DOUBLE =>
+ (mem_read addr 8 aq rl true) >>= fun w__4 : MemoryOpResult (mword (8 * 8)) =>
+ (process_loadres rd vaddr w__4 false)
+ : M (bool)
+ | _ => (internal_error "LOADRES expected WORD or DOUBLE") : M (bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool))
+ : M (bool).
+
+Definition execute_LOAD
+(imm : mword 12) (rs1 : mword 5) (rd : mword 5) (is_unsigned : bool) (width : word_width)
+(aq : bool) (rl : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let vaddr : xlenbits := add_vec w__0 (EXTS 64 imm) in
+ (check_misaligned vaddr width) >>= fun w__1 : bool =>
+ (if (w__1) then (handle_mem_exception vaddr E_Load_Addr_Align) >> returnm (false : bool)
+ else
+ (translateAddr vaddr Read Data) >>= fun w__2 : TR_Result =>
+ (match w__2 with
+ | TR_Failure (e) => (handle_mem_exception vaddr e) >> returnm (false : bool)
+ | TR_Address (addr) =>
+ (match width with
+ | BYTE =>
+ (mem_read addr 1 aq rl false) >>= fun w__3 : MemoryOpResult (mword (8 * 1)) =>
+ (process_load rd vaddr w__3 is_unsigned)
+ : M (bool)
+ | HALF =>
+ (mem_read addr 2 aq rl false) >>= fun w__5 : MemoryOpResult (mword (8 * 2)) =>
+ (process_load rd vaddr w__5 is_unsigned)
+ : M (bool)
+ | WORD =>
+ (mem_read addr 4 aq rl false) >>= fun w__7 : MemoryOpResult (mword (8 * 4)) =>
+ (process_load rd vaddr w__7 is_unsigned)
+ : M (bool)
+ | DOUBLE =>
+ (mem_read addr 8 aq rl false) >>= fun w__9 : MemoryOpResult (mword (8 * 8)) =>
+ (process_load rd vaddr w__9 is_unsigned)
+ : M (bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool))
+ : M (bool).
+
+Definition execute_ITYPE (imm : mword 12) (rs1 : mword 5) (rd : mword 5) (op : iop)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ let immext : xlenbits := EXTS 64 imm in
+ let result : xlenbits :=
+ match op with
+ | RISCV_ADDI => add_vec rs1_val immext
+ | RISCV_SLTI => EXTZ 64 (bool_to_bits (zopz0zI_s rs1_val immext))
+ | RISCV_SLTIU => EXTZ 64 (bool_to_bits (zopz0zI_u rs1_val immext))
+ | RISCV_XORI => xor_vec rs1_val immext
+ | RISCV_ORI => or_vec rs1_val immext
+ | RISCV_ANDI => and_vec rs1_val immext
+ end in
+ (wX (projT1 (regbits_to_regno rd)) result) >> returnm (true : bool).
+
+Definition execute_ILLEGAL (s : mword 32)
+: M (bool) :=
+
+ (handle_illegal tt) >> returnm (false : bool).
+
+Definition execute_FENCE_TSO (pred : mword 4) (succ : mword 4)
+: M (bool) :=
+
+ (match (pred, succ) with
+ | (v__836, v__837) =>
+ (if ((andb (eq_vec (subrange_vec_dec v__836 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__837 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_tso tt)
+ : M (unit)
+ else
+ returnm ((if ((andb
+ (eq_vec (subrange_vec_dec v__836 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__837 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))) then
+ tt
+ else
+ let '_ := (print_endline "FIXME: unsupported fence") : unit in
+ tt)
+ : unit))
+ : M (unit)
+ end) >>
+ returnm (true
+ : bool).
+
+Definition execute_FENCEI '(tt : unit) : bool := true.
+
+Definition execute_FENCE (pred : mword 4) (succ : mword 4)
+: M (bool) :=
+
+ (match (pred, succ) with
+ | (v__796, v__797) =>
+ (if ((andb (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_rw_rw tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_r_rw tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_r_r tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_rw_w tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_w_w tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_w_rw tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_rw_r tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_r_w tt)
+ : M (unit)
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0) (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0) (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))))
+ then
+ (MEM_fence_w_r tt)
+ : M (unit)
+ else
+ returnm ((if ((andb
+ (eq_vec (subrange_vec_dec v__796 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__797 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))) then
+ tt
+ else
+ let '_ := (print_endline "FIXME: unsupported fence") : unit in
+ tt)
+ : unit))
+ : M (unit)
+ end) >>
+ returnm (true
+ : bool).
+
+Definition execute_ECALL '(tt : unit)
+: M (bool) :=
+
+ read_reg cur_privilege_ref >>= fun w__0 : Privilege =>
+ let t : sync_exception :=
+ {| sync_exception_trap :=
+ (match w__0 with
+ | User => E_U_EnvCall
+ | Supervisor => E_S_EnvCall
+ | Machine => E_M_EnvCall
+ end);
+ sync_exception_excinfo := (None : option xlenbits) |} in
+ read_reg cur_privilege_ref >>= fun w__1 : Privilege =>
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__2 : xlenbits =>
+ (handle_exception w__1 (CTL_TRAP (t)) w__2) >>= fun w__3 : mword 64 =>
+ write_reg nextPC_ref w__3 >> returnm (false : bool).
+
+Definition execute_EBREAK '(tt : unit)
+: M (bool) :=
+
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ (handle_mem_exception w__0 E_Breakpoint) >> returnm (false : bool).
+
+Definition execute_DIVW (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (s : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let rs1_val := subrange_vec_dec w__0 31 0 in
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun w__1 : mword 64 =>
+ let rs2_val := subrange_vec_dec w__1 31 0 in
+ let rs1_int : Z := if (s) then projT1 (sint rs1_val) else projT1 (uint rs1_val) in
+ let rs2_int : Z := if (s) then projT1 (sint rs2_val) else projT1 (uint rs2_val) in
+ let q : Z :=
+ if sumbool_of_bool ((Z.eqb rs2_int 0)) then (-1)
+ else quot_round_zero rs1_int rs2_int in
+ let q' : Z :=
+ if sumbool_of_bool ((andb s (Z.gtb q (Z.sub (projT1 (pow2 31)) 1)))) then Z.sub 0 (pow 2 31)
+ else q in
+ (wX (projT1 (regbits_to_regno rd)) (EXTS 64 (to_bits 32 q'))) >> returnm (true : bool).
+
+Definition execute_DIV (rs2 : mword 5) (rs1 : mword 5) (rd : mword 5) (s : bool)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ let rs1_int : Z := if (s) then projT1 (sint rs1_val) else projT1 (uint rs1_val) in
+ let rs2_int : Z := if (s) then projT1 (sint rs2_val) else projT1 (uint rs2_val) in
+ let q : Z :=
+ if sumbool_of_bool ((Z.eqb rs2_int 0)) then (-1)
+ else quot_round_zero rs1_int rs2_int in
+ let q' : Z := if sumbool_of_bool ((andb s (Z.gtb q xlen_max_signed))) then xlen_min_signed else q in
+ (wX (projT1 (regbits_to_regno rd)) (to_bits xlen q')) >> returnm (true : bool).
+
+Definition execute_C_NOP '(tt : unit) : bool := true.
+
+Definition execute_C_ILLEGAL (s : mword 16)
+: M (bool) :=
+
+ (handle_illegal tt) >> returnm (false : bool).
+
+Definition execute_C_ADDIW (imm : mword 6) (rsd : mword 5)
+: M (bool) :=
+
+ let imm : bits 32 := EXTS 32 imm in
+ (rX (projT1 (regbits_to_regno rsd))) >>= fun rs_val =>
+ let res : bits 32 := add_vec (subrange_vec_dec rs_val 31 0) imm in
+ (wX (projT1 (regbits_to_regno rsd)) (EXTS 64 res)) >> returnm (true : bool).
+
+Definition execute_CSR (csr : mword 12) (rs1 : mword 5) (rd : mword 5) (is_imm : bool) (op : csrop)
+: M (bool) :=
+
+ (if (is_imm) then returnm ((EXTZ 64 rs1) : mword 64)
+ else (rX (projT1 (regbits_to_regno rs1))) : M (mword 64)) >>= fun rs1_val : xlenbits =>
+ let isWrite : bool :=
+ match op with
+ | CSRRW => true
+ | _ => if (is_imm) then neq_int (projT1 (uint rs1_val)) 0 else neq_int (projT1 (uint rs1)) 0
+ end in
+ read_reg cur_privilege_ref >>= fun w__1 : Privilege =>
+ (check_CSR csr w__1 isWrite) >>= fun w__2 : bool =>
+ (if ((negb w__2)) then (handle_illegal tt) >> returnm (false : bool)
+ else
+ (readCSR csr) >>= fun csr_val =>
+ (if (isWrite) then
+ let new_val : xlenbits :=
+ match op with
+ | CSRRW => rs1_val
+ | CSRRS => or_vec csr_val rs1_val
+ | CSRRC => and_vec csr_val (not_vec rs1_val)
+ end in
+ (writeCSR csr new_val)
+ : M (unit)
+ else returnm (tt : unit)) >>
+ (wX (projT1 (regbits_to_regno rd)) csr_val) >> returnm (true : bool))
+ : M (bool).
+
+Definition execute_BTYPE (imm : mword 13) (rs2 : mword 5) (rs1 : mword 5) (op : bop)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun rs1_val =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val =>
+ let taken : bool :=
+ match op with
+ | RISCV_BEQ => eq_vec rs1_val rs2_val
+ | RISCV_BNE => neq_vec rs1_val rs2_val
+ | RISCV_BLT => zopz0zI_s rs1_val rs2_val
+ | RISCV_BGE => zopz0zKzJ_s rs1_val rs2_val
+ | RISCV_BLTU => zopz0zI_u rs1_val rs2_val
+ | RISCV_BGEU => zopz0zKzJ_u rs1_val rs2_val
+ end in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let newPC := add_vec w__0 (EXTS 64 imm) in
+ (if (taken) then
+ (and_boolM ((bit_to_bool (access_vec_dec newPC 1)) : M (bool))
+ ((haveRVC tt) >>= fun w__2 : bool => returnm ((negb w__2) : bool))) >>= fun w__3 : bool =>
+ (if (w__3) then (handle_mem_exception newPC E_Fetch_Addr_Align) >> returnm (false : bool)
+ else write_reg nextPC_ref newPC >> returnm (true : bool))
+ : M (bool)
+ else returnm (true : bool))
+ : M (bool).
+
+Definition execute_AMO
+(op : amoop) (aq : bool) (rl : bool) (rs2 : mword 5) (rs1 : mword 5) (width : word_width)
+(rd : mword 5)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun vaddr : xlenbits =>
+ (translateAddr vaddr ReadWrite Data) >>= fun w__0 : TR_Result =>
+ (match w__0 with
+ | TR_Failure (e) => (handle_mem_exception vaddr e) >> returnm (false : bool)
+ | TR_Address (addr) =>
+ (match width with
+ | WORD => (mem_write_ea addr 4 (andb aq rl) rl true) : M (MemoryOpResult unit)
+ | DOUBLE => (mem_write_ea addr 8 (andb aq rl) rl true) : M (MemoryOpResult unit)
+ | _ => (internal_error "AMO expected WORD or DOUBLE") : M (MemoryOpResult unit)
+ end) >>= fun eares : MemoryOpResult unit =>
+ (match eares with
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ | MemValue (_) =>
+ (match width with
+ | WORD =>
+ (mem_read addr 4 aq (andb aq rl) true) >>= fun w__4 : MemoryOpResult (mword (8 * 4)) =>
+ returnm ((extend_value false w__4)
+ : MemoryOpResult (mword 64))
+ | DOUBLE =>
+ (mem_read addr 8 aq (andb aq rl) true) >>= fun w__5 : MemoryOpResult (mword (8 * 8)) =>
+ returnm ((extend_value false w__5)
+ : MemoryOpResult (mword 64))
+ | _ => (internal_error "AMO expected WORD or DOUBLE") : M (MemoryOpResult (mword 64))
+ end) >>= fun rval : MemoryOpResult xlenbits =>
+ (match rval with
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ | MemValue (loaded) =>
+ (rX (projT1 (regbits_to_regno rs2))) >>= fun rs2_val : xlenbits =>
+ let result : xlenbits :=
+ match op with
+ | AMOSWAP => rs2_val
+ | AMOADD => add_vec rs2_val loaded
+ | AMOXOR => xor_vec rs2_val loaded
+ | AMOAND => and_vec rs2_val loaded
+ | AMOOR => or_vec rs2_val loaded
+ | AMOMIN => vector64 (Z.min (projT1 (sint rs2_val)) (projT1 (sint loaded)))
+ | AMOMAX => vector64 (Z.max (projT1 (sint rs2_val)) (projT1 (sint loaded)))
+ | AMOMINU =>
+ vector64 (projT1 (min_nat (projT1 (uint rs2_val)) (projT1 (uint loaded))))
+ | AMOMAXU =>
+ vector64 (projT1 (max_nat (projT1 (uint rs2_val)) (projT1 (uint loaded))))
+ end in
+ (match width with
+ | WORD =>
+ (mem_write_value addr 4 (subrange_vec_dec result 31 0) (andb aq rl) rl true)
+ : M (MemoryOpResult bool)
+ | DOUBLE =>
+ (mem_write_value addr 8 result (andb aq rl) rl true) : M (MemoryOpResult bool)
+ | _ => (internal_error "AMO expected WORD or DOUBLE") : M (MemoryOpResult bool)
+ end) >>= fun wval : MemoryOpResult bool =>
+ (match wval with
+ | MemValue (true) =>
+ (wX (projT1 (regbits_to_regno rd)) loaded) >> returnm (true : bool)
+ | MemValue (false) =>
+ (internal_error "AMO got false from mem_write_value") : M (bool)
+ | MemException (e) => (handle_mem_exception addr e) >> returnm (false : bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool)
+ end)
+ : M (bool).
+
+Definition execute_ADDIW (imm : mword 12) (rs1 : mword 5) (rd : mword 5)
+: M (bool) :=
+
+ (rX (projT1 (regbits_to_regno rs1))) >>= fun w__0 : mword 64 =>
+ let result : xlenbits := add_vec (EXTS 64 imm) w__0 in
+ (wX (projT1 (regbits_to_regno rd)) (EXTS 64 (subrange_vec_dec result 31 0))) >>
+ returnm (true
+ : bool).
+
+Definition compressed_measure (instr : ast)
+: Z :=
+
+ match instr with
+ | C_ADDI4SPN (rdc,nzimm) => 1
+ | C_LW (uimm,rsc,rdc) => 1
+ | C_LD (uimm,rsc,rdc) => 1
+ | C_SW (uimm,rsc1,rsc2) => 1
+ | C_SD (uimm,rsc1,rsc2) => 1
+ | C_ADDI (nzi,rsd) => 1
+ | C_JAL (imm) => 1
+ | C_LI (imm,rd) => 1
+ | C_ADDI16SP (imm) => 1
+ | C_LUI (imm,rd) => 1
+ | C_SRLI (shamt,rsd) => 1
+ | C_SRAI (shamt,rsd) => 1
+ | C_ANDI (imm,rsd) => 1
+ | C_SUB (rsd,rs2) => 1
+ | C_XOR (rsd,rs2) => 1
+ | C_OR (rsd,rs2) => 1
+ | C_AND (rsd,rs2) => 1
+ | C_SUBW (rsd,rs2) => 1
+ | C_ADDW (rsd,rs2) => 1
+ | C_J (imm) => 1
+ | C_BEQZ (imm,rs) => 1
+ | C_BNEZ (imm,rs) => 1
+ | C_SLLI (shamt,rsd) => 1
+ | C_LWSP (uimm,rd) => 1
+ | C_LDSP (uimm,rd) => 1
+ | C_SWSP (uimm,rs2) => 1
+ | C_SDSP (uimm,rs2) => 1
+ | C_JR (rs1) => 1
+ | C_JALR (rs1) => 1
+ | C_MV (rd,rs2) => 1
+ | C_EBREAK (tt') => 1
+ | C_ADD (rsd,rs2) => 1
+ | _ => 0
+ end.
+
+Fixpoint _rec_execute (merge_var : ast) (_reclimit : Z) (_acc : Acc (Zwf 0) _reclimit)
+{struct _acc} : M (bool) :=
+
+ assert_exp' (Z.geb _reclimit 0) "recursion limit reached" >>= fun _ =>
+ (match merge_var with
+ | C_ADDI4SPN (rdc,nzimm) =>
+ let imm : bits 12 :=
+ concat_vec (vec_of_bits [B0;B0] : mword 2)
+ (concat_vec nzimm (vec_of_bits [B0;B0] : mword 2)) in
+ let rd := creg2reg_bits rdc in
+ (_rec_execute (ITYPE ((imm, sp, rd, RISCV_ADDI))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_LW (uimm,rsc,rdc) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0] : mword 2)) in
+ let rd := creg2reg_bits rdc in
+ let rs := creg2reg_bits rsc in
+ (_rec_execute (LOAD ((imm, rs, rd, false, WORD, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_LD (uimm,rsc,rdc) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0;B0] : mword 3)) in
+ let rd := creg2reg_bits rdc in
+ let rs := creg2reg_bits rsc in
+ (_rec_execute (LOAD ((imm, rs, rd, false, DOUBLE, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_SW (uimm,rsc1,rsc2) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0] : mword 2)) in
+ let rs1 := creg2reg_bits rsc1 in
+ let rs2 := creg2reg_bits rsc2 in
+ (_rec_execute (STORE ((imm, rs2, rs1, WORD, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_SD (uimm,rsc1,rsc2) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0;B0] : mword 3)) in
+ let rs1 := creg2reg_bits rsc1 in
+ let rs2 := creg2reg_bits rsc2 in
+ (_rec_execute (STORE ((imm, rs2, rs1, DOUBLE, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_ADDI (nzi,rsd) =>
+ let imm : bits 12 := EXTS 12 nzi in
+ (_rec_execute (ITYPE ((imm, rsd, rsd, RISCV_ADDI))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_JAL (imm) =>
+ (_rec_execute (RISCV_JAL ((EXTS 21 (concat_vec imm (vec_of_bits [B0] : mword 1)), ra)))
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_LI (imm,rd) =>
+ let imm : bits 12 := EXTS 12 imm in
+ (_rec_execute (ITYPE ((imm, zreg, rd, RISCV_ADDI))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_ADDI16SP (imm) =>
+ let imm : bits 12 := EXTS 12 (concat_vec imm (vec_of_bits [B0;B0;B0;B0] : mword 4)) in
+ (_rec_execute (ITYPE ((imm, sp, sp, RISCV_ADDI))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_LUI (imm,rd) =>
+ let res : bits 20 := EXTS 20 imm in
+ (_rec_execute (UTYPE ((res, rd, RISCV_LUI))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_SRLI (shamt,rsd) =>
+ let rsd := creg2reg_bits rsd in
+ (_rec_execute (SHIFTIOP ((shamt, rsd, rsd, RISCV_SRLI))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_SRAI (shamt,rsd) =>
+ let rsd := creg2reg_bits rsd in
+ (_rec_execute (SHIFTIOP ((shamt, rsd, rsd, RISCV_SRAI))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_ANDI (imm,rsd) =>
+ let rsd := creg2reg_bits rsd in
+ (_rec_execute (ITYPE ((EXTS 12 imm, rsd, rsd, RISCV_ANDI))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_SUB (rsd,rs2) =>
+ let rsd := creg2reg_bits rsd in
+ let rs2 := creg2reg_bits rs2 in
+ (_rec_execute (RTYPE ((rs2, rsd, rsd, RISCV_SUB))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_XOR (rsd,rs2) =>
+ let rsd := creg2reg_bits rsd in
+ let rs2 := creg2reg_bits rs2 in
+ (_rec_execute (RTYPE ((rs2, rsd, rsd, RISCV_XOR))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_OR (rsd,rs2) =>
+ let rsd := creg2reg_bits rsd in
+ let rs2 := creg2reg_bits rs2 in
+ (_rec_execute (RTYPE ((rs2, rsd, rsd, RISCV_OR))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_AND (rsd,rs2) =>
+ let rsd := creg2reg_bits rsd in
+ let rs2 := creg2reg_bits rs2 in
+ (_rec_execute (RTYPE ((rs2, rsd, rsd, RISCV_AND))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_SUBW (rsd,rs2) =>
+ let rsd := creg2reg_bits rsd in
+ let rs2 := creg2reg_bits rs2 in
+ (_rec_execute (RTYPEW ((rs2, rsd, rsd, RISCV_SUBW))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_ADDW (rsd,rs2) =>
+ let rsd := creg2reg_bits rsd in
+ let rs2 := creg2reg_bits rs2 in
+ (_rec_execute (RTYPEW ((rs2, rsd, rsd, RISCV_ADDW))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_J (imm) =>
+ (_rec_execute (RISCV_JAL ((EXTS 21 (concat_vec imm (vec_of_bits [B0] : mword 1)), zreg)))
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_BEQZ (imm,rs) =>
+ (_rec_execute
+ (BTYPE
+ ((EXTS 13 (concat_vec imm (vec_of_bits [B0] : mword 1)), zreg, creg2reg_bits rs, RISCV_BEQ)))
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_BNEZ (imm,rs) =>
+ (_rec_execute
+ (BTYPE
+ ((EXTS 13 (concat_vec imm (vec_of_bits [B0] : mword 1)), zreg, creg2reg_bits rs, RISCV_BNE)))
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_SLLI (shamt,rsd) =>
+ (_rec_execute (SHIFTIOP ((shamt, rsd, rsd, RISCV_SLLI))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_LWSP (uimm,rd) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0] : mword 2)) in
+ (_rec_execute (LOAD ((imm, sp, rd, false, WORD, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_LDSP (uimm,rd) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0;B0] : mword 3)) in
+ (_rec_execute (LOAD ((imm, sp, rd, false, DOUBLE, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_SWSP (uimm,rs2) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0] : mword 2)) in
+ (_rec_execute (STORE ((imm, rs2, sp, WORD, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_SDSP (uimm,rs2) =>
+ let imm : bits 12 := EXTZ 12 (concat_vec uimm (vec_of_bits [B0;B0;B0] : mword 3)) in
+ (_rec_execute (STORE ((imm, rs2, sp, DOUBLE, false, false))) (Z.sub _reclimit 1)
+ (_limit_reduces _acc))
+ : M (bool)
+ | C_JR (rs1) =>
+ (_rec_execute (RISCV_JALR ((EXTZ 12 (vec_of_bits [B0] : mword 1), rs1, zreg)))
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_JALR (rs1) =>
+ (_rec_execute (RISCV_JALR ((EXTZ 12 (vec_of_bits [B0] : mword 1), rs1, ra)))
+ (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_MV (rd,rs2) =>
+ (_rec_execute (RTYPE ((rs2, zreg, rd, RISCV_ADD))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | C_EBREAK (tt) =>
+ (_rec_execute (EBREAK (tt)) (Z.sub _reclimit 1) (_limit_reduces _acc)) : M (bool)
+ | C_ADD (rsd,rs2) =>
+ (_rec_execute (RTYPE ((rs2, rsd, rsd, RISCV_ADD))) (Z.sub _reclimit 1) (_limit_reduces _acc))
+ : M (bool)
+ | UTYPE (imm,rd,op) => (execute_UTYPE imm rd op) : M (bool)
+ | RISCV_JAL (imm,rd) => (execute_RISCV_JAL imm rd) : M (bool)
+ | BTYPE (imm,rs2,rs1,op) => (execute_BTYPE imm rs2 rs1 op) : M (bool)
+ | ITYPE (imm,rs1,rd,op) => (execute_ITYPE imm rs1 rd op) : M (bool)
+ | SHIFTIOP (shamt,rs1,rd,op) => (execute_SHIFTIOP shamt rs1 rd op) : M (bool)
+ | RTYPE (rs2,rs1,rd,op) => (execute_RTYPE rs2 rs1 rd op) : M (bool)
+ | LOAD (imm,rs1,rd,is_unsigned,width,aq,rl) =>
+ (execute_LOAD imm rs1 rd is_unsigned width aq rl) : M (bool)
+ | STORE (imm,rs2,rs1,width,aq,rl) => (execute_STORE imm rs2 rs1 width aq rl) : M (bool)
+ | ADDIW (imm,rs1,rd) => (execute_ADDIW imm rs1 rd) : M (bool)
+ | SHIFTW (shamt,rs1,rd,op) => (execute_SHIFTW shamt rs1 rd op) : M (bool)
+ | RTYPEW (rs2,rs1,rd,op) => (execute_RTYPEW rs2 rs1 rd op) : M (bool)
+ | SHIFTIWOP (shamt,rs1,rd,op) => (execute_SHIFTIWOP shamt rs1 rd op) : M (bool)
+ | MUL (rs2,rs1,rd,high,signed1,signed2) =>
+ (execute_MUL rs2 rs1 rd high signed1 signed2) : M (bool)
+ | DIV (rs2,rs1,rd,s) => (execute_DIV rs2 rs1 rd s) : M (bool)
+ | REM (rs2,rs1,rd,s) => (execute_REM rs2 rs1 rd s) : M (bool)
+ | MULW (rs2,rs1,rd) => (execute_MULW rs2 rs1 rd) : M (bool)
+ | DIVW (rs2,rs1,rd,s) => (execute_DIVW rs2 rs1 rd s) : M (bool)
+ | REMW (rs2,rs1,rd,s) => (execute_REMW rs2 rs1 rd s) : M (bool)
+ | FENCE (pred,succ) => (execute_FENCE pred succ) : M (bool)
+ | FENCE_TSO (pred,succ) => (execute_FENCE_TSO pred succ) : M (bool)
+ | FENCEI (arg0) => returnm ((execute_FENCEI arg0) : bool)
+ | ECALL (arg0) => (execute_ECALL arg0) : M (bool)
+ | MRET (arg0) => (execute_MRET arg0) : M (bool)
+ | SRET (arg0) => (execute_SRET arg0) : M (bool)
+ | EBREAK (arg0) => (execute_EBREAK arg0) : M (bool)
+ | WFI (arg0) => (execute_WFI arg0) : M (bool)
+ | SFENCE_VMA (rs1,rs2) => (execute_SFENCE_VMA rs1 rs2) : M (bool)
+ | LOADRES (aq,rl,rs1,width,rd) => (execute_LOADRES aq rl rs1 width rd) : M (bool)
+ | STORECON (aq,rl,rs2,rs1,width,rd) => (execute_STORECON aq rl rs2 rs1 width rd) : M (bool)
+ | AMO (op,aq,rl,rs2,rs1,width,rd) => (execute_AMO op aq rl rs2 rs1 width rd) : M (bool)
+ | CSR (csr,rs1,rd,is_imm,op) => (execute_CSR csr rs1 rd is_imm op) : M (bool)
+ | C_NOP (arg0) => returnm ((execute_C_NOP arg0) : bool)
+ | C_ADDIW (imm,rsd) => (execute_C_ADDIW imm rsd) : M (bool)
+ | STOP_FETCHING (arg0) => returnm ((execute_STOP_FETCHING arg0) : bool)
+ | THREAD_START (arg0) => returnm ((execute_THREAD_START arg0) : bool)
+ | ILLEGAL (s) => (execute_ILLEGAL s) : M (bool)
+ | C_ILLEGAL (s) => (execute_C_ILLEGAL s) : M (bool)
+ | RISCV_JALR (imm,rs1,rd) => (execute_RISCV_JALR imm rs1 rd) : M (bool)
+ end)
+ : M (bool).
+
+Definition execute (i : ast)
+: M (bool) :=
+
+ (_rec_execute i ((compressed_measure i) : Z) (Zwf_guarded _))
+ : M (bool).
+
+Definition print_insn (insn : ast) : M (string) := (assembly_forwards insn) : M (string).
+
+Definition decode (bv : mword 32) : option ast := Some (encdec_backwards bv).
+
+Definition decodeCompressed (bv : mword 16) : option ast := Some (encdec_compressed_backwards bv).
+
+Definition read_kind_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 11)}
+: read_kind :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Read_plain
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Read_reserve
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then Read_acquire
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then Read_exclusive
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then Read_exclusive_acquire
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then Read_stream
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then Read_RISCV_acquire
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then Read_RISCV_strong_acquire
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then Read_RISCV_reserved
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then Read_RISCV_reserved_acquire
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then Read_RISCV_reserved_strong_acquire
+ else Read_X86_locked.
+
+Definition num_of_read_kind (arg_ : read_kind)
+: {e : Z & ArithFact (0 <= e /\ e <= 11)} :=
+
+ build_ex(match arg_ with
+ | Read_plain => 0
+ | Read_reserve => 1
+ | Read_acquire => 2
+ | Read_exclusive => 3
+ | Read_exclusive_acquire => 4
+ | Read_stream => 5
+ | Read_RISCV_acquire => 6
+ | Read_RISCV_strong_acquire => 7
+ | Read_RISCV_reserved => 8
+ | Read_RISCV_reserved_acquire => 9
+ | Read_RISCV_reserved_strong_acquire => 10
+ | Read_X86_locked => 11
+ end).
+
+Definition write_kind_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 10)}
+: write_kind :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Write_plain
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Write_conditional
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then Write_release
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then Write_exclusive
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then Write_exclusive_release
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then Write_RISCV_release
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then Write_RISCV_strong_release
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then Write_RISCV_conditional
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then Write_RISCV_conditional_release
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then Write_RISCV_conditional_strong_release
+ else Write_X86_locked.
+
+Definition num_of_write_kind (arg_ : write_kind)
+: {e : Z & ArithFact (0 <= e /\ e <= 10)} :=
+
+ build_ex(match arg_ with
+ | Write_plain => 0
+ | Write_conditional => 1
+ | Write_release => 2
+ | Write_exclusive => 3
+ | Write_exclusive_release => 4
+ | Write_RISCV_release => 5
+ | Write_RISCV_strong_release => 6
+ | Write_RISCV_conditional => 7
+ | Write_RISCV_conditional_release => 8
+ | Write_RISCV_conditional_strong_release => 9
+ | Write_X86_locked => 10
+ end).
+
+Definition barrier_kind_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 23)}
+: barrier_kind :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Barrier_Sync
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Barrier_LwSync
+ else if sumbool_of_bool ((Z.eqb p0_ 2)) then Barrier_Eieio
+ else if sumbool_of_bool ((Z.eqb p0_ 3)) then Barrier_Isync
+ else if sumbool_of_bool ((Z.eqb p0_ 4)) then Barrier_DMB
+ else if sumbool_of_bool ((Z.eqb p0_ 5)) then Barrier_DMB_ST
+ else if sumbool_of_bool ((Z.eqb p0_ 6)) then Barrier_DMB_LD
+ else if sumbool_of_bool ((Z.eqb p0_ 7)) then Barrier_DSB
+ else if sumbool_of_bool ((Z.eqb p0_ 8)) then Barrier_DSB_ST
+ else if sumbool_of_bool ((Z.eqb p0_ 9)) then Barrier_DSB_LD
+ else if sumbool_of_bool ((Z.eqb p0_ 10)) then Barrier_ISB
+ else if sumbool_of_bool ((Z.eqb p0_ 11)) then Barrier_MIPS_SYNC
+ else if sumbool_of_bool ((Z.eqb p0_ 12)) then Barrier_RISCV_rw_rw
+ else if sumbool_of_bool ((Z.eqb p0_ 13)) then Barrier_RISCV_r_rw
+ else if sumbool_of_bool ((Z.eqb p0_ 14)) then Barrier_RISCV_r_r
+ else if sumbool_of_bool ((Z.eqb p0_ 15)) then Barrier_RISCV_rw_w
+ else if sumbool_of_bool ((Z.eqb p0_ 16)) then Barrier_RISCV_w_w
+ else if sumbool_of_bool ((Z.eqb p0_ 17)) then Barrier_RISCV_w_rw
+ else if sumbool_of_bool ((Z.eqb p0_ 18)) then Barrier_RISCV_rw_r
+ else if sumbool_of_bool ((Z.eqb p0_ 19)) then Barrier_RISCV_r_w
+ else if sumbool_of_bool ((Z.eqb p0_ 20)) then Barrier_RISCV_w_r
+ else if sumbool_of_bool ((Z.eqb p0_ 21)) then Barrier_RISCV_tso
+ else if sumbool_of_bool ((Z.eqb p0_ 22)) then Barrier_RISCV_i
+ else Barrier_x86_MFENCE.
+
+Definition num_of_barrier_kind (arg_ : barrier_kind)
+: {e : Z & ArithFact (0 <= e /\ e <= 23)} :=
+
+ build_ex(match arg_ with
+ | Barrier_Sync => 0
+ | Barrier_LwSync => 1
+ | Barrier_Eieio => 2
+ | Barrier_Isync => 3
+ | Barrier_DMB => 4
+ | Barrier_DMB_ST => 5
+ | Barrier_DMB_LD => 6
+ | Barrier_DSB => 7
+ | Barrier_DSB_ST => 8
+ | Barrier_DSB_LD => 9
+ | Barrier_ISB => 10
+ | Barrier_MIPS_SYNC => 11
+ | Barrier_RISCV_rw_rw => 12
+ | Barrier_RISCV_r_rw => 13
+ | Barrier_RISCV_r_r => 14
+ | Barrier_RISCV_rw_w => 15
+ | Barrier_RISCV_w_w => 16
+ | Barrier_RISCV_w_rw => 17
+ | Barrier_RISCV_rw_r => 18
+ | Barrier_RISCV_r_w => 19
+ | Barrier_RISCV_w_r => 20
+ | Barrier_RISCV_tso => 21
+ | Barrier_RISCV_i => 22
+ | Barrier_x86_MFENCE => 23
+ end).
+
+Definition trans_kind_of_num (arg_ : Z) `{ArithFact (0 <= arg_ /\ arg_ <= 2)}
+: trans_kind :=
+
+ let p0_ := arg_ in
+ if sumbool_of_bool ((Z.eqb p0_ 0)) then Transaction_start
+ else if sumbool_of_bool ((Z.eqb p0_ 1)) then Transaction_commit
+ else Transaction_abort.
+
+Definition num_of_trans_kind (arg_ : trans_kind)
+: {e : Z & ArithFact (0 <= e /\ e <= 2)} :=
+
+ build_ex(match arg_ with
+ | Transaction_start => 0
+ | Transaction_commit => 1
+ | Transaction_abort => 2
+ end).
+
+Definition GPRstr : vec string 32 :=
+vec_of_list_len ["x31";"x30";"x29";"x28";"x27";"x26";"x25";"x24";"x23";"x22";"x21";"x20";"x19";"x18";"x17";"x16";"x15";"x14";"x13";"x12";"x11";
+ "x10";"x9";"x8";"x7";"x6";"x5";"x4";"x3";"x2";"x1";"x0"].
+Hint Unfold GPRstr : sail.
+Definition CIA_fp := RFull ("CIA").
+Hint Unfold CIA_fp : sail.
+Definition NIA_fp := RFull ("NIA").
+Hint Unfold NIA_fp : sail.
+Definition initial_analysis (instr : ast)
+: M ((list regfp * list regfp * list regfp * list niafp * diafp * instruction_kind)) :=
+
+ let iR := [] : regfps in
+ let oR := [] : regfps in
+ let aR := [] : regfps in
+ let ik := (IK_simple (tt)) : instruction_kind in
+ let Nias := [NIAFP_successor (tt)] : niafps in
+ let Dia := (DIAFP_none (tt)) : diafp in
+ (match instr with
+ | EBREAK (tt) => returnm (Nias, aR, iR, ik, oR)
+ | UTYPE (imm,rd,op) =>
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | RISCV_JAL (imm,rd) =>
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ let offset : bits 64 := EXTS 64 imm in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__0 : xlenbits =>
+ let Nias : niafps := [NIAFP_concrete_address (add_vec w__0 offset)] in
+ let ik : instruction_kind := IK_branch (tt) in
+ returnm (Nias, aR, iR, ik, oR)
+ | RISCV_JALR (imm,rs,rd) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ let offset : bits 64 := EXTS 64 imm in
+ let Nias : niafps := [NIAFP_indirect_address (tt)] in
+ let ik : instruction_kind := IK_branch (tt) in
+ returnm (Nias, aR, iR, ik, oR)
+ | BTYPE (imm,rs2,rs1,op) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs2)))) :: iR in
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let ik := (IK_branch (tt)) : instruction_kind in
+ let offset : bits 64 := EXTS 64 imm in
+ ((read_reg PC_ref) : M (mword 64)) >>= fun w__1 : xlenbits =>
+ let Nias : niafps := [NIAFP_concrete_address (add_vec w__1 offset);NIAFP_successor (tt)] in
+ returnm (Nias, aR, iR, ik, oR)
+ | ITYPE (imm,rs,rd,op) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | SHIFTIOP (imm,rs,rd,op) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | RTYPE (rs2,rs1,rd,op) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs2)))) :: iR in
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | CSR (csr,rs1,rd,is_imm,op) =>
+ let isWrite : bool :=
+ match op with
+ | CSRRW => true
+ | _ => if (is_imm) then neq_int (projT1 (uint rs1)) 0 else neq_int (projT1 (uint rs1)) 0
+ end in
+ let iR : regfps := (RFull (csr_name csr)) :: iR in
+ let iR : regfps :=
+ if ((negb is_imm)) then
+ (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR
+ else iR in
+ let oR : regfps := if (isWrite) then (RFull (csr_name csr)) :: oR else oR in
+ let oR : regfps := (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | LOAD (imm,rs,rd,unsign,width,aq,rl) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ let aR := iR : regfps in
+ (match (aq, rl) with
+ | (false, false) => returnm ((IK_mem_read (Read_plain)) : instruction_kind )
+ | (true, false) => returnm ((IK_mem_read (Read_RISCV_acquire)) : instruction_kind )
+ | (true, true) => returnm ((IK_mem_read (Read_RISCV_strong_acquire)) : instruction_kind )
+ | _ =>
+ (internal_error "LOAD type not implemented in initial_analysis") : M (instruction_kind)
+ end) >>= fun w__3 : instruction_kind =>
+ let ik : instruction_kind := w__3 in
+ returnm (Nias, aR, iR, ik, oR)
+ | STORE (imm,rs2,rs1,width,aq,rl) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs2)))) :: iR in
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let aR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then aR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: aR in
+ (match (aq, rl) with
+ | (false, false) => returnm ((IK_mem_write (Write_plain)) : instruction_kind )
+ | (false, true) => returnm ((IK_mem_write (Write_RISCV_release)) : instruction_kind )
+ | (true, true) => returnm ((IK_mem_write (Write_RISCV_strong_release)) : instruction_kind )
+ | _ =>
+ (internal_error "STORE type not implemented in initial_analysis") : M (instruction_kind)
+ end) >>= fun w__5 : instruction_kind =>
+ let ik : instruction_kind := w__5 in
+ returnm (Nias, aR, iR, ik, oR)
+ | ADDIW (imm,rs,rd) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | SHIFTW (imm,rs,rd,op) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | RTYPEW (rs2,rs1,rd,op) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs2)))) :: iR in
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ returnm (Nias, aR, iR, ik, oR)
+ | FENCE (pred,succ) =>
+ (match (pred, succ) with
+ | (v__844, v__845) =>
+ (if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))))
+ then
+ returnm ((IK_barrier
+ (Barrier_RISCV_rw_rw))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B1;B1] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_r_rw))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_r_r))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_rw_w))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_w_w))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B1;B1] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_w_rw))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_rw_r))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B1;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_r_w))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B0;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B1;B0] : mword (1 - 0 + 1))))) then
+ returnm ((IK_barrier
+ (Barrier_RISCV_w_r))
+ : instruction_kind )
+ else if ((andb
+ (eq_vec (subrange_vec_dec v__844 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__845 1 0)
+ (vec_of_bits [B0;B0] : mword (1 - 0 + 1))))) then
+ returnm ((IK_simple
+ (tt))
+ : instruction_kind )
+ else
+ (internal_error "barrier type not implemented in initial_analysis")
+ : M (instruction_kind))
+ : M (instruction_kind)
+ end) >>= fun w__17 : instruction_kind =>
+ let ik : instruction_kind := w__17 in
+ returnm (Nias, aR, iR, ik, oR)
+ | FENCE_TSO (pred,succ) =>
+ (match (pred, succ) with
+ | (v__884, v__885) =>
+ (if ((andb
+ (eq_vec (subrange_vec_dec v__884 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))
+ (eq_vec (subrange_vec_dec v__885 1 0) (vec_of_bits [B1;B1] : mword (1 - 0 + 1)))))
+ then
+ returnm ((IK_barrier
+ (Barrier_RISCV_tso))
+ : instruction_kind )
+ else
+ (internal_error "barrier type not implemented in initial_analysis")
+ : M (instruction_kind))
+ : M (instruction_kind)
+ end) >>= fun w__20 : instruction_kind =>
+ let ik : instruction_kind := w__20 in
+ returnm (Nias, aR, iR, ik, oR)
+ | FENCEI (tt) =>
+ let ik : instruction_kind := IK_simple (tt) in
+ returnm (Nias, aR, iR, ik, oR)
+ | LOADRES (aq,rl,rs1,width,rd) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ let aR := iR : regfps in
+ (match (aq, rl) with
+ | (false, false) => returnm ((IK_mem_read (Read_RISCV_reserved)) : instruction_kind )
+ | (true, false) =>
+ returnm ((IK_mem_read (Read_RISCV_reserved_acquire)) : instruction_kind )
+ | (true, true) =>
+ returnm ((IK_mem_read (Read_RISCV_reserved_strong_acquire)) : instruction_kind )
+ | (false, true) =>
+ (internal_error "LOADRES type not implemented in initial_analysis")
+ : M (instruction_kind)
+ end) >>= fun w__22 : instruction_kind =>
+ let ik : instruction_kind := w__22 in
+ returnm (Nias, aR, iR, ik, oR)
+ | STORECON (aq,rl,rs2,rs1,width,rd) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs2)))) :: iR in
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let aR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then aR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: aR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ (match (aq, rl) with
+ | (false, false) => returnm ((IK_mem_write (Write_RISCV_conditional)) : instruction_kind )
+ | (false, true) =>
+ returnm ((IK_mem_write (Write_RISCV_conditional_release)) : instruction_kind )
+ | (true, true) =>
+ returnm ((IK_mem_write (Write_RISCV_conditional_strong_release)) : instruction_kind )
+ | (true, false) =>
+ (internal_error "STORECON type not implemented in initial_analysis")
+ : M (instruction_kind)
+ end) >>= fun w__24 : instruction_kind =>
+ let ik : instruction_kind := w__24 in
+ returnm (Nias, aR, iR, ik, oR)
+ | AMO (op,aq,rl,rs2,rs1,width,rd) =>
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs2)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs2)))) :: iR in
+ let iR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then iR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: iR in
+ let aR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rs1)) 0)) then aR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rs1)))) :: aR in
+ let oR : regfps :=
+ if sumbool_of_bool ((Z.eqb (projT1 (regbits_to_regno rd)) 0)) then oR
+ else (RFull (vec_access_dec GPRstr (projT1 (regbits_to_regno rd)))) :: oR in
+ let ik : instruction_kind :=
+ match (aq, rl) with
+ | (false, false) => IK_mem_rmw ((Read_RISCV_reserved, Write_RISCV_conditional))
+ | (false, true) => IK_mem_rmw ((Read_RISCV_reserved, Write_RISCV_conditional_release))
+ | (true, false) => IK_mem_rmw ((Read_RISCV_reserved_acquire, Write_RISCV_conditional))
+ | (true, true) =>
+ IK_mem_rmw ((Read_RISCV_reserved_acquire, Write_RISCV_conditional_release))
+ end in
+ returnm (Nias, aR, iR, ik, oR)
+ | _ => returnm (Nias, aR, iR, ik, oR)
+ end) >>= fun '(Nias, aR, iR, ik, oR) =>
+ returnm (iR, oR, aR, Nias, Dia, ik).
+
+Definition initial_regstate : regstate :=
+{| tlb39 := None;
+ htif_exit_code :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ htif_done := false;
+ htif_tohost :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mtimecmp :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ tselect :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ stval :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ scause :=
+ ({| Mcause_Mcause_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ sepc :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ sscratch :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ stvec :=
+ ({| Mtvec_Mtvec_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ satp :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ sideleg :=
+ ({| Sinterrupts_Sinterrupts_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ sedeleg :=
+ ({| Sedeleg_Sedeleg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ pmpcfg0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ pmpaddr0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mhartid :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ marchid :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mimpid :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mvendorid :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ minstret_written := false;
+ minstret :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mtime :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mcycle :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ scounteren :=
+ ({| Counteren_Counteren_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32) |});
+ mcounteren :=
+ ({| Counteren_Counteren_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0]
+ : mword 32) |});
+ mscratch :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mtval :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mepc :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ mcause :=
+ ({| Mcause_Mcause_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ mtvec :=
+ ({| Mtvec_Mtvec_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ medeleg :=
+ ({| Medeleg_Medeleg_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ mideleg :=
+ ({| Minterrupts_Minterrupts_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ mie :=
+ ({| Minterrupts_Minterrupts_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ mip :=
+ ({| Minterrupts_Minterrupts_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ mstatus :=
+ ({| Mstatus_Mstatus_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ misa :=
+ ({| Misa_Misa_chunk_0 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |});
+ cur_inst :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ cur_privilege := User;
+ x31 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x30 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x29 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x28 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x27 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x26 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x25 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x24 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x23 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x22 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x21 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x20 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x19 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x18 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x17 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x16 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x15 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x14 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x13 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x12 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x11 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x10 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x9 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x8 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x7 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x6 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x5 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x4 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x3 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x2 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ x1 :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ Xs :=
+ (vec_of_list_len [(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);(vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64)]);
+ instbits :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ nextPC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64);
+ PC :=
+ (vec_of_bits [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0]
+ : mword 64) |}.
+Hint Unfold initial_regstate : sail.
+
+End Content.
diff --git a/snapshots/coq/riscv/riscv_extras.v b/snapshots/coq/riscv/riscv_extras.v
new file mode 100644
index 00000000..ff235a98
--- /dev/null
+++ b/snapshots/coq/riscv/riscv_extras.v
@@ -0,0 +1,145 @@
+Require Import Sail2_instr_kinds.
+Require Import Sail2_values.
+Require Import Sail2_operators_mwords.
+Require Import Sail2_prompt_monad.
+Require Import Sail2_prompt.
+Require Import String.
+Require Import List.
+Import List.ListNotations.
+
+Axiom real : Type.
+
+Definition MEM_fence_rw_rw {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_rw_rw.
+Definition MEM_fence_r_rw {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_r_rw.
+Definition MEM_fence_r_r {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_r_r.
+Definition MEM_fence_rw_w {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_rw_w.
+Definition MEM_fence_w_w {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_w_w.
+Definition MEM_fence_w_rw {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_w_rw.
+Definition MEM_fence_rw_r {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_rw_r.
+Definition MEM_fence_r_w {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_r_w.
+Definition MEM_fence_w_r {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_w_r.
+Definition MEM_fence_tso {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_tso.
+Definition MEM_fence_i {rv e} (_:unit) : monad rv unit e := barrier Barrier_RISCV_i.
+(*
+val MEMea : forall 'rv 'a 'e. Size 'a => bitvector 'a -> integer -> monad 'rv unit 'e
+val MEMea_release : forall 'rv 'a 'e. Size 'a => bitvector 'a -> integer -> monad 'rv unit 'e
+val MEMea_strong_release : forall 'rv 'a 'e. Size 'a => bitvector 'a -> integer -> monad 'rv unit 'e
+val MEMea_conditional : forall 'rv 'a 'e. Size 'a => bitvector 'a -> integer -> monad 'rv unit 'e
+val MEMea_conditional_release : forall 'rv 'a 'e. Size 'a => bitvector 'a -> integer -> monad 'rv unit 'e
+val MEMea_conditional_strong_release : forall 'rv 'a 'e. Size 'a => bitvector 'a -> integer -> monad 'rv unit 'e
+*)
+Definition MEMea {rv a e} (addr : mword a) size : monad rv unit e := write_mem_ea Write_plain addr size.
+Definition MEMea_release {rv a e} (addr : mword a) size : monad rv unit e := write_mem_ea Write_RISCV_release addr size.
+Definition MEMea_strong_release {rv a e} (addr : mword a) size : monad rv unit e := write_mem_ea Write_RISCV_strong_release addr size.
+Definition MEMea_conditional {rv a e} (addr : mword a) size : monad rv unit e := write_mem_ea Write_RISCV_conditional addr size.
+Definition MEMea_conditional_release {rv a e} (addr : mword a) size : monad rv unit e := write_mem_ea Write_RISCV_conditional_release addr size.
+Definition MEMea_conditional_strong_release {rv a e} (addr : mword a) size : monad rv unit e
+ := write_mem_ea Write_RISCV_conditional_strong_release addr size.
+
+
+(* Some wrappers copied from aarch64_extras *)
+(* TODO: Harmonise into a common library *)
+(*
+Definition get_slice_int_bl len n lo :=
+ (* TODO: Is this the intended behaviour? *)
+ let hi := lo + len - 1 in
+ let bs := bools_of_int (hi + 1) n in
+ subrange_list false bs hi lo
+
+val get_slice_int : forall 'a. Bitvector 'a => integer -> integer -> integer -> 'a
+Definition get_slice_int len n lo := of_bools (get_slice_int_bl len n lo)
+*)
+Definition write_ram {rv e} m size (hexRAM : mword m) (addr : mword m) (data : mword (8 * size)) : monad rv bool e :=
+ write_mem_val data.
+
+Definition read_ram {rv e} m size `{ArithFact (size >= 0)} (_ : mword m) (addr : mword m) : monad rv (mword (8 * size)) e :=
+ read_mem Read_plain addr size.
+(*
+Definition string_of_bits bs := string_of_bv (bits_of bs).
+Definition string_of_int := show
+
+Definition _sign_extend bits len := maybe_failwith (of_bits (exts_bv len bits))
+Definition _zero_extend bits len := maybe_failwith (of_bits (extz_bv len bits))
+*)
+Definition shift_bits_left {a b} (v : mword a) (n : mword b) : mword a :=
+ shiftl v (int_of_mword false n).
+
+Definition shift_bits_right {a b} (v : mword a) (n : mword b) : mword a :=
+ shiftr v (int_of_mword false n).
+
+Definition shift_bits_right_arith {a b} (v : mword a) (n : mword b) : mword a :=
+ arith_shiftr v (int_of_mword false n).
+
+(* Use constants for undefined values for now *)
+Definition internal_pick {rv a e} (vs : list a) : monad rv a e :=
+match vs with
+| (h::_) => returnm h
+| _ => Fail "empty list in internal_pick"
+end.
+Definition undefined_string {rv e} (_:unit) : monad rv string e := returnm ""%string.
+Definition undefined_unit {rv e} (_:unit) : monad rv unit e := returnm tt.
+Definition undefined_int {rv e} (_:unit) : monad rv Z e := returnm (0:ii).
+(*val undefined_vector : forall 'rv 'a 'e. integer -> 'a -> monad 'rv (list 'a) 'e*)
+Definition undefined_vector {rv a e} len (u : a) `{ArithFact (len >= 0)} : monad rv (vec a len) e := returnm (vec_init u len).
+(*val undefined_bitvector : forall 'rv 'a 'e. Bitvector 'a => integer -> monad 'rv 'a 'e*)
+Definition undefined_bitvector {rv e} len `{ArithFact (len >= 0)} : monad rv (mword len) e := returnm (mword_of_int 0).
+(*val undefined_bits : forall 'rv 'a 'e. Bitvector 'a => integer -> monad 'rv 'a 'e*)
+Definition undefined_bits {rv e} := @undefined_bitvector rv e.
+Definition undefined_bit {rv e} (_:unit) : monad rv bitU e := returnm BU.
+(*Definition undefined_real {rv e} (_:unit) : monad rv real e := returnm (realFromFrac 0 1).*)
+Definition undefined_range {rv e} i j `{ArithFact (i <= j)} : monad rv {z : Z & ArithFact (i <= z /\ z <= j)} e := returnm (build_ex i).
+Definition undefined_atom {rv e} i : monad rv Z e := returnm i.
+Definition undefined_nat {rv e} (_:unit) : monad rv Z e := returnm (0:ii).
+
+Definition skip {rv e} (_:unit) : monad rv unit e := returnm tt.
+
+(*val elf_entry : unit -> integer*)
+Definition elf_entry (_:unit) : Z := 0.
+(*declare ocaml target_rep function elf_entry := `Elf_loader.elf_entry`*)
+
+Definition print_bits {n} msg (bs : mword n) := prerr_endline (msg ++ (string_of_bits bs)).
+
+(*val get_time_ns : unit -> integer*)
+Definition get_time_ns (_:unit) : Z := 0.
+(*declare ocaml target_rep function get_time_ns := `(fun () -> Big_int.of_int (int_of_float (1e9 *. Unix.gettimeofday ())))`*)
+
+Definition eq_bit (x : bitU) (y : bitU) : bool :=
+ match x, y with
+ | B0, B0 => true
+ | B1, B1 => true
+ | BU, BU => true
+ | _,_ => false
+ end.
+
+Require Import Zeuclid.
+Definition euclid_modulo (m n : Z) `{ArithFact (n > 0)} : {z : Z & ArithFact (0 <= z <= n-1)}.
+apply existT with (x := ZEuclid.modulo m n).
+constructor.
+destruct H.
+assert (Z.abs n = n). { rewrite Z.abs_eq; auto with zarith. }
+rewrite <- H at 3.
+lapply (ZEuclid.mod_always_pos m n); omega.
+Qed.
+
+(* Override the more general version *)
+
+Definition mults_vec {n} (l : mword n) (r : mword n) : mword (2 * n) := mults_vec l r.
+Definition mult_vec {n} (l : mword n) (r : mword n) : mword (2 * n) := mult_vec l r.
+
+
+Definition print_endline (_:string) : unit := tt.
+Definition prerr_endline (_:string) : unit := tt.
+Definition prerr_string (_:string) : unit := tt.
+Definition putchar {T} (_:T) : unit := tt.
+Require DecimalString.
+Definition string_of_int z := DecimalString.NilZero.string_of_int (Z.to_int z).
+
+(* The constraint solver can do this itself, but a Coq bug puts
+ anonymous_subproof into the term instead of an actual subproof. *)
+Lemma n_leading_spaces_fact {w__0} :
+ w__0 >= 0 -> exists ex17629_ : Z, 1 + w__0 = 1 + ex17629_ /\ 0 <= ex17629_.
+intro.
+exists w__0.
+omega.
+Qed.
+Hint Resolve n_leading_spaces_fact : sail.
diff --git a/snapshots/coq/riscv/riscv_types.v b/snapshots/coq/riscv/riscv_types.v
new file mode 100644
index 00000000..963f498d
--- /dev/null
+++ b/snapshots/coq/riscv/riscv_types.v
@@ -0,0 +1,1428 @@
+(*Generated by Sail from riscv.*)
+Require Import Sail2_instr_kinds.
+Require Import Sail2_values.
+Require Import Sail2_string.
+Require Import Sail2_real.
+Require Import Sail2_operators_mwords.
+Require Import Sail2_prompt_monad.
+Require Import Sail2_prompt.
+Require Import Sail2_state.
+Definition bits (n : Z) : Type := mword n.
+
+
+
+Definition xlenbits : Type := bits 64.
+
+Definition half : Type := bits 16.
+
+Definition word : Type := bits 32.
+
+Definition regbits : Type := bits 5.
+
+Definition cregbits : Type := bits 3.
+
+Definition csreg : Type := bits 12.
+
+Definition regno (n : Z)`{ArithFact (0 <= n /\ (n + 1) <= 32)} : Type := Z.
+
+Definition opcode : Type := bits 7.
+
+Definition imm12 : Type := bits 12.
+
+Definition imm20 : Type := bits 20.
+
+Definition amo : Type := bits 1.
+
+Inductive Architecture := RV32 | RV64 | RV128.
+Scheme Equality for Architecture.
+Instance Decidable_eq_Architecture :
+forall (x y : Architecture), Decidable (x = y) :=
+Decidable_eq_from_dec Architecture_eq_dec.
+
+
+Definition arch_xlen : Type := bits 2.
+
+Definition priv_level : Type := bits 2.
+
+Inductive Privilege := User | Supervisor | Machine.
+Scheme Equality for Privilege.
+Instance Decidable_eq_Privilege :
+forall (x y : Privilege), Decidable (x = y) :=
+Decidable_eq_from_dec Privilege_eq_dec.
+
+
+Inductive AccessType := Read | Write | ReadWrite | Execute.
+Scheme Equality for AccessType.
+Instance Decidable_eq_AccessType :
+forall (x y : AccessType), Decidable (x = y) :=
+Decidable_eq_from_dec AccessType_eq_dec.
+
+
+Inductive ReadType := Instruction | Data.
+Scheme Equality for ReadType.
+Instance Decidable_eq_ReadType :
+forall (x y : ReadType), Decidable (x = y) :=
+Decidable_eq_from_dec ReadType_eq_dec.
+
+
+Inductive word_width := BYTE | HALF | WORD | DOUBLE.
+Scheme Equality for word_width.
+Instance Decidable_eq_word_width :
+forall (x y : word_width), Decidable (x = y) :=
+Decidable_eq_from_dec word_width_eq_dec.
+
+
+Definition exc_code : Type := bits 4.
+
+Inductive InterruptType :=
+ I_U_Software
+ | I_S_Software
+ | I_M_Software
+ | I_U_Timer
+ | I_S_Timer
+ | I_M_Timer
+ | I_U_External
+ | I_S_External
+ | I_M_External.
+Scheme Equality for InterruptType.
+Instance Decidable_eq_InterruptType :
+forall (x y : InterruptType), Decidable (x = y) :=
+Decidable_eq_from_dec InterruptType_eq_dec.
+
+
+Inductive ExceptionType :=
+ E_Fetch_Addr_Align
+ | E_Fetch_Access_Fault
+ | E_Illegal_Instr
+ | E_Breakpoint
+ | E_Load_Addr_Align
+ | E_Load_Access_Fault
+ | E_SAMO_Addr_Align
+ | E_SAMO_Access_Fault
+ | E_U_EnvCall
+ | E_S_EnvCall
+ | E_Reserved_10
+ | E_M_EnvCall
+ | E_Fetch_Page_Fault
+ | E_Load_Page_Fault
+ | E_Reserved_14
+ | E_SAMO_Page_Fault.
+Scheme Equality for ExceptionType.
+Instance Decidable_eq_ExceptionType :
+forall (x y : ExceptionType), Decidable (x = y) :=
+Decidable_eq_from_dec ExceptionType_eq_dec.
+
+
+Inductive exception :=
+ Error_not_implemented : string -> exception | Error_internal_error : unit -> exception.
+Arguments exception : clear implicits.
+
+
+
+Definition tv_mode : Type := bits 2.
+
+Inductive TrapVectorMode := TV_Direct | TV_Vector | TV_Reserved.
+Scheme Equality for TrapVectorMode.
+Instance Decidable_eq_TrapVectorMode :
+forall (x y : TrapVectorMode), Decidable (x = y) :=
+Decidable_eq_from_dec TrapVectorMode_eq_dec.
+
+
+Definition ext_status : Type := bits 2.
+
+Inductive ExtStatus := Off | Initial | Clean | Dirty.
+Scheme Equality for ExtStatus.
+Instance Decidable_eq_ExtStatus :
+forall (x y : ExtStatus), Decidable (x = y) :=
+Decidable_eq_from_dec ExtStatus_eq_dec.
+
+
+Definition satp_mode : Type := bits 4.
+
+Inductive SATPMode := Sbare | Sv32 | Sv39.
+Scheme Equality for SATPMode.
+Instance Decidable_eq_SATPMode :
+forall (x y : SATPMode), Decidable (x = y) :=
+Decidable_eq_from_dec SATPMode_eq_dec.
+
+
+Definition csrRW : Type := bits 2.
+
+Inductive uop := RISCV_LUI | RISCV_AUIPC.
+Scheme Equality for uop.
+Instance Decidable_eq_uop :
+forall (x y : uop), Decidable (x = y) :=
+Decidable_eq_from_dec uop_eq_dec.
+
+
+Inductive bop := RISCV_BEQ | RISCV_BNE | RISCV_BLT | RISCV_BGE | RISCV_BLTU | RISCV_BGEU.
+Scheme Equality for bop.
+Instance Decidable_eq_bop :
+forall (x y : bop), Decidable (x = y) :=
+Decidable_eq_from_dec bop_eq_dec.
+
+
+Inductive iop := RISCV_ADDI | RISCV_SLTI | RISCV_SLTIU | RISCV_XORI | RISCV_ORI | RISCV_ANDI.
+Scheme Equality for iop.
+Instance Decidable_eq_iop :
+forall (x y : iop), Decidable (x = y) :=
+Decidable_eq_from_dec iop_eq_dec.
+
+
+Inductive sop := RISCV_SLLI | RISCV_SRLI | RISCV_SRAI.
+Scheme Equality for sop.
+Instance Decidable_eq_sop :
+forall (x y : sop), Decidable (x = y) :=
+Decidable_eq_from_dec sop_eq_dec.
+
+
+Inductive rop :=
+ RISCV_ADD
+ | RISCV_SUB
+ | RISCV_SLL
+ | RISCV_SLT
+ | RISCV_SLTU
+ | RISCV_XOR
+ | RISCV_SRL
+ | RISCV_SRA
+ | RISCV_OR
+ | RISCV_AND.
+Scheme Equality for rop.
+Instance Decidable_eq_rop :
+forall (x y : rop), Decidable (x = y) :=
+Decidable_eq_from_dec rop_eq_dec.
+
+
+Inductive ropw := RISCV_ADDW | RISCV_SUBW | RISCV_SLLW | RISCV_SRLW | RISCV_SRAW.
+Scheme Equality for ropw.
+Instance Decidable_eq_ropw :
+forall (x y : ropw), Decidable (x = y) :=
+Decidable_eq_from_dec ropw_eq_dec.
+
+
+Inductive sopw := RISCV_SLLIW | RISCV_SRLIW | RISCV_SRAIW.
+Scheme Equality for sopw.
+Instance Decidable_eq_sopw :
+forall (x y : sopw), Decidable (x = y) :=
+Decidable_eq_from_dec sopw_eq_dec.
+
+
+Inductive amoop := AMOSWAP | AMOADD | AMOXOR | AMOAND | AMOOR | AMOMIN | AMOMAX | AMOMINU | AMOMAXU.
+Scheme Equality for amoop.
+Instance Decidable_eq_amoop :
+forall (x y : amoop), Decidable (x = y) :=
+Decidable_eq_from_dec amoop_eq_dec.
+
+
+Inductive csrop := CSRRW | CSRRS | CSRRC.
+Scheme Equality for csrop.
+Instance Decidable_eq_csrop :
+forall (x y : csrop), Decidable (x = y) :=
+Decidable_eq_from_dec csrop_eq_dec.
+
+
+Record Misa := { Misa_Misa_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Misa_Misa_chunk_0' := e ]}" := ({| Misa_Misa_chunk_0 := e |}).
+
+Record SV39_PTE := { SV39_PTE_SV39_PTE_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'SV39_PTE_SV39_PTE_chunk_0' := e ]}" := ({| SV39_PTE_SV39_PTE_chunk_0 := e |}).
+
+Record PTE_Bits := { PTE_Bits_PTE_Bits_chunk_0 : mword 8; }.
+Notation "{[ r 'with' 'PTE_Bits_PTE_Bits_chunk_0' := e ]}" := ({| PTE_Bits_PTE_Bits_chunk_0 := e |}).
+
+Record Mstatus := { Mstatus_Mstatus_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Mstatus_Mstatus_chunk_0' := e ]}" := ({| Mstatus_Mstatus_chunk_0 := e |}).
+
+Record Sstatus := { Sstatus_Sstatus_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Sstatus_Sstatus_chunk_0' := e ]}" := ({| Sstatus_Sstatus_chunk_0 := e |}).
+
+Record Minterrupts := { Minterrupts_Minterrupts_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Minterrupts_Minterrupts_chunk_0' := e ]}" := ({| Minterrupts_Minterrupts_chunk_0 := e |}).
+
+Record Sinterrupts := { Sinterrupts_Sinterrupts_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Sinterrupts_Sinterrupts_chunk_0' := e ]}" := ({| Sinterrupts_Sinterrupts_chunk_0 := e |}).
+
+Record Medeleg := { Medeleg_Medeleg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Medeleg_Medeleg_chunk_0' := e ]}" := ({| Medeleg_Medeleg_chunk_0 := e |}).
+
+Record Sedeleg := { Sedeleg_Sedeleg_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Sedeleg_Sedeleg_chunk_0' := e ]}" := ({| Sedeleg_Sedeleg_chunk_0 := e |}).
+
+Record Mtvec := { Mtvec_Mtvec_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Mtvec_Mtvec_chunk_0' := e ]}" := ({| Mtvec_Mtvec_chunk_0 := e |}).
+
+Record Satp64 := { Satp64_Satp64_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Satp64_Satp64_chunk_0' := e ]}" := ({| Satp64_Satp64_chunk_0 := e |}).
+
+Record Mcause := { Mcause_Mcause_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'Mcause_Mcause_chunk_0' := e ]}" := ({| Mcause_Mcause_chunk_0 := e |}).
+
+Record Counteren := { Counteren_Counteren_chunk_0 : mword 32; }.
+Notation "{[ r 'with' 'Counteren_Counteren_chunk_0' := e ]}" := ({| Counteren_Counteren_chunk_0 := e |}).
+
+Record sync_exception :=
+ { sync_exception_trap : ExceptionType; sync_exception_excinfo : option xlenbits; }.
+Notation "{[ r 'with' 'sync_exception_trap' := e ]}" := ({| sync_exception_trap := e; sync_exception_excinfo := sync_exception_excinfo r |}).
+Notation "{[ r 'with' 'sync_exception_excinfo' := e ]}" := ({| sync_exception_excinfo := e; sync_exception_trap := sync_exception_trap r |}).
+
+Inductive ctl_result :=
+ CTL_TRAP : sync_exception -> ctl_result
+ | CTL_SRET : unit -> ctl_result
+ | CTL_MRET : unit -> ctl_result.
+Arguments ctl_result : clear implicits.
+
+
+
+Inductive MemoryOpResult {a : Type} :=
+ MemValue : a -> MemoryOpResult | MemException : ExceptionType -> MemoryOpResult.
+Arguments MemoryOpResult : clear implicits.
+
+
+
+Record htif_cmd := { htif_cmd_htif_cmd_chunk_0 : mword 64; }.
+Notation "{[ r 'with' 'htif_cmd_htif_cmd_chunk_0' := e ]}" := ({| htif_cmd_htif_cmd_chunk_0 := e |}).
+
+Definition pteAttribs : Type := bits 8.
+
+Inductive PTW_Error :=
+ PTW_Access | PTW_Invalid_PTE | PTW_No_Permission | PTW_Misaligned | PTW_PTE_Update.
+Scheme Equality for PTW_Error.
+Instance Decidable_eq_PTW_Error :
+forall (x y : PTW_Error), Decidable (x = y) :=
+Decidable_eq_from_dec PTW_Error_eq_dec.
+
+
+Definition vaddr39 : Type := bits 39.
+
+Definition paddr39 : Type := bits 56.
+
+Definition pte39 : Type := xlenbits.
+
+Record SV39_Vaddr := { SV39_Vaddr_SV39_Vaddr_chunk_0 : mword 39; }.
+Notation "{[ r 'with' 'SV39_Vaddr_SV39_Vaddr_chunk_0' := e ]}" := ({| SV39_Vaddr_SV39_Vaddr_chunk_0 := e |}).
+
+Record SV39_Paddr := { SV39_Paddr_SV39_Paddr_chunk_0 : mword 56; }.
+Notation "{[ r 'with' 'SV39_Paddr_SV39_Paddr_chunk_0' := e ]}" := ({| SV39_Paddr_SV39_Paddr_chunk_0 := e |}).
+
+Definition asid64 : Type := bits 16.
+
+Inductive PTW_Result :=
+ PTW_Success : (paddr39 * SV39_PTE * paddr39 * {n : Z & ArithFact (n >= 0)} * bool) -> PTW_Result
+ | PTW_Failure : PTW_Error -> PTW_Result.
+Arguments PTW_Result : clear implicits.
+
+
+
+Record TLB39_Entry :=
+ { TLB39_Entry_asid : asid64;
+ TLB39_Entry_global : bool;
+ TLB39_Entry_vAddr : vaddr39;
+ TLB39_Entry_pAddr : paddr39;
+ TLB39_Entry_vMatchMask : vaddr39;
+ TLB39_Entry_vAddrMask : vaddr39;
+ TLB39_Entry_pte : SV39_PTE;
+ TLB39_Entry_pteAddr : paddr39;
+ TLB39_Entry_age : xlenbits; }.
+Notation "{[ r 'with' 'TLB39_Entry_asid' := e ]}" := ({| TLB39_Entry_asid := e; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_global' := e ]}" := ({| TLB39_Entry_global := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_vAddr' := e ]}" := ({| TLB39_Entry_vAddr := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_pAddr' := e ]}" := ({| TLB39_Entry_pAddr := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_vMatchMask' := e ]}" := ({| TLB39_Entry_vMatchMask := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_vAddrMask' := e ]}" := ({| TLB39_Entry_vAddrMask := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_pte' := e ]}" := ({| TLB39_Entry_pte := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_pteAddr' := e ]}" := ({| TLB39_Entry_pteAddr := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_age := TLB39_Entry_age r |}).
+Notation "{[ r 'with' 'TLB39_Entry_age' := e ]}" := ({| TLB39_Entry_age := e; TLB39_Entry_asid := TLB39_Entry_asid r; TLB39_Entry_global := TLB39_Entry_global r; TLB39_Entry_vAddr := TLB39_Entry_vAddr r; TLB39_Entry_pAddr := TLB39_Entry_pAddr r; TLB39_Entry_vMatchMask := TLB39_Entry_vMatchMask r; TLB39_Entry_vAddrMask := TLB39_Entry_vAddrMask r; TLB39_Entry_pte := TLB39_Entry_pte r; TLB39_Entry_pteAddr := TLB39_Entry_pteAddr r |}).
+
+Inductive TR39_Result :=
+ TR39_Address : paddr39 -> TR39_Result | TR39_Failure : PTW_Error -> TR39_Result.
+Arguments TR39_Result : clear implicits.
+
+
+
+Inductive TR_Result := TR_Address : xlenbits -> TR_Result | TR_Failure : ExceptionType -> TR_Result.
+Arguments TR_Result : clear implicits.
+
+
+
+Inductive ast :=
+ UTYPE : (bits 20 * regbits * uop) -> ast
+ | RISCV_JAL : (bits 21 * regbits) -> ast
+ | RISCV_JALR : (bits 12 * regbits * regbits) -> ast
+ | BTYPE : (bits 13 * regbits * regbits * bop) -> ast
+ | ITYPE : (bits 12 * regbits * regbits * iop) -> ast
+ | SHIFTIOP : (bits 6 * regbits * regbits * sop) -> ast
+ | RTYPE : (regbits * regbits * regbits * rop) -> ast
+ | LOAD : (bits 12 * regbits * regbits * bool * word_width * bool * bool) -> ast
+ | STORE : (bits 12 * regbits * regbits * word_width * bool * bool) -> ast
+ | ADDIW : (bits 12 * regbits * regbits) -> ast
+ | SHIFTW : (bits 5 * regbits * regbits * sop) -> ast
+ | RTYPEW : (regbits * regbits * regbits * ropw) -> ast
+ | SHIFTIWOP : (bits 5 * regbits * regbits * sopw) -> ast
+ | MUL : (regbits * regbits * regbits * bool * bool * bool) -> ast
+ | DIV : (regbits * regbits * regbits * bool) -> ast
+ | REM : (regbits * regbits * regbits * bool) -> ast
+ | MULW : (regbits * regbits * regbits) -> ast
+ | DIVW : (regbits * regbits * regbits * bool) -> ast
+ | REMW : (regbits * regbits * regbits * bool) -> ast
+ | FENCE : (bits 4 * bits 4) -> ast
+ | FENCE_TSO : (bits 4 * bits 4) -> ast
+ | FENCEI : unit -> ast
+ | ECALL : unit -> ast
+ | MRET : unit -> ast
+ | SRET : unit -> ast
+ | EBREAK : unit -> ast
+ | WFI : unit -> ast
+ | SFENCE_VMA : (regbits * regbits) -> ast
+ | LOADRES : (bool * bool * regbits * word_width * regbits) -> ast
+ | STORECON : (bool * bool * regbits * regbits * word_width * regbits) -> ast
+ | AMO : (amoop * bool * bool * regbits * regbits * word_width * regbits) -> ast
+ | CSR : (bits 12 * regbits * regbits * bool * csrop) -> ast
+ | C_NOP : unit -> ast
+ | C_ADDI4SPN : (cregbits * bits 8) -> ast
+ | C_LW : (bits 5 * cregbits * cregbits) -> ast
+ | C_LD : (bits 5 * cregbits * cregbits) -> ast
+ | C_SW : (bits 5 * cregbits * cregbits) -> ast
+ | C_SD : (bits 5 * cregbits * cregbits) -> ast
+ | C_ADDI : (bits 6 * regbits) -> ast
+ | C_JAL : bits 11 -> ast
+ | C_ADDIW : (bits 6 * regbits) -> ast
+ | C_LI : (bits 6 * regbits) -> ast
+ | C_ADDI16SP : bits 6 -> ast
+ | C_LUI : (bits 6 * regbits) -> ast
+ | C_SRLI : (bits 6 * cregbits) -> ast
+ | C_SRAI : (bits 6 * cregbits) -> ast
+ | C_ANDI : (bits 6 * cregbits) -> ast
+ | C_SUB : (cregbits * cregbits) -> ast
+ | C_XOR : (cregbits * cregbits) -> ast
+ | C_OR : (cregbits * cregbits) -> ast
+ | C_AND : (cregbits * cregbits) -> ast
+ | C_SUBW : (cregbits * cregbits) -> ast
+ | C_ADDW : (cregbits * cregbits) -> ast
+ | C_J : bits 11 -> ast
+ | C_BEQZ : (bits 8 * cregbits) -> ast
+ | C_BNEZ : (bits 8 * cregbits) -> ast
+ | C_SLLI : (bits 6 * regbits) -> ast
+ | C_LWSP : (bits 6 * regbits) -> ast
+ | C_LDSP : (bits 6 * regbits) -> ast
+ | C_SWSP : (bits 6 * regbits) -> ast
+ | C_SDSP : (bits 6 * regbits) -> ast
+ | C_JR : regbits -> ast
+ | C_JALR : regbits -> ast
+ | C_MV : (regbits * regbits) -> ast
+ | C_EBREAK : unit -> ast
+ | C_ADD : (regbits * regbits) -> ast
+ | STOP_FETCHING : unit -> ast
+ | THREAD_START : unit -> ast
+ | ILLEGAL : word -> ast
+ | C_ILLEGAL : half -> ast.
+Arguments ast : clear implicits.
+
+
+
+Inductive regfp :=
+ RFull : string -> regfp
+ | RSlice : (string * {n : Z & ArithFact (n >= 0)} * {n : Z & ArithFact (n >= 0)}) -> regfp
+ | RSliceBit : (string * {n : Z & ArithFact (n >= 0)}) -> regfp
+ | RField : (string * string) -> regfp.
+Arguments regfp : clear implicits.
+
+
+
+Definition regfps : Type := list regfp.
+
+Inductive niafp :=
+ NIAFP_successor : unit -> niafp
+ | NIAFP_concrete_address : bits 64 -> niafp
+ | NIAFP_indirect_address : unit -> niafp.
+Arguments niafp : clear implicits.
+
+
+
+Definition niafps : Type := list niafp.
+
+Inductive diafp :=
+ DIAFP_none : unit -> diafp | DIAFP_concrete : bits 64 -> diafp | DIAFP_reg : regfp -> diafp.
+Arguments diafp : clear implicits.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Inductive register_value :=
+ Regval_vector : (Z * bool * list register_value) -> register_value
+ | Regval_list : list register_value -> register_value
+ | Regval_option : option register_value -> register_value
+ | Regval_Counteren : Counteren -> register_value
+ | Regval_Mcause : Mcause -> register_value
+ | Regval_Medeleg : Medeleg -> register_value
+ | Regval_Minterrupts : Minterrupts -> register_value
+ | Regval_Misa : Misa -> register_value
+ | Regval_Mstatus : Mstatus -> register_value
+ | Regval_Mtvec : Mtvec -> register_value
+ | Regval_Privilege : Privilege -> register_value
+ | Regval_Sedeleg : Sedeleg -> register_value
+ | Regval_Sinterrupts : Sinterrupts -> register_value
+ | Regval_TLB39_Entry : TLB39_Entry -> register_value
+ | Regval_bool : bool -> register_value
+ | Regval_vector_64_dec_bit : mword 64 -> register_value.
+Arguments register_value : clear implicits.
+
+
+
+Record regstate :=
+ { tlb39 : option TLB39_Entry;
+ htif_exit_code : mword 64;
+ htif_done : bool;
+ htif_tohost : mword 64;
+ mtimecmp : mword 64;
+ tselect : mword 64;
+ stval : mword 64;
+ scause : Mcause;
+ sepc : mword 64;
+ sscratch : mword 64;
+ stvec : Mtvec;
+ satp : mword 64;
+ sideleg : Sinterrupts;
+ sedeleg : Sedeleg;
+ pmpcfg0 : mword 64;
+ pmpaddr0 : mword 64;
+ mhartid : mword 64;
+ marchid : mword 64;
+ mimpid : mword 64;
+ mvendorid : mword 64;
+ minstret_written : bool;
+ minstret : mword 64;
+ mtime : mword 64;
+ mcycle : mword 64;
+ scounteren : Counteren;
+ mcounteren : Counteren;
+ mscratch : mword 64;
+ mtval : mword 64;
+ mepc : mword 64;
+ mcause : Mcause;
+ mtvec : Mtvec;
+ medeleg : Medeleg;
+ mideleg : Minterrupts;
+ mie : Minterrupts;
+ mip : Minterrupts;
+ mstatus : Mstatus;
+ misa : Misa;
+ cur_inst : mword 64;
+ cur_privilege : Privilege;
+ x31 : mword 64;
+ x30 : mword 64;
+ x29 : mword 64;
+ x28 : mword 64;
+ x27 : mword 64;
+ x26 : mword 64;
+ x25 : mword 64;
+ x24 : mword 64;
+ x23 : mword 64;
+ x22 : mword 64;
+ x21 : mword 64;
+ x20 : mword 64;
+ x19 : mword 64;
+ x18 : mword 64;
+ x17 : mword 64;
+ x16 : mword 64;
+ x15 : mword 64;
+ x14 : mword 64;
+ x13 : mword 64;
+ x12 : mword 64;
+ x11 : mword 64;
+ x10 : mword 64;
+ x9 : mword 64;
+ x8 : mword 64;
+ x7 : mword 64;
+ x6 : mword 64;
+ x5 : mword 64;
+ x4 : mword 64;
+ x3 : mword 64;
+ x2 : mword 64;
+ x1 : mword 64;
+ Xs : vec (mword 64) 32;
+ instbits : mword 64;
+ nextPC : mword 64;
+ PC : mword 64; }.
+Notation "{[ r 'with' 'tlb39' := e ]}" := ({| tlb39 := e; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'htif_exit_code' := e ]}" := ({| htif_exit_code := e; tlb39 := tlb39 r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'htif_done' := e ]}" := ({| htif_done := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'htif_tohost' := e ]}" := ({| htif_tohost := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mtimecmp' := e ]}" := ({| mtimecmp := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'tselect' := e ]}" := ({| tselect := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'stval' := e ]}" := ({| stval := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'scause' := e ]}" := ({| scause := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'sepc' := e ]}" := ({| sepc := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'sscratch' := e ]}" := ({| sscratch := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'stvec' := e ]}" := ({| stvec := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'satp' := e ]}" := ({| satp := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'sideleg' := e ]}" := ({| sideleg := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'sedeleg' := e ]}" := ({| sedeleg := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'pmpcfg0' := e ]}" := ({| pmpcfg0 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'pmpaddr0' := e ]}" := ({| pmpaddr0 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mhartid' := e ]}" := ({| mhartid := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'marchid' := e ]}" := ({| marchid := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mimpid' := e ]}" := ({| mimpid := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mvendorid' := e ]}" := ({| mvendorid := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'minstret_written' := e ]}" := ({| minstret_written := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'minstret' := e ]}" := ({| minstret := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mtime' := e ]}" := ({| mtime := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mcycle' := e ]}" := ({| mcycle := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'scounteren' := e ]}" := ({| scounteren := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mcounteren' := e ]}" := ({| mcounteren := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mscratch' := e ]}" := ({| mscratch := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mtval' := e ]}" := ({| mtval := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mepc' := e ]}" := ({| mepc := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mcause' := e ]}" := ({| mcause := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mtvec' := e ]}" := ({| mtvec := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'medeleg' := e ]}" := ({| medeleg := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mideleg' := e ]}" := ({| mideleg := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mie' := e ]}" := ({| mie := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mip' := e ]}" := ({| mip := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'mstatus' := e ]}" := ({| mstatus := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'misa' := e ]}" := ({| misa := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'cur_inst' := e ]}" := ({| cur_inst := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'cur_privilege' := e ]}" := ({| cur_privilege := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x31' := e ]}" := ({| x31 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x30' := e ]}" := ({| x30 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x29' := e ]}" := ({| x29 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x28' := e ]}" := ({| x28 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x27' := e ]}" := ({| x27 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x26' := e ]}" := ({| x26 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x25' := e ]}" := ({| x25 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x24' := e ]}" := ({| x24 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x23' := e ]}" := ({| x23 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x22' := e ]}" := ({| x22 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x21' := e ]}" := ({| x21 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x20' := e ]}" := ({| x20 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x19' := e ]}" := ({| x19 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x18' := e ]}" := ({| x18 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x17' := e ]}" := ({| x17 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x16' := e ]}" := ({| x16 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x15' := e ]}" := ({| x15 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x14' := e ]}" := ({| x14 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x13' := e ]}" := ({| x13 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x12' := e ]}" := ({| x12 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x11' := e ]}" := ({| x11 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x10' := e ]}" := ({| x10 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x9' := e ]}" := ({| x9 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x8' := e ]}" := ({| x8 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x7' := e ]}" := ({| x7 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x6' := e ]}" := ({| x6 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x5' := e ]}" := ({| x5 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x4' := e ]}" := ({| x4 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x3' := e ]}" := ({| x3 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x2' := e ]}" := ({| x2 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'x1' := e ]}" := ({| x1 := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'Xs' := e ]}" := ({| Xs := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; instbits := instbits r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'instbits' := e ]}" := ({| instbits := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; nextPC := nextPC r; PC := PC r |}).
+Notation "{[ r 'with' 'nextPC' := e ]}" := ({| nextPC := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; PC := PC r |}).
+Notation "{[ r 'with' 'PC' := e ]}" := ({| PC := e; tlb39 := tlb39 r; htif_exit_code := htif_exit_code r; htif_done := htif_done r; htif_tohost := htif_tohost r; mtimecmp := mtimecmp r; tselect := tselect r; stval := stval r; scause := scause r; sepc := sepc r; sscratch := sscratch r; stvec := stvec r; satp := satp r; sideleg := sideleg r; sedeleg := sedeleg r; pmpcfg0 := pmpcfg0 r; pmpaddr0 := pmpaddr0 r; mhartid := mhartid r; marchid := marchid r; mimpid := mimpid r; mvendorid := mvendorid r; minstret_written := minstret_written r; minstret := minstret r; mtime := mtime r; mcycle := mcycle r; scounteren := scounteren r; mcounteren := mcounteren r; mscratch := mscratch r; mtval := mtval r; mepc := mepc r; mcause := mcause r; mtvec := mtvec r; medeleg := medeleg r; mideleg := mideleg r; mie := mie r; mip := mip r; mstatus := mstatus r; misa := misa r; cur_inst := cur_inst r; cur_privilege := cur_privilege r; x31 := x31 r; x30 := x30 r; x29 := x29 r; x28 := x28 r; x27 := x27 r; x26 := x26 r; x25 := x25 r; x24 := x24 r; x23 := x23 r; x22 := x22 r; x21 := x21 r; x20 := x20 r; x19 := x19 r; x18 := x18 r; x17 := x17 r; x16 := x16 r; x15 := x15 r; x14 := x14 r; x13 := x13 r; x12 := x12 r; x11 := x11 r; x10 := x10 r; x9 := x9 r; x8 := x8 r; x7 := x7 r; x6 := x6 r; x5 := x5 r; x4 := x4 r; x3 := x3 r; x2 := x2 r; x1 := x1 r; Xs := Xs r; instbits := instbits r; nextPC := nextPC r |}).
+
+
+
+Definition Counteren_of_regval (merge_var : register_value)
+: option Counteren :=
+
+ match merge_var with | Regval_Counteren (v) => Some (v) | g__12 => None end.
+
+Definition regval_of_Counteren (v : Counteren) : register_value := Regval_Counteren (v).
+
+Definition Mcause_of_regval (merge_var : register_value)
+: option Mcause :=
+
+ match merge_var with | Regval_Mcause (v) => Some (v) | g__11 => None end.
+
+Definition regval_of_Mcause (v : Mcause) : register_value := Regval_Mcause (v).
+
+Definition Medeleg_of_regval (merge_var : register_value)
+: option Medeleg :=
+
+ match merge_var with | Regval_Medeleg (v) => Some (v) | g__10 => None end.
+
+Definition regval_of_Medeleg (v : Medeleg) : register_value := Regval_Medeleg (v).
+
+Definition Minterrupts_of_regval (merge_var : register_value)
+: option Minterrupts :=
+
+ match merge_var with | Regval_Minterrupts (v) => Some (v) | g__9 => None end.
+
+Definition regval_of_Minterrupts (v : Minterrupts) : register_value := Regval_Minterrupts (v).
+
+Definition Misa_of_regval (merge_var : register_value)
+: option Misa :=
+
+ match merge_var with | Regval_Misa (v) => Some (v) | g__8 => None end.
+
+Definition regval_of_Misa (v : Misa) : register_value := Regval_Misa (v).
+
+Definition Mstatus_of_regval (merge_var : register_value)
+: option Mstatus :=
+
+ match merge_var with | Regval_Mstatus (v) => Some (v) | g__7 => None end.
+
+Definition regval_of_Mstatus (v : Mstatus) : register_value := Regval_Mstatus (v).
+
+Definition Mtvec_of_regval (merge_var : register_value)
+: option Mtvec :=
+
+ match merge_var with | Regval_Mtvec (v) => Some (v) | g__6 => None end.
+
+Definition regval_of_Mtvec (v : Mtvec) : register_value := Regval_Mtvec (v).
+
+Definition Privilege_of_regval (merge_var : register_value)
+: option Privilege :=
+
+ match merge_var with | Regval_Privilege (v) => Some (v) | g__5 => None end.
+
+Definition regval_of_Privilege (v : Privilege) : register_value := Regval_Privilege (v).
+
+Definition Sedeleg_of_regval (merge_var : register_value)
+: option Sedeleg :=
+
+ match merge_var with | Regval_Sedeleg (v) => Some (v) | g__4 => None end.
+
+Definition regval_of_Sedeleg (v : Sedeleg) : register_value := Regval_Sedeleg (v).
+
+Definition Sinterrupts_of_regval (merge_var : register_value)
+: option Sinterrupts :=
+
+ match merge_var with | Regval_Sinterrupts (v) => Some (v) | g__3 => None end.
+
+Definition regval_of_Sinterrupts (v : Sinterrupts) : register_value := Regval_Sinterrupts (v).
+
+Definition TLB39_Entry_of_regval (merge_var : register_value)
+: option TLB39_Entry :=
+
+ match merge_var with | Regval_TLB39_Entry (v) => Some (v) | g__2 => None end.
+
+Definition regval_of_TLB39_Entry (v : TLB39_Entry) : register_value := Regval_TLB39_Entry (v).
+
+Definition bool_of_regval (merge_var : register_value)
+: option bool :=
+
+ match merge_var with | Regval_bool (v) => Some (v) | g__1 => None end.
+
+Definition regval_of_bool (v : bool) : register_value := Regval_bool (v).
+
+Definition vector_64_dec_bit_of_regval (merge_var : register_value)
+: option (mword 64) :=
+
+ match merge_var with | Regval_vector_64_dec_bit (v) => Some (v) | g__0 => None end.
+
+Definition regval_of_vector_64_dec_bit (v : mword 64)
+: register_value :=
+
+ Regval_vector_64_dec_bit
+ (v).
+
+
+
+Definition vector_of_regval {a} n (of_regval : register_value -> option a) (rv : register_value) : option (vec a n) := match rv with
+ | Regval_vector (n', _, v) => if n =? n' then map_bind (vec_of_list n) (just_list (List.map of_regval v)) else None
+ | _ => None
+end.
+
+Definition regval_of_vector {a} (regval_of : a -> register_value) (size : Z) (is_inc : bool) (xs : vec a size) : register_value := Regval_vector (size, is_inc, List.map regval_of (list_of_vec xs)).
+
+Definition list_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (list a) := match rv with
+ | Regval_list v => just_list (List.map of_regval v)
+ | _ => None
+end.
+
+Definition regval_of_list {a} (regval_of : a -> register_value) (xs : list a) : register_value := Regval_list (List.map regval_of xs).
+
+Definition option_of_regval {a} (of_regval : register_value -> option a) (rv : register_value) : option (option a) := match rv with
+ | Regval_option v => option_map of_regval v
+ | _ => None
+end.
+
+Definition regval_of_option {a} (regval_of : a -> register_value) (v : option a) := Regval_option (option_map regval_of v).
+
+
+Definition tlb39_ref := {|
+ name := "tlb39";
+ read_from := (fun s => s.(tlb39));
+ write_to := (fun v s => ({[ s with tlb39 := v ]}));
+ of_regval := (fun v => option_of_regval (fun v => TLB39_Entry_of_regval v) v);
+ regval_of := (fun v => regval_of_option (fun v => regval_of_TLB39_Entry v) v) |}.
+
+Definition htif_exit_code_ref := {|
+ name := "htif_exit_code";
+ read_from := (fun s => s.(htif_exit_code));
+ write_to := (fun v s => ({[ s with htif_exit_code := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition htif_done_ref := {|
+ name := "htif_done";
+ read_from := (fun s => s.(htif_done));
+ write_to := (fun v s => ({[ s with htif_done := v ]}));
+ of_regval := (fun v => bool_of_regval v);
+ regval_of := (fun v => regval_of_bool v) |}.
+
+Definition htif_tohost_ref := {|
+ name := "htif_tohost";
+ read_from := (fun s => s.(htif_tohost));
+ write_to := (fun v s => ({[ s with htif_tohost := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mtimecmp_ref := {|
+ name := "mtimecmp";
+ read_from := (fun s => s.(mtimecmp));
+ write_to := (fun v s => ({[ s with mtimecmp := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition tselect_ref := {|
+ name := "tselect";
+ read_from := (fun s => s.(tselect));
+ write_to := (fun v s => ({[ s with tselect := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition stval_ref := {|
+ name := "stval";
+ read_from := (fun s => s.(stval));
+ write_to := (fun v s => ({[ s with stval := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition scause_ref := {|
+ name := "scause";
+ read_from := (fun s => s.(scause));
+ write_to := (fun v s => ({[ s with scause := v ]}));
+ of_regval := (fun v => Mcause_of_regval v);
+ regval_of := (fun v => regval_of_Mcause v) |}.
+
+Definition sepc_ref := {|
+ name := "sepc";
+ read_from := (fun s => s.(sepc));
+ write_to := (fun v s => ({[ s with sepc := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition sscratch_ref := {|
+ name := "sscratch";
+ read_from := (fun s => s.(sscratch));
+ write_to := (fun v s => ({[ s with sscratch := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition stvec_ref := {|
+ name := "stvec";
+ read_from := (fun s => s.(stvec));
+ write_to := (fun v s => ({[ s with stvec := v ]}));
+ of_regval := (fun v => Mtvec_of_regval v);
+ regval_of := (fun v => regval_of_Mtvec v) |}.
+
+Definition satp_ref := {|
+ name := "satp";
+ read_from := (fun s => s.(satp));
+ write_to := (fun v s => ({[ s with satp := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition sideleg_ref := {|
+ name := "sideleg";
+ read_from := (fun s => s.(sideleg));
+ write_to := (fun v s => ({[ s with sideleg := v ]}));
+ of_regval := (fun v => Sinterrupts_of_regval v);
+ regval_of := (fun v => regval_of_Sinterrupts v) |}.
+
+Definition sedeleg_ref := {|
+ name := "sedeleg";
+ read_from := (fun s => s.(sedeleg));
+ write_to := (fun v s => ({[ s with sedeleg := v ]}));
+ of_regval := (fun v => Sedeleg_of_regval v);
+ regval_of := (fun v => regval_of_Sedeleg v) |}.
+
+Definition pmpcfg0_ref := {|
+ name := "pmpcfg0";
+ read_from := (fun s => s.(pmpcfg0));
+ write_to := (fun v s => ({[ s with pmpcfg0 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition pmpaddr0_ref := {|
+ name := "pmpaddr0";
+ read_from := (fun s => s.(pmpaddr0));
+ write_to := (fun v s => ({[ s with pmpaddr0 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mhartid_ref := {|
+ name := "mhartid";
+ read_from := (fun s => s.(mhartid));
+ write_to := (fun v s => ({[ s with mhartid := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition marchid_ref := {|
+ name := "marchid";
+ read_from := (fun s => s.(marchid));
+ write_to := (fun v s => ({[ s with marchid := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mimpid_ref := {|
+ name := "mimpid";
+ read_from := (fun s => s.(mimpid));
+ write_to := (fun v s => ({[ s with mimpid := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mvendorid_ref := {|
+ name := "mvendorid";
+ read_from := (fun s => s.(mvendorid));
+ write_to := (fun v s => ({[ s with mvendorid := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition minstret_written_ref := {|
+ name := "minstret_written";
+ read_from := (fun s => s.(minstret_written));
+ write_to := (fun v s => ({[ s with minstret_written := v ]}));
+ of_regval := (fun v => bool_of_regval v);
+ regval_of := (fun v => regval_of_bool v) |}.
+
+Definition minstret_ref := {|
+ name := "minstret";
+ read_from := (fun s => s.(minstret));
+ write_to := (fun v s => ({[ s with minstret := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mtime_ref := {|
+ name := "mtime";
+ read_from := (fun s => s.(mtime));
+ write_to := (fun v s => ({[ s with mtime := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mcycle_ref := {|
+ name := "mcycle";
+ read_from := (fun s => s.(mcycle));
+ write_to := (fun v s => ({[ s with mcycle := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition scounteren_ref := {|
+ name := "scounteren";
+ read_from := (fun s => s.(scounteren));
+ write_to := (fun v s => ({[ s with scounteren := v ]}));
+ of_regval := (fun v => Counteren_of_regval v);
+ regval_of := (fun v => regval_of_Counteren v) |}.
+
+Definition mcounteren_ref := {|
+ name := "mcounteren";
+ read_from := (fun s => s.(mcounteren));
+ write_to := (fun v s => ({[ s with mcounteren := v ]}));
+ of_regval := (fun v => Counteren_of_regval v);
+ regval_of := (fun v => regval_of_Counteren v) |}.
+
+Definition mscratch_ref := {|
+ name := "mscratch";
+ read_from := (fun s => s.(mscratch));
+ write_to := (fun v s => ({[ s with mscratch := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mtval_ref := {|
+ name := "mtval";
+ read_from := (fun s => s.(mtval));
+ write_to := (fun v s => ({[ s with mtval := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mepc_ref := {|
+ name := "mepc";
+ read_from := (fun s => s.(mepc));
+ write_to := (fun v s => ({[ s with mepc := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition mcause_ref := {|
+ name := "mcause";
+ read_from := (fun s => s.(mcause));
+ write_to := (fun v s => ({[ s with mcause := v ]}));
+ of_regval := (fun v => Mcause_of_regval v);
+ regval_of := (fun v => regval_of_Mcause v) |}.
+
+Definition mtvec_ref := {|
+ name := "mtvec";
+ read_from := (fun s => s.(mtvec));
+ write_to := (fun v s => ({[ s with mtvec := v ]}));
+ of_regval := (fun v => Mtvec_of_regval v);
+ regval_of := (fun v => regval_of_Mtvec v) |}.
+
+Definition medeleg_ref := {|
+ name := "medeleg";
+ read_from := (fun s => s.(medeleg));
+ write_to := (fun v s => ({[ s with medeleg := v ]}));
+ of_regval := (fun v => Medeleg_of_regval v);
+ regval_of := (fun v => regval_of_Medeleg v) |}.
+
+Definition mideleg_ref := {|
+ name := "mideleg";
+ read_from := (fun s => s.(mideleg));
+ write_to := (fun v s => ({[ s with mideleg := v ]}));
+ of_regval := (fun v => Minterrupts_of_regval v);
+ regval_of := (fun v => regval_of_Minterrupts v) |}.
+
+Definition mie_ref := {|
+ name := "mie";
+ read_from := (fun s => s.(mie));
+ write_to := (fun v s => ({[ s with mie := v ]}));
+ of_regval := (fun v => Minterrupts_of_regval v);
+ regval_of := (fun v => regval_of_Minterrupts v) |}.
+
+Definition mip_ref := {|
+ name := "mip";
+ read_from := (fun s => s.(mip));
+ write_to := (fun v s => ({[ s with mip := v ]}));
+ of_regval := (fun v => Minterrupts_of_regval v);
+ regval_of := (fun v => regval_of_Minterrupts v) |}.
+
+Definition mstatus_ref := {|
+ name := "mstatus";
+ read_from := (fun s => s.(mstatus));
+ write_to := (fun v s => ({[ s with mstatus := v ]}));
+ of_regval := (fun v => Mstatus_of_regval v);
+ regval_of := (fun v => regval_of_Mstatus v) |}.
+
+Definition misa_ref := {|
+ name := "misa";
+ read_from := (fun s => s.(misa));
+ write_to := (fun v s => ({[ s with misa := v ]}));
+ of_regval := (fun v => Misa_of_regval v);
+ regval_of := (fun v => regval_of_Misa v) |}.
+
+Definition cur_inst_ref := {|
+ name := "cur_inst";
+ read_from := (fun s => s.(cur_inst));
+ write_to := (fun v s => ({[ s with cur_inst := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition cur_privilege_ref := {|
+ name := "cur_privilege";
+ read_from := (fun s => s.(cur_privilege));
+ write_to := (fun v s => ({[ s with cur_privilege := v ]}));
+ of_regval := (fun v => Privilege_of_regval v);
+ regval_of := (fun v => regval_of_Privilege v) |}.
+
+Definition x31_ref := {|
+ name := "x31";
+ read_from := (fun s => s.(x31));
+ write_to := (fun v s => ({[ s with x31 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x30_ref := {|
+ name := "x30";
+ read_from := (fun s => s.(x30));
+ write_to := (fun v s => ({[ s with x30 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x29_ref := {|
+ name := "x29";
+ read_from := (fun s => s.(x29));
+ write_to := (fun v s => ({[ s with x29 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x28_ref := {|
+ name := "x28";
+ read_from := (fun s => s.(x28));
+ write_to := (fun v s => ({[ s with x28 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x27_ref := {|
+ name := "x27";
+ read_from := (fun s => s.(x27));
+ write_to := (fun v s => ({[ s with x27 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x26_ref := {|
+ name := "x26";
+ read_from := (fun s => s.(x26));
+ write_to := (fun v s => ({[ s with x26 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x25_ref := {|
+ name := "x25";
+ read_from := (fun s => s.(x25));
+ write_to := (fun v s => ({[ s with x25 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x24_ref := {|
+ name := "x24";
+ read_from := (fun s => s.(x24));
+ write_to := (fun v s => ({[ s with x24 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x23_ref := {|
+ name := "x23";
+ read_from := (fun s => s.(x23));
+ write_to := (fun v s => ({[ s with x23 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x22_ref := {|
+ name := "x22";
+ read_from := (fun s => s.(x22));
+ write_to := (fun v s => ({[ s with x22 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x21_ref := {|
+ name := "x21";
+ read_from := (fun s => s.(x21));
+ write_to := (fun v s => ({[ s with x21 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x20_ref := {|
+ name := "x20";
+ read_from := (fun s => s.(x20));
+ write_to := (fun v s => ({[ s with x20 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x19_ref := {|
+ name := "x19";
+ read_from := (fun s => s.(x19));
+ write_to := (fun v s => ({[ s with x19 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x18_ref := {|
+ name := "x18";
+ read_from := (fun s => s.(x18));
+ write_to := (fun v s => ({[ s with x18 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x17_ref := {|
+ name := "x17";
+ read_from := (fun s => s.(x17));
+ write_to := (fun v s => ({[ s with x17 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x16_ref := {|
+ name := "x16";
+ read_from := (fun s => s.(x16));
+ write_to := (fun v s => ({[ s with x16 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x15_ref := {|
+ name := "x15";
+ read_from := (fun s => s.(x15));
+ write_to := (fun v s => ({[ s with x15 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x14_ref := {|
+ name := "x14";
+ read_from := (fun s => s.(x14));
+ write_to := (fun v s => ({[ s with x14 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x13_ref := {|
+ name := "x13";
+ read_from := (fun s => s.(x13));
+ write_to := (fun v s => ({[ s with x13 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x12_ref := {|
+ name := "x12";
+ read_from := (fun s => s.(x12));
+ write_to := (fun v s => ({[ s with x12 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x11_ref := {|
+ name := "x11";
+ read_from := (fun s => s.(x11));
+ write_to := (fun v s => ({[ s with x11 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x10_ref := {|
+ name := "x10";
+ read_from := (fun s => s.(x10));
+ write_to := (fun v s => ({[ s with x10 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x9_ref := {|
+ name := "x9";
+ read_from := (fun s => s.(x9));
+ write_to := (fun v s => ({[ s with x9 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x8_ref := {|
+ name := "x8";
+ read_from := (fun s => s.(x8));
+ write_to := (fun v s => ({[ s with x8 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x7_ref := {|
+ name := "x7";
+ read_from := (fun s => s.(x7));
+ write_to := (fun v s => ({[ s with x7 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x6_ref := {|
+ name := "x6";
+ read_from := (fun s => s.(x6));
+ write_to := (fun v s => ({[ s with x6 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x5_ref := {|
+ name := "x5";
+ read_from := (fun s => s.(x5));
+ write_to := (fun v s => ({[ s with x5 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x4_ref := {|
+ name := "x4";
+ read_from := (fun s => s.(x4));
+ write_to := (fun v s => ({[ s with x4 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x3_ref := {|
+ name := "x3";
+ read_from := (fun s => s.(x3));
+ write_to := (fun v s => ({[ s with x3 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x2_ref := {|
+ name := "x2";
+ read_from := (fun s => s.(x2));
+ write_to := (fun v s => ({[ s with x2 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition x1_ref := {|
+ name := "x1";
+ read_from := (fun s => s.(x1));
+ write_to := (fun v s => ({[ s with x1 := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition Xs_ref := {|
+ name := "Xs";
+ read_from := (fun s => s.(Xs));
+ write_to := (fun v s => ({[ s with Xs := v ]}));
+ of_regval := (fun v => vector_of_regval 32 (fun v => vector_64_dec_bit_of_regval v) v);
+ regval_of := (fun v => regval_of_vector (fun v => regval_of_vector_64_dec_bit v) 32 false v) |}.
+
+Definition instbits_ref := {|
+ name := "instbits";
+ read_from := (fun s => s.(instbits));
+ write_to := (fun v s => ({[ s with instbits := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition nextPC_ref := {|
+ name := "nextPC";
+ read_from := (fun s => s.(nextPC));
+ write_to := (fun v s => ({[ s with nextPC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Definition PC_ref := {|
+ name := "PC";
+ read_from := (fun s => s.(PC));
+ write_to := (fun v s => ({[ s with PC := v ]}));
+ of_regval := (fun v => vector_64_dec_bit_of_regval v);
+ regval_of := (fun v => regval_of_vector_64_dec_bit v) |}.
+
+Local Open Scope string.
+Definition get_regval (reg_name : string) (s : regstate) : option register_value :=
+ if string_dec reg_name "tlb39" then Some (tlb39_ref.(regval_of) (tlb39_ref.(read_from) s)) else
+ if string_dec reg_name "htif_exit_code" then Some (htif_exit_code_ref.(regval_of) (htif_exit_code_ref.(read_from) s)) else
+ if string_dec reg_name "htif_done" then Some (htif_done_ref.(regval_of) (htif_done_ref.(read_from) s)) else
+ if string_dec reg_name "htif_tohost" then Some (htif_tohost_ref.(regval_of) (htif_tohost_ref.(read_from) s)) else
+ if string_dec reg_name "mtimecmp" then Some (mtimecmp_ref.(regval_of) (mtimecmp_ref.(read_from) s)) else
+ if string_dec reg_name "tselect" then Some (tselect_ref.(regval_of) (tselect_ref.(read_from) s)) else
+ if string_dec reg_name "stval" then Some (stval_ref.(regval_of) (stval_ref.(read_from) s)) else
+ if string_dec reg_name "scause" then Some (scause_ref.(regval_of) (scause_ref.(read_from) s)) else
+ if string_dec reg_name "sepc" then Some (sepc_ref.(regval_of) (sepc_ref.(read_from) s)) else
+ if string_dec reg_name "sscratch" then Some (sscratch_ref.(regval_of) (sscratch_ref.(read_from) s)) else
+ if string_dec reg_name "stvec" then Some (stvec_ref.(regval_of) (stvec_ref.(read_from) s)) else
+ if string_dec reg_name "satp" then Some (satp_ref.(regval_of) (satp_ref.(read_from) s)) else
+ if string_dec reg_name "sideleg" then Some (sideleg_ref.(regval_of) (sideleg_ref.(read_from) s)) else
+ if string_dec reg_name "sedeleg" then Some (sedeleg_ref.(regval_of) (sedeleg_ref.(read_from) s)) else
+ if string_dec reg_name "pmpcfg0" then Some (pmpcfg0_ref.(regval_of) (pmpcfg0_ref.(read_from) s)) else
+ if string_dec reg_name "pmpaddr0" then Some (pmpaddr0_ref.(regval_of) (pmpaddr0_ref.(read_from) s)) else
+ if string_dec reg_name "mhartid" then Some (mhartid_ref.(regval_of) (mhartid_ref.(read_from) s)) else
+ if string_dec reg_name "marchid" then Some (marchid_ref.(regval_of) (marchid_ref.(read_from) s)) else
+ if string_dec reg_name "mimpid" then Some (mimpid_ref.(regval_of) (mimpid_ref.(read_from) s)) else
+ if string_dec reg_name "mvendorid" then Some (mvendorid_ref.(regval_of) (mvendorid_ref.(read_from) s)) else
+ if string_dec reg_name "minstret_written" then Some (minstret_written_ref.(regval_of) (minstret_written_ref.(read_from) s)) else
+ if string_dec reg_name "minstret" then Some (minstret_ref.(regval_of) (minstret_ref.(read_from) s)) else
+ if string_dec reg_name "mtime" then Some (mtime_ref.(regval_of) (mtime_ref.(read_from) s)) else
+ if string_dec reg_name "mcycle" then Some (mcycle_ref.(regval_of) (mcycle_ref.(read_from) s)) else
+ if string_dec reg_name "scounteren" then Some (scounteren_ref.(regval_of) (scounteren_ref.(read_from) s)) else
+ if string_dec reg_name "mcounteren" then Some (mcounteren_ref.(regval_of) (mcounteren_ref.(read_from) s)) else
+ if string_dec reg_name "mscratch" then Some (mscratch_ref.(regval_of) (mscratch_ref.(read_from) s)) else
+ if string_dec reg_name "mtval" then Some (mtval_ref.(regval_of) (mtval_ref.(read_from) s)) else
+ if string_dec reg_name "mepc" then Some (mepc_ref.(regval_of) (mepc_ref.(read_from) s)) else
+ if string_dec reg_name "mcause" then Some (mcause_ref.(regval_of) (mcause_ref.(read_from) s)) else
+ if string_dec reg_name "mtvec" then Some (mtvec_ref.(regval_of) (mtvec_ref.(read_from) s)) else
+ if string_dec reg_name "medeleg" then Some (medeleg_ref.(regval_of) (medeleg_ref.(read_from) s)) else
+ if string_dec reg_name "mideleg" then Some (mideleg_ref.(regval_of) (mideleg_ref.(read_from) s)) else
+ if string_dec reg_name "mie" then Some (mie_ref.(regval_of) (mie_ref.(read_from) s)) else
+ if string_dec reg_name "mip" then Some (mip_ref.(regval_of) (mip_ref.(read_from) s)) else
+ if string_dec reg_name "mstatus" then Some (mstatus_ref.(regval_of) (mstatus_ref.(read_from) s)) else
+ if string_dec reg_name "misa" then Some (misa_ref.(regval_of) (misa_ref.(read_from) s)) else
+ if string_dec reg_name "cur_inst" then Some (cur_inst_ref.(regval_of) (cur_inst_ref.(read_from) s)) else
+ if string_dec reg_name "cur_privilege" then Some (cur_privilege_ref.(regval_of) (cur_privilege_ref.(read_from) s)) else
+ if string_dec reg_name "x31" then Some (x31_ref.(regval_of) (x31_ref.(read_from) s)) else
+ if string_dec reg_name "x30" then Some (x30_ref.(regval_of) (x30_ref.(read_from) s)) else
+ if string_dec reg_name "x29" then Some (x29_ref.(regval_of) (x29_ref.(read_from) s)) else
+ if string_dec reg_name "x28" then Some (x28_ref.(regval_of) (x28_ref.(read_from) s)) else
+ if string_dec reg_name "x27" then Some (x27_ref.(regval_of) (x27_ref.(read_from) s)) else
+ if string_dec reg_name "x26" then Some (x26_ref.(regval_of) (x26_ref.(read_from) s)) else
+ if string_dec reg_name "x25" then Some (x25_ref.(regval_of) (x25_ref.(read_from) s)) else
+ if string_dec reg_name "x24" then Some (x24_ref.(regval_of) (x24_ref.(read_from) s)) else
+ if string_dec reg_name "x23" then Some (x23_ref.(regval_of) (x23_ref.(read_from) s)) else
+ if string_dec reg_name "x22" then Some (x22_ref.(regval_of) (x22_ref.(read_from) s)) else
+ if string_dec reg_name "x21" then Some (x21_ref.(regval_of) (x21_ref.(read_from) s)) else
+ if string_dec reg_name "x20" then Some (x20_ref.(regval_of) (x20_ref.(read_from) s)) else
+ if string_dec reg_name "x19" then Some (x19_ref.(regval_of) (x19_ref.(read_from) s)) else
+ if string_dec reg_name "x18" then Some (x18_ref.(regval_of) (x18_ref.(read_from) s)) else
+ if string_dec reg_name "x17" then Some (x17_ref.(regval_of) (x17_ref.(read_from) s)) else
+ if string_dec reg_name "x16" then Some (x16_ref.(regval_of) (x16_ref.(read_from) s)) else
+ if string_dec reg_name "x15" then Some (x15_ref.(regval_of) (x15_ref.(read_from) s)) else
+ if string_dec reg_name "x14" then Some (x14_ref.(regval_of) (x14_ref.(read_from) s)) else
+ if string_dec reg_name "x13" then Some (x13_ref.(regval_of) (x13_ref.(read_from) s)) else
+ if string_dec reg_name "x12" then Some (x12_ref.(regval_of) (x12_ref.(read_from) s)) else
+ if string_dec reg_name "x11" then Some (x11_ref.(regval_of) (x11_ref.(read_from) s)) else
+ if string_dec reg_name "x10" then Some (x10_ref.(regval_of) (x10_ref.(read_from) s)) else
+ if string_dec reg_name "x9" then Some (x9_ref.(regval_of) (x9_ref.(read_from) s)) else
+ if string_dec reg_name "x8" then Some (x8_ref.(regval_of) (x8_ref.(read_from) s)) else
+ if string_dec reg_name "x7" then Some (x7_ref.(regval_of) (x7_ref.(read_from) s)) else
+ if string_dec reg_name "x6" then Some (x6_ref.(regval_of) (x6_ref.(read_from) s)) else
+ if string_dec reg_name "x5" then Some (x5_ref.(regval_of) (x5_ref.(read_from) s)) else
+ if string_dec reg_name "x4" then Some (x4_ref.(regval_of) (x4_ref.(read_from) s)) else
+ if string_dec reg_name "x3" then Some (x3_ref.(regval_of) (x3_ref.(read_from) s)) else
+ if string_dec reg_name "x2" then Some (x2_ref.(regval_of) (x2_ref.(read_from) s)) else
+ if string_dec reg_name "x1" then Some (x1_ref.(regval_of) (x1_ref.(read_from) s)) else
+ if string_dec reg_name "Xs" then Some (Xs_ref.(regval_of) (Xs_ref.(read_from) s)) else
+ if string_dec reg_name "instbits" then Some (instbits_ref.(regval_of) (instbits_ref.(read_from) s)) else
+ if string_dec reg_name "nextPC" then Some (nextPC_ref.(regval_of) (nextPC_ref.(read_from) s)) else
+ if string_dec reg_name "PC" then Some (PC_ref.(regval_of) (PC_ref.(read_from) s)) else
+ None.
+
+Definition set_regval (reg_name : string) (v : register_value) (s : regstate) : option regstate :=
+ if string_dec reg_name "tlb39" then option_map (fun v => tlb39_ref.(write_to) v s) (tlb39_ref.(of_regval) v) else
+ if string_dec reg_name "htif_exit_code" then option_map (fun v => htif_exit_code_ref.(write_to) v s) (htif_exit_code_ref.(of_regval) v) else
+ if string_dec reg_name "htif_done" then option_map (fun v => htif_done_ref.(write_to) v s) (htif_done_ref.(of_regval) v) else
+ if string_dec reg_name "htif_tohost" then option_map (fun v => htif_tohost_ref.(write_to) v s) (htif_tohost_ref.(of_regval) v) else
+ if string_dec reg_name "mtimecmp" then option_map (fun v => mtimecmp_ref.(write_to) v s) (mtimecmp_ref.(of_regval) v) else
+ if string_dec reg_name "tselect" then option_map (fun v => tselect_ref.(write_to) v s) (tselect_ref.(of_regval) v) else
+ if string_dec reg_name "stval" then option_map (fun v => stval_ref.(write_to) v s) (stval_ref.(of_regval) v) else
+ if string_dec reg_name "scause" then option_map (fun v => scause_ref.(write_to) v s) (scause_ref.(of_regval) v) else
+ if string_dec reg_name "sepc" then option_map (fun v => sepc_ref.(write_to) v s) (sepc_ref.(of_regval) v) else
+ if string_dec reg_name "sscratch" then option_map (fun v => sscratch_ref.(write_to) v s) (sscratch_ref.(of_regval) v) else
+ if string_dec reg_name "stvec" then option_map (fun v => stvec_ref.(write_to) v s) (stvec_ref.(of_regval) v) else
+ if string_dec reg_name "satp" then option_map (fun v => satp_ref.(write_to) v s) (satp_ref.(of_regval) v) else
+ if string_dec reg_name "sideleg" then option_map (fun v => sideleg_ref.(write_to) v s) (sideleg_ref.(of_regval) v) else
+ if string_dec reg_name "sedeleg" then option_map (fun v => sedeleg_ref.(write_to) v s) (sedeleg_ref.(of_regval) v) else
+ if string_dec reg_name "pmpcfg0" then option_map (fun v => pmpcfg0_ref.(write_to) v s) (pmpcfg0_ref.(of_regval) v) else
+ if string_dec reg_name "pmpaddr0" then option_map (fun v => pmpaddr0_ref.(write_to) v s) (pmpaddr0_ref.(of_regval) v) else
+ if string_dec reg_name "mhartid" then option_map (fun v => mhartid_ref.(write_to) v s) (mhartid_ref.(of_regval) v) else
+ if string_dec reg_name "marchid" then option_map (fun v => marchid_ref.(write_to) v s) (marchid_ref.(of_regval) v) else
+ if string_dec reg_name "mimpid" then option_map (fun v => mimpid_ref.(write_to) v s) (mimpid_ref.(of_regval) v) else
+ if string_dec reg_name "mvendorid" then option_map (fun v => mvendorid_ref.(write_to) v s) (mvendorid_ref.(of_regval) v) else
+ if string_dec reg_name "minstret_written" then option_map (fun v => minstret_written_ref.(write_to) v s) (minstret_written_ref.(of_regval) v) else
+ if string_dec reg_name "minstret" then option_map (fun v => minstret_ref.(write_to) v s) (minstret_ref.(of_regval) v) else
+ if string_dec reg_name "mtime" then option_map (fun v => mtime_ref.(write_to) v s) (mtime_ref.(of_regval) v) else
+ if string_dec reg_name "mcycle" then option_map (fun v => mcycle_ref.(write_to) v s) (mcycle_ref.(of_regval) v) else
+ if string_dec reg_name "scounteren" then option_map (fun v => scounteren_ref.(write_to) v s) (scounteren_ref.(of_regval) v) else
+ if string_dec reg_name "mcounteren" then option_map (fun v => mcounteren_ref.(write_to) v s) (mcounteren_ref.(of_regval) v) else
+ if string_dec reg_name "mscratch" then option_map (fun v => mscratch_ref.(write_to) v s) (mscratch_ref.(of_regval) v) else
+ if string_dec reg_name "mtval" then option_map (fun v => mtval_ref.(write_to) v s) (mtval_ref.(of_regval) v) else
+ if string_dec reg_name "mepc" then option_map (fun v => mepc_ref.(write_to) v s) (mepc_ref.(of_regval) v) else
+ if string_dec reg_name "mcause" then option_map (fun v => mcause_ref.(write_to) v s) (mcause_ref.(of_regval) v) else
+ if string_dec reg_name "mtvec" then option_map (fun v => mtvec_ref.(write_to) v s) (mtvec_ref.(of_regval) v) else
+ if string_dec reg_name "medeleg" then option_map (fun v => medeleg_ref.(write_to) v s) (medeleg_ref.(of_regval) v) else
+ if string_dec reg_name "mideleg" then option_map (fun v => mideleg_ref.(write_to) v s) (mideleg_ref.(of_regval) v) else
+ if string_dec reg_name "mie" then option_map (fun v => mie_ref.(write_to) v s) (mie_ref.(of_regval) v) else
+ if string_dec reg_name "mip" then option_map (fun v => mip_ref.(write_to) v s) (mip_ref.(of_regval) v) else
+ if string_dec reg_name "mstatus" then option_map (fun v => mstatus_ref.(write_to) v s) (mstatus_ref.(of_regval) v) else
+ if string_dec reg_name "misa" then option_map (fun v => misa_ref.(write_to) v s) (misa_ref.(of_regval) v) else
+ if string_dec reg_name "cur_inst" then option_map (fun v => cur_inst_ref.(write_to) v s) (cur_inst_ref.(of_regval) v) else
+ if string_dec reg_name "cur_privilege" then option_map (fun v => cur_privilege_ref.(write_to) v s) (cur_privilege_ref.(of_regval) v) else
+ if string_dec reg_name "x31" then option_map (fun v => x31_ref.(write_to) v s) (x31_ref.(of_regval) v) else
+ if string_dec reg_name "x30" then option_map (fun v => x30_ref.(write_to) v s) (x30_ref.(of_regval) v) else
+ if string_dec reg_name "x29" then option_map (fun v => x29_ref.(write_to) v s) (x29_ref.(of_regval) v) else
+ if string_dec reg_name "x28" then option_map (fun v => x28_ref.(write_to) v s) (x28_ref.(of_regval) v) else
+ if string_dec reg_name "x27" then option_map (fun v => x27_ref.(write_to) v s) (x27_ref.(of_regval) v) else
+ if string_dec reg_name "x26" then option_map (fun v => x26_ref.(write_to) v s) (x26_ref.(of_regval) v) else
+ if string_dec reg_name "x25" then option_map (fun v => x25_ref.(write_to) v s) (x25_ref.(of_regval) v) else
+ if string_dec reg_name "x24" then option_map (fun v => x24_ref.(write_to) v s) (x24_ref.(of_regval) v) else
+ if string_dec reg_name "x23" then option_map (fun v => x23_ref.(write_to) v s) (x23_ref.(of_regval) v) else
+ if string_dec reg_name "x22" then option_map (fun v => x22_ref.(write_to) v s) (x22_ref.(of_regval) v) else
+ if string_dec reg_name "x21" then option_map (fun v => x21_ref.(write_to) v s) (x21_ref.(of_regval) v) else
+ if string_dec reg_name "x20" then option_map (fun v => x20_ref.(write_to) v s) (x20_ref.(of_regval) v) else
+ if string_dec reg_name "x19" then option_map (fun v => x19_ref.(write_to) v s) (x19_ref.(of_regval) v) else
+ if string_dec reg_name "x18" then option_map (fun v => x18_ref.(write_to) v s) (x18_ref.(of_regval) v) else
+ if string_dec reg_name "x17" then option_map (fun v => x17_ref.(write_to) v s) (x17_ref.(of_regval) v) else
+ if string_dec reg_name "x16" then option_map (fun v => x16_ref.(write_to) v s) (x16_ref.(of_regval) v) else
+ if string_dec reg_name "x15" then option_map (fun v => x15_ref.(write_to) v s) (x15_ref.(of_regval) v) else
+ if string_dec reg_name "x14" then option_map (fun v => x14_ref.(write_to) v s) (x14_ref.(of_regval) v) else
+ if string_dec reg_name "x13" then option_map (fun v => x13_ref.(write_to) v s) (x13_ref.(of_regval) v) else
+ if string_dec reg_name "x12" then option_map (fun v => x12_ref.(write_to) v s) (x12_ref.(of_regval) v) else
+ if string_dec reg_name "x11" then option_map (fun v => x11_ref.(write_to) v s) (x11_ref.(of_regval) v) else
+ if string_dec reg_name "x10" then option_map (fun v => x10_ref.(write_to) v s) (x10_ref.(of_regval) v) else
+ if string_dec reg_name "x9" then option_map (fun v => x9_ref.(write_to) v s) (x9_ref.(of_regval) v) else
+ if string_dec reg_name "x8" then option_map (fun v => x8_ref.(write_to) v s) (x8_ref.(of_regval) v) else
+ if string_dec reg_name "x7" then option_map (fun v => x7_ref.(write_to) v s) (x7_ref.(of_regval) v) else
+ if string_dec reg_name "x6" then option_map (fun v => x6_ref.(write_to) v s) (x6_ref.(of_regval) v) else
+ if string_dec reg_name "x5" then option_map (fun v => x5_ref.(write_to) v s) (x5_ref.(of_regval) v) else
+ if string_dec reg_name "x4" then option_map (fun v => x4_ref.(write_to) v s) (x4_ref.(of_regval) v) else
+ if string_dec reg_name "x3" then option_map (fun v => x3_ref.(write_to) v s) (x3_ref.(of_regval) v) else
+ if string_dec reg_name "x2" then option_map (fun v => x2_ref.(write_to) v s) (x2_ref.(of_regval) v) else
+ if string_dec reg_name "x1" then option_map (fun v => x1_ref.(write_to) v s) (x1_ref.(of_regval) v) else
+ if string_dec reg_name "Xs" then option_map (fun v => Xs_ref.(write_to) v s) (Xs_ref.(of_regval) v) else
+ if string_dec reg_name "instbits" then option_map (fun v => instbits_ref.(write_to) v s) (instbits_ref.(of_regval) v) else
+ if string_dec reg_name "nextPC" then option_map (fun v => nextPC_ref.(write_to) v s) (nextPC_ref.(of_regval) v) else
+ if string_dec reg_name "PC" then option_map (fun v => PC_ref.(write_to) v s) (PC_ref.(of_regval) v) else
+ None.
+
+Definition register_accessors := (get_regval, set_regval).
+
+
+Definition MR a r := monadR register_value a r exception.
+Definition M a := monad register_value a exception.