diff options
Diffstat (limited to 'snapshots/coq/cheri-mips/cheri.v')
| -rw-r--r-- | snapshots/coq/cheri-mips/cheri.v | 12167 |
1 files changed, 12167 insertions, 0 deletions
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. |
