diff options
| author | Alasdair Armstrong | 2017-12-13 18:54:17 +0000 |
|---|---|---|
| committer | Alasdair Armstrong | 2017-12-13 18:54:17 +0000 |
| commit | 2682a259a2a4a4ee34ddd6be6ea6f5dc3a3a15b7 (patch) | |
| tree | 8d8ac9d07cc824c2a6c887f345b2865802c4b8ff /power/power_embed.lem.fixed | |
| parent | b37a6de931c71a3d1136fee74885b5864c24c5c9 (diff) | |
| parent | 8dde03d441a322fc489e4d25e16cd75d02f64474 (diff) | |
Merge remote-tracking branch 'origin/master' into interactive
Diffstat (limited to 'power/power_embed.lem.fixed')
| -rw-r--r-- | power/power_embed.lem.fixed | 6743 |
1 files changed, 0 insertions, 6743 deletions
diff --git a/power/power_embed.lem.fixed b/power/power_embed.lem.fixed deleted file mode 100644 index 52e25bdf..00000000 --- a/power/power_embed.lem.fixed +++ /dev/null @@ -1,6743 +0,0 @@ -(*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) - |
