summaryrefslogtreecommitdiff
path: root/power/power_embed.lem.fixed
diff options
context:
space:
mode:
authorShaked Flur2017-12-04 15:14:42 +0000
committerShaked Flur2017-12-04 15:14:42 +0000
commit489eafc6c3c8191e2a8c1eb1386749f5e440eceb (patch)
tree9267097e84c0d677a055ccf021f11c225c350992 /power/power_embed.lem.fixed
parent5fa993caef3c48da36f641bf3608a9515ecc40cf (diff)
added the Power model
Diffstat (limited to 'power/power_embed.lem.fixed')
-rw-r--r--power/power_embed.lem.fixed6743
1 files changed, 6743 insertions, 0 deletions
diff --git a/power/power_embed.lem.fixed b/power/power_embed.lem.fixed
new file mode 100644
index 00000000..52e25bdf
--- /dev/null
+++ b/power/power_embed.lem.fixed
@@ -0,0 +1,6743 @@
+(*Generated by Sail from generated/power.sail.*)
+open import Pervasives_extra
+open import Sail_impl_base
+open import Prompt
+open import Sail_values
+open import Power_embed_types
+open import Power_extras_embed
+let DEC_TO_BCD (Vector [p;q;r;s;t;u;v;w;x;y] _ _) =
+ let a = ((~s) &. (v &. w)) |. ((t &. (v &. (w &. s))) |. (v &. (w &. (~x)))) in
+ let b = (p &. (s &. (x &. (~t)))) |. ((p &. (~w)) |. (p &. (~v))) in
+ let c = (q &. (s &. (x &. (~t)))) |. ((q &. (~w)) |. (q &. (~v))) in
+ let d = r in
+ let e = (v &. ((~w) &. x)) |. ((s &. (v &. (w &. x))) |. ((~t) &. (v &. (x &. w)))) in
+ let f = (p &. (t &. (v &. (w &. (x &. (~s)))))) |. ((s &. ((~x) &. v)) |. (s &. (~v))) in
+ let g = (q &. (t &. (w &. (v &. (x &. (~s)))))) |. ((t &. ((~x) &. v)) |. (t &. (~v))) in
+ let h = u in
+ let i = (t &. (v &. (w &. x))) |. ((s &. (v &. (w &. x))) |. (v &. ((~w) &. (~x)))) in
+ let j =
+ (p &. ((~s) &. ((~t) &. (w &. v)))) |.
+ ((s &. (v &. ((~w) &. x))) |. ((p &. (w &. ((~x) &. v))) |. (w &. (~v)))) in
+ let k =
+ (q &. ((~s) &. ((~t) &. (v &. w)))) |.
+ ((t &. (v &. ((~w) &. x))) |. ((q &. (v &. (w &. (~x)))) |. (x &. (~v)))) in
+ let m = y in
+ Vector [a;b;c;d;e;f;g;h;i;j;k;m] 0 true
+
+let BCD_TO_DEC (Vector [a;b;c;d;e;f;g;h;i;j;k;m] _ _) =
+ let p = (f &. (a &. (i &. (~e)))) |. ((j &. (a &. (~i))) |. (b &. (~a))) in
+ let q = (g &. (a &. (i &. (~e)))) |. ((k &. (a &. (~i))) |. (c &. (~a))) in
+ let r = d in
+ let s =
+ (j &. ((~a) &. (e &. (~i)))) |. ((f &. ((~i) &. (~e))) |. ((f &. ((~a) &. (~e))) |. (e &. i))) in
+ let t =
+ (k &. ((~a) &. (e &. (~i)))) |. ((g &. ((~i) &. (~e))) |. ((g &. ((~a) &. (~e))) |. (a &. i))) in
+ let u = h in
+ let v = a |. (e |. i) in
+ let w = ((~e) &. (j &. (~i))) |. ((e &. i) |. a) in
+ let x = ((~a) &. (k &. (~i))) |. ((a &. i) |. e) in
+ let y = m in
+ Vector [p;q;r;s;t;u;v;w;x;y] 0 true
+
+let carry_out (_, carry) = carry
+
+let real_addr x = x
+
+let mark_as_not_likely_to_be_needed_again_anytime_soon x = ()
+
+let EXTS_EXPLICIT (v, m) = (duplicate (access v (0:ii), m - (length (reset_vector_start v)))) ^^ v
+
+let MASK (start, stop) =
+ let mask_temp = to_vec_inc ((64:ii),(0:ii)) in
+ if bitU_to_bool (gt (start, stop))
+ then
+ let mask_temp = update mask_temp start (63:ii) (duplicate (B1, (64:ii) - start)) in
+ update mask_temp (0:ii) stop (duplicate (B1, stop + (1:ii)))
+ else update mask_temp start stop (duplicate (B1, (stop - start) + (1:ii)))
+
+let ROTL (v, n) = (slice v n (63:ii)) ^^ (slice v (0:ii) (n - (1:ii)))
+
+let DOUBLE word =
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ if bitU_to_bool
+ ((gt_vec_range (slice word (1:ii) (8:ii), (0:ii))) &.
+ (lt_vec_range (slice word (1:ii) (8:ii), (255:ii))))
+ then
+ let temp = update temp (0:ii) (1:ii) (slice word (0:ii) (1:ii)) in
+ let temp = update_pos temp (2:ii) (~(access word (1:ii))) in
+ let temp = update_pos temp (3:ii) (~(access word (1:ii))) in
+ let temp = update_pos temp (4:ii) (~(access word (1:ii))) in
+ update
+ temp (5:ii) (63:ii)
+ (set_vector_start 5
+ ((slice word (2:ii) (31:ii)) ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))
+ else
+ if bitU_to_bool
+ ((eq_vec_range (slice word (1:ii) (8:ii), (0:ii))) &.
+ (neq_vec_range (slice word (9:ii) (31:ii), (0:ii))))
+ then
+ let sign = access word (0:ii) in
+ let exp = (0:ii) - (126:ii) in
+ let frac =
+ (Vector [B0] 0 true) ^^
+ ((slice word (9:ii) (31:ii)) ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0] 0 true)) in
+ let (exp, frac) =
+ (foreach_inc ((0:ii),(52:ii),(1:ii)) (exp,frac)
+ (fun i (exp,frac) ->
+ let (frac, exp) =
+ if bitU_to_bool
+ (eq (match (access frac (0:ii)) with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ let frac =
+ update frac (0:ii) (52:ii) ((slice frac (1:ii) (52:ii)) ^^ (Vector [B0] 0 true)) in
+ let exp = exp - (1:ii) in
+ (frac,exp)
+ else (frac,exp) in
+ (exp,frac))) in
+ let temp = update_pos temp (0:ii) sign in
+ let temp =
+ update
+ temp (1:ii) (11:ii)
+ (add_VIV (reset_vector_start (to_vec_inc ((11:ii),exp))) (1023:ii)) in
+ update temp (12:ii) (63:ii) (set_vector_start 12 (slice frac (1:ii) (52:ii)))
+ else
+ let temp = update temp (0:ii) (1:ii) (slice word (0:ii) (1:ii)) in
+ let temp = update_pos temp (2:ii) (access word (1:ii)) in
+ let temp = update_pos temp (3:ii) (access word (1:ii)) in
+ let temp = update_pos temp (4:ii) (access word (1:ii)) in
+ update
+ temp (5:ii) (63:ii)
+ (set_vector_start 5
+ ((slice word (2:ii) (31:ii)) ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))
+
+let SINGLE frs =
+ let word = to_vec_inc ((32:ii),(0:ii)) in
+ if bitU_to_bool
+ ((gt_vec_range (slice frs (1:ii) (11:ii), (896:ii))) |.
+ (eq_vec_range (slice frs (1:ii) (63:ii), (0:ii))))
+ then
+ let word = update word (0:ii) (1:ii) (slice frs (0:ii) (1:ii)) in
+ update word (2:ii) (31:ii) (set_vector_start 2 (slice frs (5:ii) (34:ii)))
+ else
+ if bitU_to_bool
+ ((lteq_range_vec ((874:ii), slice frs (1:ii) (11:ii))) &.
+ (lteq_vec_range (slice frs (1:ii) (11:ii), (896:ii))))
+ then
+ let sign = access frs (0:ii) in
+ let exp =
+ set_vector_start 0 (minus_VIV (reset_vector_start (slice frs (1:ii) (11:ii))) (1023:ii)) in
+ let frac = (Vector [B1] 0 true) ^^ (slice frs (12:ii) (63:ii)) in
+ let (exp, frac) =
+ (foreach_inc ((0:ii),(53:ii),(1:ii)) (exp,frac)
+ (fun i (exp,frac) ->
+ let (frac, exp) =
+ if bitU_to_bool (lt_vec_range (exp, (0:ii) - (126:ii)))
+ then
+ let frac =
+ update frac (0:ii) (52:ii) ((Vector [B0] 0 true) ^^ (slice frac (0:ii) (51:ii))) in
+ let exp = set_vector_start 0 (add_VIV (reset_vector_start exp) (1:ii)) in
+ (frac,exp)
+ else (frac,exp) in
+ (exp,frac))) in
+ word
+ else to_vec_inc_undef (32:ii)
+
+let Chop (x, y) = slice x (0:ii) y
+
+let byte_reverse (m', input) =
+ let output = to_vec_inc (length input,(0:ii)) in
+ let j = length (reset_vector_start input) in
+ let (j, output) =
+ (foreach_inc ((0:ii),length (reset_vector_start input),(8:ii)) (j,output)
+ (fun i (j,output) ->
+ let output = update output i (i + (7:ii)) (slice input (j - (7:ii)) j) in
+ let j = j - (8:ii) in
+ (j,output))) in
+ output
+
+let rec reverse_endianness value =
+ let width = length (reset_vector_start value) in
+ let half = quot width (2:ii) in
+ if bitU_to_bool (eq_range (width, (8:ii)))
+ then value
+ else
+ (reverse_endianness
+ (reset_vector_start (set_vector_start 0 (slice value half (width - (1:ii)))))) ^^
+ (reverse_endianness (reset_vector_start (slice value (0:ii) (half - (1:ii)))))
+
+let zero_or_undef x =
+ let out = to_vec_inc (length x,(0:ii)) in
+ (foreach_inc ((0:ii),(length (reset_vector_start x)) - (1:ii),(1:ii)) out
+ (fun i out -> update_pos out i (if bitU_to_bool (access x i) then BU else B0)))
+
+let GPRs =
+ Vector ["GPR0";"GPR1";"GPR2";"GPR3";"GPR4";"GPR5";"GPR6";"GPR7";"GPR8";"GPR9";"GPR10";"GPR11";"GPR12";"GPR13";"GPR14";"GPR15";"GPR16";"GPR17";"GPR18";"GPR19";"GPR20";
+ "GPR21";"GPR22";"GPR23";"GPR24";"GPR25";"GPR26";"GPR27";"GPR28";"GPR29";"GPR30";"GPR31"] 0 true
+
+let SPRs =
+ make_indexed_vector
+ [(1,"XER");(8,"LR");(9,"CTR");(259,"SPRG3");(260,"SPRG4");(261,"SPRG5");
+ (262,"SPRG6");(263,"SPRG7")]
+ "" 0 1024 true
+
+let DCRs = make_indexed_vector [(0,"DCR0");(1,"DCR1")] "" 0 1024 true
+
+let length_spr i =
+ match toNatural i with
+ | (1:nn) -> (64:ii)
+ | (8:nn) -> (64:ii)
+ | (9:nn) -> (64:ii)
+ | (259:nn) -> (64:ii)
+ | (260:nn) -> (64:ii)
+ | (261:nn) -> (64:ii)
+ | (262:nn) -> (64:ii)
+ | (263:nn) -> (64:ii)
+ end
+
+let DCR = make_indexed_vector [(0,DCR0);(1,DCR1)] (UndefinedRegister 64) 0 1024 true
+
+let Clamp (k', x, y, z) =
+ let result = (0:ii) in
+ (if bitU_to_bool (lt (x, y))
+ then
+ let result = y in
+ write_reg_bitfield VSCR "SAT" B1 >>
+ return result
+ else
+ if bitU_to_bool (gt (x, z))
+ then
+ let result = z in
+ write_reg_bitfield VSCR "SAT" B1 >>
+ return result
+ else return x) >>= fun result ->
+ return (to_vec_inc (k',result))
+
+let MEMw (ea, size, value) =
+ read_reg bigendianmode >>= fun w__0 ->
+ if bitU_to_bool (most_significant w__0)
+ then
+ MEMw'
+ (reset_vector_start ea,
+ size,
+ reset_vector_start (reverse_endianness (reset_vector_start value)))
+ else MEMw' (reset_vector_start ea,size,reset_vector_start value)
+
+let MEMr (ea, size) =
+ read_reg bigendianmode >>= fun w__0 ->
+ if bitU_to_bool (most_significant w__0)
+ then
+ MEMr' (reset_vector_start ea,size) >>= fun w__1 ->
+ return (reverse_endianness (reset_vector_start w__1))
+ else MEMr' (reset_vector_start ea,size)
+
+let MEMr_reserve (ea, size) =
+ read_reg bigendianmode >>= fun w__0 ->
+ if bitU_to_bool (most_significant w__0)
+ then
+ MEMr_reserve' (reset_vector_start ea,size) >>= fun w__1 ->
+ return (reverse_endianness (reset_vector_start w__1))
+ else MEMr_reserve' (reset_vector_start ea,size)
+
+let MEMw_conditional (ea, size, value) =
+ read_reg bigendianmode >>= fun w__0 ->
+ if bitU_to_bool (most_significant w__0)
+ then
+ MEMw_conditional'
+ (reset_vector_start ea,
+ size,
+ reset_vector_start (reverse_endianness (reset_vector_start value)))
+ else MEMw_conditional' (reset_vector_start ea,size,reset_vector_start value)
+
+let set_SO_OV overflow =
+ write_reg_bitfield XER "OV" overflow >>
+ read_reg_bitfield XER "SO" >>= fun w__0 ->
+ write_reg_bitfield XER "SO" (w__0 |. overflow)
+
+let supported_instructions instr =
+ match instr with
+ | Sync ((Vector [B1;B0] _ _)) -> Nothing
+ | Sync ((Vector [B1;B1] _ _)) -> Nothing
+ | _ -> Just instr
+ end
+
+let CIA_fp = RFull "CIA"
+
+let NIA_fp = RFull "NIA"
+
+let mode64bit_fp = RFull "mode64bit"
+
+let bigendianmode_fp = RFull "bigendianmode"
+
+let set_overflow_cr0 (target_register, new_xer_so) =
+ let m = (0:ii) in
+ let c = to_vec_inc ((3:ii),(0:ii)) in
+ let zero = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg mode64bit >>= fun w__0 ->
+ let m = if bitU_to_bool (most_significant w__0) then (0:ii) else (32:ii) in
+ let c =
+ if bitU_to_bool (lt_vec_signed (slice target_register m (63:ii), slice zero m (63:ii)))
+ then Vector [B1;B0;B0] 0 true
+ else
+ if bitU_to_bool (gt_vec_signed (slice target_register m (63:ii), slice zero m (63:ii)))
+ then Vector [B0;B1;B0] 0 true
+ else Vector [B0;B0;B1] 0 true in
+ write_reg_field CR "CR0" (set_vector_start 32 (c ^^ (Vector [new_xer_so] 0 true)))
+
+let SPR =
+ make_indexed_vector
+ [(1,XER);(8,LR);(9,CTR);(259,SPRG3);(260,SPRG4);(261,SPRG5);
+ (262,SPRG6);(263,SPRG7)]
+ (UndefinedRegister 64) 0 1024 true
+
+let FPRp =
+ make_indexed_vector
+ [(0,RegisterPair FPR0 FPR1);(2,RegisterPair FPR2 FPR3);(4,RegisterPair FPR4 FPR5);(6,RegisterPair FPR6 FPR7);(8,RegisterPair FPR8 FPR9);(10,RegisterPair FPR10 FPR11);
+ (12,RegisterPair FPR12 FPR13);(14,RegisterPair FPR14 FPR15);(16,RegisterPair FPR16 FPR17);(18,RegisterPair FPR18 FPR19);(20,RegisterPair FPR20 FPR21);(22,RegisterPair FPR22 FPR23);
+ (24,RegisterPair FPR24 FPR25);(26,RegisterPair FPR26 FPR27);(28,RegisterPair FPR28 FPR29);(30,RegisterPair FPR30 FPR31)]
+ (UndefinedRegister 128) 0 32 true
+
+let illegal_instructions_pred instr =
+ match instr with
+ | Bcctr (BO,BI,BH,LK) -> ~(access BO (2:ii))
+ | Lbzu (RT,RA,D) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lbzux (RT,RA,_) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lhzu (RT,RA,D) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lhzux (RT,RA,RB) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lhau (RT,RA,D) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lhaux (RT,RA,RB) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lwzu (RA,RT,D) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lwzux (RT,RA,RB) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Lwaux (RA,RT,RB) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Ldu (RT,RA,DS) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Ldux (RT,RA,RB) -> (eq_vec_range (RA, (0:ii))) |. (eq_vec (RA, RT))
+ | Stbu (RS,RA,D) -> eq_vec_range (RA, (0:ii))
+ | Stbux (RS,RA,RB) -> eq_vec_range (RA, (0:ii))
+ | Sthu (RS,RA,RB) -> eq_vec_range (RA, (0:ii))
+ | Sthux (RS,RA,RB) -> eq_vec_range (RA, (0:ii))
+ | Stwu (RS,RA,D) -> eq_vec_range (RA, (0:ii))
+ | Stwux (RS,RA,RB) -> eq_vec_range (RA, (0:ii))
+ | Stdu (RS,RA,DS) -> eq_vec_range (RA, (0:ii))
+ | Stdux (RS,RA,RB) -> eq_vec_range (RA, (0:ii))
+ | Lmw (RT,RA,D) ->
+ (eq_vec_range (RA, (0:ii))) |. ((lteq_vec (RT, RA)) &. (lteq_vec_range (RA, (31:ii))))
+ | Lswi (RT,RA,NB) ->
+ let n =
+ if bitU_to_bool (~(eq_vec_range (NB, (0:ii))))
+ then unsigned (reset_vector_start NB)
+ else (32:ii) in
+ let ceil =
+ if bitU_to_bool (eq_range (modulo n (4:ii), (0:ii)))
+ then quot n (4:ii)
+ else (quot n (4:ii)) + (1:ii) in
+ (lteq_vec (RT, RA)) &.
+ (lteq_vec
+ (RA,
+ minus_VIV
+ (reset_vector_start (set_vector_start 0 (add_VIV (reset_vector_start RT) ceil)))
+ (1:ii)))
+ | Lq (RTp,RA,DQ,Pt) ->
+ (eq_vec_range (minus_VIV (reset_vector_start RTp) (2:ii), (1:ii))) |. (eq_vec (RTp, RA))
+ | Stq (RSp,RA,RS) -> eq_vec_range (minus_VIV (reset_vector_start RSp) (2:ii), (1:ii))
+ | Mtspr (RS,spr) ->
+ ~((eq_vec_range (spr, (1:ii))) |.
+ ((eq_vec_range (spr, (8:ii))) |.
+ ((eq_vec_range (spr, (9:ii))) |.
+ ((eq_vec_range (spr, (256:ii))) |.
+ ((eq_vec_range (spr, (512:ii))) |.
+ ((eq_vec_range (spr, (896:ii))) |. (eq_vec_range (spr, (898:ii)))))))))
+ | _ -> B0
+ end
+
+let GPR =
+ Vector [GPR0;GPR1;GPR2;GPR3;GPR4;GPR5;GPR6;GPR7;GPR8;GPR9;GPR10;GPR11;GPR12;GPR13;GPR14;GPR15;GPR16;GPR17;GPR18;GPR19;GPR20;
+ GPR21;GPR22;GPR23;GPR24;GPR25;GPR26;GPR27;GPR28;GPR29;GPR30;GPR31] 0 true
+
+let FPR =
+ Vector [FPR0;FPR1;FPR2;FPR3;FPR4;FPR5;FPR6;FPR7;FPR8;FPR9;FPR10;FPR11;FPR12;FPR13;FPR14;FPR15;FPR16;FPR17;FPR18;FPR19;FPR20;
+ FPR21;FPR22;FPR23;FPR24;FPR25;FPR26;FPR27;FPR28;FPR29;FPR30;FPR31] 0 true
+
+let VR =
+ Vector [VR0;VR1;VR2;VR3;VR4;VR5;VR6;VR7;VR8;VR9;VR10;VR11;VR12;VR13;VR14;VR15;VR16;VR17;VR18;VR19;VR20;
+ VR21;VR22;VR23;VR24;VR25;VR26;VR27;VR28;VR29;VR30;VR31] 0 true
+
+let decode = function
+ | ((Vector [B0;B1;B0;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;AA;LK] _ _) as instr) ->
+ let LI = slice_raw instr (6:ii) (29:ii) in
+ Just (B (reset_vector_start LI,AA,LK))
+ | ((Vector [B0;B1;B0;B0;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;AA;LK] _ _) as instr) ->
+ let BO = slice_raw instr (6:ii) (10:ii) in
+ let BI = slice_raw instr (11:ii) (15:ii) in
+ let BD = slice_raw instr (16:ii) (29:ii) in
+ Just (Bc (reset_vector_start BO,reset_vector_start BI,reset_vector_start BD,AA,LK))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B0;B0;B0;LK] _ _) as instr) ->
+ let BO = slice_raw instr (6:ii) (10:ii) in
+ let BI = slice_raw instr (11:ii) (15:ii) in
+ let BH = slice_raw instr (19:ii) (20:ii) in
+ Just (Bclr (reset_vector_start BO,reset_vector_start BI,reset_vector_start BH,LK))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B1;B0;B0;B0;B0;LK] _ _) as instr) ->
+ let BO = slice_raw instr (6:ii) (10:ii) in
+ let BI = slice_raw instr (11:ii) (15:ii) in
+ let BH = slice_raw instr (19:ii) (20:ii) in
+ Just (Bcctr (reset_vector_start BO,reset_vector_start BI,reset_vector_start BH,LK))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B0;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Crand (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B1;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Crnand (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B1;B0;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Cror (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B0;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Crxor (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Crnor (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B1;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Creqv (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Crandc (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B1;B0;B0;B0;B0;B1;_] _ _) as instr) ->
+ let BT = slice_raw instr (6:ii) (10:ii) in
+ let BA = slice_raw instr (11:ii) (15:ii) in
+ let BB = slice_raw instr (16:ii) (20:ii) in
+ Just (Crorc (reset_vector_start BT,reset_vector_start BA,reset_vector_start BB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;_] _ _) as instr) ->
+ let BF = slice_raw instr (6:ii) (8:ii) in
+ let BFA = slice_raw instr (11:ii) (13:ii) in
+ Just (Mcrf (reset_vector_start BF,reset_vector_start BFA))
+ | ((Vector [B0;B1;B0;B0;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;_] _ _) as instr) ->
+ let LEV = slice_raw instr (20:ii) (26:ii) in
+ Just (Sc (reset_vector_start LEV))
+ | ((Vector [B0;B1;B0;B0;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1] _ _) as instr) ->
+ let LEV = slice_raw instr (20:ii) (26:ii) in
+ Just (Scv (reset_vector_start LEV))
+ | ((Vector [B1;B0;B0;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lbz (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lbzx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lbzu (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lbzux (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B0;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lhz (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lhzx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B0;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lhzu (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lhzux (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lha (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B1;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lhax (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lhau (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B1;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lhaux (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B0;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lwz (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lwzx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B0;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lwzu (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lwzux (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B1;B1;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DS = slice_raw instr (16:ii) (29:ii) in
+ Just (Lwa (reset_vector_start RT,reset_vector_start RA,reset_vector_start DS))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B1;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lwax (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B1;B1;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lwaux (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B1;B1;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DS = slice_raw instr (16:ii) (29:ii) in
+ Just (Ld (reset_vector_start RT,reset_vector_start RA,reset_vector_start DS))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Ldx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B1;B1;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DS = slice_raw instr (16:ii) (29:ii) in
+ Just (Ldu (reset_vector_start RT,reset_vector_start RA,reset_vector_start DS))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Ldux (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Stb (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stbx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Stbu (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stbux (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Sth (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Sthx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B1;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Sthu (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Sthux (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Stw (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stwx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B0;B1;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Stwu (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B1;B1;B0;B1;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stwux (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DS = slice_raw instr (16:ii) (29:ii) in
+ Just (Std (reset_vector_start RS,reset_vector_start RA,reset_vector_start DS))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stdx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DS = slice_raw instr (16:ii) (29:ii) in
+ Just (Stdu (reset_vector_start RS,reset_vector_start RA,reset_vector_start DS))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B1;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stdux (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B1;B1;B0;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RTp = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DQ = slice_raw instr (16:ii) (27:ii) in
+ let PT = slice_raw instr (28:ii) (31:ii) in
+ Just (Lq (reset_vector_start RTp,reset_vector_start RA,reset_vector_start DQ,reset_vector_start PT))
+ | ((Vector [B1;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0] _ _) as instr) ->
+ let RSp = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let DS = slice_raw instr (16:ii) (29:ii) in
+ Just (Stq (reset_vector_start RSp,reset_vector_start RA,reset_vector_start DS))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B0;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lhbrx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B1;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Sthbrx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lwbrx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stwbrx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B1;B0;B1;B0;B0;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Ldbrx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B0;B0;B1;B0;B1;B0;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stdbrx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B1;B0;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Lmw (reset_vector_start RT,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B1;B0;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let D = slice_raw instr (16:ii) (31:ii) in
+ Just (Stmw (reset_vector_start RS,reset_vector_start RA,reset_vector_start D))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B1;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let NB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lswi (reset_vector_start RT,reset_vector_start RA,reset_vector_start NB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lswx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B1;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let NB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stswi (reset_vector_start RS,reset_vector_start RA,reset_vector_start NB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B0;B0;B1;B0;B1;B0;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stswx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B0;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (Addi (reset_vector_start RT,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B0;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (Addis (reset_vector_start RT,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B0;B0;B0;B0;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Add (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B0;B1;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Subf (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B1;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (Addic (reset_vector_start RT,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B0;B1;B1;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (AddicDot (reset_vector_start RT,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B0;B1;B0;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (Subfic (reset_vector_start RT,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B0;B0;B0;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Addc (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B0;B0;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Subfc (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B0;B0;B0;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Adde (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B0;B0;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Subfe (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B1;B0;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Addme (reset_vector_start RT,reset_vector_start RA,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B1;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Subfme (reset_vector_start RT,reset_vector_start RA,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B0;B0;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Addze (reset_vector_start RT,reset_vector_start RA,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B0;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Subfze (reset_vector_start RT,reset_vector_start RA,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B1;B1;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Neg (reset_vector_start RT,reset_vector_start RA,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (Mulli (reset_vector_start RT,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B1;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mullw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulhwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B1;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B0;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B1;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divwe (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B0;B0;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divweu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B1;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulld (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulhd (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulhdu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B1;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divd (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B0;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divdu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B1;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divde (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B0;B0;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Divdeu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B1;B0;B1;B1;_;_;_;_;L;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let BF = slice_raw instr (6:ii) (8:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SI = slice_raw instr (16:ii) (31:ii) in
+ Just (Cmpi (reset_vector_start BF,L,reset_vector_start RA,reset_vector_start SI))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;L;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;_] _ _) as instr) ->
+ let BF = slice_raw instr (6:ii) (8:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Cmp (reset_vector_start BF,L,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B0;B1;B0;B1;B0;_;_;_;_;L;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let BF = slice_raw instr (6:ii) (8:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Cmpli (reset_vector_start BF,L,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;L;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B0;B0;B0;B0;B0;_] _ _) as instr) ->
+ let BF = slice_raw instr (6:ii) (8:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Cmpl (reset_vector_start BF,L,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ let BC = slice_raw instr (21:ii) (25:ii) in
+ Just (Isel (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,reset_vector_start BC))
+ | ((Vector [B0;B1;B1;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Andi (reset_vector_start RS,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B1;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Andis (reset_vector_start RS,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B0;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Ori (reset_vector_start RS,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B0;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Oris (reset_vector_start RS,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B0;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Xori (reset_vector_start RS,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let UI = slice_raw instr (16:ii) (31:ii) in
+ Just (Xoris (reset_vector_start RS,reset_vector_start RA,reset_vector_start UI))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (And (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B1;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Xor (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B1;B0;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nand (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B1;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Or (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B1;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nor (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B0;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Eqv (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Andc (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B0;B1;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Orc (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B1;B0;B1;B1;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Extsb (reset_vector_start RS,reset_vector_start RA,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B1;B0;B0;B1;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Extsh (reset_vector_start RS,reset_vector_start RA,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Cntlzw (reset_vector_start RS,reset_vector_start RA,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B1;B1;B1;B1;B1;B0;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Cmpb (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B1;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Popcntb (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B1;B1;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Popcntw (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B1;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Prtyd (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Prtyw (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B1;B1;B0;B1;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Extsw (reset_vector_start RS,reset_vector_start RA,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Cntlzd (reset_vector_start RS,reset_vector_start RA,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B1;B1;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Popcntd (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B1;B1;B1;B1;B0;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Bpermd (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B0;B1;B0;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SH = slice_raw instr (16:ii) (20:ii) in
+ let MB = slice_raw instr (21:ii) (25:ii) in
+ let ME = slice_raw instr (26:ii) (30:ii) in
+ Just (Rlwinm (reset_vector_start RS,reset_vector_start RA,reset_vector_start SH,reset_vector_start MB,reset_vector_start ME,Rc))
+ | ((Vector [B0;B1;B0;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ let MB = slice_raw instr (21:ii) (25:ii) in
+ let ME = slice_raw instr (26:ii) (30:ii) in
+ Just (Rlwnm (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,reset_vector_start MB,reset_vector_start ME,Rc))
+ | ((Vector [B0;B1;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SH = slice_raw instr (16:ii) (20:ii) in
+ let MB = slice_raw instr (21:ii) (25:ii) in
+ let ME = slice_raw instr (26:ii) (30:ii) in
+ Just (Rlwimi (reset_vector_start RS,reset_vector_start RA,reset_vector_start SH,reset_vector_start MB,reset_vector_start ME,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let mb = slice_raw instr (21:ii) (26:ii) in
+ Just (Rldicl (reset_vector_start RS,reset_vector_start RA,reset_vector_start ((slice instr
+ (16:ii)
+ (20:ii)) ^^
+ (slice instr
+ (30:ii)
+ (30:ii))),reset_vector_start mb,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let me = slice_raw instr (21:ii) (26:ii) in
+ Just (Rldicr (reset_vector_start RS,reset_vector_start RA,reset_vector_start ((slice instr
+ (16:ii)
+ (20:ii)) ^^
+ (slice instr
+ (30:ii)
+ (30:ii))),reset_vector_start me,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let mb = slice_raw instr (21:ii) (26:ii) in
+ Just (Rldic (reset_vector_start RS,reset_vector_start RA,reset_vector_start ((slice instr
+ (16:ii) (20:ii)) ^^
+ (slice instr
+ (30:ii) (30:ii))),reset_vector_start mb,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ let mb = slice_raw instr (21:ii) (26:ii) in
+ Just (Rldcl (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,reset_vector_start mb,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B1;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ let me = slice_raw instr (21:ii) (26:ii) in
+ Just (Rldcr (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,reset_vector_start me,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let mb = slice_raw instr (21:ii) (26:ii) in
+ Just (Rldimi (reset_vector_start RS,reset_vector_start RA,reset_vector_start ((slice instr
+ (16:ii)
+ (20:ii)) ^^
+ (slice instr
+ (30:ii)
+ (30:ii))),reset_vector_start mb,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Slw (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B1;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Srw (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B0;B0;B1;B1;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let SH = slice_raw instr (16:ii) (20:ii) in
+ Just (Srawi (reset_vector_start RS,reset_vector_start RA,reset_vector_start SH,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B0;B0;B0;B1;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Sraw (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Sld (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B1;B1;B0;B1;B1;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Srd (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B0;B0;B1;B1;B1;B0;B1;_;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Sradi (reset_vector_start RS,reset_vector_start RA,reset_vector_start ((slice instr
+ (16:ii) (20:ii)) ^^
+ (slice instr
+ (30:ii) (30:ii))),Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B0;B0;B0;B1;B1;B0;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Srad (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B0;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Cdtbcd (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B1;B1;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ Just (Cbcdtd (reset_vector_start RS,reset_vector_start RA))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B1;B0;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Addg6s (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B1;B0;B1;B0;B0;B1;B1;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let spr = slice_raw instr (11:ii) (20:ii) in
+ Just (Mtspr (reset_vector_start RS,reset_vector_start spr))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B1;B0;B1;B0;B0;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let spr = slice_raw instr (11:ii) (20:ii) in
+ Just (Mfspr (reset_vector_start RT,reset_vector_start spr))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;B0;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B0;B0;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let FXM = slice_raw instr (12:ii) (19:ii) in
+ Just (Mtcrf (reset_vector_start RS,reset_vector_start FXM))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;B0;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ Just (Mfcr (reset_vector_start RT))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;B1;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B0;B0;B0;_] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let FXM = slice_raw instr (12:ii) (19:ii) in
+ Just (Mtocrf (reset_vector_start RS,reset_vector_start FXM))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;B1;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B0;B1;B1;_] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let FXM = slice_raw instr (12:ii) (19:ii) in
+ Just (Mfocrf (reset_vector_start RT,reset_vector_start FXM))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B0;B0;B0;B0;B0;B0;B0;_] _ _) as instr) ->
+ let BF = slice_raw instr (6:ii) (8:ii) in
+ Just (Mcrxr (reset_vector_start BF))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B0;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dlmzb (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B0;B1;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Macchw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B1;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Macchws (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B0;B0;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Macchwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B0;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Macchwsu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B0;B1;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Machhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B1;B1;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Machhws (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B0;B0;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Machhwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B1;B0;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Machhwsu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B1;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Maclhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B1;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Maclhws (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B0;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Maclhwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B0;B0;B1;B1;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Maclhwsu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B1;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulchw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulchwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulhhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mulhhwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B1;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mullhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B1;B0;B0;B0;B1;B0;B0;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Mullhwu (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B0;B1;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nmacchw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B1;B1;B1;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nmacchws (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B0;B1;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nmachhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B0;B0;B1;B1;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nmachhws (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B0;B1;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nmaclhw (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B0;B0;B1;B0;B0;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;OE;B1;B1;B1;B1;B0;B1;B1;B1;B0;Rc] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Nmaclhws (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,OE,Rc))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B1;B1;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Icbi (reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let CT = slice_raw instr (7:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Icbt (reset_vector_start CT,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B1;B1;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dcba (reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B1;B0;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let TH = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dcbt (reset_vector_start TH,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B1;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let TH = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dcbtst (reset_vector_start TH,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B1;B1;B1;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dcbz (reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dcbst (reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let L = slice_raw instr (9:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Dcbf (reset_vector_start L,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B0;B0;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ Just (Isync)
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B0;B1;B0;B0;EH] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lbarx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,EH))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B1;B1;B0;B1;B0;B0;EH] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lharx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,EH))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B0;B1;B0;B1;B0;B0;EH] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Lwarx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,EH))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B0;B1;B1;B0;B1;B1;B0;B1] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stbcx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B1;B1;B0;B1;B0;B1;B1;B0;B1] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Sthcx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B0;B0;B1;B0;B1;B1;B0;B1] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stwcx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B1;B0;B1;B0;B1;B0;B0;EH] _ _) as instr) ->
+ let RT = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Ldarx (reset_vector_start RT,reset_vector_start RA,reset_vector_start RB,EH))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B1;B1;B0;B1;B0;B1;B1;B0;B1] _ _) as instr) ->
+ let RS = slice_raw instr (6:ii) (10:ii) in
+ let RA = slice_raw instr (11:ii) (15:ii) in
+ let RB = slice_raw instr (16:ii) (20:ii) in
+ Just (Stdcx (reset_vector_start RS,reset_vector_start RA,reset_vector_start RB))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B0;B0;B1;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ let L = slice_raw instr (9:ii) (10:ii) in
+ Just (Sync (reset_vector_start L))
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B1;B1;B0;B1;B0;B1;B0;B1;B1;B0;_] _ _) as instr) ->
+ Just (Eieio)
+ | ((Vector [B0;B1;B1;B1;B1;B1;_;_;_;_;_;_;_;_;_;_;_;_;_;_;_;B0;B0;B0;B0;B1;B1;B1;B1;B1;B0;_] _ _) as instr) ->
+ let WC = slice_raw instr (9:ii) (10:ii) in
+ Just (Wait (reset_vector_start WC))
+ | _ -> Nothing
+ end
+
+let illegal_instructions instr =
+ if bitU_to_bool (illegal_instructions_pred instr)
+ then Nothing
+ else Just instr
+
+let recalculate_lswx_reg_footprint instr =
+ let iR = [] in
+ let oR = [] in
+ let Nias = [NIAFP_successor] in
+ let Dia = DIAFP_none in
+ let ik = IK_mem_read Read_plain in
+ let (RT, RA, RB) = match instr with | Lswx (RT,RA,RB) -> (RT,RA,RB) end in
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let r = (0:ii) in
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) ::
+ (RSlice ("XER",(57:ii),(63:ii))) :: iR in
+ let aR = iR in
+ let r = minus_VII (reset_vector_start RT) (1:ii) in
+ let i = (32:ii) in
+ read_reg_range XER (57:ii) (63:ii) >>= fun w__0 ->
+ let n_top = unsigned (reset_vector_start w__0) in
+ let (r, oR) =
+ if bitU_to_bool (eq_range (n_top, (0:ii)))
+ then
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ (r,oR)
+ else
+ let j = (0:ii) in
+ let n_r = quot n_top (4:ii) in
+ let n_mod = modulo n_top (4:ii) in
+ let n_r = if bitU_to_bool (eq_range (n_mod, (0:ii))) then n_r else n_r + (1:ii) in
+ let (oR, j, r) =
+ (foreach_dec (n_r,(1:ii),(1:ii)) (oR,j,r)
+ (fun n (oR,j,r) ->
+ let r = modulo (r + (1:ii)) (32:ii) in
+ let j = j + (32:ii) in
+ let oR = (RFull (access GPRs r)) :: oR in
+ (oR,j,r))) in
+ (r,oR) in
+ return (iR,oR,aR,Nias,Dia,ik)
+
+let recalculate_stswx_reg_footprint instr =
+ let iR = [] in
+ let oR = [] in
+ let Nias = [NIAFP_successor] in
+ let Dia = DIAFP_none in
+ let ik = IK_mem_write Write_plain in
+ let (RS, RA, RB) = match instr with | Stswx (RS,RA,RB) -> (RS,RA,RB) end in
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let r = (0:ii) in
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) ::
+ (RSlice ("XER",(57:ii),(63:ii))) :: iR in
+ let aR = iR in
+ let r = minus_VII (reset_vector_start RS) (1:ii) in
+ let i = (32:ii) in
+ read_reg_range XER (57:ii) (63:ii) >>= fun w__0 ->
+ let n_top = unsigned (reset_vector_start w__0) in
+ let j = (0:ii) in
+ let (j, i, iR, r) =
+ (foreach_dec (n_top,(1:ii),(1:ii)) (j,i,iR,r)
+ (fun n (j,i,iR,r) ->
+ let r = if bitU_to_bool (eq_range (i, (32:ii))) then modulo (r + (1:ii)) (32:ii) else r in
+ let iR = (RSlice (access GPRs r,i,i + (7:ii))) :: iR in
+ let i = i + (8:ii) in
+ let j = j + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ (j,i,iR,r))) in
+ let ik = IK_mem_write Write_plain in
+ return (iR,oR,aR,Nias,Dia,ik)
+
+
+
+let execute_B (LI, AA, LK) =
+ (if bitU_to_bool AA
+ then
+ write_reg
+ NIA
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start (LI ^^ (Vector [B0;B0] 0 true)))))
+ else
+ read_reg CIA >>= fun w__0 ->
+ write_reg
+ NIA
+ (set_vector_start 0
+ (add_VVV
+ w__0
+ (reset_vector_start (exts ((64:ii),reset_vector_start (LI ^^ (Vector [B0;B0] 0 true)))))))) >>
+ if bitU_to_bool LK
+ then
+ read_reg CIA >>= fun w__1 ->
+ write_reg LR (set_vector_start 0 (add_VIV w__1 (4:ii)))
+ else return ()
+
+let execute_Bc (BO, BI, BD, AA, LK) =
+ let M = (0:ii) in
+ read_reg mode64bit >>= fun w__0 ->
+ let M = if bitU_to_bool (most_significant w__0) then (0:ii) else (32:ii) in
+ read_reg CTR >>= fun ctr_temp ->
+ (if bitU_to_bool (~(access BO (2:ii)))
+ then
+ let ctr_temp = set_vector_start 0 (minus_VIV (reset_vector_start ctr_temp) (1:ii)) in
+ write_reg CTR ctr_temp >>
+ return ctr_temp
+ else return ctr_temp) >>= fun ctr_temp ->
+ let ctr_ok =
+ (access BO (2:ii)) |.
+ ((~(eq_vec_range (slice ctr_temp M (63:ii), (0:ii)))) +. (access BO (3:ii))) in
+ read_reg_bit CR (add_VII (reset_vector_start BI) (32:ii)) >>= fun w__1 ->
+ let cond_ok = (access BO (0:ii)) |. (w__1 +. (~(access BO (1:ii)))) in
+ (if bitU_to_bool (ctr_ok &. cond_ok)
+ then
+ if bitU_to_bool AA
+ then
+ write_reg
+ NIA
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start (BD ^^ (Vector [B0;B0] 0 true)))))
+ else
+ read_reg CIA >>= fun w__2 ->
+ write_reg
+ NIA
+ (set_vector_start 0
+ (add_VVV
+ w__2
+ (reset_vector_start (exts ((64:ii),reset_vector_start (BD ^^ (Vector [B0;B0] 0 true)))))))
+ else return ()) >>
+ if bitU_to_bool LK
+ then
+ read_reg CIA >>= fun w__3 ->
+ write_reg LR (set_vector_start 0 (add_VIV w__3 (4:ii)))
+ else return ()
+
+let execute_Bclr (BO, BI, BH, LK) =
+ let M = (0:ii) in
+ read_reg mode64bit >>= fun w__0 ->
+ let M = if bitU_to_bool (most_significant w__0) then (0:ii) else (32:ii) in
+ read_reg CTR >>= fun ctr_temp ->
+ (if bitU_to_bool (~(access BO (2:ii)))
+ then
+ let ctr_temp = set_vector_start 0 (minus_VIV (reset_vector_start ctr_temp) (1:ii)) in
+ write_reg CTR ctr_temp >>
+ return ctr_temp
+ else return ctr_temp) >>= fun ctr_temp ->
+ let ctr_ok =
+ (access BO (2:ii)) |.
+ ((~(eq_vec_range (slice ctr_temp M (63:ii), (0:ii)))) +. (access BO (3:ii))) in
+ read_reg_bit CR (add_VII (reset_vector_start BI) (32:ii)) >>= fun w__1 ->
+ let cond_ok = (access BO (0:ii)) |. (w__1 +. (~(access BO (1:ii)))) in
+ (if bitU_to_bool (ctr_ok &. cond_ok)
+ then
+ read_reg_range LR (0:ii) (61:ii) >>= fun w__2 ->
+ write_reg NIA (w__2 ^^ (Vector [B0;B0] 0 true))
+ else return ()) >>
+ if bitU_to_bool LK
+ then
+ read_reg CIA >>= fun w__3 ->
+ write_reg LR (set_vector_start 0 (add_VIV w__3 (4:ii)))
+ else return ()
+
+let execute_Bcctr (BO, BI, BH, LK) =
+ read_reg_bit CR (add_VII (reset_vector_start BI) (32:ii)) >>= fun w__0 ->
+ let cond_ok = (access BO (0:ii)) |. (w__0 +. (~(access BO (1:ii)))) in
+ (if bitU_to_bool cond_ok
+ then
+ read_reg_range CTR (0:ii) (61:ii) >>= fun w__1 ->
+ write_reg NIA (w__1 ^^ (Vector [B0;B0] 0 true))
+ else return ()) >>
+ if bitU_to_bool LK
+ then
+ read_reg CIA >>= fun w__2 ->
+ write_reg LR (set_vector_start 0 (add_VIV w__2 (4:ii)))
+ else return ()
+
+let execute_Crand (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (w__0 &. w__1)
+
+let execute_Crnand (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (~(w__0 &. w__1))
+
+let execute_Cror (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (w__0 |. w__1)
+
+let execute_Crxor (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (w__0 +. w__1)
+
+let execute_Crnor (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (~(w__0 |. w__1))
+
+let execute_Creqv (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (w__0 +. (~w__1))
+
+let execute_Crandc (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (w__0 &. (~w__1))
+
+let execute_Crorc (BT, BA, BB) =
+ read_reg_bit CR (add_VII (reset_vector_start BA) (32:ii)) >>= fun w__0 ->
+ read_reg_bit CR (add_VII (reset_vector_start BB) (32:ii)) >>= fun w__1 ->
+ write_reg_bit CR (add_VII (reset_vector_start BT) (32:ii)) (w__0 |. (~w__1))
+
+let execute_Mcrf (BF, BFA) =
+ read_reg_range CR
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BFA))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BFA))) (35:ii)) >>= fun w__0 ->
+ write_reg_range
+ CR (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (35:ii))
+ w__0
+
+let execute_Sc LEV = return ()
+
+let execute_Scv LEV = return ()
+
+let execute_Lbz (RT, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMr (reset_vector_start EA,(1:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1)
+
+let execute_Lbzx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(1:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lbzu (RT, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(1:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1)
+
+let execute_Lbzux (RT, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(1:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lhz (RT, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1)
+
+let execute_Lhzx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lhzu (RT, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1)
+
+let execute_Lhzux (RT, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lha (RT, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__1)))
+
+let execute_Lhax (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__2)))
+
+let execute_Lhau (RT, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__1)))
+
+let execute_Lhaux (RT, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__2)))
+
+let execute_Lwz (RT, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1)
+
+let execute_Lwzx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lwzu (RT, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1)
+
+let execute_Lwzux (RT, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lwa (RT, RA, DS) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV
+ (reset_vector_start b)
+ (reset_vector_start (exts ((64:ii),reset_vector_start (DS ^^ (Vector [B0;B0] 0 true)))))) in
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__1 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__1)))
+
+let execute_Lwax (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__2)))
+
+let execute_Lwaux (RT, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start w__2)))
+
+let execute_Ld (RT, RA, DS) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV
+ (reset_vector_start b)
+ (reset_vector_start (exts ((64:ii),reset_vector_start (DS ^^ (Vector [B0;B0] 0 true)))))) in
+ MEMr (reset_vector_start EA,(8:ii)) >>= fun w__1 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__1
+
+let execute_Ldx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(8:ii)) >>= fun w__2 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__2
+
+let execute_Ldu (RT, RA, DS) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts ((64:ii),reset_vector_start (DS ^^ (Vector [B0;B0] 0 true)))))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(8:ii)) >>= fun w__1 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__1
+
+let execute_Ldux (RT, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ MEMr (reset_vector_start EA,(8:ii)) >>= fun w__2 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__2
+
+let execute_Stb (RS, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMw_EA (reset_vector_start EA,(1:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(1:ii),reset_vector_start (set_vector_start 0 w__1))
+
+let execute_Stbx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(1:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(1:ii),reset_vector_start (set_vector_start 0 w__2))
+
+let execute_Stbu (RS, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMw_EA (reset_vector_start EA,(1:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(1:ii),reset_vector_start (set_vector_start 0 w__1))
+
+let execute_Stbux (RS, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(1:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(1:ii),reset_vector_start (set_vector_start 0 w__2))
+
+let execute_Sth (RS, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMw_EA (reset_vector_start EA,(2:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (63:ii) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(2:ii),reset_vector_start (set_vector_start 0 w__1))
+
+let execute_Sthx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(2:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (63:ii) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(2:ii),reset_vector_start (set_vector_start 0 w__2))
+
+let execute_Sthu (RS, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMw_EA (reset_vector_start EA,(2:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (63:ii) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(2:ii),reset_vector_start (set_vector_start 0 w__1))
+
+let execute_Sthux (RS, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(2:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (63:ii) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(2:ii),reset_vector_start (set_vector_start 0 w__2))
+
+let execute_Stw (RS, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMw_EA (reset_vector_start EA,(4:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(4:ii),reset_vector_start (set_vector_start 0 w__1))
+
+let execute_Stwx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(4:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(4:ii),reset_vector_start (set_vector_start 0 w__2))
+
+let execute_Stwu (RS, RA, D) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start w__0) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ MEMw_EA (reset_vector_start EA,(4:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(4:ii),reset_vector_start (set_vector_start 0 w__1))
+
+let execute_Stwux (RS, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(4:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(4:ii),reset_vector_start (set_vector_start 0 w__2))
+
+let execute_Std (RS, RA, DS) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV
+ (reset_vector_start b)
+ (reset_vector_start (exts ((64:ii),reset_vector_start (DS ^^ (Vector [B0;B0] 0 true)))))) in
+ MEMw_EA (reset_vector_start EA,(8:ii)) >>
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(8:ii),reset_vector_start w__1)
+
+let execute_Stdx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(8:ii)) >>
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(8:ii),reset_vector_start w__2)
+
+let execute_Stdu (RS, RA, DS) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let EA =
+ set_vector_start 0
+ (add_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts ((64:ii),reset_vector_start (DS ^^ (Vector [B0;B0] 0 true)))))) in
+ MEMw_EA (reset_vector_start EA,(8:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__1 ->
+ MEMw (reset_vector_start EA,(8:ii),reset_vector_start w__1)
+
+let execute_Stdux (RS, RA, RB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(8:ii)) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) EA >>
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__2 ->
+ MEMw (reset_vector_start EA,(8:ii),reset_vector_start w__2)
+
+let execute_Lhbrx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(2:ii)) >>= fun load_data ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ ((slice load_data (8:ii) (15:ii)) ^^ (slice load_data (0:ii) (7:ii))))
+
+let execute_Sthbrx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(2:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__2 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (55:ii) >>= fun w__3 ->
+ MEMw (reset_vector_start EA,(2:ii),reset_vector_start (w__2 ^^ w__3))
+
+let execute_Lwbrx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(4:ii)) >>= fun load_data ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ ((slice load_data (24:ii) (31:ii)) ^^
+ ((slice load_data (16:ii) (23:ii)) ^^
+ ((slice load_data (8:ii) (15:ii)) ^^ (slice load_data (0:ii) (7:ii))))))
+
+let execute_Stwbrx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(4:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__2 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (55:ii) >>= fun w__3 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (40:ii) (47:ii) >>= fun w__4 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (39:ii) >>= fun w__5 ->
+ MEMw (reset_vector_start EA,(4:ii),reset_vector_start (w__2 ^^ (w__3 ^^ (w__4 ^^ w__5))))
+
+let execute_Ldbrx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr (reset_vector_start EA,(8:ii)) >>= fun load_data ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((slice load_data (56:ii) (63:ii)) ^^
+ ((slice load_data (48:ii) (55:ii)) ^^
+ ((slice load_data (40:ii) (47:ii)) ^^
+ ((slice load_data (32:ii) (39:ii)) ^^
+ ((slice load_data (24:ii) (31:ii)) ^^
+ ((slice load_data (16:ii) (23:ii)) ^^
+ ((slice load_data (8:ii) (15:ii)) ^^ (slice load_data (0:ii) (7:ii)))))))))
+
+let execute_Stdbrx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA (reset_vector_start EA,(8:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__2 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (55:ii) >>= fun w__3 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (40:ii) (47:ii) >>= fun w__4 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (39:ii) >>= fun w__5 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (24:ii) (31:ii) >>= fun w__6 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (16:ii) (23:ii) >>= fun w__7 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (8:ii) (15:ii) >>= fun w__8 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (0:ii) (7:ii) >>= fun w__9 ->
+ MEMw
+ (reset_vector_start EA,
+ (8:ii),
+ reset_vector_start (w__2 ^^ (w__3 ^^ (w__4 ^^ (w__5 ^^ (w__6 ^^ (w__7 ^^ (w__8 ^^ w__9))))))))
+
+let execute_Lmw (RT, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ let size = (minus_IVI (32:ii) (reset_vector_start RT)) * (4:ii) in
+ MEMr (reset_vector_start EA,size) >>= fun buffer ->
+ let i = (0:ii) in
+ (foreachM_inc (unsigned (reset_vector_start RT),(31:ii),(1:ii)) i
+ (fun r i ->
+ write_reg
+ (access GPR r)
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (slice buffer i (i + (31:ii)))) >>
+ let i = i + (32:ii) in
+ return i)) >>= fun i ->
+ return ()
+
+let execute_Stmw (RS, RA, D) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let EA =
+ set_vector_start 0
+ (add_VVV (reset_vector_start b) (reset_vector_start (exts ((64:ii),reset_vector_start D)))) in
+ let size = (minus_IVI (32:ii) (reset_vector_start RS)) * (4:ii) in
+ MEMw_EA (reset_vector_start EA,size) >>
+ let buffer = make_indexed_vector [(0,B0);(993,B0)] B0 0 994 true in
+ let i = (0:ii) in
+ (foreachM_inc (unsigned (reset_vector_start RS),(31:ii),(1:ii)) (i,buffer)
+ (fun r (i,buffer) ->
+ read_reg_range (access GPR r) (32:ii) (63:ii) >>= fun w__1 ->
+ let buffer = update buffer i (i + (31:ii)) w__1 in
+ let i = i + (32:ii) in
+ return (i,buffer))) >>= fun (i, buffer) ->
+ MEMw
+ (reset_vector_start EA,
+ size,
+ reset_vector_start (slice buffer (0:ii) ((size * (8:ii)) - (1:ii))))
+
+let execute_Lswi (RT, RA, NB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ return EA
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun EA ->
+ let r = (0:ii) in
+ let r = minus_VII (reset_vector_start RT) (1:ii) in
+ let size =
+ if bitU_to_bool (eq_vec_range (NB, (0:ii)))
+ then (32:ii)
+ else unsigned (reset_vector_start NB) in
+ MEMr (reset_vector_start EA,size) >>= fun membuffer ->
+ let j = (0:ii) in
+ let i = (32:ii) in
+ (foreachM_dec (if bitU_to_bool (eq_vec_range (NB, (0:ii)))
+ then (32:ii)
+ else unsigned (reset_vector_start NB),(1:ii),(1:ii)) (EA,i,j,r)
+ (fun n (EA,i,j,r) ->
+ (if bitU_to_bool (eq_range (i, (32:ii)))
+ then
+ let r = modulo (r + (1:ii)) (32:ii) in
+ write_reg (access GPR r) (to_vec_inc ((64:ii),(0:ii))) >>
+ return r
+ else return r) >>= fun r ->
+ write_reg_range (access GPR r) i (i + (7:ii)) (slice membuffer j (j + (7:ii))) >>
+ let j = j + (8:ii) in
+ let i = i + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ let EA = set_vector_start 0 (add_VIV (reset_vector_start EA) (1:ii)) in
+ return (EA,i,j,r))) >>= fun (EA, i, j, r) ->
+ return ()
+
+let execute_Lswx (RT, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let r = (0:ii) in
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ let r = minus_VII (reset_vector_start RT) (1:ii) in
+ let i = (32:ii) in
+ read_reg_range XER (57:ii) (63:ii) >>= fun w__2 ->
+ let n_top = unsigned (reset_vector_start w__2) in
+ recalculate_dependency () >>
+ (if bitU_to_bool (eq_range (n_top, (0:ii)))
+ then
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (to_vec_inc_undef (64:ii)) >>
+ return r
+ else
+ MEMr (reset_vector_start EA,n_top) >>= fun membuffer ->
+ let j = (0:ii) in
+ let n_r = quot n_top (4:ii) in
+ let n_mod = modulo n_top (4:ii) in
+ let n_r = if bitU_to_bool (eq_range (n_mod, (0:ii))) then n_r else n_r + (1:ii) in
+ (foreachM_dec (n_r,(1:ii),(1:ii)) (j,r)
+ (fun n (j,r) ->
+ let r = modulo (r + (1:ii)) (32:ii) in
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ let temp =
+ if bitU_to_bool (eq_range (n, (1:ii)))
+ then
+ match toNatural n_mod with
+ | (0:nn) ->
+ update temp (32:ii) (63:ii) (set_vector_start 32 (slice membuffer j (j + (31:ii))))
+ | (1:nn) ->
+ update temp (32:ii) (39:ii) (set_vector_start 32 (slice membuffer j (j + (7:ii))))
+ | (2:nn) ->
+ update temp (32:ii) (47:ii) (set_vector_start 32 (slice membuffer j (j + (15:ii))))
+ | (3:nn) ->
+ update temp (32:ii) (55:ii) (set_vector_start 32 (slice membuffer j (j + (23:ii))))
+ end
+ else update temp (32:ii) (63:ii) (set_vector_start 32 (slice membuffer j (j + (31:ii)))) in
+ let j = j + (32:ii) in
+ write_reg (access GPR r) temp >>
+ return (j,r))) >>= fun (j, r) ->
+ return r) >>= fun r ->
+ return ()
+
+let execute_Stswi (RS, RA, NB) =
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ return EA
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun EA ->
+ let r = (0:ii) in
+ let r = minus_VII (reset_vector_start RS) (1:ii) in
+ let size =
+ if bitU_to_bool (eq_vec_range (NB, (0:ii)))
+ then (32:ii)
+ else unsigned (reset_vector_start NB) in
+ MEMw_EA (reset_vector_start EA,size) >>
+ let membuffer = make_indexed_vector [(0,B0);(255,B0)] B0 0 256 true in
+ let j = (0:ii) in
+ let i = (32:ii) in
+ (foreachM_dec (if bitU_to_bool (eq_vec_range (NB, (0:ii)))
+ then (32:ii)
+ else unsigned (reset_vector_start NB),(1:ii),(1:ii)) (i,j,membuffer,r)
+ (fun n (i,j,membuffer,r) ->
+ let r = if bitU_to_bool (eq_range (i, (32:ii))) then modulo (r + (1:ii)) (32:ii) else r in
+ read_reg_range (access GPR r) i (i + (7:ii)) >>= fun w__1 ->
+ let membuffer = update membuffer j (j + (7:ii)) w__1 in
+ let j = j + (8:ii) in
+ let i = i + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ return (i,j,membuffer,r))) >>= fun (i, j, membuffer, r) ->
+ MEMw
+ (reset_vector_start EA,
+ size,
+ reset_vector_start (slice membuffer (0:ii) ((size * (8:ii)) - (1:ii))))
+
+let execute_Stswx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ let r = (0:ii) in
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ let r = minus_VII (reset_vector_start RS) (1:ii) in
+ let i = (32:ii) in
+ read_reg_range XER (57:ii) (63:ii) >>= fun w__2 ->
+ let n_top = unsigned (reset_vector_start w__2) in
+ recalculate_dependency () >>
+ MEMw_EA (reset_vector_start EA,n_top) >>
+ let membuffer = make_indexed_vector [(0,B0);(511,B0)] B0 0 512 true in
+ let j = (0:ii) in
+ (foreachM_dec (n_top,(1:ii),(1:ii)) (j,i,membuffer,r)
+ (fun n (j,i,membuffer,r) ->
+ let r = if bitU_to_bool (eq_range (i, (32:ii))) then modulo (r + (1:ii)) (32:ii) else r in
+ read_reg_range (access GPR r) i (i + (7:ii)) >>= fun w__3 ->
+ let membuffer = update membuffer j (j + (7:ii)) w__3 in
+ let i = i + (8:ii) in
+ let j = j + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ return (j,i,membuffer,r))) >>= fun (j, i, membuffer, r) ->
+ if bitU_to_bool (~(eq_range (n_top, (0:ii))))
+ then
+ MEMw
+ (reset_vector_start EA,
+ n_top,
+ reset_vector_start (slice membuffer (0:ii) ((n_top * (8:ii)) - (1:ii))))
+ else return ()
+
+let execute_Addi (RT, RA, SI) =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (exts ((64:ii),reset_vector_start SI)))
+ else
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0
+ (add_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts ((64:ii),reset_vector_start SI)))))
+
+let execute_Addis (RT, RA, SI) =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0
+ (exts
+ ((64:ii),
+ reset_vector_start (SI ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))))
+ else
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0
+ (add_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts
+ ((64:ii),
+ reset_vector_start (SI ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))))))
+
+let execute_Add (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (temp, overflow, _) =
+ match (addSO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v0v', v1v', v2v') -> (v0v',v1v',v2v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 temp),xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Subf (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (t1, o1, _) =
+ match (addSO_VVV
+ (reset_vector_start (bitwise_not (reset_vector_start w__0)))
+ (reset_vector_start w__1)) with
+ | (v3v', v4v', v5v') -> (v3v',v4v',v5v')
+ end in
+ let (t2, o2, _) =
+ match (addSO_VBV (reset_vector_start t1) B1) with | (v6v', v7v', v8v') -> (v6v',v7v',v8v') end in
+ let temp = set_vector_start 0 t2 in
+ let overflow = o1 |. o2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start temp,xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Addic (RT, RA, SI) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let (temp, _, carry) =
+ match (addSO_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts ((64:ii),reset_vector_start SI)))) with
+ | (v9v', v10v', v11v') -> (v9v',v10v',v11v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ write_reg_bitfield XER "CA" carry
+
+let execute_AddicDot (RT, RA, SI) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let (temp, overflow, carry) =
+ match (addSO_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts ((64:ii),reset_vector_start SI)))) with
+ | (v12v', v13v', v14v') -> (v12v',v13v',v14v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ write_reg_bitfield XER "CA" carry >>
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 temp),overflow |. w__1)
+
+let execute_Subfic (RT, RA, SI) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let (t1, o1, c1) =
+ match (addSO_VVV
+ (reset_vector_start (bitwise_not (reset_vector_start w__0)))
+ (reset_vector_start (exts ((64:ii),reset_vector_start SI)))) with
+ | (v15v', v16v', v17v') -> (v15v',v16v',v17v')
+ end in
+ let (t2, o2, c2) =
+ match (addSO_VBV (reset_vector_start t1) B1) with
+ | (v18v', v19v', v20v') -> (v18v',v19v',v20v')
+ end in
+ let temp = set_vector_start 0 t2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ write_reg_bitfield XER "CA" (c1 |. c2)
+
+let execute_Addc (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (temp, overflow, carry) =
+ match (addSO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v21v', v22v', v23v') -> (v21v',v22v',v23v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 temp),xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Subfc (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (t1, o1, c1) =
+ match (addSO_VVV
+ (reset_vector_start (bitwise_not (reset_vector_start w__0)))
+ (reset_vector_start w__1)) with
+ | (v24v', v25v', v26v') -> (v24v',v25v',v26v')
+ end in
+ let (t2, o2, c2) =
+ match (addSO_VBV (reset_vector_start t1) B1) with
+ | (v27v', v28v', v29v') -> (v27v',v28v',v29v')
+ end in
+ let temp = set_vector_start 0 t2 in
+ let overflow = o1 |. o2 in
+ let carry = c1 |. c2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start temp,xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Adde (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (t1, o1, c1) =
+ match (addSO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v30v', v31v', v32v') -> (v30v',v31v',v32v')
+ end in
+ read_reg_bitfield XER "CA" >>= fun w__2 ->
+ let (t2, o2, c2) =
+ match (addSO_VBV (reset_vector_start t1) w__2) with
+ | (v33v', v34v', v35v') -> (v33v',v34v',v35v')
+ end in
+ let temp = set_vector_start 0 t2 in
+ let overflow = o1 |. o2 in
+ let carry = c1 |. c2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start temp,xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Subfe (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (t1, o1, c1) =
+ match (addSO_VVV
+ (reset_vector_start (bitwise_not (reset_vector_start w__0)))
+ (reset_vector_start w__1)) with
+ | (v36v', v37v', v38v') -> (v36v',v37v',v38v')
+ end in
+ read_reg_bitfield XER "CA" >>= fun w__2 ->
+ let (t2, o2, c2) =
+ match (addSO_VBV (reset_vector_start t1) w__2) with
+ | (v39v', v40v', v41v') -> (v39v',v40v',v41v')
+ end in
+ let temp = set_vector_start 0 t2 in
+ let overflow = o1 |. o2 in
+ let carry = c1 |. c2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start temp,xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Addme (RT, RA, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg_bitfield XER "CA" >>= fun w__1 ->
+ let (t1, o1, c1) =
+ match (addSO_VBV (reset_vector_start w__0) w__1) with
+ | (v42v', v43v', v44v') -> (v42v',v43v',v44v')
+ end in
+ let (t2, o2, c2) =
+ match (addSO_VVV
+ (reset_vector_start t1)
+ (reset_vector_start (Vector [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1] 0 true))) with
+ | (v45v', v46v', v47v') -> (v45v',v46v',v47v')
+ end in
+ let temp = set_vector_start 0 t2 in
+ let overflow = o1 |. o2 in
+ let carry = c1 |. c2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start temp,xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Subfme (RT, RA, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg_bitfield XER "CA" >>= fun w__1 ->
+ let (t1, o1, c1) =
+ match (addSO_VBV (reset_vector_start (bitwise_not (reset_vector_start w__0))) w__1) with
+ | (v48v', v49v', v50v') -> (v48v',v49v',v50v')
+ end in
+ let (t2, o2, c2) =
+ match (addSO_VVV
+ (reset_vector_start t1)
+ (reset_vector_start (Vector [B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;B1;
+ B1] 0 true))) with
+ | (v51v', v52v', v53v') -> (v51v',v52v',v53v')
+ end in
+ let temp = set_vector_start 0 t2 in
+ let overflow = o1 |. o2 in
+ let carry = c1 |. c2 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start temp,xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Addze (RT, RA, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg_bitfield XER "CA" >>= fun w__1 ->
+ let (temp, overflow, carry) =
+ match (addSO_VBV (reset_vector_start w__0) w__1) with
+ | (v54v', v55v', v56v') -> (v54v',v55v',v56v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 temp),xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Subfze (RT, RA, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg_bitfield XER "CA" >>= fun w__1 ->
+ let (temp, overflow, carry) =
+ match (addSO_VBV (reset_vector_start (bitwise_not (reset_vector_start w__0))) w__1) with
+ | (v57v', v58v', v59v') -> (v57v',v58v',v59v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 temp),xer_so)
+ else return ()) >>
+ write_reg_bitfield XER "CA" carry >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Neg (RT, RA, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let (temp, overflow, _) =
+ match (addSO_VBV (reset_vector_start (bitwise_not (reset_vector_start w__0))) B1) with
+ | (v60v', v61v', v62v') -> (v60v',v61v',v62v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 temp) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 temp),w__1)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Mulli (RT, RA, SI) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let prod =
+ set_vector_start 0
+ (multS_VVV
+ (reset_vector_start w__0)
+ (reset_vector_start (exts ((64:ii),reset_vector_start SI)))) in
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (slice prod (64:ii) (127:ii)))
+
+let execute_Mullw (RT, RA, RB, OE, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let (prod, overflow, _) =
+ match (multSO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v63v', v64v', v65v') -> (v63v',v64v',v65v')
+ end in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (set_vector_start 0 prod) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 prod),xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Mulhw (RT, RA, RB, Rc) =
+ let prod = to_vec_inc ((64:ii),(0:ii)) in
+ let overflow = B0 in
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let (p, o, _) =
+ match (multSO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v66v', v67v', v68v') -> (v66v',v67v',v68v')
+ end in
+ let prod = set_vector_start 0 p in
+ let overflow = o in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (32:ii)
+ (63:ii)
+ (set_vector_start 32 (slice prod (0:ii) (31:ii))) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (0:ii)
+ (31:ii)
+ (to_vec_inc_undef (((31:ii) - (0:ii)) + (1:ii))) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ read_reg mode64bit >>= fun w__2 ->
+ if bitU_to_bool (most_significant w__2)
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else set_overflow_cr0 (reset_vector_start prod,xer_so)
+ else return ()
+
+let execute_Mulhwu (RT, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let prod = set_vector_start 0 (mult_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (32:ii)
+ (63:ii)
+ (set_vector_start 32 (slice prod (0:ii) (31:ii))) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (0:ii)
+ (31:ii)
+ (to_vec_inc_undef (((31:ii) - (0:ii)) + (1:ii))) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ read_reg mode64bit >>= fun w__2 ->
+ if bitU_to_bool (most_significant w__2)
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else set_overflow_cr0 (reset_vector_start prod,xer_so)
+ else return ()
+
+let execute_Divw (RT, RA, RB, OE, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let dividend = set_vector_start 0 w__0 in
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let divisor = set_vector_start 0 w__1 in
+ let divided =
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotSO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v69v', v70v', v71v') -> (v69v',v70v',v71v')
+ end in
+ let divided = update divided (32:ii) (63:ii) (set_vector_start 32 d) in
+ let overflow = o in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (32:ii)
+ (63:ii)
+ (slice divided (32:ii) (63:ii)) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (0:ii)
+ (31:ii)
+ (to_vec_inc_undef (((31:ii) - (0:ii)) + (1:ii))) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ read_reg mode64bit >>= fun w__2 ->
+ if bitU_to_bool ((most_significant w__2) |. overflow)
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else set_overflow_cr0 (reset_vector_start divided,xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Divwu (RT, RA, RB, OE, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let dividend = set_vector_start 0 w__0 in
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let divisor = set_vector_start 0 w__1 in
+ let divided =
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v72v', v73v', v74v') -> (v72v',v73v',v74v')
+ end in
+ let divided = update divided (32:ii) (63:ii) (set_vector_start 32 d) in
+ let overflow = o in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (32:ii)
+ (63:ii)
+ (slice divided (32:ii) (63:ii)) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (0:ii)
+ (31:ii)
+ (to_vec_inc_undef (((31:ii) - (0:ii)) + (1:ii))) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ read_reg mode64bit >>= fun w__2 ->
+ if bitU_to_bool ((most_significant w__2) |. overflow)
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else set_overflow_cr0 (reset_vector_start divided,xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Divwe (RT, RA, RB, OE, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let dividend =
+ w__0 ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) in
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let divisor = set_vector_start 0 w__1 in
+ let divided =
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotSO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v75v', v76v', v77v') -> (v75v',v76v',v77v')
+ end in
+ let divided = update divided (32:ii) (63:ii) (slice d (32:ii) (63:ii)) in
+ let overflow = o in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (32:ii)
+ (63:ii)
+ (slice divided (32:ii) (63:ii)) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (0:ii)
+ (31:ii)
+ (to_vec_inc_undef (((31:ii) - (0:ii)) + (1:ii))) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ read_reg mode64bit >>= fun w__2 ->
+ if bitU_to_bool ((most_significant w__2) |. overflow)
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else set_overflow_cr0 (reset_vector_start divided,xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Divweu (RT, RA, RB, OE, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let dividend =
+ w__0 ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) in
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let divisor = set_vector_start 0 w__1 in
+ let divided =
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v78v', v79v', v80v') -> (v78v',v79v',v80v')
+ end in
+ let divided = update divided (32:ii) (63:ii) (slice d (32:ii) (63:ii)) in
+ let overflow = o in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (32:ii)
+ (63:ii)
+ (slice divided (32:ii) (63:ii)) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RT))) (0:ii)
+ (31:ii)
+ (to_vec_inc_undef (((31:ii) - (0:ii)) + (1:ii))) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ read_reg mode64bit >>= fun w__2 ->
+ if bitU_to_bool ((most_significant w__2) |. overflow)
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else set_overflow_cr0 (reset_vector_start divided,xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Mulld (RT, RA, RB, OE, Rc) =
+ let prod = to_vec_inc ((128:ii),(0:ii)) in
+ let overflow = B0 in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let (p, o, _) =
+ match (multSO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v81v', v82v', v83v') -> (v81v',v82v',v83v')
+ end in
+ let prod = set_vector_start 0 p in
+ let overflow = o in
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (slice prod (64:ii) (127:ii))) >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ set_overflow_cr0 (reset_vector_start (set_vector_start 0 (slice prod (64:ii) (127:ii))),xer_so)
+ else return ()) >>
+ if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()
+
+let execute_Mulhd (RT, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let prod = set_vector_start 0 (multS_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (slice prod (0:ii) (63:ii)) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start (slice prod (0:ii) (63:ii)),w__2)
+ else return ()
+
+let execute_Mulhdu (RT, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let prod = set_vector_start 0 (mult_VVV (reset_vector_start w__0) (reset_vector_start w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) (slice prod (0:ii) (63:ii)) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start (slice prod (0:ii) (63:ii)),w__2)
+ else return ()
+
+let execute_Divd (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun dividend ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun divisor ->
+ let divided =
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotSO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v84v', v85v', v86v') -> (v84v',v85v',v86v')
+ end in
+ let divided = set_vector_start 0 d in
+ let overflow = o in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) divided >>
+ (if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__0 ->
+ set_overflow_cr0 (reset_vector_start divided,overflow |. w__0)
+ else return ()
+
+let execute_Divdu (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun dividend ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun divisor ->
+ let divided =
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v87v', v88v', v89v') -> (v87v',v88v',v89v')
+ end in
+ let divided = set_vector_start 0 d in
+ let overflow = o in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) divided >>
+ (if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__0 ->
+ set_overflow_cr0 (reset_vector_start divided,overflow |. w__0)
+ else return ()
+
+let execute_Divde (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let dividend =
+ w__0 ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true) in
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun divisor ->
+ let divided = to_vec_inc ((128:ii),(0:ii)) in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotSO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v90v', v91v', v92v') -> (v90v',v91v',v92v')
+ end in
+ let divided = set_vector_start 0 d in
+ let overflow = o in
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (slice divided (64:ii) (127:ii))) >>
+ (if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ if bitU_to_bool overflow
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else
+ set_overflow_cr0
+ (reset_vector_start (set_vector_start 0 (slice divided (64:ii) (127:ii))),
+ xer_so)
+ else return ()
+
+let execute_Divdeu (RT, RA, RB, OE, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__0 ->
+ let dividend =
+ w__0 ^^
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true) in
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun divisor ->
+ let divided = to_vec_inc ((128:ii),(0:ii)) in
+ let overflow = B0 in
+ let (d, o, _) =
+ match (quotO_VVV (reset_vector_start dividend) (reset_vector_start divisor)) with
+ | (v93v', v94v', v95v') -> (v93v',v94v',v95v')
+ end in
+ let divided = set_vector_start 0 d in
+ let overflow = o in
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0 (slice divided (64:ii) (127:ii))) >>
+ (if bitU_to_bool OE
+ then set_SO_OV overflow
+ else return ()) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun xer_so ->
+ let xer_so = if bitU_to_bool (OE &. overflow) then overflow else xer_so in
+ if bitU_to_bool overflow
+ then write_reg_field CR "CR0" (set_vector_start 32 (Vector [BU;BU;BU;xer_so] 0 true))
+ else
+ set_overflow_cr0
+ (reset_vector_start (set_vector_start 0 (slice divided (64:ii) (127:ii))),
+ xer_so)
+ else return ()
+
+let execute_Cmpi (BF, L, RA, SI) =
+ let a = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let a = set_vector_start 0 (exts ((64:ii),reset_vector_start w__0)) in
+ return a
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun a ->
+ let c = make_indexed_vector [] B0 0 3 true in
+ let c =
+ if bitU_to_bool (lt_vec (a, exts ((64:ii),reset_vector_start SI)))
+ then Vector [B1;B0;B0] 0 true
+ else
+ if bitU_to_bool (gt_vec (a, exts ((64:ii),reset_vector_start SI)))
+ then Vector [B0;B1;B0] 0 true
+ else Vector [B0;B0;B1] 0 true in
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ write_reg_range
+ CR (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (35:ii))
+ (c ^^ (Vector [w__2] 0 true))
+
+let execute_Cmp (BF, L, RA, RB) =
+ let a = to_vec_inc ((64:ii),(0:ii)) in
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let a = set_vector_start 0 (exts ((64:ii),reset_vector_start w__0)) in
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let b = set_vector_start 0 (exts ((64:ii),reset_vector_start w__1)) in
+ return (a,b)
+ else
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__2 ->
+ let a = w__2 in
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__3 ->
+ let b = w__3 in
+ return (a,b)) >>= fun (a, b) ->
+ let c = make_indexed_vector [] B0 0 3 true in
+ let c =
+ if bitU_to_bool (lt_vec (a, b))
+ then Vector [B1;B0;B0] 0 true
+ else if bitU_to_bool (gt_vec (a, b)) then Vector [B0;B1;B0] 0 true else Vector [B0;B0;B1] 0 true in
+ read_reg_bitfield XER "SO" >>= fun w__4 ->
+ write_reg_range
+ CR (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (35:ii))
+ (c ^^ (Vector [w__4] 0 true))
+
+let execute_Cmpli (BF, L, RA, UI) =
+ let a = to_vec_inc ((64:ii),(0:ii)) in
+ let c = to_vec_inc ((3:ii),(0:ii)) in
+ (if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let a =
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__0 in
+ return a
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun a ->
+ let c =
+ if bitU_to_bool
+ (lt_vec_unsigned
+ (a,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ UI))
+ then Vector [B1;B0;B0] 0 true
+ else
+ if bitU_to_bool
+ (gt_vec_unsigned
+ (a,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ UI))
+ then Vector [B0;B1;B0] 0 true
+ else Vector [B0;B0;B1] 0 true in
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ write_reg_range
+ CR (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (35:ii))
+ (c ^^ (Vector [w__2] 0 true))
+
+let execute_Cmpl (BF, L, RA, RB) =
+ let a = to_vec_inc ((64:ii),(0:ii)) in
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let c = to_vec_inc ((3:ii),(0:ii)) in
+ (if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) (32:ii) (63:ii) >>= fun w__0 ->
+ let a =
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__0 in
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (32:ii) (63:ii) >>= fun w__1 ->
+ let b =
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__1 in
+ return (a,b)
+ else
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__2 ->
+ let a = w__2 in
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__3 ->
+ let b = w__3 in
+ return (a,b)) >>= fun (a, b) ->
+ let c =
+ if bitU_to_bool (lt_vec_unsigned (a, b))
+ then Vector [B1;B0;B0] 0 true
+ else
+ if bitU_to_bool (gt_vec_unsigned (a, b))
+ then Vector [B0;B1;B0] 0 true
+ else Vector [B0;B0;B1] 0 true in
+ read_reg_bitfield XER "SO" >>= fun w__4 ->
+ write_reg_range
+ CR (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (35:ii))
+ (c ^^ (Vector [w__4] 0 true))
+
+let execute_Isel (RT, RA, RB, BC) =
+ let a = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let a = to_vec_inc ((64:ii),(0:ii)) in
+ return a
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun a ->
+ read_reg_bit CR (add_VII (reset_vector_start BC) (32:ii)) >>= fun w__1 ->
+ if bitU_to_bool (eq (match w__1 with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then
+ write_reg (access GPR (unsigned (reset_vector_start RT))) a >>
+ let discard = access GPR (unsigned (reset_vector_start RB)) in
+ return ()
+ else
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__2 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__2
+
+let execute_Andi (RS, RA, UI) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let temp =
+ set_vector_start 0
+ (bitwise_and
+ (w__0,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ UI)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+
+let execute_Andis (RS, RA, UI) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let temp =
+ set_vector_start 0
+ (bitwise_and
+ (w__0,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (UI ^^ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+
+let execute_Ori (RS, RA, UI) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RA)))
+ (set_vector_start 0
+ (bitwise_or
+ (w__0,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ UI)))
+
+let execute_Oris (RS, RA, UI) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RA)))
+ (set_vector_start 0
+ (bitwise_or
+ (w__0,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (UI ^^ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))))
+
+let execute_Xori (RS, RA, UI) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RA)))
+ (set_vector_start 0
+ (bitwise_xor
+ (w__0,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ UI)))
+
+let execute_Xoris (RS, RA, UI) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RA)))
+ (set_vector_start 0
+ (bitwise_xor
+ (w__0,
+ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (UI ^^ (Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true)))))
+
+let execute_And (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_and (w__0, w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Xor (RS, RA, RB, Rc) =
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec (RS, RB))
+ then
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let temp = w__0 in
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) (to_vec_inc ((64:ii),(0:ii))) >>
+ return temp
+ else
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__1 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__2 ->
+ let temp = set_vector_start 0 (bitwise_xor (w__1, w__2)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ return temp) >>= fun temp ->
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ set_overflow_cr0 (reset_vector_start temp,w__3)
+ else return ()
+
+let execute_Nand (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_not (reset_vector_start (bitwise_and (w__0, w__1)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Or (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_or (w__0, w__1)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Nor (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_not (reset_vector_start (bitwise_or (w__0, w__1)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Eqv (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_xor (w__0, bitwise_not (reset_vector_start w__1))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Andc (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_and (w__0, bitwise_not (reset_vector_start w__1))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Orc (RS, RA, RB, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let temp = set_vector_start 0 (bitwise_or (w__0, bitwise_not (reset_vector_start w__1))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Extsb (RS, RA, Rc) =
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (56:ii) >>= fun s ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__0 ->
+ let temp = update temp (56:ii) (63:ii) w__0 in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (56:ii)
+ (63:ii)
+ (slice temp (56:ii) (63:ii)) >>
+ let temp = update temp (0:ii) (55:ii) (duplicate (s, (56:ii))) in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (0:ii)
+ (55:ii)
+ (slice temp (0:ii) (55:ii)) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Extsh (RS, RA, Rc) =
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (48:ii) >>= fun s ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (63:ii) >>= fun w__0 ->
+ let temp = update temp (48:ii) (63:ii) w__0 in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (48:ii)
+ (63:ii)
+ (slice temp (48:ii) (63:ii)) >>
+ let temp = update temp (0:ii) (47:ii) (duplicate (s, (48:ii))) in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (0:ii)
+ (47:ii)
+ (slice temp (0:ii) (47:ii)) >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Cntlzw (RS, RA, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let temp = to_vec_inc ((64:ii),countLeadingZeroes (reset_vector_start w__0,(32:ii))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Cmpb (RS, RA, RB) =
+ (foreachM_inc ((0:ii),(7:ii),(1:ii)) ()
+ (fun n _ ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS)))
+ ((8:ii) * n) (((8:ii) * n) + (7:ii)) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RB)))
+ ((8:ii) * n) (((8:ii) * n) + (7:ii)) >>= fun w__1 ->
+ if bitU_to_bool (eq_vec (w__0, w__1))
+ then
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) ((8:ii) * n)
+ (((8:ii) * n) + (7:ii))
+ (Vector [B1;B1;B1;B1;B1;B1;B1;B1] 0 true)
+ else
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) ((8:ii) * n)
+ (((8:ii) * n) + (7:ii))
+ (to_vec_inc ((8:ii),(0:ii)))))
+
+let execute_Popcntb (RS, RA) =
+ (foreachM_inc ((0:ii),(7:ii),(1:ii)) ()
+ (fun i _ ->
+ let n = (0:ii) in
+ (foreachM_inc ((0:ii),(7:ii),(1:ii)) n
+ (fun j n ->
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) ((i * (8:ii)) + j) >>= fun w__0 ->
+ let n =
+ if bitU_to_bool (eq (match w__0 with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then n + (1:ii)
+ else n in
+ return n)) >>= fun n ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (i * (8:ii))
+ ((i * (8:ii)) + (7:ii))
+ (to_vec_inc ((8:ii),n))))
+
+let execute_Popcntw (RS, RA) =
+ (foreachM_inc ((0:ii),(1:ii),(1:ii)) ()
+ (fun i _ ->
+ let n = (0:ii) in
+ (foreachM_inc ((0:ii),(31:ii),(1:ii)) n
+ (fun j n ->
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) ((i * (32:ii)) + j) >>= fun w__0 ->
+ let n =
+ if bitU_to_bool (eq (match w__0 with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then n + (1:ii)
+ else n in
+ return n)) >>= fun n ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (i * (32:ii))
+ ((i * (32:ii)) + (31:ii))
+ (to_vec_inc ((32:ii),n))))
+
+let execute_Prtyd (RS, RA) =
+ let s = (0:ii) in
+ (foreachM_inc ((0:ii),(7:ii),(1:ii)) s
+ (fun i s ->
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) ((i * (8:ii)) + (7:ii)) >>= fun w__0 ->
+ let s =
+ match ((if bitU_to_bool (is_one s)
+ then B1
+ else B0) +. w__0) with
+ | B0 -> (0:ii)
+ | B1 -> (1:ii)
+ end in
+ return s)) >>= fun s ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RA)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (Vector [if bitU_to_bool (is_one s) then B1 else B0] 0 true))
+
+let execute_Prtyw (RS, RA) =
+ let s = (0:ii) in
+ let t = (0:ii) in
+ (foreachM_inc ((0:ii),(3:ii),(1:ii)) s
+ (fun i s ->
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) ((i * (8:ii)) + (7:ii)) >>= fun w__0 ->
+ let s =
+ match ((if bitU_to_bool (is_one s)
+ then B1
+ else B0) +. w__0) with
+ | B0 -> (0:ii)
+ | B1 -> (1:ii)
+ end in
+ return s)) >>= fun s ->
+ (foreachM_inc ((4:ii),(7:ii),(1:ii)) t
+ (fun i t ->
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) ((i * (8:ii)) + (7:ii)) >>= fun w__1 ->
+ let t =
+ match ((if bitU_to_bool (is_one t)
+ then B1
+ else B0) +. w__1) with
+ | B0 -> (0:ii)
+ | B1 -> (1:ii)
+ end in
+ return t)) >>= fun t ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (0:ii)
+ (31:ii)
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (Vector [if bitU_to_bool (is_one s) then B1 else B0] 0 true)) >>
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (32:ii)
+ (63:ii)
+ (set_vector_start 32
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (Vector [if bitU_to_bool (is_one t) then B1 else B0] 0 true)))
+
+let execute_Extsw (RS, RA, Rc) =
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (32:ii) >>= fun s ->
+ let temp = to_vec_inc ((64:ii),(0:ii)) in
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ let temp = update temp (32:ii) (63:ii) w__0 in
+ let temp = update temp (0:ii) (31:ii) (duplicate (s, (32:ii))) in
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()) >>
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp
+
+let execute_Cntlzd (RS, RA, Rc) =
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let temp = to_vec_inc ((64:ii),countLeadingZeroes (reset_vector_start w__0,(0:ii))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Popcntd (RS, RA) =
+ let n = (0:ii) in
+ (foreachM_inc ((0:ii),(63:ii),(1:ii)) n
+ (fun i n ->
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) i >>= fun w__0 ->
+ let n =
+ if bitU_to_bool (eq (match w__0 with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then n + (1:ii)
+ else n in
+ return n)) >>= fun n ->
+ write_reg (access GPR (unsigned (reset_vector_start RA))) (to_vec_inc ((64:ii),n))
+
+let execute_Bpermd (RS, RA, RB) =
+ let perm = to_vec_inc ((8:ii),(0:ii)) in
+ (foreachM_inc ((0:ii),(7:ii),(1:ii)) perm
+ (fun i perm ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS)))
+ ((8:ii) * i) (((8:ii) * i) + (7:ii)) >>= fun index ->
+ if bitU_to_bool (lt_vec_unsigned (index, to_vec_inc ((8:ii),(64:ii))))
+ then
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (unsigned
+ (reset_vector_start index)) >>= fun w__0 ->
+ let perm = update_pos perm i w__0 in
+ return perm
+ else
+ let perm = update_pos perm i B0 in
+ let discard = access GPR (unsigned (reset_vector_start RB)) in
+ return perm)) >>= fun perm ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RA)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ (slice perm (0:ii) (7:ii)))
+
+let execute_Rlwinm (RS, RA, SH, MB, ME, Rc) =
+ let n = SH in
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),unsigned (reset_vector_start n)) in
+ let m = MASK (add_VII (reset_vector_start MB) (32:ii),add_VII (reset_vector_start ME) (32:ii)) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Rlwnm (RS, RA, RB, MB, ME, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (59:ii) (63:ii) >>= fun n ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),unsigned (reset_vector_start n)) in
+ let m = MASK (add_VII (reset_vector_start MB) (32:ii),add_VII (reset_vector_start ME) (32:ii)) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Rlwimi (RS, RA, SH, MB, ME, Rc) =
+ let n = SH in
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),unsigned (reset_vector_start n)) in
+ let m = MASK (add_VII (reset_vector_start MB) (32:ii),add_VII (reset_vector_start ME) (32:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__2 ->
+ let temp =
+ set_vector_start 0
+ (bitwise_or (bitwise_and (r, m), bitwise_and (w__2, bitwise_not (reset_vector_start m)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ set_overflow_cr0 (reset_vector_start temp,w__3)
+ else return ()
+
+let execute_Rldicl (RS, RA, sh, mb, Rc) =
+ let n = (Vector [access sh (5:ii)] 0 true) ^^ (slice sh (0:ii) (4:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let b = (Vector [access mb (5:ii)] 0 true) ^^ (slice mb (0:ii) (4:ii)) in
+ let m = MASK (unsigned (reset_vector_start b),(63:ii)) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Rldicr (RS, RA, sh, me, Rc) =
+ let n = (Vector [access sh (5:ii)] 0 true) ^^ (slice sh (0:ii) (4:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let e = (Vector [access me (5:ii)] 0 true) ^^ (slice me (0:ii) (4:ii)) in
+ let m = MASK ((0:ii),unsigned (reset_vector_start e)) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Rldic (RS, RA, sh, mb, Rc) =
+ let n = (Vector [access sh (5:ii)] 0 true) ^^ (slice sh (0:ii) (4:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let b = (Vector [access mb (5:ii)] 0 true) ^^ (slice mb (0:ii) (4:ii)) in
+ let m =
+ MASK
+ (unsigned (reset_vector_start b),
+ unsigned (reset_vector_start (bitwise_not (reset_vector_start n)))) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Rldcl (RS, RA, RB, mb, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (58:ii) (63:ii) >>= fun n ->
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let b = (Vector [access mb (5:ii)] 0 true) ^^ (slice mb (0:ii) (4:ii)) in
+ let m = MASK (unsigned (reset_vector_start b),(63:ii)) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Rldcr (RS, RA, RB, me, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (58:ii) (63:ii) >>= fun n ->
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let e = (Vector [access me (5:ii)] 0 true) ^^ (slice me (0:ii) (4:ii)) in
+ let m = MASK ((0:ii),unsigned (reset_vector_start e)) in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()
+
+let execute_Rldimi (RS, RA, sh, mb, Rc) =
+ let n = (Vector [access sh (5:ii)] 0 true) ^^ (slice sh (0:ii) (4:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let b = (Vector [access mb (5:ii)] 0 true) ^^ (slice mb (0:ii) (4:ii)) in
+ let m =
+ MASK
+ (unsigned (reset_vector_start b),
+ unsigned (reset_vector_start (bitwise_not (reset_vector_start n)))) in
+ read_reg (access GPR (unsigned (reset_vector_start RA))) >>= fun w__1 ->
+ let temp =
+ set_vector_start 0
+ (bitwise_or (bitwise_and (r, m), bitwise_and (w__1, bitwise_not (reset_vector_start m)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Slw (RS, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (59:ii) (63:ii) >>= fun n ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),unsigned (reset_vector_start n)) in
+ let m = make_indexed_vector [] B0 0 64 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (58:ii) >>= fun w__2 ->
+ let m =
+ if bitU_to_bool (eq (match w__2 with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then MASK ((32:ii),minus_IVI (63:ii) (reset_vector_start n))
+ else
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ set_overflow_cr0 (reset_vector_start temp,w__3)
+ else return ()
+
+let execute_Srw (RS, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (59:ii) (63:ii) >>= fun n ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),minus_IVI (64:ii) (reset_vector_start n)) in
+ let m = make_indexed_vector [] B0 0 64 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (58:ii) >>= fun w__2 ->
+ let m =
+ if bitU_to_bool (eq (match w__2 with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then MASK (add_VII (reset_vector_start n) (32:ii),(63:ii))
+ else
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ set_overflow_cr0 (reset_vector_start temp,w__3)
+ else return ()
+
+let execute_Srawi (RS, RA, SH, Rc) =
+ let n = SH in
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),minus_IVI (64:ii) (reset_vector_start n)) in
+ let m = MASK (add_VII (reset_vector_start n) (32:ii),(63:ii)) in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (32:ii) >>= fun s ->
+ let temp =
+ set_vector_start 0
+ (bitwise_or
+ (bitwise_and (r, m),
+ bitwise_and (duplicate (s, (64:ii)), bitwise_not (reset_vector_start m)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()) >>
+ write_reg_bitfield
+ XER "CA"
+ (if bitU_to_bool (gt_vec_unsigned (n, to_vec_inc ((5:ii),(0:ii))))
+ then s &. (~(eq_vec_range (bitwise_and (r, bitwise_not (reset_vector_start m)), (0:ii))))
+ else B0)
+
+let execute_Sraw (RS, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (59:ii) (63:ii) >>= fun n ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__1 ->
+ let r = ROTL (reset_vector_start (w__0 ^^ w__1),minus_IVI (64:ii) (reset_vector_start n)) in
+ let m = make_indexed_vector [] B0 0 64 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (58:ii) >>= fun w__2 ->
+ let m =
+ if bitU_to_bool (eq (match w__2 with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then MASK (add_VII (reset_vector_start n) (32:ii),(63:ii))
+ else
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (32:ii) >>= fun s ->
+ let temp =
+ set_vector_start 0
+ (bitwise_or
+ (bitwise_and (r, m),
+ bitwise_and (duplicate (s, (64:ii)), bitwise_not (reset_vector_start m)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ set_overflow_cr0 (reset_vector_start temp,w__3)
+ else return ()) >>
+ write_reg_bitfield
+ XER "CA"
+ (if bitU_to_bool (gt_vec_unsigned (n, to_vec_inc ((5:ii),(0:ii))))
+ then s &. (~(eq_vec_range (bitwise_and (r, bitwise_not (reset_vector_start m)), (0:ii))))
+ else B0)
+
+let execute_Sld (RS, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (58:ii) (63:ii) >>= fun n ->
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,unsigned (reset_vector_start n)) in
+ let m = make_indexed_vector [] B0 0 64 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (57:ii) >>= fun w__1 ->
+ let m =
+ if bitU_to_bool (eq (match w__1 with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then MASK ((0:ii),minus_IVI (63:ii) (reset_vector_start n))
+ else
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Srd (RS, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (58:ii) (63:ii) >>= fun n ->
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,minus_IVI (64:ii) (reset_vector_start n)) in
+ let m = make_indexed_vector [] B0 0 64 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (57:ii) >>= fun w__1 ->
+ let m =
+ if bitU_to_bool (eq (match w__1 with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then MASK (unsigned (reset_vector_start n),(63:ii))
+ else
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ let temp = set_vector_start 0 (bitwise_and (r, m)) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()
+
+let execute_Sradi (RS, RA, sh, Rc) =
+ let n = (Vector [access sh (5:ii)] 0 true) ^^ (slice sh (0:ii) (4:ii)) in
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,minus_IVI (64:ii) (reset_vector_start n)) in
+ let m = MASK (unsigned (reset_vector_start n),(63:ii)) in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (0:ii) >>= fun s ->
+ let temp =
+ set_vector_start 0
+ (bitwise_or
+ (bitwise_and (r, m),
+ bitwise_and (duplicate (s, (64:ii)), bitwise_not (reset_vector_start m)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__1 ->
+ set_overflow_cr0 (reset_vector_start temp,w__1)
+ else return ()) >>
+ write_reg_bitfield
+ XER "CA"
+ (if bitU_to_bool (gt_vec_unsigned (n, to_vec_inc ((6:ii),(0:ii))))
+ then s &. (~(eq_vec_range (bitwise_and (r, bitwise_not (reset_vector_start m)), (0:ii))))
+ else B0)
+
+let execute_Srad (RS, RA, RB, Rc) =
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) (58:ii) (63:ii) >>= fun n ->
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__0 ->
+ let r = ROTL (reset_vector_start w__0,minus_IVI (64:ii) (reset_vector_start n)) in
+ let m = make_indexed_vector [] B0 0 64 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RB))) (57:ii) >>= fun w__1 ->
+ let m =
+ if bitU_to_bool (eq (match w__1 with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then MASK (unsigned (reset_vector_start n),(63:ii))
+ else
+ Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0] 0 true in
+ read_reg_bit (access GPR (unsigned (reset_vector_start RS))) (0:ii) >>= fun s ->
+ let temp =
+ set_vector_start 0
+ (bitwise_or
+ (bitwise_and (r, m),
+ bitwise_and (duplicate (s, (64:ii)), bitwise_not (reset_vector_start m)))) in
+ write_reg (access GPR (unsigned (reset_vector_start RA))) temp >>
+ (if bitU_to_bool Rc
+ then
+ read_reg_bitfield XER "SO" >>= fun w__2 ->
+ set_overflow_cr0 (reset_vector_start temp,w__2)
+ else return ()) >>
+ write_reg_bitfield
+ XER "CA"
+ (if bitU_to_bool (gt_vec_unsigned (n, to_vec_inc ((6:ii),(0:ii))))
+ then s &. (~(eq_vec_range (bitwise_and (r, bitwise_not (reset_vector_start m)), (0:ii))))
+ else B0)
+
+let execute_Cdtbcd (RS, RA) =
+ (foreachM_inc ((0:ii),(1:ii),(1:ii)) ()
+ (fun i _ ->
+ let n = i * (32:ii) in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (n + (0:ii))
+ (n + (7:ii))
+ (to_vec_inc ((8:ii),(0:ii))) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (n + (12:ii)) (n + (21:ii)) >>= fun w__0 ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (n + (8:ii))
+ (n + (19:ii))
+ (DEC_TO_BCD (reset_vector_start (set_vector_start 0 w__0))) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (n + (22:ii)) (n + (31:ii)) >>= fun w__1 ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (n + (20:ii))
+ (n + (31:ii))
+ (DEC_TO_BCD (reset_vector_start (set_vector_start 0 w__1)))))
+
+let execute_Cbcdtd (RS, RA) =
+ (foreachM_inc ((0:ii),(1:ii),(1:ii)) ()
+ (fun i _ ->
+ let n = i * (32:ii) in
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (n + (0:ii))
+ (n + (11:ii))
+ (to_vec_inc ((12:ii),(0:ii))) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (n + (8:ii)) (n + (19:ii)) >>= fun w__0 ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (n + (12:ii))
+ (n + (21:ii))
+ (BCD_TO_DEC (reset_vector_start (set_vector_start 0 w__0))) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (n + (20:ii)) (n + (31:ii)) >>= fun w__1 ->
+ write_reg_range
+ (access GPR (unsigned (reset_vector_start RA))) (n + (22:ii))
+ (n + (31:ii))
+ (BCD_TO_DEC (reset_vector_start (set_vector_start 0 w__1)))))
+
+let execute_Addg6s (RT, RA, RB) =
+ let dc = to_vec_inc ((16:ii),(0:ii)) in
+ (foreachM_inc ((0:ii),(15:ii),(1:ii)) dc
+ (fun i dc ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RA))) ((4:ii) * i) (63:ii) >>= fun w__0 ->
+ read_reg_range (access GPR (unsigned (reset_vector_start RB))) ((4:ii) * i) (63:ii) >>= fun w__1 ->
+ let (v, _, co) =
+ match (addO_VVV (reset_vector_start w__0) (reset_vector_start w__1)) with
+ | (v96v', v97v', v98v') -> (v96v',v97v',v98v')
+ end in
+ let dc = update_pos dc i (carry_out (reset_vector_start (set_vector_start 0 v),co)) in
+ return dc)) >>= fun dc ->
+ let c =
+ (duplicate (access dc (0:ii), (4:ii))) ^^
+ ((duplicate (access dc (1:ii), (4:ii))) ^^
+ ((duplicate (access dc (2:ii), (4:ii))) ^^
+ ((duplicate (access dc (3:ii), (4:ii))) ^^
+ ((duplicate (access dc (4:ii), (4:ii))) ^^
+ ((duplicate (access dc (5:ii), (4:ii))) ^^
+ ((duplicate (access dc (6:ii), (4:ii))) ^^
+ ((duplicate (access dc (7:ii), (4:ii))) ^^
+ ((duplicate (access dc (8:ii), (4:ii))) ^^
+ ((duplicate (access dc (9:ii), (4:ii))) ^^
+ ((duplicate (access dc (10:ii), (4:ii))) ^^
+ ((duplicate (access dc (11:ii), (4:ii))) ^^
+ ((duplicate (access dc (12:ii), (4:ii))) ^^
+ ((duplicate (access dc (13:ii), (4:ii))) ^^
+ ((duplicate (access dc (14:ii), (4:ii))) ^^ (duplicate (access dc (15:ii), (4:ii))))))))))))))))) in
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ (set_vector_start 0
+ (bitwise_and
+ (bitwise_not (reset_vector_start c),
+ Vector [B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;
+ B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;
+ B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;B0;B0;B1;B1;
+ B0] 0 true)))
+
+let execute_Mtspr (RS, spr) =
+ let n = (slice spr (5:ii) (9:ii)) ^^ (slice spr (0:ii) (4:ii)) in
+ if bitU_to_bool (eq_vec_range (n, (13:ii)))
+ then trap ()
+ else
+ if bitU_to_bool (eq_vec_range (n, (1:ii)))
+ then
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun reg ->
+ let front = zero_or_undef (reset_vector_start (slice reg (0:ii) (31:ii))) in
+ let xer_so = access reg (32:ii) in
+ let xer_ov = access reg (33:ii) in
+ let xer_ca = access reg (34:ii) in
+ let mid = zero_or_undef (reset_vector_start (set_vector_start 0 (slice reg (35:ii) (56:ii)))) in
+ let bot = set_vector_start 0 (slice reg (57:ii) (63:ii)) in
+ write_reg
+ XER
+ (front ^^
+ ((Vector [xer_so] 0 true) ^^
+ ((Vector [xer_ov] 0 true) ^^ ((Vector [xer_ca] 0 true) ^^ (mid ^^ bot)))))
+ else
+ read_reg (access SPR (unsigned (reset_vector_start n))) >>= fun w__0 ->
+ if bitU_to_bool (eq_range (length (reset_vector_start w__0), (64:ii)))
+ then
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__1 ->
+ write_reg (access SPR (unsigned (reset_vector_start n))) w__1
+ else
+ if bitU_to_bool (eq_vec_range (n, (152:ii)))
+ then
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun CTRL ->
+ return ()
+ else return ()
+
+let execute_Mfspr (RT, spr) =
+ let n = (slice spr (5:ii) (9:ii)) ^^ (slice spr (0:ii) (4:ii)) in
+ read_reg (access SPR (unsigned (reset_vector_start n))) >>= fun w__0 ->
+ if bitU_to_bool (eq_range (length (reset_vector_start w__0), (64:ii)))
+ then
+ read_reg (access SPR (unsigned (reset_vector_start n))) >>= fun w__1 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__1
+ else
+ read_reg (access SPR (unsigned (reset_vector_start n))) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Mtcrf (RS, FXM) =
+ let mask =
+ (duplicate (access FXM (0:ii), (4:ii))) ^^
+ ((duplicate (access FXM (1:ii), (4:ii))) ^^
+ ((duplicate (access FXM (2:ii), (4:ii))) ^^
+ ((duplicate (access FXM (3:ii), (4:ii))) ^^
+ ((duplicate (access FXM (4:ii), (4:ii))) ^^
+ ((duplicate (access FXM (5:ii), (4:ii))) ^^
+ ((duplicate (access FXM (6:ii), (4:ii))) ^^ (duplicate (access FXM (7:ii), (4:ii))))))))) in
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__0 ->
+ read_reg CR >>= fun w__1 ->
+ write_reg
+ CR
+ (set_vector_start 32
+ (bitwise_or
+ (set_vector_start 0 (bitwise_and (w__0, mask)),
+ set_vector_start 0 (bitwise_and (w__1, bitwise_not (reset_vector_start mask))))))
+
+let execute_Mfcr RT =
+ read_reg CR >>= fun w__0 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__0)
+
+let execute_Mtocrf (RS, FXM) =
+ let n = (0:ii) in
+ let count = (0:ii) in
+ let (count, n) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (count,n)
+ (fun i (count,n) ->
+ let (n, count) =
+ if bitU_to_bool (eq (match (access FXM i) with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then
+ let n = i in
+ let count = count + (1:ii) in
+ (n,count)
+ else (n,count) in
+ (count,n))) in
+ if bitU_to_bool (eq_range (count, (1:ii)))
+ then
+ read_reg_range (access GPR (unsigned (reset_vector_start RS)))
+ (((4:ii) * n) + (32:ii)) (((4:ii) * n) + (35:ii)) >>= fun w__0 ->
+ write_reg_range CR (((4:ii) * n) + (32:ii)) (((4:ii) * n) + (35:ii)) w__0
+ else write_reg CR (to_vec_inc_undef (32:ii))
+
+let execute_Mfocrf (RT, FXM) =
+ let n = (0:ii) in
+ let count = (0:ii) in
+ let (count, n) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (count,n)
+ (fun i (count,n) ->
+ let (n, count) =
+ if bitU_to_bool (eq (match (access FXM i) with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then
+ let n = i in
+ let count = count + (1:ii) in
+ (n,count)
+ else (n,count) in
+ (count,n))) in
+ if bitU_to_bool (eq_range (count, (1:ii)))
+ then
+ let temp = to_vec_inc_undef (64:ii) in
+ read_reg_range CR (((4:ii) * n) + (32:ii)) (((4:ii) * n) + (35:ii)) >>= fun w__0 ->
+ let temp = update temp (((4:ii) * n) + (32:ii)) (((4:ii) * n) + (35:ii)) w__0 in
+ write_reg (access GPR (unsigned (reset_vector_start RT))) temp
+ else write_reg (access GPR (unsigned (reset_vector_start RT))) (to_vec_inc_undef (64:ii))
+
+let execute_Mcrxr BF =
+ read_reg_range XER (32:ii) (35:ii) >>= fun w__0 ->
+ write_reg_range
+ CR (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii))
+ (add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (35:ii))
+ w__0 >>
+ write_reg_range XER (32:ii) (35:ii) (set_vector_start 32 (Vector [B0;B0;B0;B0] 0 true))
+
+let execute_Dlmzb (RS, RA, RB, Rc) = return ()
+
+let execute_Macchw (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Macchws (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Macchwu (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Macchwsu (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Machhw (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Machhws (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Machhwu (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Machhwsu (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Maclhw (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Maclhws (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Maclhwu (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Maclhwsu (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Mulchw (RT, RA, RB, Rc) = return ()
+
+let execute_Mulchwu (RT, RA, RB, Rc) = return ()
+
+let execute_Mulhhw (RT, RA, RB, Rc) = return ()
+
+let execute_Mulhhwu (RT, RA, RB, Rc) = return ()
+
+let execute_Mullhw (RT, RA, RB, Rc) = return ()
+
+let execute_Mullhwu (RT, RA, RB, Rc) = return ()
+
+let execute_Nmacchw (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Nmacchws (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Nmachhw (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Nmachhws (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Nmaclhw (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Nmaclhws (RT, RA, RB, OE, Rc) = return ()
+
+let execute_Icbi (RA, RB) = return ()
+
+let execute_Icbt (CT, RA, RB) = return ()
+
+let execute_Dcba (RA, RB) = return ()
+
+let execute_Dcbt (TH, RA, RB) = return ()
+
+let execute_Dcbtst (TH, RA, RB) = return ()
+
+let execute_Dcbz (RA, RB) = return ()
+
+let execute_Dcbst (RA, RB) = return ()
+
+let execute_Dcbf (L, RA, RB) = return ()
+
+let execute_Isync () = I_Sync ()
+
+let execute_Lbarx (RT, RA, RB, EH) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr_reserve (reset_vector_start EA,(1:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lharx (RT, RA, RB, EH) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr_reserve (reset_vector_start EA,(2:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Lwarx (RT, RA, RB, EH) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr_reserve (reset_vector_start EA,(4:ii)) >>= fun w__2 ->
+ write_reg
+ (access GPR (unsigned (reset_vector_start RT)))
+ ((Vector [B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;
+ B0;B0;B0;B0;B0;B0;B0;B0;B0;B0;B0] 0 true) ^^
+ w__2)
+
+let execute_Stbcx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA_cond (reset_vector_start EA,(1:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (56:ii) (63:ii) >>= fun w__2 ->
+ MEMw_conditional (reset_vector_start EA,(1:ii),reset_vector_start (set_vector_start 0 w__2)) >>= fun status ->
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ let CR0 = (Vector [B0;B0] 0 true) ^^ ((Vector [status] 0 true) ^^ (Vector [w__3] 0 true)) in
+ return ()
+
+let execute_Sthcx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA_cond (reset_vector_start EA,(2:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (48:ii) (63:ii) >>= fun w__2 ->
+ MEMw_conditional (reset_vector_start EA,(2:ii),reset_vector_start (set_vector_start 0 w__2)) >>= fun status ->
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ let CR0 = (Vector [B0;B0] 0 true) ^^ ((Vector [status] 0 true) ^^ (Vector [w__3] 0 true)) in
+ return ()
+
+let execute_Stwcx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA_cond (reset_vector_start EA,(4:ii)) >>
+ read_reg_range (access GPR (unsigned (reset_vector_start RS))) (32:ii) (63:ii) >>= fun w__2 ->
+ MEMw_conditional (reset_vector_start EA,(4:ii),reset_vector_start (set_vector_start 0 w__2)) >>= fun status ->
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ let CR0 = (Vector [B0;B0] 0 true) ^^ ((Vector [status] 0 true) ^^ (Vector [w__3] 0 true)) in
+ return ()
+
+let execute_Ldarx (RT, RA, RB, EH) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMr_reserve (reset_vector_start EA,(8:ii)) >>= fun w__2 ->
+ write_reg (access GPR (unsigned (reset_vector_start RT))) w__2
+
+let execute_Stdcx (RS, RA, RB) =
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ let EA = to_vec_inc ((64:ii),(0:ii)) in
+ (if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then
+ let b = to_vec_inc ((64:ii),(0:ii)) in
+ return b
+ else read_reg (access GPR (unsigned (reset_vector_start RA)))) >>= fun b ->
+ read_reg (access GPR (unsigned (reset_vector_start RB))) >>= fun w__1 ->
+ let EA = set_vector_start 0 (add_VVV (reset_vector_start b) (reset_vector_start w__1)) in
+ MEMw_EA_cond (reset_vector_start EA,(8:ii)) >>
+ read_reg (access GPR (unsigned (reset_vector_start RS))) >>= fun w__2 ->
+ MEMw_conditional (reset_vector_start EA,(8:ii),reset_vector_start w__2) >>= fun status ->
+ read_reg_bitfield XER "SO" >>= fun w__3 ->
+ let CR0 = (Vector [B0;B0] 0 true) ^^ ((Vector [status] 0 true) ^^ (Vector [w__3] 0 true)) in
+ return ()
+
+let execute_Sync L =
+ match L with | Vector [B0;B0] _ _ -> H_Sync () | Vector [B0;B1] _ _ -> LW_Sync () end
+
+let execute_Eieio () = EIEIO_Sync ()
+
+let execute_Wait WC = return ()
+
+let execute = function
+
+ | B (LI,AA,LK) -> execute_B (LI,AA,LK)
+ | Bc (BO,BI,BD,AA,LK) -> execute_Bc (BO,BI,BD,AA,LK)
+ | Bclr (BO,BI,BH,LK) -> execute_Bclr (BO,BI,BH,LK)
+ | Bcctr (BO,BI,BH,LK) -> execute_Bcctr (BO,BI,BH,LK)
+ | Crand (BT,BA,BB) -> execute_Crand (BT,BA,BB)
+ | Crnand (BT,BA,BB) -> execute_Crnand (BT,BA,BB)
+ | Cror (BT,BA,BB) -> execute_Cror (BT,BA,BB)
+ | Crxor (BT,BA,BB) -> execute_Crxor (BT,BA,BB)
+ | Crnor (BT,BA,BB) -> execute_Crnor (BT,BA,BB)
+ | Creqv (BT,BA,BB) -> execute_Creqv (BT,BA,BB)
+ | Crandc (BT,BA,BB) -> execute_Crandc (BT,BA,BB)
+ | Crorc (BT,BA,BB) -> execute_Crorc (BT,BA,BB)
+ | Mcrf (BF,BFA) -> execute_Mcrf (BF,BFA)
+ | Sc (LEV) -> execute_Sc (LEV)
+ | Scv (LEV) -> execute_Scv (LEV)
+ | Lbz (RT,RA,D) -> execute_Lbz (RT,RA,D)
+ | Lbzx (RT,RA,RB) -> execute_Lbzx (RT,RA,RB)
+ | Lbzu (RT,RA,D) -> execute_Lbzu (RT,RA,D)
+ | Lbzux (RT,RA,RB) -> execute_Lbzux (RT,RA,RB)
+ | Lhz (RT,RA,D) -> execute_Lhz (RT,RA,D)
+ | Lhzx (RT,RA,RB) -> execute_Lhzx (RT,RA,RB)
+ | Lhzu (RT,RA,D) -> execute_Lhzu (RT,RA,D)
+ | Lhzux (RT,RA,RB) -> execute_Lhzux (RT,RA,RB)
+ | Lha (RT,RA,D) -> execute_Lha (RT,RA,D)
+ | Lhax (RT,RA,RB) -> execute_Lhax (RT,RA,RB)
+ | Lhau (RT,RA,D) -> execute_Lhau (RT,RA,D)
+ | Lhaux (RT,RA,RB) -> execute_Lhaux (RT,RA,RB)
+ | Lwz (RT,RA,D) -> execute_Lwz (RT,RA,D)
+ | Lwzx (RT,RA,RB) -> execute_Lwzx (RT,RA,RB)
+ | Lwzu (RT,RA,D) -> execute_Lwzu (RT,RA,D)
+ | Lwzux (RT,RA,RB) -> execute_Lwzux (RT,RA,RB)
+ | Lwa (RT,RA,DS) -> execute_Lwa (RT,RA,DS)
+ | Lwax (RT,RA,RB) -> execute_Lwax (RT,RA,RB)
+ | Lwaux (RT,RA,RB) -> execute_Lwaux (RT,RA,RB)
+ | Ld (RT,RA,DS) -> execute_Ld (RT,RA,DS)
+ | Ldx (RT,RA,RB) -> execute_Ldx (RT,RA,RB)
+ | Ldu (RT,RA,DS) -> execute_Ldu (RT,RA,DS)
+ | Ldux (RT,RA,RB) -> execute_Ldux (RT,RA,RB)
+ | Stb (RS,RA,D) -> execute_Stb (RS,RA,D)
+ | Stbx (RS,RA,RB) -> execute_Stbx (RS,RA,RB)
+ | Stbu (RS,RA,D) -> execute_Stbu (RS,RA,D)
+ | Stbux (RS,RA,RB) -> execute_Stbux (RS,RA,RB)
+ | Sth (RS,RA,D) -> execute_Sth (RS,RA,D)
+ | Sthx (RS,RA,RB) -> execute_Sthx (RS,RA,RB)
+ | Sthu (RS,RA,D) -> execute_Sthu (RS,RA,D)
+ | Sthux (RS,RA,RB) -> execute_Sthux (RS,RA,RB)
+ | Stw (RS,RA,D) -> execute_Stw (RS,RA,D)
+ | Stwx (RS,RA,RB) -> execute_Stwx (RS,RA,RB)
+ | Stwu (RS,RA,D) -> execute_Stwu (RS,RA,D)
+ | Stwux (RS,RA,RB) -> execute_Stwux (RS,RA,RB)
+ | Std (RS,RA,DS) -> execute_Std (RS,RA,DS)
+ | Stdx (RS,RA,RB) -> execute_Stdx (RS,RA,RB)
+ | Stdu (RS,RA,DS) -> execute_Stdu (RS,RA,DS)
+ | Stdux (RS,RA,RB) -> execute_Stdux (RS,RA,RB)
+ | Lhbrx (RT,RA,RB) -> execute_Lhbrx (RT,RA,RB)
+ | Sthbrx (RS,RA,RB) -> execute_Sthbrx (RS,RA,RB)
+ | Lwbrx (RT,RA,RB) -> execute_Lwbrx (RT,RA,RB)
+ | Stwbrx (RS,RA,RB) -> execute_Stwbrx (RS,RA,RB)
+ | Ldbrx (RT,RA,RB) -> execute_Ldbrx (RT,RA,RB)
+ | Stdbrx (RS,RA,RB) -> execute_Stdbrx (RS,RA,RB)
+ | Lmw (RT,RA,D) -> execute_Lmw (RT,RA,D)
+ | Stmw (RS,RA,D) -> execute_Stmw (RS,RA,D)
+ | Lswi (RT,RA,NB) -> execute_Lswi (RT,RA,NB)
+ | Lswx (RT,RA,RB) -> execute_Lswx (RT,RA,RB)
+ | Stswi (RS,RA,NB) -> execute_Stswi (RS,RA,NB)
+ | Stswx (RS,RA,RB) -> execute_Stswx (RS,RA,RB)
+ | Addi (RT,RA,SI) -> execute_Addi (RT,RA,SI)
+ | Addis (RT,RA,SI) -> execute_Addis (RT,RA,SI)
+ | Add (RT,RA,RB,OE,Rc) -> execute_Add (RT,RA,RB,OE,Rc)
+ | Subf (RT,RA,RB,OE,Rc) -> execute_Subf (RT,RA,RB,OE,Rc)
+ | Addic (RT,RA,SI) -> execute_Addic (RT,RA,SI)
+ | AddicDot (RT,RA,SI) -> execute_AddicDot (RT,RA,SI)
+ | Subfic (RT,RA,SI) -> execute_Subfic (RT,RA,SI)
+ | Addc (RT,RA,RB,OE,Rc) -> execute_Addc (RT,RA,RB,OE,Rc)
+ | Subfc (RT,RA,RB,OE,Rc) -> execute_Subfc (RT,RA,RB,OE,Rc)
+ | Adde (RT,RA,RB,OE,Rc) -> execute_Adde (RT,RA,RB,OE,Rc)
+ | Subfe (RT,RA,RB,OE,Rc) -> execute_Subfe (RT,RA,RB,OE,Rc)
+ | Addme (RT,RA,OE,Rc) -> execute_Addme (RT,RA,OE,Rc)
+ | Subfme (RT,RA,OE,Rc) -> execute_Subfme (RT,RA,OE,Rc)
+ | Addze (RT,RA,OE,Rc) -> execute_Addze (RT,RA,OE,Rc)
+ | Subfze (RT,RA,OE,Rc) -> execute_Subfze (RT,RA,OE,Rc)
+ | Neg (RT,RA,OE,Rc) -> execute_Neg (RT,RA,OE,Rc)
+ | Mulli (RT,RA,SI) -> execute_Mulli (RT,RA,SI)
+ | Mullw (RT,RA,RB,OE,Rc) -> execute_Mullw (RT,RA,RB,OE,Rc)
+ | Mulhw (RT,RA,RB,Rc) -> execute_Mulhw (RT,RA,RB,Rc)
+ | Mulhwu (RT,RA,RB,Rc) -> execute_Mulhwu (RT,RA,RB,Rc)
+ | Divw (RT,RA,RB,OE,Rc) -> execute_Divw (RT,RA,RB,OE,Rc)
+ | Divwu (RT,RA,RB,OE,Rc) -> execute_Divwu (RT,RA,RB,OE,Rc)
+ | Divwe (RT,RA,RB,OE,Rc) -> execute_Divwe (RT,RA,RB,OE,Rc)
+ | Divweu (RT,RA,RB,OE,Rc) -> execute_Divweu (RT,RA,RB,OE,Rc)
+ | Mulld (RT,RA,RB,OE,Rc) -> execute_Mulld (RT,RA,RB,OE,Rc)
+ | Mulhd (RT,RA,RB,Rc) -> execute_Mulhd (RT,RA,RB,Rc)
+ | Mulhdu (RT,RA,RB,Rc) -> execute_Mulhdu (RT,RA,RB,Rc)
+ | Divd (RT,RA,RB,OE,Rc) -> execute_Divd (RT,RA,RB,OE,Rc)
+ | Divdu (RT,RA,RB,OE,Rc) -> execute_Divdu (RT,RA,RB,OE,Rc)
+ | Divde (RT,RA,RB,OE,Rc) -> execute_Divde (RT,RA,RB,OE,Rc)
+ | Divdeu (RT,RA,RB,OE,Rc) -> execute_Divdeu (RT,RA,RB,OE,Rc)
+ | Cmpi (BF,L,RA,SI) -> execute_Cmpi (BF,L,RA,SI)
+ | Cmp (BF,L,RA,RB) -> execute_Cmp (BF,L,RA,RB)
+ | Cmpli (BF,L,RA,UI) -> execute_Cmpli (BF,L,RA,UI)
+ | Cmpl (BF,L,RA,RB) -> execute_Cmpl (BF,L,RA,RB)
+ | Isel (RT,RA,RB,BC) -> execute_Isel (RT,RA,RB,BC)
+ | Andi (RS,RA,UI) -> execute_Andi (RS,RA,UI)
+ | Andis (RS,RA,UI) -> execute_Andis (RS,RA,UI)
+ | Ori (RS,RA,UI) -> execute_Ori (RS,RA,UI)
+ | Oris (RS,RA,UI) -> execute_Oris (RS,RA,UI)
+ | Xori (RS,RA,UI) -> execute_Xori (RS,RA,UI)
+ | Xoris (RS,RA,UI) -> execute_Xoris (RS,RA,UI)
+ | And (RS,RA,RB,Rc) -> execute_And (RS,RA,RB,Rc)
+ | Xor (RS,RA,RB,Rc) -> execute_Xor (RS,RA,RB,Rc)
+ | Nand (RS,RA,RB,Rc) -> execute_Nand (RS,RA,RB,Rc)
+ | Or (RS,RA,RB,Rc) -> execute_Or (RS,RA,RB,Rc)
+ | Nor (RS,RA,RB,Rc) -> execute_Nor (RS,RA,RB,Rc)
+ | Eqv (RS,RA,RB,Rc) -> execute_Eqv (RS,RA,RB,Rc)
+ | Andc (RS,RA,RB,Rc) -> execute_Andc (RS,RA,RB,Rc)
+ | Orc (RS,RA,RB,Rc) -> execute_Orc (RS,RA,RB,Rc)
+ | Extsb (RS,RA,Rc) -> execute_Extsb (RS,RA,Rc)
+ | Extsh (RS,RA,Rc) -> execute_Extsh (RS,RA,Rc)
+ | Cntlzw (RS,RA,Rc) -> execute_Cntlzw (RS,RA,Rc)
+ | Cmpb (RS,RA,RB) -> execute_Cmpb (RS,RA,RB)
+ | Popcntb (RS,RA) -> execute_Popcntb (RS,RA)
+ | Popcntw (RS,RA) -> execute_Popcntw (RS,RA)
+ | Prtyd (RS,RA) -> execute_Prtyd (RS,RA)
+ | Prtyw (RS,RA) -> execute_Prtyw (RS,RA)
+ | Extsw (RS,RA,Rc) -> execute_Extsw (RS,RA,Rc)
+ | Cntlzd (RS,RA,Rc) -> execute_Cntlzd (RS,RA,Rc)
+ | Popcntd (RS,RA) -> execute_Popcntd (RS,RA)
+ | Bpermd (RS,RA,RB) -> execute_Bpermd (RS,RA,RB)
+ | Rlwinm (RS,RA,SH,MB,ME,Rc) -> execute_Rlwinm (RS,RA,SH,MB,ME,Rc)
+ | Rlwnm (RS,RA,RB,MB,ME,Rc) -> execute_Rlwnm (RS,RA,RB,MB,ME,Rc)
+ | Rlwimi (RS,RA,SH,MB,ME,Rc) -> execute_Rlwimi (RS,RA,SH,MB,ME,Rc)
+ | Rldicl (RS,RA,sh,mb,Rc) -> execute_Rldicl (RS,RA,sh,mb,Rc)
+ | Rldicr (RS,RA,sh,me,Rc) -> execute_Rldicr (RS,RA,sh,me,Rc)
+ | Rldic (RS,RA,sh,mb,Rc) -> execute_Rldic (RS,RA,sh,mb,Rc)
+ | Rldcl (RS,RA,RB,mb,Rc) -> execute_Rldcl (RS,RA,RB,mb,Rc)
+ | Rldcr (RS,RA,RB,me,Rc) -> execute_Rldcr (RS,RA,RB,me,Rc)
+ | Rldimi (RS,RA,sh,mb,Rc) -> execute_Rldimi (RS,RA,sh,mb,Rc)
+ | Slw (RS,RA,RB,Rc) -> execute_Slw (RS,RA,RB,Rc)
+ | Srw (RS,RA,RB,Rc) -> execute_Srw (RS,RA,RB,Rc)
+ | Srawi (RS,RA,SH,Rc) -> execute_Srawi (RS,RA,SH,Rc)
+ | Sraw (RS,RA,RB,Rc) -> execute_Sraw (RS,RA,RB,Rc)
+ | Sld (RS,RA,RB,Rc) -> execute_Sld (RS,RA,RB,Rc)
+ | Srd (RS,RA,RB,Rc) -> execute_Srd (RS,RA,RB,Rc)
+ | Sradi (RS,RA,sh,Rc) -> execute_Sradi (RS,RA,sh,Rc)
+ | Srad (RS,RA,RB,Rc) -> execute_Srad (RS,RA,RB,Rc)
+ | Cdtbcd (RS,RA) -> execute_Cdtbcd (RS,RA)
+ | Cbcdtd (RS,RA) -> execute_Cbcdtd (RS,RA)
+ | Addg6s (RT,RA,RB) -> execute_Addg6s (RT,RA,RB)
+ | Mtspr (RS,spr) -> execute_Mtspr (RS,spr)
+ | Mfspr (RT,spr) -> execute_Mfspr (RT,spr)
+ | Mtcrf (RS,FXM) -> execute_Mtcrf (RS,FXM)
+ | Mfcr (RT) -> execute_Mfcr (RT)
+ | Mtocrf (RS,FXM) -> execute_Mtocrf (RS,FXM)
+ | Mfocrf (RT,FXM) -> execute_Mfocrf (RT,FXM)
+ | Mcrxr (BF) -> execute_Mcrxr (BF)
+ | Dlmzb (RS,RA,RB,Rc) -> execute_Dlmzb (RS,RA,RB,Rc)
+ | Macchw (RT,RA,RB,OE,Rc) -> execute_Macchw (RT,RA,RB,OE,Rc)
+ | Macchws (RT,RA,RB,OE,Rc) -> execute_Macchws (RT,RA,RB,OE,Rc)
+ | Macchwu (RT,RA,RB,OE,Rc) -> execute_Macchwu (RT,RA,RB,OE,Rc)
+ | Macchwsu (RT,RA,RB,OE,Rc) -> execute_Macchwsu (RT,RA,RB,OE,Rc)
+ | Machhw (RT,RA,RB,OE,Rc) -> execute_Machhw (RT,RA,RB,OE,Rc)
+ | Machhws (RT,RA,RB,OE,Rc) -> execute_Machhws (RT,RA,RB,OE,Rc)
+ | Machhwu (RT,RA,RB,OE,Rc) -> execute_Machhwu (RT,RA,RB,OE,Rc)
+ | Machhwsu (RT,RA,RB,OE,Rc) -> execute_Machhwsu (RT,RA,RB,OE,Rc)
+ | Maclhw (RT,RA,RB,OE,Rc) -> execute_Maclhw (RT,RA,RB,OE,Rc)
+ | Maclhws (RT,RA,RB,OE,Rc) -> execute_Maclhws (RT,RA,RB,OE,Rc)
+ | Maclhwu (RT,RA,RB,OE,Rc) -> execute_Maclhwu (RT,RA,RB,OE,Rc)
+ | Maclhwsu (RT,RA,RB,OE,Rc) -> execute_Maclhwsu (RT,RA,RB,OE,Rc)
+ | Mulchw (RT,RA,RB,Rc) -> execute_Mulchw (RT,RA,RB,Rc)
+ | Mulchwu (RT,RA,RB,Rc) -> execute_Mulchwu (RT,RA,RB,Rc)
+ | Mulhhw (RT,RA,RB,Rc) -> execute_Mulhhw (RT,RA,RB,Rc)
+ | Mulhhwu (RT,RA,RB,Rc) -> execute_Mulhhwu (RT,RA,RB,Rc)
+ | Mullhw (RT,RA,RB,Rc) -> execute_Mullhw (RT,RA,RB,Rc)
+ | Mullhwu (RT,RA,RB,Rc) -> execute_Mullhwu (RT,RA,RB,Rc)
+ | Nmacchw (RT,RA,RB,OE,Rc) -> execute_Nmacchw (RT,RA,RB,OE,Rc)
+ | Nmacchws (RT,RA,RB,OE,Rc) -> execute_Nmacchws (RT,RA,RB,OE,Rc)
+ | Nmachhw (RT,RA,RB,OE,Rc) -> execute_Nmachhw (RT,RA,RB,OE,Rc)
+ | Nmachhws (RT,RA,RB,OE,Rc) -> execute_Nmachhws (RT,RA,RB,OE,Rc)
+ | Nmaclhw (RT,RA,RB,OE,Rc) -> execute_Nmaclhw (RT,RA,RB,OE,Rc)
+ | Nmaclhws (RT,RA,RB,OE,Rc) -> execute_Nmaclhws (RT,RA,RB,OE,Rc)
+ | Icbi (RA,RB) -> execute_Icbi (RA,RB)
+ | Icbt (CT,RA,RB) -> execute_Icbt (CT,RA,RB)
+ | Dcba (RA,RB) -> execute_Dcba (RA,RB)
+ | Dcbt (TH,RA,RB) -> execute_Dcbt (TH,RA,RB)
+ | Dcbtst (TH,RA,RB) -> execute_Dcbtst (TH,RA,RB)
+ | Dcbz (RA,RB) -> execute_Dcbz (RA,RB)
+ | Dcbst (RA,RB) -> execute_Dcbst (RA,RB)
+ | Dcbf (L,RA,RB) -> execute_Dcbf (L,RA,RB)
+ | Isync -> execute_Isync ()
+ | Lbarx (RT,RA,RB,EH) -> execute_Lbarx (RT,RA,RB,EH)
+ | Lharx (RT,RA,RB,EH) -> execute_Lharx (RT,RA,RB,EH)
+ | Lwarx (RT,RA,RB,EH) -> execute_Lwarx (RT,RA,RB,EH)
+ | Stbcx (RS,RA,RB) -> execute_Stbcx (RS,RA,RB)
+ | Sthcx (RS,RA,RB) -> execute_Sthcx (RS,RA,RB)
+ | Stwcx (RS,RA,RB) -> execute_Stwcx (RS,RA,RB)
+ | Ldarx (RT,RA,RB,EH) -> execute_Ldarx (RT,RA,RB,EH)
+ | Stdcx (RS,RA,RB) -> execute_Stdcx (RS,RA,RB)
+ | Sync (L) -> execute_Sync (L)
+ | Eieio -> execute_Eieio ()
+ | Wait (WC) -> execute_Wait (WC)
+ end
+
+let initial_analysis instr =
+ let iR = [] in
+ let oR = [] in
+ let aR = [] in
+ let ik = IK_simple in
+ let Nias = [NIAFP_successor] in
+ let Dia = DIAFP_none in
+ match instr with
+ | B (LI,AA,LK) ->
+ let oR = NIA_fp :: oR in
+ let iR = if bitU_to_bool AA then CIA_fp :: iR else iR in
+ let oR = if bitU_to_bool LK then (RFull "LR") :: oR else oR in
+ (if bitU_to_bool AA
+ then
+ return (set_vector_start 0
+ (exts ((64:ii),reset_vector_start (LI ^^ (Vector [B0;B0] 0 true)))))
+ else
+ read_reg CIA >>= fun w__0 ->
+ return (set_vector_start 0
+ (add_VVV
+ w__0
+ (reset_vector_start (exts ((64:ii),reset_vector_start (LI ^^ (Vector [B0;B0] 0 true)))))))) >>= fun nia' ->
+ let Nias = [NIAFP_concrete_address (reset_vector_start nia')] in
+ let ik = IK_simple in
+ return (aR,oR,iR,Nias,ik)
+ | Bc (BO,BI,BD,AA,LK) ->
+ let iR = mode64bit_fp :: iR in
+ let iR = (RFull "CTR") :: iR in
+ let oR = if bitU_to_bool (~(access BO (2:ii))) then (RFull "CTR") :: oR else oR in
+ let iR = (RSliceBit ("CR",add_VII (reset_vector_start BI) (32:ii))) :: iR in
+ let oR = NIA_fp :: oR in
+ let iR = if bitU_to_bool AA then CIA_fp :: iR else iR in
+ (if bitU_to_bool AA
+ then
+ return (set_vector_start 0
+ (exts ((64:ii),reset_vector_start (BD ^^ (Vector [B0;B0] 0 true)))))
+ else
+ read_reg CIA >>= fun w__1 ->
+ return (set_vector_start 0
+ (add_VVV
+ w__1
+ (reset_vector_start (exts ((64:ii),reset_vector_start (BD ^^ (Vector [B0;B0] 0 true)))))))) >>= fun w__2 ->
+ let Nias = [NIAFP_concrete_address (reset_vector_start w__2);NIAFP_successor] in
+ let (oR, iR) =
+ if bitU_to_bool LK
+ then
+ let oR = (RFull "LR") :: oR in
+ let iR = CIA_fp :: iR in
+ (oR,iR)
+ else (oR,iR) in
+ let ik = IK_cond_branch in
+ return (aR,oR,iR,Nias,ik)
+ | Bclr (BO,BI,BH,LK) ->
+ let iR = mode64bit_fp :: iR in
+ let iR = (RFull "CTR") :: iR in
+ let oR = if bitU_to_bool (~(access BO (2:ii))) then (RFull "CTR") :: oR else oR in
+ let iR = (RSliceBit ("CR",add_VII (reset_vector_start BI) (32:ii))) :: iR in
+ let iR = (RSlice ("LR",(0:ii),(61:ii))) :: iR in
+ let oR = NIA_fp :: oR in
+ let Nias = [NIAFP_LR;NIAFP_successor] in
+ let (oR, iR) =
+ if bitU_to_bool LK
+ then
+ let oR = (RFull "LR") :: oR in
+ let iR = CIA_fp :: iR in
+ (oR,iR)
+ else (oR,iR) in
+ let ik = IK_cond_branch in
+ return (aR,oR,iR,Nias,ik)
+ | Bcctr (BO,BI,BH,LK) ->
+ let iR = (RSliceBit ("CR",add_VII (reset_vector_start BI) (32:ii))) :: iR in
+ let iR = (RSlice ("CTR",(0:ii),(61:ii))) :: iR in
+ let oR = NIA_fp :: oR in
+ let Nias = [NIAFP_CTR;NIAFP_successor] in
+ let (oR, iR) =
+ if bitU_to_bool LK
+ then
+ let oR = (RFull "LR") :: oR in
+ let iR = CIA_fp :: iR in
+ (oR,iR)
+ else (oR,iR) in
+ let ik = IK_cond_branch in
+ return (aR,oR,iR,Nias,ik)
+ | Crand (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Crnand (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Cror (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Crxor (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Crnor (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Creqv (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Crandc (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Crorc (BT,BA,BB) ->
+ let iR =
+ (RSliceBit ("CR",add_VII (reset_vector_start BA) (32:ii))) ::
+ (RSliceBit ("CR",add_VII (reset_vector_start BB) (32:ii))) :: iR in
+ let oR = (RSliceBit ("CR",add_VII (reset_vector_start BT) (32:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Mcrf (BF,BFA) ->
+ let iR =
+ (RSlice ("CR",add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BFA))) (32:ii),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BFA)))
+ (35:ii))) ::
+ iR in
+ let oR =
+ (RSlice ("CR",add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BF)))
+ (35:ii))) ::
+ oR in
+ return (aR,oR,iR,Nias,ik)
+ | Sc (LEV) ->
+ let Nias = if bitU_to_bool (eq_vec_range (LEV, (63:ii))) then [] else [NIAFP_successor] in
+ return (aR,oR,iR,Nias,ik)
+ | Scv (LEV) -> return (aR,oR,iR,Nias,ik)
+ | Lbz (RT,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lbzx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lbzu (RT,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lbzux (RT,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhz (RT,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhzx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhzu (RT,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhzux (RT,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lha (RT,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhax (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhau (RT,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhaux (RT,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwz (RT,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwzx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwzu (RT,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwzux (RT,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwa (RT,RA,DS) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwax (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwaux (RT,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Ld (RT,RA,DS) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Ldx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Ldu (RT,RA,DS) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Ldux (RT,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stb (RS,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stbx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stbu (RS,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stbux (RS,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Sth (RS,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Sthx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Sthu (RS,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Sthux (RS,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stw (RS,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stwx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stwu (RS,RA,D) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stwux (RS,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let aR = iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Std (RS,RA,DS) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stdx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stdu (RS,RA,DS) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let aR = iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stdux (RS,RA,RB) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let aR = iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lq (RTp,RA,DQ,PT) ->
+ let iR = bigendianmode_fp :: iR in
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RTp)))) ::
+ (RFull (access GPRs (add_VII (reset_vector_start RTp) (1:ii)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stq (RSp,RA,DS) ->
+ let iR = bigendianmode_fp :: iR in
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RSp)))) ::
+ (RFull (access GPRs (add_VII (reset_vector_start RSp) (1:ii)))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lhbrx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Sthbrx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(55:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lwbrx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stwbrx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(55:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(40:ii),(47:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(39:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Ldbrx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stdbrx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(55:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(40:ii),(47:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(39:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(24:ii),(31:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(16:ii),(23:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(8:ii),(15:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(0:ii),(7:ii))) :: iR in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lmw (RT,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let i = (0:ii) in
+ let aR = iR in
+ let (i, oR) =
+ (foreach_inc (unsigned (reset_vector_start RT),(31:ii),(1:ii)) (i,oR)
+ (fun r (i,oR) ->
+ let oR = (RFull (access GPRs r)) :: oR in
+ let i = i + (32:ii) in
+ (i,oR))) in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stmw (RS,RA,D) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let i = (0:ii) in
+ let (i, iR) =
+ (foreach_inc (unsigned (reset_vector_start RS),(31:ii),(1:ii)) (i,iR)
+ (fun r (i,iR) ->
+ let iR = (RSlice (access GPRs r,(32:ii),(63:ii))) :: iR in
+ let i = i + (32:ii) in
+ (i,iR))) in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lswi (RT,RA,NB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let r = (0:ii) in
+ let r = minus_VII (reset_vector_start RT) (1:ii) in
+ let j = (0:ii) in
+ let i = (32:ii) in
+ let (i, j, oR, r) =
+ (foreach_dec (if bitU_to_bool (eq_vec_range (NB, (0:ii)))
+ then (32:ii)
+ else unsigned (reset_vector_start NB),(1:ii),(1:ii)) (i,j,oR,r)
+ (fun n (i,j,oR,r) ->
+ let (r, oR) =
+ if bitU_to_bool (eq_range (i, (32:ii)))
+ then
+ let r = modulo (r + (1:ii)) (32:ii) in
+ let oR = (RFull (access GPRs r)) :: oR in
+ (r,oR)
+ else (r,oR) in
+ let oR = (RSlice (access GPRs r,i,i + (7:ii))) :: oR in
+ let j = j + (8:ii) in
+ let i = i + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ (i,j,oR,r))) in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Lswx (RT,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) ::
+ (RSlice ("XER",(57:ii),(63:ii))) :: iR in
+ let aR = iR in
+ let oR = (foreach_inc ((0:ii),(31:ii),(1:ii)) oR (fun r oR -> (RFull (access GPRs r)) :: oR)) in
+ let ik = IK_mem_read Read_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stswi (RS,RA,NB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let aR = iR in
+ let r = (0:ii) in
+ let r = minus_VII (reset_vector_start RS) (1:ii) in
+ let j = (0:ii) in
+ let i = (32:ii) in
+ let (i, j, iR, r) =
+ (foreach_dec (if bitU_to_bool (eq_vec_range (NB, (0:ii)))
+ then (32:ii)
+ else unsigned (reset_vector_start NB),(1:ii),(1:ii)) (i,j,iR,r)
+ (fun n (i,j,iR,r) ->
+ let r = if bitU_to_bool (eq_range (i, (32:ii))) then modulo (r + (1:ii)) (32:ii) else r in
+ let iR = (RSlice (access GPRs r,i,i + (7:ii))) :: iR in
+ let j = j + (8:ii) in
+ let i = i + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ (i,j,iR,r))) in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Stswx (RS,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let r = (0:ii) in
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) ::
+ (RSlice ("XER",(57:ii),(63:ii))) :: iR in
+ let aR = iR in
+ let r = minus_VII (reset_vector_start RS) (1:ii) in
+ let i = (32:ii) in
+ let n_top = unsigned (reset_vector_start (Vector [B1;B1;B1;B1;B1;B1;B1] 0 true)) in
+ let j = (0:ii) in
+ let (j, i, iR, r) =
+ (foreach_dec (n_top,(1:ii),(1:ii)) (j,i,iR,r)
+ (fun n (j,i,iR,r) ->
+ let r = if bitU_to_bool (eq_range (i, (32:ii))) then modulo (r + (1:ii)) (32:ii) else r in
+ let iR = (RSlice (access GPRs r,i,i + (7:ii))) :: iR in
+ let i = i + (8:ii) in
+ let j = j + (8:ii) in
+ let i = if bitU_to_bool (eq_range (i, (64:ii))) then (32:ii) else i in
+ (j,i,iR,r))) in
+ let ik = IK_mem_write Write_plain in
+ return (aR,oR,iR,Nias,ik)
+ | Addi (RT,RA,SI) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Addis (RT,RA,SI) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Add (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Subf (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Addic (RT,RA,SI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: (RField ("XER","CA")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | AddicDot (RT,RA,SI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: (RField ("XER","CA")) :: oR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Subfic (RT,RA,SI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR =
+ (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: (RField ("XER","CA")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Addc (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Subfc (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Adde (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let iR = (RField ("XER","CA")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Subfe (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let iR = (RField ("XER","CA")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Addme (RT,RA,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: (RField ("XER","CA")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Subfme (RT,RA,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: (RField ("XER","CA")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Addze (RT,RA,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: (RField ("XER","CA")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Subfze (RT,RA,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: (RField ("XER","CA")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Neg (RT,RA,OE,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mulli (RT,RA,SI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Mullw (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mulhw (RT,RA,RB,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(0:ii),(31:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = mode64bit_fp :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mulhwu (RT,RA,RB,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(0:ii),(31:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = mode64bit_fp :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divw (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(0:ii),(31:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = mode64bit_fp :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divwu (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(0:ii),(31:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = mode64bit_fp :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divwe (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(0:ii),(31:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = mode64bit_fp :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divweu (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RT)),(0:ii),(31:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = mode64bit_fp :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mulld (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mulhd (RT,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mulhdu (RT,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divd (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divdu (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divde (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Divdeu (RT,RA,RB,OE,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool OE
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("XER","OV")) :: (RField ("XER","SO")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Cmpi (BF,L,RA,SI) ->
+ let iR =
+ (if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))
+ else RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR =
+ (RSlice ("CR",add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BF)))
+ (35:ii))) ::
+ oR in
+ return (aR,oR,iR,Nias,ik)
+ | Cmp (BF,L,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR
+ else
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR =
+ (RSlice ("CR",unsigned (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BF)))
+ (35:ii))) ::
+ oR in
+ return (aR,oR,iR,Nias,ik)
+ | Cmpli (BF,L,RA,UI) ->
+ let iR =
+ (if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))
+ else RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR =
+ (RSlice ("CR",add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BF)))
+ (35:ii))) ::
+ oR in
+ return (aR,oR,iR,Nias,ik)
+ | Cmpl (BF,L,RA,RB) ->
+ let iR =
+ if bitU_to_bool (eq (match L with | B0 -> (0:ii) | B1 -> (1:ii) end, (0:ii)))
+ then
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(32:ii),(63:ii))) :: iR
+ else
+ (RFull (access GPRs (unsigned (reset_vector_start RA)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR =
+ (RSlice ("CR",add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BF)))
+ (35:ii))) ::
+ oR in
+ return (aR,oR,iR,Nias,ik)
+ | Isel (RT,RA,RB,BC) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RSliceBit ("CR",add_VII (reset_vector_start BC) (32:ii))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Andi (RS,RA,UI) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: (RField ("XER","SO")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Andis (RS,RA,UI) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: (RField ("XER","SO")) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Ori (RS,RA,UI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Oris (RS,RA,UI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Xori (RS,RA,UI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Xoris (RS,RA,UI) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | And (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Xor (RS,RA,RB,Rc) ->
+ let (iR, oR) =
+ if bitU_to_bool (eq_vec (RS, RB))
+ then
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ (iR,oR)
+ else
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ (iR,oR) in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Nand (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Or (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Nor (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Eqv (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Andc (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Orc (RS,RA,RB,Rc) ->
+ let iR =
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Extsb (RS,RA,Rc) ->
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(56:ii))) :: iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(56:ii),(63:ii))) :: iR in
+ let oR = (RSlice (access GPRs (unsigned (reset_vector_start RA)),(56:ii),(63:ii))) :: oR in
+ let oR = (RSlice (access GPRs (unsigned (reset_vector_start RA)),(0:ii),(55:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Extsh (RS,RA,Rc) ->
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(48:ii))) :: iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(48:ii),(63:ii))) :: iR in
+ let oR = (RSlice (access GPRs (unsigned (reset_vector_start RA)),(48:ii),(63:ii))) :: oR in
+ let oR = (RSlice (access GPRs (unsigned (reset_vector_start RA)),(0:ii),(47:ii))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Cntlzw (RS,RA,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Cmpb (RS,RA,RB) ->
+ let (oR, iR) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (oR,iR)
+ (fun n (oR,iR) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(8:ii) * n,((8:ii) * n) + (7:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(8:ii) * n,((8:ii) * n) +
+ (7:ii))) ::
+ iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(8:ii) * n,((8:ii) * n) + (7:ii))) ::
+ oR in
+ (oR,iR))) in
+ return (aR,oR,iR,Nias,ik)
+ | Popcntb (RS,RA) ->
+ let (oR, iR) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (oR,iR)
+ (fun i (oR,iR) ->
+ let iR =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) iR
+ (fun j iR ->
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(i * (8:ii)) + j)) :: iR)) in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),i * (8:ii),(i * (8:ii)) + (7:ii))) ::
+ oR in
+ (oR,iR))) in
+ return (aR,oR,iR,Nias,ik)
+ | Popcntw (RS,RA) ->
+ let (oR, iR) =
+ (foreach_inc ((0:ii),(1:ii),(1:ii)) (oR,iR)
+ (fun i (oR,iR) ->
+ let iR =
+ (foreach_inc ((0:ii),(31:ii),(1:ii)) iR
+ (fun j iR ->
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(i * (32:ii)) + j)) :: iR)) in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),i * (32:ii),(i * (32:ii)) +
+ (31:ii))) ::
+ oR in
+ (oR,iR))) in
+ return (aR,oR,iR,Nias,ik)
+ | Prtyd (RS,RA) ->
+ let iR =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) iR
+ (fun i iR ->
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(i * (8:ii)) + (7:ii))) :: iR)) in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Prtyw (RS,RA) ->
+ let iR =
+ (foreach_inc ((0:ii),(3:ii),(1:ii)) iR
+ (fun i iR ->
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(i * (8:ii)) + (7:ii))) :: iR)) in
+ let iR =
+ (foreach_inc ((4:ii),(7:ii),(1:ii)) iR
+ (fun i iR ->
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(i * (8:ii)) + (7:ii))) :: iR)) in
+ let oR = (RSlice (access GPRs (unsigned (reset_vector_start RA)),(0:ii),(31:ii))) :: oR in
+ let oR = (RSlice (access GPRs (unsigned (reset_vector_start RA)),(32:ii),(63:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Extsw (RS,RA,Rc) ->
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(32:ii))) :: iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Cntlzd (RS,RA,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Popcntd (RS,RA) ->
+ let iR =
+ (foreach_inc ((0:ii),(63:ii),(1:ii)) iR
+ (fun i iR -> (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),i)) :: iR)) in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Bpermd (RS,RA,RB) ->
+ let (oR, iR) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (oR,iR)
+ (fun i (oR,iR) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(8:ii) * i,((8:ii) * i) + (7:ii))) ::
+ iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ (oR,iR))) in
+ return (aR,oR,iR,Nias,ik)
+ | Rlwinm (RS,RA,SH,MB,ME,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rlwnm (RS,RA,RB,MB,ME,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(59:ii),(63:ii))) ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rlwimi (RS,RA,SH,MB,ME,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rldicl (RS,RA,sh,mb,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rldicr (RS,RA,sh,me,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rldic (RS,RA,sh,mb,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rldcl (RS,RA,RB,mb,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RB)),(58:ii),(63:ii))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rldcr (RS,RA,RB,me,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RB)),(58:ii),(63:ii))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Rldimi (RS,RA,sh,mb,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Slw (RS,RA,RB,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RB)),(59:ii),(63:ii))) :: iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RB)),(58:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Srw (RS,RA,RB,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RB)),(59:ii),(63:ii))) :: iR in
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RB)),(58:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Srawi (RS,RA,SH,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(32:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Sraw (RS,RA,RB,Rc) ->
+ let iR = (RSlice (access GPRs (unsigned (reset_vector_start RB)),(59:ii),(63:ii))) :: iR in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) ::
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RB)),(58:ii))) ::
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(32:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Sld (RS,RA,RB,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(58:ii),(63:ii))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RB)),(57:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Srd (RS,RA,RB,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(58:ii),(63:ii))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RB)),(57:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Sradi (RS,RA,sh,Rc) ->
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let iR = (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(0:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Srad (RS,RA,RB,Rc) ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(58:ii),(63:ii))) ::
+ (RFull (access GPRs (unsigned (reset_vector_start RS)))) ::
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RB)),(57:ii))) ::
+ (RSliceBit (access GPRs (unsigned (reset_vector_start RS)),(0:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: oR in
+ let (iR, oR) =
+ if bitU_to_bool Rc
+ then
+ let iR = (RField ("XER","SO")) :: iR in
+ let oR = (RField ("CR","CR0")) :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ let oR = (RField ("XER","CA")) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Cdtbcd (RS,RA) ->
+ let (oR, iR) =
+ (foreach_inc ((0:ii),(1:ii),(1:ii)) (oR,iR)
+ (fun i (oR,iR) ->
+ let n = i * (32:ii) in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),n + (12:ii),n + (31:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),n + (0:ii),n + (31:ii))) :: oR in
+ (oR,iR))) in
+ return (aR,oR,iR,Nias,ik)
+ | Cbcdtd (RS,RA) ->
+ let (oR, iR) =
+ (foreach_inc ((0:ii),(1:ii),(1:ii)) (oR,iR)
+ (fun i (oR,iR) ->
+ let n = i * (32:ii) in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),n + (8:ii),n + (31:ii))) :: iR in
+ let oR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),n + (0:ii),n + (31:ii))) :: oR in
+ (oR,iR))) in
+ return (aR,oR,iR,Nias,ik)
+ | Addg6s (RT,RA,RB) ->
+ let iR =
+ (foreach_inc ((0:ii),(15:ii),(1:ii)) iR
+ (fun i iR ->
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RA)),(4:ii) * i,(63:ii))) :: iR in
+ (RSlice (access GPRs (unsigned (reset_vector_start RB)),(4:ii) * i,(63:ii))) :: iR)) in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Mtspr (RS,spr) ->
+ let n = (slice spr (5:ii) (9:ii)) ^^ (slice spr (0:ii) (4:ii)) in
+ let (iR, oR) =
+ if bitU_to_bool (eq_vec_range (n, (1:ii)))
+ then
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull "XER") :: oR in
+ (iR,oR)
+ else
+ let iR = (RFull (access SPRs (unsigned (reset_vector_start n)))) :: iR in
+ let (iR, oR) =
+ if bitU_to_bool (eq_range (length_spr (unsigned (reset_vector_start n)), (64:ii)))
+ then
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RS)))) :: iR in
+ let oR = (RFull (access SPRs (unsigned (reset_vector_start n)))) :: oR in
+ (iR,oR)
+ else
+ let (iR, oR) =
+ if bitU_to_bool (eq_vec_range (n, (152:ii)))
+ then
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let oR = (RFull "CTRL") :: oR in
+ (iR,oR)
+ else (iR,oR) in
+ (iR,oR) in
+ (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mfspr (RT,spr) ->
+ let n = (slice spr (5:ii) (9:ii)) ^^ (slice spr (0:ii) (4:ii)) in
+ let iR = (RFull (access SPRs (unsigned (reset_vector_start n)))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Mtcrf (RS,FXM) ->
+ let iR =
+ (RFull "CR") ::
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),(32:ii),(63:ii))) :: iR in
+ let oR = (RFull "CR") :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Mfcr (RT) ->
+ let iR = (RFull "CR") :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Mtocrf (RS,FXM) ->
+ let n = (0:ii) in
+ let count = (0:ii) in
+ let (count, n) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (count,n)
+ (fun i (count,n) ->
+ let (n, count) =
+ if bitU_to_bool
+ (eq (match (access FXM i) with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then
+ let n = i in
+ let count = count + (1:ii) in
+ (n,count)
+ else (n,count) in
+ (count,n))) in
+ let (oR, iR) =
+ if bitU_to_bool (eq_range (count, (1:ii)))
+ then
+ let oR = (RSlice ("CR",((4:ii) * n) + (32:ii),((4:ii) * n) + (35:ii))) :: oR in
+ let iR =
+ (RSlice (access GPRs (unsigned (reset_vector_start RS)),((4:ii) * n) + (32:ii),((4:ii) *
+ n) +
+ (35:ii))) ::
+ iR in
+ (oR,iR)
+ else
+ let oR = (RFull "CR") :: oR in
+ (oR,iR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mfocrf (RT,FXM) ->
+ let n = (0:ii) in
+ let count = (0:ii) in
+ let (count, n) =
+ (foreach_inc ((0:ii),(7:ii),(1:ii)) (count,n)
+ (fun i (count,n) ->
+ let (n, count) =
+ if bitU_to_bool
+ (eq (match (access FXM i) with | B0 -> (0:ii) | B1 -> (1:ii) end, (1:ii)))
+ then
+ let n = i in
+ let count = count + (1:ii) in
+ (n,count)
+ else (n,count) in
+ (count,n))) in
+ let (iR, oR) =
+ if bitU_to_bool (eq_range (count, (1:ii)))
+ then
+ let iR = (RSlice ("CR",((4:ii) * n) + (32:ii),((4:ii) * n) + (35:ii))) :: iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ (iR,oR)
+ else
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ (iR,oR) in
+ return (aR,oR,iR,Nias,ik)
+ | Mcrxr (BF) ->
+ let iR = (RSlice ("XER",(32:ii),(35:ii))) :: iR in
+ let oR =
+ (RSlice ("CR",add_VII (reset_vector_start (mult_IVV (4:ii) (reset_vector_start BF))) (32:ii),add_VII
+ (reset_vector_start (mult_IVV
+ (4:ii)
+ (reset_vector_start BF)))
+ (35:ii))) ::
+ (RSlice ("XER",(32:ii),(35:ii))) :: oR in
+ return (aR,oR,iR,Nias,ik)
+ | Dlmzb (RS,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Macchws (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Macchwu (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Macchwsu (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Machhws (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Machhwu (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Machhwsu (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Maclhw (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Maclhws (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Maclhwu (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Maclhwsu (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Mulchw (RT,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Mulchwu (RT,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Mulhhw (RT,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Mulhhwu (RT,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Mullhw (RT,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Mullhwu (RT,RA,RB,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Nmacchw (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Nmacchws (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Nmachhw (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Nmachhws (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Nmaclhw (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Nmaclhws (RT,RA,RB,OE,Rc) -> return (aR,oR,iR,Nias,ik)
+ | Icbi (RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Icbt (CT,RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Dcba (RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Dcbt (TH,RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Dcbtst (TH,RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Dcbz (RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Dcbst (RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Dcbf (L,RA,RB) -> return (aR,oR,iR,Nias,ik)
+ | Isync ->
+ let ik = IK_barrier Barrier_Isync in
+ return (aR,oR,iR,Nias,ik)
+ | Lbarx (RT,RA,RB,EH) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_reserve in
+ return (aR,oR,iR,Nias,ik)
+ | Lharx (RT,RA,RB,EH) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_reserve in
+ return (aR,oR,iR,Nias,ik)
+ | Lwarx (RT,RA,RB,EH) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_reserve in
+ return (aR,oR,iR,Nias,ik)
+ | Stbcx (RS,RA,RB) ->
+ let ik = IK_mem_write Write_conditional in
+ return (aR,oR,iR,Nias,ik)
+ | Sthcx (RS,RA,RB) ->
+ let ik = IK_mem_write Write_conditional in
+ return (aR,oR,iR,Nias,ik)
+ | Stwcx (RS,RA,RB) ->
+ let ik = IK_mem_write Write_conditional in
+ return (aR,oR,iR,Nias,ik)
+ | Ldarx (RT,RA,RB,EH) ->
+ let iR =
+ if bitU_to_bool (eq_vec_range (RA, (0:ii)))
+ then iR
+ else (RFull (access GPRs (unsigned (reset_vector_start RA)))) :: iR in
+ let iR = (RFull (access GPRs (unsigned (reset_vector_start RB)))) :: iR in
+ let aR = iR in
+ let oR = (RFull (access GPRs (unsigned (reset_vector_start RT)))) :: oR in
+ let ik = IK_mem_read Read_reserve in
+ return (aR,oR,iR,Nias,ik)
+ | Stdcx (RS,RA,RB) ->
+ let ik = IK_mem_write Write_conditional in
+ return (aR,oR,iR,Nias,ik)
+ | Sync (L) ->
+ let ik =
+ match L with
+ | Vector [B0;B0] _ _ -> IK_barrier Barrier_Sync
+ | Vector [B0;B1] _ _ -> IK_barrier Barrier_LwSync
+ end in
+ return (aR,oR,iR,Nias,ik)
+ | Eieio ->
+ let ik = IK_barrier Barrier_Eieio in
+ return (aR,oR,iR,Nias,ik)
+ | Wait (WC) -> return (aR,oR,iR,Nias,ik)
+ end >>= fun (aR, oR, iR, Nias, ik) ->
+ return (iR,oR,aR,Nias,Dia,ik)
+