summaryrefslogtreecommitdiff
path: root/old/power/gen/compile.gen
diff options
context:
space:
mode:
Diffstat (limited to 'old/power/gen/compile.gen')
-rw-r--r--old/power/gen/compile.gen2257
1 files changed, 2257 insertions, 0 deletions
diff --git a/old/power/gen/compile.gen b/old/power/gen/compile.gen
new file mode 100644
index 00000000..d0af6e38
--- /dev/null
+++ b/old/power/gen/compile.gen
@@ -0,0 +1,2257 @@
+| `Pb (DontSetAA,DontSetLK,target_addr) ->
+ { empty_ins with
+ memo=sprintf "b %i" target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pb (SetAA,DontSetLK,target_addr) ->
+ { empty_ins with
+ memo=sprintf "ba %i" target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pb (DontSetAA,SetLK,target_addr) ->
+ { empty_ins with
+ memo=sprintf "bl %i" target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pb (SetAA,SetLK,target_addr) ->
+ { empty_ins with
+ memo=sprintf "bla %i" target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbc (DontSetAA,DontSetLK,bO,bI,target_addr) ->
+ { empty_ins with
+ memo=sprintf "bc %i,%i,%i" bO bI target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbc (SetAA,DontSetLK,bO,bI,target_addr) ->
+ { empty_ins with
+ memo=sprintf "bca %i,%i,%i" bO bI target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbc (DontSetAA,SetLK,bO,bI,target_addr) ->
+ { empty_ins with
+ memo=sprintf "bcl %i,%i,%i" bO bI target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbc (SetAA,SetLK,bO,bI,target_addr) ->
+ { empty_ins with
+ memo=sprintf "bcla %i,%i,%i" bO bI target_addr;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbclr (DontSetLK,bO,bI,bH) ->
+ { empty_ins with
+ memo=sprintf "bclr %i,%i,%i" bO bI bH;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbclr (SetLK,bO,bI,bH) ->
+ { empty_ins with
+ memo=sprintf "bclrl %i,%i,%i" bO bI bH;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbcctr (DontSetLK,bO,bI,bH) ->
+ { empty_ins with
+ memo=sprintf "bcctr %i,%i,%i" bO bI bH;
+ inputs=[];
+ outputs=[]; }::k
+| `Pbcctr (SetLK,bO,bI,bH) ->
+ { empty_ins with
+ memo=sprintf "bcctrl %i,%i,%i" bO bI bH;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcrand (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "crand %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcrnand (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "crnand %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcror (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "cror %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcrxor (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "crxor %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcrnor (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "crnor %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcreqv (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "creqv %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcrandc (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "crandc %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pcrorc (bT,bA,bB) ->
+ { empty_ins with
+ memo=sprintf "crorc %i,%i,%i" bT bA bB;
+ inputs=[];
+ outputs=[]; }::k
+| `Pmcrf (bF,bFA) ->
+ { empty_ins with
+ memo=sprintf "mcrf %i,%i" bF bFA;
+ inputs=[];
+ outputs=[]; }::k
+| `Psc (lEV) ->
+ { empty_ins with
+ memo=sprintf "sc %i" lEV;
+ inputs=[];
+ outputs=[]; }::k
+| `Pscv (lEV) ->
+ { empty_ins with
+ memo=sprintf "scv %i" lEV;
+ inputs=[];
+ outputs=[]; }::k
+| `Plbz (rT,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lbz ^o0,%i(0)" d
+ else sprintf "lbz ^o0,%i(^i0)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Plbzx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lbzx ^o0,0,^i0"
+ else sprintf "lbzx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plbzu (rT,d,rA) ->
+ { empty_ins with
+ memo=sprintf "lbzu ^o0,%i(^i0)" d;
+ inputs=[rA];
+ outputs=[rT; rA]; }::k
+| `Plbzux (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "lbzux ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT; rA]; }::k
+| `Plhz (rT,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lhz ^o0,%i(0)" d
+ else sprintf "lhz ^o0,%i(^i0)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Plhzx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lhzx ^o0,0,^i0"
+ else sprintf "lhzx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plhzu (rT,d,rA) ->
+ { empty_ins with
+ memo=sprintf "lhzu ^o0,%i(^i0)" d;
+ inputs=[rA];
+ outputs=[rT; rA]; }::k
+| `Plhzux (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "lhzux ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT; rA]; }::k
+| `Plha (rT,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lha ^o0,%i(0)" d
+ else sprintf "lha ^o0,%i(^i0)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Plhax (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lhax ^o0,0,^i0"
+ else sprintf "lhax ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plhau (rT,d,rA) ->
+ { empty_ins with
+ memo=sprintf "lhau ^o0,%i(^i0)" d;
+ inputs=[rA];
+ outputs=[rT; rA]; }::k
+| `Plhaux (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "lhaux ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT; rA]; }::k
+| `Plwz (rT,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lwz ^o0,%i(0)" d
+ else sprintf "lwz ^o0,%i(^i0)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Plwzx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lwzx ^o0,0,^i0"
+ else sprintf "lwzx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plwzu (rT,d,rA) ->
+ { empty_ins with
+ memo=sprintf "lwzu ^o0,%i(^i0)" d;
+ inputs=[rA];
+ outputs=[rT; rA]; }::k
+| `Plwzux (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "lwzux ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT; rA]; }::k
+| `Plwa (rT,dS,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lwa ^o0,%i(0)" (dS lsr 2)
+ else sprintf "lwa ^o0,%i(^i0)" (dS lsr 2);
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Plwax (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lwax ^o0,0,^i0"
+ else sprintf "lwax ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plwaux (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "lwaux ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT; rA]; }::k
+| `Pld (rT,dS,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "ld ^o0,%i(0)" (dS lsr 2)
+ else sprintf "ld ^o0,%i(^i0)" (dS lsr 2);
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Pldx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "ldx ^o0,0,^i0"
+ else sprintf "ldx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pldu (rT,dS,rA) ->
+ { empty_ins with
+ memo=sprintf "ldu ^o0,%i(^i0)" (dS lsr 2);
+ inputs=[rA];
+ outputs=[rT; rA]; }::k
+| `Pldux (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "ldux ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT; rA]; }::k
+| `Pstb (rS,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stb ^i0,%i(0)" d
+ else sprintf "stb ^i0,%i(^i1)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS] else [rS; rA]);
+ outputs=[]; }::k
+| `Pstbx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stbx ^i0,0,^i1"
+ else sprintf "stbx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Pstbu (rS,d,rA) ->
+ { empty_ins with
+ memo=sprintf "stbu ^i0,%i(^i1)" d;
+ inputs=[rS; rA];
+ outputs=[rA]; }::k
+| `Pstbux (rS,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "stbux ^i0,^i1,^i2" ;
+ inputs=[rS; rA; rB];
+ outputs=[rA]; }::k
+| `Psth (rS,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "sth ^i0,%i(0)" d
+ else sprintf "sth ^i0,%i(^i1)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS] else [rS; rA]);
+ outputs=[]; }::k
+| `Psthx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "sthx ^i0,0,^i1"
+ else sprintf "sthx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Psthu (rS,d,rA) ->
+ { empty_ins with
+ memo=sprintf "sthu ^i0,%i(^i1)" d;
+ inputs=[rS; rA];
+ outputs=[rA]; }::k
+| `Psthux (rS,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "sthux ^i0,^i1,^i2" ;
+ inputs=[rS; rA; rB];
+ outputs=[rA]; }::k
+| `Pstw (rS,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stw ^i0,%i(0)" d
+ else sprintf "stw ^i0,%i(^i1)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS] else [rS; rA]);
+ outputs=[]; }::k
+| `Pstwx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stwx ^i0,0,^i1"
+ else sprintf "stwx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Pstwu (rS,d,rA) ->
+ { empty_ins with
+ memo=sprintf "stwu ^i0,%i(^i1)" d;
+ inputs=[rS; rA];
+ outputs=[rA]; }::k
+| `Pstwux (rS,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "stwux ^i0,^i1,^i2" ;
+ inputs=[rS; rA; rB];
+ outputs=[rA]; }::k
+| `Pstd (rS,dS,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "std ^i0,%i(0)" (dS lsr 2)
+ else sprintf "std ^i0,%i(^i1)" (dS lsr 2);
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS] else [rS; rA]);
+ outputs=[]; }::k
+| `Pstdx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stdx ^i0,0,^i1"
+ else sprintf "stdx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Pstdu (rS,dS,rA) ->
+ { empty_ins with
+ memo=sprintf "stdu ^i0,%i(^i1)" (dS lsr 2);
+ inputs=[rS; rA];
+ outputs=[rA]; }::k
+| `Pstdux (rS,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "stdux ^i0,^i1,^i2" ;
+ inputs=[rS; rA; rB];
+ outputs=[rA]; }::k
+| `Plq (rTp,dQ,rA,pT) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lq %i,%i(0),%i" rTp dQ pT
+ else sprintf "lq %i,%i(^i0),%i" rTp dQ pT;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rA]; }::k
+| `Pstq (rSp,dS,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stq %i,%i(0)" rSp (dS lsr 2)
+ else sprintf "stq %i,%i(^i0)" rSp (dS lsr 2);
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[]; }::k
+| `Plhbrx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lhbrx ^o0,0,^i0"
+ else sprintf "lhbrx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Psthbrx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "sthbrx ^i0,0,^i1"
+ else sprintf "sthbrx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Plwbrx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lwbrx ^o0,0,^i0"
+ else sprintf "lwbrx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pstwbrx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stwbrx ^i0,0,^i1"
+ else sprintf "stwbrx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Pldbrx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "ldbrx ^o0,0,^i0"
+ else sprintf "ldbrx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pstdbrx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stdbrx ^i0,0,^i1"
+ else sprintf "stdbrx ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rS; rB] else [rS; rA; rB]);
+ outputs=[]; }::k
+| `Plmw (rT,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lmw ^o0,%i(0)" d
+ else sprintf "lmw ^o0,%i(^i0)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[] @ (A.regs_interval rT); }::k
+| `Pstmw (rS,d,rA) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stmw ^i0,%i(0)" d
+ else sprintf "stmw ^i1,%i(^i0)" d;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]) @ (A.regs_interval rS);
+ outputs=[]; }::k
+| `Plswi (rT,rA,nB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lswi %i,0,%i" rT nB
+ else sprintf "lswi %i,^i0,%i" rT nB;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[]; }::k
+| `Plswx (rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lswx ^o0,0,^i0"
+ else sprintf "lswx ^o0,^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pstswi (rS,rA,nB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stswi %i,0,%i" rS nB
+ else sprintf "stswi %i,^i0,%i" rS nB;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[]; }::k
+| `Pstswx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stswx %i,0,^i0" rS
+ else sprintf "stswx %i,^i0,^i1" rS;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[]; }::k
+| `Paddi (rT,rA,sI) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "addi ^o0,0,%i" sI
+ else sprintf "addi ^o0,^i0,%i" sI;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Paddis (rT,rA,sI) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "addis ^o0,0,%i" sI
+ else sprintf "addis ^o0,^i0,%i" sI;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA]);
+ outputs=[rT]; }::k
+| `Padd (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "add ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padd (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "add. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padd (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padd (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubf (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subf ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubf (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subf. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubf (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubf (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Paddic (rT,rA,sI) ->
+ { empty_ins with
+ memo=sprintf "addic ^o0,^i0,%i" sI;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddicdot (rT,rA,sI) ->
+ { empty_ins with
+ memo=sprintf "addic. ^o0,^i0,%i" sI;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfic (rT,rA,sI) ->
+ { empty_ins with
+ memo=sprintf "subfic ^o0,^i0,%i" sI;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddc (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addc ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Paddc (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addc. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Paddc (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addco ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Paddc (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addco. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfc (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfc ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfc (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfc. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfc (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfco ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfc (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfco. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padde (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "adde ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padde (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "adde. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padde (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addeo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Padde (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addeo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfe (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfe ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfe (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfe. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfe (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfeo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Psubfe (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "subfeo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Paddme (DontSetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addme ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddme (DontSetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addme. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddme (SetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addmeo ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddme (SetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addmeo. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfme (DontSetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfme ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfme (DontSetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfme. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfme (SetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfmeo ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfme (SetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfmeo. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddze (DontSetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addze ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddze (DontSetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addze. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddze (SetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addzeo ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Paddze (SetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "addzeo. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfze (DontSetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfze ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfze (DontSetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfze. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfze (SetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfzeo ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Psubfze (SetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "subfzeo. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Pneg (DontSetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "neg ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Pneg (DontSetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "neg. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Pneg (SetSOOV,DontSetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "nego ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Pneg (SetSOOV,SetCR0,rT,rA) ->
+ { empty_ins with
+ memo=sprintf "nego. ^o0,^i0" ;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Pmulli (rT,rA,sI) ->
+ { empty_ins with
+ memo=sprintf "mulli ^o0,^i0,%i" sI;
+ inputs=[rA];
+ outputs=[rT]; }::k
+| `Pmullw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mullw ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmullw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mullw. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmullw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mullwo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmullw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mullwo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhw (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhw ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhw (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhw. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhwu (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhwu ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhwu (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhwu. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divw ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divw. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwu ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwu. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwuo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwuo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwe (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwe ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwe (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divwe. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwe (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divweo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivwe (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divweo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivweu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divweu ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivweu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divweu. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivweu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divweuo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivweu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divweuo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulld (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulld ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulld (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulld. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulld (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulldo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulld (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulldo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhd (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhd ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhd (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhd. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhdu (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhdu ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmulhdu (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "mulhdu. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivd (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divd ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivd (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divd. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivd (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivd (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdu ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdu. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divduo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divduo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivde (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divde ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivde (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divde. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivde (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdeo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivde (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdeo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdeu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdeu ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdeu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdeu. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdeu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdeuo ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pdivdeu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "divdeuo. ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pcmpi (bF,l,rA,sI) ->
+ { empty_ins with
+ memo=sprintf "cmpi %i,%i,^i0,%i" bF l sI;
+ inputs=[rA];
+ outputs=[]; }::k
+| `Pcmp (bF,l,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "cmp %i,%i,^i0,^i1" bF l;
+ inputs=[rA; rB];
+ outputs=[]; }::k
+| `Pcmpli (bF,l,rA,uI) ->
+ { empty_ins with
+ memo=sprintf "cmpli %i,%i,^i0,%i" bF l uI;
+ inputs=[rA];
+ outputs=[]; }::k
+| `Pcmpl (bF,l,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "cmpl %i,%i,^i0,^i1" bF l;
+ inputs=[rA; rB];
+ outputs=[]; }::k
+| `Pisel (rT,rA,rB,bC) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "isel ^o0,0,^i0,%i" bC
+ else sprintf "isel ^o0,^i0,^i1,%i" bC;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pandi (rA,rS,uI) ->
+ { empty_ins with
+ memo=sprintf "andi. ^o0,^i0,%i" uI;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pandis (rA,rS,uI) ->
+ { empty_ins with
+ memo=sprintf "andis. ^o0,^i0,%i" uI;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pori (rA,rS,uI) ->
+ { empty_ins with
+ memo=sprintf "ori ^o0,^i0,%i" uI;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Poris (rA,rS,uI) ->
+ { empty_ins with
+ memo=sprintf "oris ^o0,^i0,%i" uI;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pxori (rA,rS,uI) ->
+ { empty_ins with
+ memo=sprintf "xori ^o0,^i0,%i" uI;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pxoris (rA,rS,uI) ->
+ { empty_ins with
+ memo=sprintf "xoris ^o0,^i0,%i" uI;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pand (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "and ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pand (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "and. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pxor (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "xor ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pxor (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "xor. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pnand (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "nand ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pnand (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "nand. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Por (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "or ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Por (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "or. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pnor (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "nor ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pnor (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "nor. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Peqv (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "eqv ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Peqv (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "eqv. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pandc (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "andc ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pandc (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "andc. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Porc (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "orc ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Porc (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "orc. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pextsb (DontSetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "extsb ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pextsb (SetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "extsb. ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pextsh (DontSetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "extsh ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pextsh (SetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "extsh. ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pcntlzw (DontSetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "cntlzw ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pcntlzw (SetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "cntlzw. ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pcmpb (rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "cmpb ^o0,%i,^i0" rS;
+ inputs=[rB];
+ outputs=[rA]; }::k
+| `Ppopcntb (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "popcntb ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Ppopcntw (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "popcntw ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pprtyd (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "prtyd ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pprtyw (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "prtyw ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pextsw (DontSetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "extsw ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pextsw (SetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "extsw. ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pcntlzd (DontSetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "cntlzd ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pcntlzd (SetCR0,rA,rS) ->
+ { empty_ins with
+ memo=sprintf "cntlzd. ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Ppopcntd (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "popcntd ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pbpermd (rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "bpermd ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prlwinm (DontSetCR0,rA,rS,sH,mB,mE) ->
+ { empty_ins with
+ memo=sprintf "rlwinm ^o0,^i0,%i,%i,%i" sH mB mE;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prlwinm (SetCR0,rA,rS,sH,mB,mE) ->
+ { empty_ins with
+ memo=sprintf "rlwinm. ^o0,^i0,%i,%i,%i" sH mB mE;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prlwnm (DontSetCR0,rA,rS,rB,mB,mE) ->
+ { empty_ins with
+ memo=sprintf "rlwnm ^o0,^i0,^i1,%i,%i" mB mE;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prlwnm (SetCR0,rA,rS,rB,mB,mE) ->
+ { empty_ins with
+ memo=sprintf "rlwnm. ^o0,^i0,^i1,%i,%i" mB mE;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prlwimi (DontSetCR0,rA,rS,sH,mB,mE) ->
+ { empty_ins with
+ memo=sprintf "rlwimi ^i0,^i1,%i,%i,%i" sH mB mE;
+ inputs=[rA; rS];
+ outputs=[rA]; }::k
+| `Prlwimi (SetCR0,rA,rS,sH,mB,mE) ->
+ { empty_ins with
+ memo=sprintf "rlwimi. ^i0,^i1,%i,%i,%i" sH mB mE;
+ inputs=[rA; rS];
+ outputs=[rA]; }::k
+| `Prldicl (DontSetCR0,rA,rS,sH,mB) ->
+ { empty_ins with
+ memo=sprintf "rldicl ^o0,^i0,%i,%i" sH mB;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prldicl (SetCR0,rA,rS,sH,mB) ->
+ { empty_ins with
+ memo=sprintf "rldicl. ^o0,^i0,%i,%i" sH mB;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prldicr (DontSetCR0,rA,rS,sH,mE) ->
+ { empty_ins with
+ memo=sprintf "rldicr ^o0,^i0,%i,%i" sH mE;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prldicr (SetCR0,rA,rS,sH,mE) ->
+ { empty_ins with
+ memo=sprintf "rldicr. ^o0,^i0,%i,%i" sH mE;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prldic (DontSetCR0,rA,rS,sH,mB) ->
+ { empty_ins with
+ memo=sprintf "rldic ^o0,^i0,%i,%i" sH mB;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prldic (SetCR0,rA,rS,sH,mB) ->
+ { empty_ins with
+ memo=sprintf "rldic. ^o0,^i0,%i,%i" sH mB;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Prldcl (DontSetCR0,rA,rS,rB,mB) ->
+ { empty_ins with
+ memo=sprintf "rldcl ^o0,^i0,^i1,%i" mB;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prldcl (SetCR0,rA,rS,rB,mB) ->
+ { empty_ins with
+ memo=sprintf "rldcl. ^o0,^i0,^i1,%i" mB;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prldcr (DontSetCR0,rA,rS,rB,mE) ->
+ { empty_ins with
+ memo=sprintf "rldcr ^o0,^i0,^i1,%i" mE;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prldcr (SetCR0,rA,rS,rB,mE) ->
+ { empty_ins with
+ memo=sprintf "rldcr. ^o0,^i0,^i1,%i" mE;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Prldimi (DontSetCR0,rA,rS,sH,mB) ->
+ { empty_ins with
+ memo=sprintf "rldimi ^i0,^i1,%i,%i" sH mB;
+ inputs=[rA; rS];
+ outputs=[rA]; }::k
+| `Prldimi (SetCR0,rA,rS,sH,mB) ->
+ { empty_ins with
+ memo=sprintf "rldimi. ^i0,^i1,%i,%i" sH mB;
+ inputs=[rA; rS];
+ outputs=[rA]; }::k
+| `Pslw (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "slw ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pslw (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "slw. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psrw (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "srw ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psrw (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "srw. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psrawi (DontSetCR0,rA,rS,sH) ->
+ { empty_ins with
+ memo=sprintf "srawi ^o0,^i0,%i" sH;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Psrawi (SetCR0,rA,rS,sH) ->
+ { empty_ins with
+ memo=sprintf "srawi. ^o0,^i0,%i" sH;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Psraw (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "sraw ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psraw (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "sraw. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psld (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "sld ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psld (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "sld. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psrd (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "srd ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psrd (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "srd. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psradi (DontSetCR0,rA,rS,sH) ->
+ { empty_ins with
+ memo=sprintf "sradi ^o0,^i0,%i" sH;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Psradi (SetCR0,rA,rS,sH) ->
+ { empty_ins with
+ memo=sprintf "sradi. ^o0,^i0,%i" sH;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Psrad (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "srad ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Psrad (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo=sprintf "srad. ^o0,^i0,^i1" ;
+ inputs=[rS; rB];
+ outputs=[rA]; }::k
+| `Pcdtbcd (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "cdtbcd ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Pcbcdtd (rA,rS) ->
+ { empty_ins with
+ memo=sprintf "cbcdtd ^o0,^i0" ;
+ inputs=[rS];
+ outputs=[rA]; }::k
+| `Paddg6s (rT,rA,rB) ->
+ { empty_ins with
+ memo=sprintf "addg6s ^o0,^i0,^i1" ;
+ inputs=[rA; rB];
+ outputs=[rT]; }::k
+| `Pmtspr (sPR,rS) ->
+ { empty_ins with
+ memo=sprintf "mtspr %i,^i0" sPR;
+ inputs=[rS];
+ outputs=[]; }::k
+| `Pmfspr (rT,sPR) ->
+ { empty_ins with
+ memo=sprintf "mfspr ^o0,%i" sPR;
+ inputs=[];
+ outputs=[rT]; }::k
+| `Pmtcrf (fXM,rS) ->
+ { empty_ins with
+ memo=sprintf "mtcrf %i,^i0" fXM;
+ inputs=[rS];
+ outputs=[]; }::k
+| `Pmfcr (rT) ->
+ { empty_ins with
+ memo=sprintf "mfcr ^o0" ;
+ inputs=[];
+ outputs=[rT]; }::k
+| `Pmtocrf (fXM,rS) ->
+ { empty_ins with
+ memo=sprintf "mtocrf %i,^i0" fXM;
+ inputs=[rS];
+ outputs=[]; }::k
+| `Pmfocrf (rT,fXM) ->
+ { empty_ins with
+ memo=sprintf "mfocrf ^o0,%i" fXM;
+ inputs=[];
+ outputs=[rT]; }::k
+| `Pmcrxr (bF) ->
+ { empty_ins with
+ memo=sprintf "mcrxr %i" bF;
+ inputs=[];
+ outputs=[]; }::k
+| `Pdlmzb (DontSetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dlmzb 0,^o1,^o2"
+ else sprintf "dlmzb ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rS; rB]);
+ outputs=[rA; rS; rB]; }::k
+| `Pdlmzb (SetCR0,rA,rS,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dlmzb. 0,^o1,^o2"
+ else sprintf "dlmzb. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rS; rB]);
+ outputs=[rA; rS; rB]; }::k
+| `Pmacchw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchw ^o0,0,^o2"
+ else sprintf "macchw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchw. ^o0,0,^o2"
+ else sprintf "macchw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwo ^o0,0,^o2"
+ else sprintf "macchwo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwo. ^o0,0,^o2"
+ else sprintf "macchwo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchws (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchws ^o0,0,^o2"
+ else sprintf "macchws ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchws (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchws. ^o0,0,^o2"
+ else sprintf "macchws. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchws (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwso ^o0,0,^o2"
+ else sprintf "macchwso ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchws (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwso. ^o0,0,^o2"
+ else sprintf "macchwso. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwu ^o0,0,^o2"
+ else sprintf "macchwu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwu. ^o0,0,^o2"
+ else sprintf "macchwu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwuo ^o0,0,^o2"
+ else sprintf "macchwuo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwuo. ^o0,0,^o2"
+ else sprintf "macchwuo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwsu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwsu ^o0,0,^o2"
+ else sprintf "macchwsu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwsu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwsu. ^o0,0,^o2"
+ else sprintf "macchwsu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwsu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwsuo ^o0,0,^o2"
+ else sprintf "macchwsuo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmacchwsu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "macchwsuo. ^o0,0,^o2"
+ else sprintf "macchwsuo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhw ^o0,0,^o2"
+ else sprintf "machhw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhw. ^o0,0,^o2"
+ else sprintf "machhw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwo ^o0,0,^o2"
+ else sprintf "machhwo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwo. ^o0,0,^o2"
+ else sprintf "machhwo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhws (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhws ^o0,0,^o2"
+ else sprintf "machhws ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhws (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhws. ^o0,0,^o2"
+ else sprintf "machhws. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhws (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwso ^o0,0,^o2"
+ else sprintf "machhwso ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhws (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwso. ^o0,0,^o2"
+ else sprintf "machhwso. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwu ^o0,0,^o2"
+ else sprintf "machhwu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwu. ^o0,0,^o2"
+ else sprintf "machhwu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwuo ^o0,0,^o2"
+ else sprintf "machhwuo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwuo. ^o0,0,^o2"
+ else sprintf "machhwuo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwsu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwsu ^o0,0,^o2"
+ else sprintf "machhwsu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwsu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwsu. ^o0,0,^o2"
+ else sprintf "machhwsu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwsu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwsuo ^o0,0,^o2"
+ else sprintf "machhwsuo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmachhwsu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "machhwsuo. ^o0,0,^o2"
+ else sprintf "machhwsuo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhw ^o0,0,^o2"
+ else sprintf "maclhw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhw. ^o0,0,^o2"
+ else sprintf "maclhw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwo ^o0,0,^o2"
+ else sprintf "maclhwo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwo. ^o0,0,^o2"
+ else sprintf "maclhwo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhws (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhws ^o0,0,^o2"
+ else sprintf "maclhws ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhws (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhws. ^o0,0,^o2"
+ else sprintf "maclhws. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhws (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwso ^o0,0,^o2"
+ else sprintf "maclhwso ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhws (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwso. ^o0,0,^o2"
+ else sprintf "maclhwso. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwu ^o0,0,^o2"
+ else sprintf "maclhwu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwu. ^o0,0,^o2"
+ else sprintf "maclhwu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwuo ^o0,0,^o2"
+ else sprintf "maclhwuo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwuo. ^o0,0,^o2"
+ else sprintf "maclhwuo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwsu (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwsu ^o0,0,^o2"
+ else sprintf "maclhwsu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwsu (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwsu. ^o0,0,^o2"
+ else sprintf "maclhwsu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwsu (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwsuo ^o0,0,^o2"
+ else sprintf "maclhwsuo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmaclhwsu (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "maclhwsuo. ^o0,0,^o2"
+ else sprintf "maclhwsuo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulchw (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulchw ^o0,0,^o2"
+ else sprintf "mulchw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulchw (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulchw. ^o0,0,^o2"
+ else sprintf "mulchw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulchwu (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulchwu ^o0,0,^o2"
+ else sprintf "mulchwu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulchwu (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulchwu. ^o0,0,^o2"
+ else sprintf "mulchwu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulhhw (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulhhw ^o0,0,^o2"
+ else sprintf "mulhhw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulhhw (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulhhw. ^o0,0,^o2"
+ else sprintf "mulhhw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulhhwu (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulhhwu ^o0,0,^o2"
+ else sprintf "mulhhwu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmulhhwu (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mulhhwu. ^o0,0,^o2"
+ else sprintf "mulhhwu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmullhw (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mullhw ^o0,0,^o2"
+ else sprintf "mullhw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmullhw (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mullhw. ^o0,0,^o2"
+ else sprintf "mullhw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmullhwu (DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mullhwu ^o0,0,^o2"
+ else sprintf "mullhwu ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pmullhwu (SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "mullhwu. ^o0,0,^o2"
+ else sprintf "mullhwu. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchw ^o0,0,^o2"
+ else sprintf "nmacchw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchw. ^o0,0,^o2"
+ else sprintf "nmacchw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchwo ^o0,0,^o2"
+ else sprintf "nmacchwo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchwo. ^o0,0,^o2"
+ else sprintf "nmacchwo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchws (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchws ^o0,0,^o2"
+ else sprintf "nmacchws ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchws (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchws. ^o0,0,^o2"
+ else sprintf "nmacchws. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchws (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchwso ^o0,0,^o2"
+ else sprintf "nmacchwso ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmacchws (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmacchwso. ^o0,0,^o2"
+ else sprintf "nmacchwso. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhw ^o0,0,^o2"
+ else sprintf "nmachhw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhw. ^o0,0,^o2"
+ else sprintf "nmachhw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhwo ^o0,0,^o2"
+ else sprintf "nmachhwo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhwo. ^o0,0,^o2"
+ else sprintf "nmachhwo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhws (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhws ^o0,0,^o2"
+ else sprintf "nmachhws ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhws (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhws. ^o0,0,^o2"
+ else sprintf "nmachhws. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhws (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhwso ^o0,0,^o2"
+ else sprintf "nmachhwso ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmachhws (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmachhwso. ^o0,0,^o2"
+ else sprintf "nmachhwso. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhw (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhw ^o0,0,^o2"
+ else sprintf "nmaclhw ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhw (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhw. ^o0,0,^o2"
+ else sprintf "nmaclhw. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhw (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhwo ^o0,0,^o2"
+ else sprintf "nmaclhwo ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhw (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhwo. ^o0,0,^o2"
+ else sprintf "nmaclhwo. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhws (DontSetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhws ^o0,0,^o2"
+ else sprintf "nmaclhws ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhws (DontSetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhws. ^o0,0,^o2"
+ else sprintf "nmaclhws. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhws (SetSOOV,DontSetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhwso ^o0,0,^o2"
+ else sprintf "nmaclhwso ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Pnmaclhws (SetSOOV,SetCR0,rT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "nmaclhwso. ^o0,0,^o2"
+ else sprintf "nmaclhwso. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rT; rA; rB]);
+ outputs=[rT; rA; rB]; }::k
+| `Picbi (rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "icbi 0,^o1"
+ else sprintf "icbi ^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Picbt (cT,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "icbt %i,0,^o1" cT
+ else sprintf "icbt %i,^i0,^i1" cT;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pdcba (rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dcba 0,^o1"
+ else sprintf "dcba ^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pdcbt (rA,rB,tH) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dcbt 0,^o1,%i" tH
+ else sprintf "dcbt ^i0,^i1,%i" tH;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pdcbtst (rA,rB,tH) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dcbtst 0,^o1,%i" tH
+ else sprintf "dcbtst ^i0,^i1,%i" tH;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pdcbz (rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dcbz 0,^o1"
+ else sprintf "dcbz ^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pdcbst (rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dcbst 0,^o1"
+ else sprintf "dcbst ^i0,^i1" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pdcbf (rA,rB,l) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "dcbf 0,^o1,%i" l
+ else sprintf "dcbf ^i0,^i1,%i" l;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rA; rB]);
+ outputs=[rA; rB]; }::k
+| `Pisync ->
+ { empty_ins with
+ memo=sprintf "isync " ;
+ inputs=[];
+ outputs=[]; }::k
+| `Plbarx (rT,rA,rB,eH) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lbarx ^o0,0,^i0,%i" eH
+ else sprintf "lbarx ^o0,^i0,^i1,%i" eH;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plharx (rT,rA,rB,eH) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lharx ^o0,0,^i0,%i" eH
+ else sprintf "lharx ^o0,^i0,^i1,%i" eH;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Plwarx (rT,rA,rB,eH) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "lwarx ^o0,0,^i0,%i" eH
+ else sprintf "lwarx ^o0,^i0,^i1,%i" eH;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pstbcx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stbcx. ^o0,0,^o2"
+ else sprintf "stbcx. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rS; rA; rB]);
+ outputs=[rS; rA; rB]; }::k
+| `Psthcx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "sthcx. ^o0,0,^o2"
+ else sprintf "sthcx. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rS; rA; rB]);
+ outputs=[rS; rA; rB]; }::k
+| `Pstwcx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stwcx. ^o0,0,^o2"
+ else sprintf "stwcx. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rS; rA; rB]);
+ outputs=[rS; rA; rB]; }::k
+| `Pldarx (rT,rA,rB,eH) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "ldarx ^o0,0,^i0,%i" eH
+ else sprintf "ldarx ^o0,^i0,^i1,%i" eH;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [rB] else [rA; rB]);
+ outputs=[rT]; }::k
+| `Pstdcx (rS,rA,rB) ->
+ { empty_ins with
+ memo= if rA = A.Ireg A.GPR0
+ then sprintf "stdcx. ^o0,0,^o2"
+ else sprintf "stdcx. ^i0,^i1,^i2" ;
+ inputs=
+ (if rA = A.Ireg A.GPR0 then [] else [rS; rA; rB]);
+ outputs=[rS; rA; rB]; }::k
+| `Psync (l) ->
+ { empty_ins with
+ memo=sprintf "sync %i" l;
+ inputs=[];
+ outputs=[]; }::k
+| `Peieio ->
+ { empty_ins with
+ memo=sprintf "eieio " ;
+ inputs=[];
+ outputs=[]; }::k
+| `Pwait (wC) ->
+ { empty_ins with
+ memo=sprintf "wait %i" wC;
+ inputs=[];
+ outputs=[]; }::k