  | ("B", [li; aa; lk], _) -> 
      `Pb(
       (trans_out_aa aa),
        (trans_out_lk lk),
        (trans_out_int (trans_out_li_setaa_setlk_k3 li aa lk)))
  | ("Bc", [bo; bi; bd; aa; lk], _) -> 
      `Pbc(
       (trans_out_aa aa),
        (trans_out_lk lk),
        (trans_out_int bo),
        (trans_out_int bi),
        (trans_out_int (trans_out_bd_setaa_setlk_k_k_k5 bo bi bd aa lk)))
  | ("Bclr", [bo; bi; bh; lk], _) -> 
      `Pbclr(
       (trans_out_lk lk),
        (trans_out_int bo),
        (trans_out_int bi),
        (trans_out_int bh))
  | ("Bcctr", [bo; bi; bh; lk], _) -> 
      `Pbcctr(
       (trans_out_lk lk),
        (trans_out_int bo),
        (trans_out_int bi),
        (trans_out_int bh))
  | ("Crand", [bt; ba; bb], _) -> 
      `Pcrand(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Crnand", [bt; ba; bb], _) -> 
      `Pcrnand(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Cror", [bt; ba; bb], _) -> 
      `Pcror(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Crxor", [bt; ba; bb], _) -> 
      `Pcrxor(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Crnor", [bt; ba; bb], _) -> 
      `Pcrnor(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Creqv", [bt; ba; bb], _) -> 
      `Pcreqv(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Crandc", [bt; ba; bb], _) -> 
      `Pcrandc(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Crorc", [bt; ba; bb], _) -> 
      `Pcrorc(
       (trans_out_int bt),
        (trans_out_int ba),
        (trans_out_int bb))
  | ("Mcrf", [bf; bfa], _) -> 
      `Pmcrf(
       (trans_out_int bf),
        (trans_out_int bfa))
  | ("Sc", [lev], _) -> 
      `Psc(
       (trans_out_int lev))
  | ("Scv", [lev], _) -> 
      `Pscv(
       (trans_out_int lev))
  | ("Lbz", [rt; ra; d], _) -> 
      `Plbz(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lbzx", [rt; ra; rb], _) -> 
      `Plbzx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lbzu", [rt; ra; d], _) -> 
      `Plbzu(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lbzux", [rt; ra; rb], _) -> 
      `Plbzux(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lhz", [rt; ra; d], _) -> 
      `Plhz(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lhzx", [rt; ra; rb], _) -> 
      `Plhzx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lhzu", [rt; ra; d], _) -> 
      `Plhzu(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lhzux", [rt; ra; rb], _) -> 
      `Plhzux(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lha", [rt; ra; d], _) -> 
      `Plha(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lhax", [rt; ra; rb], _) -> 
      `Plhax(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lhau", [rt; ra; d], _) -> 
      `Plhau(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lhaux", [rt; ra; rb], _) -> 
      `Plhaux(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lwz", [rt; ra; d], _) -> 
      `Plwz(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lwzx", [rt; ra; rb], _) -> 
      `Plwzx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lwzu", [rt; ra; d], _) -> 
      `Plwzu(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lwzux", [rt; ra; rb], _) -> 
      `Plwzux(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lwa", [rt; ra; ds], _) -> 
      `Plwa(
       (trans_out_reg rt),
        (trans_out_int ds),
        (trans_out_reg ra))
  | ("Lwax", [rt; ra; rb], _) -> 
      `Plwax(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lwaux", [rt; ra; rb], _) -> 
      `Plwaux(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Ld", [rt; ra; ds], _) -> 
      `Pld(
       (trans_out_reg rt),
        (trans_out_int ds),
        (trans_out_reg ra))
  | ("Ldx", [rt; ra; rb], _) -> 
      `Pldx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Ldu", [rt; ra; ds], _) -> 
      `Pldu(
       (trans_out_reg rt),
        (trans_out_int ds),
        (trans_out_reg ra))
  | ("Ldux", [rt; ra; rb], _) -> 
      `Pldux(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stb", [rs; ra; d], _) -> 
      `Pstb(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Stbx", [rs; ra; rb], _) -> 
      `Pstbx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stbu", [rs; ra; d], _) -> 
      `Pstbu(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Stbux", [rs; ra; rb], _) -> 
      `Pstbux(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Sth", [rs; ra; d], _) -> 
      `Psth(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Sthx", [rs; ra; rb], _) -> 
      `Psthx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Sthu", [rs; ra; d], _) -> 
      `Psthu(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Sthux", [rs; ra; rb], _) -> 
      `Psthux(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stw", [rs; ra; d], _) -> 
      `Pstw(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Stwx", [rs; ra; rb], _) -> 
      `Pstwx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stwu", [rs; ra; d], _) -> 
      `Pstwu(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Stwux", [rs; ra; rb], _) -> 
      `Pstwux(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Std", [rs; ra; ds], _) -> 
      `Pstd(
       (trans_out_reg rs),
        (trans_out_int ds),
        (trans_out_reg ra))
  | ("Stdx", [rs; ra; rb], _) -> 
      `Pstdx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stdu", [rs; ra; ds], _) -> 
      `Pstdu(
       (trans_out_reg rs),
        (trans_out_int ds),
        (trans_out_reg ra))
  | ("Stdux", [rs; ra; rb], _) -> 
      `Pstdux(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lq", [rtp; ra; dq; pt], _) -> 
      `Plq(
       (trans_out_int rtp),
        (trans_out_int dq),
        (trans_out_reg ra),
        (trans_out_int pt))
  | ("Stq", [rsp; ra; ds], _) -> 
      `Pstq(
       (trans_out_int rsp),
        (trans_out_int ds),
        (trans_out_reg ra))
  | ("Lhbrx", [rt; ra; rb], _) -> 
      `Plhbrx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Sthbrx", [rs; ra; rb], _) -> 
      `Psthbrx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lwbrx", [rt; ra; rb], _) -> 
      `Plwbrx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stwbrx", [rs; ra; rb], _) -> 
      `Pstwbrx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Ldbrx", [rt; ra; rb], _) -> 
      `Pldbrx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stdbrx", [rs; ra; rb], _) -> 
      `Pstdbrx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Lmw", [rt; ra; d], _) -> 
      `Plmw(
       (trans_out_reg rt),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Stmw", [rs; ra; d], _) -> 
      `Pstmw(
       (trans_out_reg rs),
        (trans_out_int d),
        (trans_out_reg ra))
  | ("Lswi", [rt; ra; nb], _) -> 
      `Plswi(
       (trans_out_int rt),
        (trans_out_reg ra),
        (trans_out_int nb))
  | ("Lswx", [rt; ra; rb], _) -> 
      `Plswx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stswi", [rs; ra; nb], _) -> 
      `Pstswi(
       (trans_out_int rs),
        (trans_out_reg ra),
        (trans_out_int nb))
  | ("Stswx", [rs; ra; rb], _) -> 
      `Pstswx(
       (trans_out_int rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Addi", [rt; ra; si], _) -> 
      `Paddi(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("Addis", [rt; ra; si], _) -> 
      `Paddis(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("Add", [rt; ra; rb; oe; rc], _) -> 
      `Padd(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Subf", [rt; ra; rb; oe; rc], _) -> 
      `Psubf(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Addic", [rt; ra; si], _) -> 
      `Paddic(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("AddicDot", [rt; ra; si], _) -> 
      `Paddicdot(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("Subfic", [rt; ra; si], _) -> 
      `Psubfic(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("Addc", [rt; ra; rb; oe; rc], _) -> 
      `Paddc(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Subfc", [rt; ra; rb; oe; rc], _) -> 
      `Psubfc(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Adde", [rt; ra; rb; oe; rc], _) -> 
      `Padde(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Subfe", [rt; ra; rb; oe; rc], _) -> 
      `Psubfe(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Addme", [rt; ra; oe; rc], _) -> 
      `Paddme(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra))
  | ("Subfme", [rt; ra; oe; rc], _) -> 
      `Psubfme(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra))
  | ("Addze", [rt; ra; oe; rc], _) -> 
      `Paddze(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra))
  | ("Subfze", [rt; ra; oe; rc], _) -> 
      `Psubfze(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra))
  | ("Neg", [rt; ra; oe; rc], _) -> 
      `Pneg(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra))
  | ("Mulli", [rt; ra; si], _) -> 
      `Pmulli(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("Mullw", [rt; ra; rb; oe; rc], _) -> 
      `Pmullw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulhw", [rt; ra; rb; rc], _) -> 
      `Pmulhw(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulhwu", [rt; ra; rb; rc], _) -> 
      `Pmulhwu(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divw", [rt; ra; rb; oe; rc], _) -> 
      `Pdivw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divwu", [rt; ra; rb; oe; rc], _) -> 
      `Pdivwu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divwe", [rt; ra; rb; oe; rc], _) -> 
      `Pdivwe(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divweu", [rt; ra; rb; oe; rc], _) -> 
      `Pdivweu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulld", [rt; ra; rb; oe; rc], _) -> 
      `Pmulld(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulhd", [rt; ra; rb; rc], _) -> 
      `Pmulhd(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulhdu", [rt; ra; rb; rc], _) -> 
      `Pmulhdu(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divd", [rt; ra; rb; oe; rc], _) -> 
      `Pdivd(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divdu", [rt; ra; rb; oe; rc], _) -> 
      `Pdivdu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divde", [rt; ra; rb; oe; rc], _) -> 
      `Pdivde(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Divdeu", [rt; ra; rb; oe; rc], _) -> 
      `Pdivdeu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Cmpi", [bf; l; ra; si], _) -> 
      `Pcmpi(
       (trans_out_int bf),
        (trans_out_int l),
        (trans_out_reg ra),
        (trans_out_int si))
  | ("Cmp", [bf; l; ra; rb], _) -> 
      `Pcmp(
       (trans_out_int bf),
        (trans_out_int l),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Cmpli", [bf; l; ra; ui], _) -> 
      `Pcmpli(
       (trans_out_int bf),
        (trans_out_int l),
        (trans_out_reg ra),
        (trans_out_int ui))
  | ("Cmpl", [bf; l; ra; rb], _) -> 
      `Pcmpl(
       (trans_out_int bf),
        (trans_out_int l),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Isel", [rt; ra; rb; bc], _) -> 
      `Pisel(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int bc))
  | ("Andi", [rs; ra; ui], _) -> 
      `Pandi(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int ui))
  | ("Andis", [rs; ra; ui], _) -> 
      `Pandis(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int ui))
  | ("Ori", [rs; ra; ui], _) -> 
      `Pori(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int ui))
  | ("Oris", [rs; ra; ui], _) -> 
      `Poris(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int ui))
  | ("Xori", [rs; ra; ui], _) -> 
      `Pxori(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int ui))
  | ("Xoris", [rs; ra; ui], _) -> 
      `Pxoris(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int ui))
  | ("And", [rs; ra; rb; rc], _) -> 
      `Pand(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Xor", [rs; ra; rb; rc], _) -> 
      `Pxor(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Nand", [rs; ra; rb; rc], _) -> 
      `Pnand(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Or", [rs; ra; rb; rc], _) -> 
      `Por(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Nor", [rs; ra; rb; rc], _) -> 
      `Pnor(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Eqv", [rs; ra; rb; rc], _) -> 
      `Peqv(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Andc", [rs; ra; rb; rc], _) -> 
      `Pandc(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Orc", [rs; ra; rb; rc], _) -> 
      `Porc(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Extsb", [rs; ra; rc], _) -> 
      `Pextsb(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Extsh", [rs; ra; rc], _) -> 
      `Pextsh(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Cntlzw", [rs; ra; rc], _) -> 
      `Pcntlzw(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Cmpb", [rs; ra; rb], _) -> 
      `Pcmpb(
       (trans_out_reg ra),
        (trans_out_int rs),
        (trans_out_reg rb))
  | ("Popcntb", [rs; ra], _) -> 
      `Ppopcntb(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Popcntw", [rs; ra], _) -> 
      `Ppopcntw(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Prtyd", [rs; ra], _) -> 
      `Pprtyd(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Prtyw", [rs; ra], _) -> 
      `Pprtyw(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Extsw", [rs; ra; rc], _) -> 
      `Pextsw(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Cntlzd", [rs; ra; rc], _) -> 
      `Pcntlzd(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Popcntd", [rs; ra], _) -> 
      `Ppopcntd(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Bpermd", [rs; ra; rb], _) -> 
      `Pbpermd(
       (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Rlwinm", [rs; ra; sh; mb; me; rc], _) -> 
      `Prlwinm(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh),
        (trans_out_int mb),
        (trans_out_int me))
  | ("Rlwnm", [rs; ra; rb; mb; me; rc], _) -> 
      `Prlwnm(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb),
        (trans_out_int mb),
        (trans_out_int me))
  | ("Rlwimi", [rs; ra; sh; mb; me; rc], _) -> 
      `Prlwimi(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh),
        (trans_out_int mb),
        (trans_out_int me))
  | ("Rldicl", [rs; ra; sh; mb; rc], _) -> 
      `Prldicl(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh),
        (trans_out_int mb))
  | ("Rldicr", [rs; ra; sh; me; rc], _) -> 
      `Prldicr(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh),
        (trans_out_int me))
  | ("Rldic", [rs; ra; sh; mb; rc], _) -> 
      `Prldic(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh),
        (trans_out_int mb))
  | ("Rldcl", [rs; ra; rb; mb; rc], _) -> 
      `Prldcl(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb),
        (trans_out_int mb))
  | ("Rldcr", [rs; ra; rb; me; rc], _) -> 
      `Prldcr(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb),
        (trans_out_int me))
  | ("Rldimi", [rs; ra; sh; mb; rc], _) -> 
      `Prldimi(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh),
        (trans_out_int mb))
  | ("Slw", [rs; ra; rb; rc], _) -> 
      `Pslw(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Srw", [rs; ra; rb; rc], _) -> 
      `Psrw(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Srawi", [rs; ra; sh; rc], _) -> 
      `Psrawi(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh))
  | ("Sraw", [rs; ra; rb; rc], _) -> 
      `Psraw(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Sld", [rs; ra; rb; rc], _) -> 
      `Psld(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Srd", [rs; ra; rb; rc], _) -> 
      `Psrd(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Sradi", [rs; ra; sh; rc], _) -> 
      `Psradi(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_int sh))
  | ("Srad", [rs; ra; rb; rc], _) -> 
      `Psrad(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Cdtbcd", [rs; ra], _) -> 
      `Pcdtbcd(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Cbcdtd", [rs; ra], _) -> 
      `Pcbcdtd(
       (trans_out_reg ra),
        (trans_out_reg rs))
  | ("Addg6s", [rt; ra; rb], _) -> 
      `Paddg6s(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mtspr", [rs; spr], _) -> 
      `Pmtspr(
       (trans_out_int spr),
        (trans_out_reg rs))
  | ("Mfspr", [rt; spr], _) -> 
      `Pmfspr(
       (trans_out_reg rt),
        (trans_out_int spr))
  | ("Mtcrf", [rs; fxm], _) -> 
      `Pmtcrf(
       (trans_out_int fxm),
        (trans_out_reg rs))
  | ("Mfcr", [rt], _) -> 
      `Pmfcr(
       (trans_out_reg rt))
  | ("Mtocrf", [rs; fxm], _) -> 
      `Pmtocrf(
       (trans_out_int fxm),
        (trans_out_reg rs))
  | ("Mfocrf", [rt; fxm], _) -> 
      `Pmfocrf(
       (trans_out_reg rt),
        (trans_out_int fxm))
  | ("Mcrxr", [bf], _) -> 
      `Pmcrxr(
       (trans_out_int bf))
  | ("Dlmzb", [rs; ra; rb; rc], _) -> 
      `Pdlmzb(
       (trans_out_cr0 rc),
        (trans_out_reg ra),
        (trans_out_reg rs),
        (trans_out_reg rb))
  | ("Macchw", [rt; ra; rb; oe; rc], _) -> 
      `Pmacchw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Macchws", [rt; ra; rb; oe; rc], _) -> 
      `Pmacchws(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Macchwu", [rt; ra; rb; oe; rc], _) -> 
      `Pmacchwu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Macchwsu", [rt; ra; rb; oe; rc], _) -> 
      `Pmacchwsu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Machhw", [rt; ra; rb; oe; rc], _) -> 
      `Pmachhw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Machhws", [rt; ra; rb; oe; rc], _) -> 
      `Pmachhws(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Machhwu", [rt; ra; rb; oe; rc], _) -> 
      `Pmachhwu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Machhwsu", [rt; ra; rb; oe; rc], _) -> 
      `Pmachhwsu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Maclhw", [rt; ra; rb; oe; rc], _) -> 
      `Pmaclhw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Maclhws", [rt; ra; rb; oe; rc], _) -> 
      `Pmaclhws(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Maclhwu", [rt; ra; rb; oe; rc], _) -> 
      `Pmaclhwu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Maclhwsu", [rt; ra; rb; oe; rc], _) -> 
      `Pmaclhwsu(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulchw", [rt; ra; rb; rc], _) -> 
      `Pmulchw(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulchwu", [rt; ra; rb; rc], _) -> 
      `Pmulchwu(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulhhw", [rt; ra; rb; rc], _) -> 
      `Pmulhhw(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mulhhwu", [rt; ra; rb; rc], _) -> 
      `Pmulhhwu(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mullhw", [rt; ra; rb; rc], _) -> 
      `Pmullhw(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Mullhwu", [rt; ra; rb; rc], _) -> 
      `Pmullhwu(
       (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Nmacchw", [rt; ra; rb; oe; rc], _) -> 
      `Pnmacchw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Nmacchws", [rt; ra; rb; oe; rc], _) -> 
      `Pnmacchws(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Nmachhw", [rt; ra; rb; oe; rc], _) -> 
      `Pnmachhw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Nmachhws", [rt; ra; rb; oe; rc], _) -> 
      `Pnmachhws(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Nmaclhw", [rt; ra; rb; oe; rc], _) -> 
      `Pnmaclhw(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Nmaclhws", [rt; ra; rb; oe; rc], _) -> 
      `Pnmaclhws(
       (trans_out_soov oe),
        (trans_out_cr0 rc),
        (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Icbi", [ra; rb], _) -> 
      `Picbi(
       (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Icbt", [ct; ra; rb], _) -> 
      `Picbt(
       (trans_out_int ct),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Dcba", [ra; rb], _) -> 
      `Pdcba(
       (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Dcbt", [th; ra; rb], _) -> 
      `Pdcbt(
       (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int th))
  | ("Dcbtst", [th; ra; rb], _) -> 
      `Pdcbtst(
       (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int th))
  | ("Dcbz", [ra; rb], _) -> 
      `Pdcbz(
       (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Dcbst", [ra; rb], _) -> 
      `Pdcbst(
       (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Dcbf", [l; ra; rb], _) -> 
      `Pdcbf(
       (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int l))
  | ("Isync", [], _) -> 
      `Pisync

  | ("Lbarx", [rt; ra; rb; eh], _) -> 
      `Plbarx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int eh))
  | ("Lharx", [rt; ra; rb; eh], _) -> 
      `Plharx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int eh))
  | ("Lwarx", [rt; ra; rb; eh], _) -> 
      `Plwarx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int eh))
  | ("Stbcx", [rs; ra; rb], _) -> 
      `Pstbcx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Sthcx", [rs; ra; rb], _) -> 
      `Psthcx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Stwcx", [rs; ra; rb], _) -> 
      `Pstwcx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Ldarx", [rt; ra; rb; eh], _) -> 
      `Pldarx(
       (trans_out_reg rt),
        (trans_out_reg ra),
        (trans_out_reg rb),
        (trans_out_int eh))
  | ("Stdcx", [rs; ra; rb], _) -> 
      `Pstdcx(
       (trans_out_reg rs),
        (trans_out_reg ra),
        (trans_out_reg rb))
  | ("Sync", [l], _) -> 
      `Psync(
       (trans_out_int l))
  | ("Eieio", [], _) -> 
      `Peieio

  | ("Wait", [wc], _) -> 
      `Pwait(
       (trans_out_int wc))
