ppc64/ppc64asm: update power9 for ppc64 and improve tests
This adds some new instructions, mostly power9, to
the ppc64 instruction tables. This also fixes some
issues with the ppc64 disassembler's ordering of
operands and improves the test examples.
Change-Id: Ib9a2e9722897bc25556d0c9ae5189cb6cbdfc6a1
Reviewed-on: https://go-review.googlesource.com/c/arch/+/230957
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
diff --git a/ppc64/pp64.csv b/ppc64/pp64.csv
index c26718e..4f470e4 100644
--- a/ppc64/pp64.csv
+++ b/ppc64/pp64.csv
@@ -116,6 +116,10 @@
"Divide Doubleword Unsigned XO-form","divdu RT,RA,RB (OE=0 Rc=0)|divdu. RT,RA,RB (OE=0 Rc=1)|divduo RT,RA,RB (OE=1 Rc=0)|divduo. RT,RA,RB (OE=1 Rc=1)","31@0|RT@6|RA@11|RB@16|OE@21|457@22|Rc@31|",""
"Divide Doubleword Extended XO-form","divde RT,RA,RB (OE=0 Rc=0)|divde. RT,RA,RB (OE=0 Rc=1)|divdeo RT,RA,RB (OE=1 Rc=0)|divdeo. RT,RA,RB (OE=1 Rc=1)|[Category: Server]|[Category: Embedded.Phased-In]","31@0|RT@6|RA@11|RB@16|OE@21|425@22|Rc@31|",""
"Divide Doubleword Extended Unsigned XO-form","divdeu RT,RA,RB (OE=0 Rc=0)|divdeu. RT,RA,RB (OE=0 Rc=1)|divdeuo RT,RA,RB (OE=1 Rc=0)|divdeuo. RT,RA,RB (OE=1 Rc=1)|[Category: Server]|[Category: Embedded.Phased-In]","31@0|RT@6|RA@11|RB@16|OE@21|393@22|Rc@31|",""
+"Modulo Signed Doubleword X-form","modsd RT,RA,RB","31@0|RT@6|RA@11|RB@16|777@21|/@31|",""
+"Modulo Unsigned Doubleword X-form","modud RT,RA,RB","31@0|RT@6|RA@11|RB@16|265@21|/@31|",""
+"Modulo Signed Word X-form","modsw RT,RA,RB","31@0|RT@6|RA@11|RB@16|779@21|/@31|",""
+"Modulo Unsigned Word X-form","moduw RT,RA,RB","31@0|RT@6|RA@11|RB@16|267@21|/@31|",""
"Compare Immediate D-form","cmpwi BF,RA,SI (L=0)|cmpdi BF,RA,SI (L=1)","11@0|BF@6|/@9|L@10|RA@11|SI@16|",""
"Compare X-form","cmpw BF,RA,RB (L=0)|cmpd BF,RA,RB (L=1)","31@0|BF@6|/@9|L@10|RA@11|RB@16|0@21|/@31|",""
"Compare Logical Immediate D-form","cmplwi BF,RA,UI (L=0)|cmpldi BF,RA,UI (L=1)","10@0|BF@6|/@9|L@10|RA@11|UI@16|",""
@@ -313,6 +317,7 @@
"Vector Splat Immediate Signed Halfword VX-form","vspltish VRT,SIM","4@0|VRT@6|SIM@11|///@16|844@21|",""
"Vector Splat Immediate Signed Word VX-form","vspltisw VRT,SIM","4@0|VRT@6|SIM@11|///@16|908@21|",""
"Vector Permute VA-form","vperm VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|43@26|",""
+"Vector Permute Right-indexed VA-form","vpermr VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|59@26|",""
"Vector Select VA-form","vsel VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|42@26|",""
"Vector Shift Left VX-form","vsl VRT,VRA,VRB","4@0|VRT@6|VRA@11|VRB@16|452@21|",""
"Vector Shift Left Double by Octet Immediate VA-form","vsldoi VRT,VRA,VRB,SHB","4@0|VRT@6|VRA@11|VRB@16|/@21|SHB@22|44@26|",""
@@ -371,6 +376,7 @@
"Vector Multiply-Sum Signed Halfword Saturate VA-form","vmsumshs VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|41@26|",""
"Vector Multiply-Sum Unsigned Halfword Modulo VA-form","vmsumuhm VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|38@26|",""
"Vector Multiply-Sum Unsigned Halfword Saturate VA-form","vmsumuhs VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|39@26|",""
+"Vector Multiply-Sum Unsigned Doubleword Modulo VA-form","vmsumudm VRT,VRA,VRB,VRC","4@0|VRT@6|VRA@11|VRB@16|VRC@21|35@26|",""
"Vector Sum across Signed Word Saturate VX-form","vsumsws VRT,VRA,VRB","4@0|VRT@6|VRA@11|VRB@16|1928@21|",""
"Vector Sum across Half Signed Word Saturate VX-form","vsum2sws VRT,VRA,VRB","4@0|VRT@6|VRA@11|VRB@16|1672@21|",""
"Vector Sum across Quarter Signed Byte Saturate VX-form","vsum4sbs VRT,VRA,VRB","4@0|VRT@6|VRA@11|VRB@16|1800@21|",""
@@ -402,6 +408,12 @@
"Vector Compare Equal To Unsigned Halfword VC-form","vcmpequh VRT,VRA,VRB (Rc=0)|vcmpequh. VRT,VRA,VRB (Rc=1)","4@0|VRT@6|VRA@11|VRB@16|Rc@21|70@22|",""
"Vector Compare Equal To Unsigned Word VC-form","vcmpequw VRT,VRA,VRB ( Rc=0 )|vcmpequw. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|134@22|",""
"Vector Compare Equal To Unsigned Doubleword VX-form","vcmpequd VRT,VRA,VRB ( Rc=0 )|vcmpequd. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|199@22|",""
+"Vector Compare Not Equal Byte VX-form","vcmpneb VRT,VRA,VRB ( Rc=0 )|vcmpneb. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|7@22|",""
+"Vector Compare Not Equal or Zero Byte VX-form","vcmpnezb VRT,VRA,VRB ( Rc=0 )|vcmpnezb. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|263@22|",""
+"Vector Compare Not Equal Halfword VX-form","vcmpneh VRT,VRA,VRB ( Rc=0 )|vcmpneh. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|71@22|",""
+"Vector Compare Not Equal or Zero Halfword VX-form","vcmpnezh VRT,VRA,VRB ( Rc=0 )|vcmpnezh. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|327@22|",""
+"Vector Compare Not Equal Word VX-form","vcmpnew VRT,VRA,VRB ( Rc=0 )|vcmpnew. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|135@22|",""
+"Vector Compare Not Equal or Zero Word VX-form","vcmpnezw VRT,VRA,VRB ( Rc=0 )|vcmpnezw. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|391@22|",""
"Vector Compare Greater Than Signed Byte VC-form","vcmpgtsb VRT,VRA,VRB ( Rc=0 )|vcmpgtsb. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|774@22|",""
"Vector Compare Greater Than Signed Doubleword VX-form","vcmpgtsd VRT,VRA,VRB ( Rc=0 )|vcmpgtsd. VRT,VRA,VRB ( Rc=1 )","4@0|VRT@6|VRA@11|VRB@16|Rc@21|967@22|",""
"Vector Compare Greater Than Signed Halfword VC-form","vcmpgtsh VRT,VRA,VRB (Rc=0)|vcmpgtsh. VRT,VRA,VRB (Rc=1)","4@0|VRT@6|VRA@11|VRB@16|Rc@21|838@22|",""
@@ -478,6 +490,7 @@
"Vector Population Count Halfword","vpopcnth VRT,VRB","4@0|VRT@6|///@11|VRB@16|1859@21|",""
"Vector Population Count Word","vpopcntw VRT,VRB","4@0|VRT@6|///@11|VRB@16|1923@21|",""
"Vector Bit Permute Quadword VX-form","vbpermq VRT,VRA,VRB","4@0|VRT@6|VRA@11|VRB@16|1356@21|",""
+"Vector Bit Permute Doubleword VX-form","vbpermd VRT,VRA,VRB","4@0|VRT@6|VRA@11|VRB@16|1484@21|",""
"Decimal Add Modulo VX-form","bcdadd. VRT,VRA,VRB,PS","4@0|VRT@6|VRA@11|VRB@16|1@21|PS@22|1@23|",""
"Decimal Subtract Modulo VX-form","bcdsub. VRT,VRA,VRB,PS","4@0|VRT@6|VRA@11|VRB@16|1@21|PS@22|65@23|",""
"Move To Vector Status and Control Register VX-form","mtvscr VRB","4@0|///@6|///@11|VRB@16|1604@21|",""
@@ -517,11 +530,17 @@
"Load VSX Vector Doubleword*2 Indexed XX1-form","lxvd2x XT,RA,RB","31@0|T@6|RA@11|RB@16|844@21|TX@31|",""
"Load VSX Vector Doubleword & Splat Indexed XX1-form","lxvdsx XT,RA,RB ( 0x7C00_0298 )","31@0|T@6|RA@11|RB@16|332@21|TX@31|",""
"Load VSX Vector Word*4 Indexed XX1-form","lxvw4x XT,RA,RB","31@0|T@6|RA@11|RB@16|780@21|TX@31|",""
+"Load VSX Vector DQ-form","lxv XT,DQ(RA)","61@0|T@6|RA@11|DQ@16|TX@28|1@29|",""
+"Load VSX Vector with Length X-form","lxvl XT,RA,RB","31@0|T@6|RA@11|RB@16|269@21|TX@31|",""
+"Load VSX Vector Left-justified with Length X-form","lxvll XT,RA,RB","31@0|T@6|RA@11|RB@16|301@21|TX@31|",""
"Store VSX Scalar Doubleword Indexed XX1-form","stxsdx XS,RA,RB","31@0|S@6|RA@11|RB@16|716@21|SX@31|",""
"Store VSX Scalar as Integer Word Indexed XX1-form","stxsiwx XS,RA,RB","31@0|S@6|RA@11|RB@16|140@21|SX@31|",""
"Store VSX Scalar Single-Precision Indexed XX1-form","stxsspx XS,RA,RB","31@0|S@6|RA@11|RB@16|652@21|SX@31|",""
"Store VSX Vector Doubleword*2 Indexed XX1-form","stxvd2x XS,RA,RB","31@0|S@6|RA@11|RB@16|972@21|SX@31|",""
"Store VSX Vector Word*4 Indexed XX1-form","stxvw4x XS,RA,RB","31@0|S@6|RA@11|RB@16|908@21|SX@31|",""
+"Store VSX Vector DQ-form","stxv XS,DQ(RA)","61@0|S@6|RA@11|DQ@16|SX@28|5@29|",""
+"Store VSX Vector with Length X-form","stxvl XS,RA,RB","31@0|S@6|RA@11|RB@16|397@21|SX@31|",""
+"Store VSX Vector Left-justified with Length X-form","stxvll XS,RA,RB","31@0|S@6|RA@11|RB@16|429@21|SX@31|",""
"VSX Scalar Absolute Value Double-Precision XX2-form","xsabsdp XT,XB","60@0|T@6|///@11|B@16|345@21|BX@30|TX@31|",""
"VSX Scalar Add Double-Precision XX3-form","xsadddp XT,XA,XB","60@0|T@6|A@11|B@16|32@21|AX@29|BX@30|TX@31|",""
"VSX Scalar Add Single-Precision XX3-form","xsaddsp XT,XA,XB","60@0|T@6|A@11|B@16|0@21|AX@29|BX@30|TX@31|",""
@@ -655,6 +674,7 @@
"VSX Merge High Word XX3-form","xxmrghw XT,XA,XB","60@0|T@6|A@11|B@16|18@21|AX@29|BX@30|TX@31|",""
"VSX Merge Low Word XX3-form","xxmrglw XT,XA,XB","60@0|T@6|A@11|B@16|50@21|AX@29|BX@30|TX@31|",""
"VSX Permute Doubleword Immediate XX3-form","xxpermdi XT,XA,XB,DM","60@0|T@6|A@11|B@16|0@21|DM@22|10@24|AX@29|BX@30|TX@31|",""
+"VSX Permute XX3-form","xxperm XT,XA,XB","60@0|T@6|A@11|B@16|26@21|AX@29|BX@30|TX@31|",""
"VSX Select XX4-form","xxsel XT,XA,XB,XC","60@0|T@6|A@11|B@16|C@21|3@26|CX@28|AX@29|BX@30|TX@31|",""
"VSX Shift Left Double by Word Immediate XX3-form","xxsldwi XT,XA,XB,SHW","60@0|T@6|A@11|B@16|0@21|SHW@22|2@24|AX@29|BX@30|TX@31|",""
"VSX Splat Word XX2-form","xxspltw XT,XB,UIM","60@0|T@6|///@11|UIM@14|B@16|164@21|BX@30|TX@31|",""
diff --git a/ppc64/ppc64asm/gnu.go b/ppc64/ppc64asm/gnu.go
index fc29164..1849a29 100644
--- a/ppc64/ppc64asm/gnu.go
+++ b/ppc64/ppc64asm/gnu.go
@@ -134,6 +134,19 @@
buf.WriteString("spr")
}
+ case "sync":
+ switch arg := inst.Args[0].(type) {
+ case Imm:
+ switch arg {
+ case 0:
+ buf.WriteString("hwsync")
+ case 1:
+ buf.WriteString("lwsync")
+ case 2:
+ buf.WriteString("ptesync")
+ }
+ }
+ startArg = 2
default:
buf.WriteString(inst.Op.String())
}
@@ -262,6 +275,8 @@
return true
case LHBRX, LWBRX, STHBRX, STWBRX:
return true
+ case LBARX, LWARX, LHARX, LDARX:
+ return true
}
return false
}
diff --git a/ppc64/ppc64asm/plan9.go b/ppc64/ppc64asm/plan9.go
index d039d9d..858f9ac 100644
--- a/ppc64/ppc64asm/plan9.go
+++ b/ppc64/ppc64asm/plan9.go
@@ -55,10 +55,24 @@
// laid out the instruction
switch inst.Op {
default: // dst, sA, sB, ...
- if len(args) == 0 {
+ switch len(args) {
+ case 0:
return op
- } else if len(args) == 1 {
+ case 1:
return fmt.Sprintf("%s %s", op, args[0])
+ case 2:
+ if inst.Op == COPY || inst.Op == PASTECC || inst.Op == FCMPO || inst.Op == FCMPU {
+ return op + " " + args[0] + "," + args[1]
+ }
+ return op + " " + args[1] + "," + args[0]
+ case 3:
+ if reverseOperandOrder(inst.Op) {
+ return op + " " + args[2] + "," + args[1] + "," + args[0]
+ }
+ case 4:
+ if reverseMiddleOps(inst.Op) {
+ return op + " " + args[1] + "," + args[3] + "," + args[2] + "," + args[0]
+ }
}
args = append(args, args[0])
return op + " " + strings.Join(args[1:], ",")
@@ -77,7 +91,7 @@
STH, STHU,
STW, STWU,
STD, STDU,
- STQ:
+ STQ, STFD, STFDU, STFS, STFSU:
return op + " " + strings.Join(args, ",")
case CMPD, CMPDI, CMPLD, CMPLDI, CMPW, CMPWI, CMPLW, CMPLWI:
@@ -92,28 +106,41 @@
return "ADDIS $0," + args[1] + "," + args[0]
// store instructions with index registers
case STBX, STBUX, STHX, STHUX, STWX, STWUX, STDX, STDUX,
- STHBRX, STWBRX, STDBRX, STSWX, STFSX, STFSUX, STFDX, STFDUX, STFIWX, STFDPX:
+ STHBRX, STWBRX, STDBRX, STSWX, STFIWX:
return "MOV" + op[2:len(op)-1] + " " + args[0] + ",(" + args[2] + ")(" + args[1] + ")"
case STDCXCC, STWCXCC, STHCXCC, STBCXCC:
return op + " " + args[0] + ",(" + args[2] + ")(" + args[1] + ")"
- case STXVD2X, STXVW4X:
+ case STXVD2X, STXVW4X, STXSDX, STVX, STVXL, STVEBX, STVEHX, STVEWX, STXSIWX, STFDX, STFDUX, STFDPX, STFSX, STFSUX:
return op + " " + args[0] + ",(" + args[2] + ")(" + args[1] + ")"
- // load instructions with index registers
- case LBZX, LBZUX, LHZX, LHZUX, LWZX, LWZUX, LDX, LDUX,
- LHBRX, LWBRX, LDBRX, LSWX, LFSX, LFSUX, LFDX, LFDUX, LFIWAX, LFIWZX:
- return "MOV" + op[1:len(op)-1] + " (" + args[2] + ")(" + args[1] + ")," + args[0]
+ case STXV:
+ return op + " " + args[0] + "," + args[1]
- case LDARX, LWARX, LHARX, LBARX:
+ case STXVL, STXVLL:
+ return op + " " + args[0] + "," + args[1] + "," + args[2]
+
+ case LWAX, LWAUX, LWZX, LHZX, LBZX, LDX, LHAX, LHAUX, LDARX, LWARX, LHARX, LBARX, LFDX, LFDUX, LFSX, LFSUX, LDBRX, LWBRX, LHBRX, LDUX, LWZUX, LHZUX, LBZUX:
+ if args[1] == "0" {
+ return op + " (" + args[2] + ")," + args[0]
+ }
return op + " (" + args[2] + ")(" + args[1] + ")," + args[0]
- case LXVD2X, LXVW4X:
+ case LXVD2X, LXVW4X, LVX, LVXL, LVSR, LVSL, LVEBX, LVEHX, LVEWX, LXSDX, LXSIWAX:
return op + " (" + args[2] + ")(" + args[1] + ")," + args[0]
- case DCBT, DCBTST, DCBZ, DCBST:
- return op + " (" + args[1] + ")"
+ case LXV:
+ return op + " " + args[1] + "," + args[0]
+
+ case LXVL, LXVLL:
+ return op + " " + args[1] + "," + args[2] + "," + args[0]
+
+ case DCBT, DCBTST, DCBZ, DCBST, DCBI, ICBI:
+ if args[0] == "0" || args[0] == "R0" {
+ return op + " (" + args[1] + ")"
+ }
+ return op + " (" + args[1] + ")(" + args[0] + ")"
// branch instructions needs additional handling
case BCLR:
@@ -173,12 +200,15 @@
if inst.Op == ISEL {
return fmt.Sprintf("$%d", (arg - Cond0LT))
}
- if arg == CR0 && strings.HasPrefix(inst.Op.String(), "cmp") {
+ if arg == CR0 && (strings.HasPrefix(inst.Op.String(), "cmp") || strings.HasPrefix(inst.Op.String(), "fcmp")) {
return "" // don't show cr0 for cmp instructions
} else if arg >= CR0 {
return fmt.Sprintf("CR%d", int(arg-CR0))
}
bit := [4]string{"LT", "GT", "EQ", "SO"}[(arg-Cond0LT)%4]
+ if strings.HasPrefix(inst.Op.String(), "cr") {
+ return fmt.Sprintf("CR%d%s", int(arg-Cond0LT)/4, bit)
+ }
if arg <= Cond0SO {
return bit
}
@@ -212,6 +242,37 @@
return fmt.Sprintf("???(%v)", arg)
}
+func reverseMiddleOps(op Op) bool {
+ switch op {
+ case FMADD, FMADDCC, FMADDS, FMADDSCC, FMSUB, FMSUBCC, FMSUBS, FMSUBSCC, FNMADD, FNMADDCC, FNMADDS, FNMADDSCC, FNMSUB, FNMSUBCC, FNMSUBS, FNMSUBSCC, FSEL, FSELCC:
+ return true
+ }
+ return false
+}
+
+func reverseOperandOrder(op Op) bool {
+ switch op {
+ // Special case for SUBF, SUBFC: not reversed
+ case ADD, ADDC, ADDE, ADDCC, ADDCCC:
+ return true
+ case MULLW, MULLWCC, MULHW, MULHWCC, MULLD, MULLDCC, MULHD, MULHDCC, MULLWO, MULLWOCC, MULHWU, MULHWUCC, MULLDO, MULLDOCC:
+ return true
+ case DIVD, DIVDCC, DIVDU, DIVDUCC, DIVDE, DIVDECC, DIVDEU, DIVDEUCC, DIVDO, DIVDOCC, DIVDUO, DIVDUOCC:
+ return true
+ case MODUD, MODSD, MODUW, MODSW:
+ return true
+ case FADD, FADDS, FSUB, FSUBS, FMUL, FMULS, FDIV, FDIVS, FMADD, FMADDS, FMSUB, FMSUBS, FNMADD, FNMADDS, FNMSUB, FNMSUBS, FMULSCC:
+ return true
+ case FADDCC, FADDSCC, FSUBCC, FMULCC, FDIVCC, FDIVSCC:
+ return true
+ case OR, ORC, AND, ANDC, XOR, NAND, EQV, NOR, ANDCC, ORCC, XORCC, EQVCC, NORCC, NANDCC:
+ return true
+ case SLW, SLWCC, SLD, SLDCC, SRW, SRAW, SRWCC, SRAWCC, SRD, SRDCC, SRAD, SRADCC:
+ return true
+ }
+ return false
+}
+
// revCondMap maps a conditional register bit to its inverse, if possible.
var revCondMap = map[string]string{
"LT": "GE", "GT": "LE", "EQ": "NE",
@@ -219,15 +280,65 @@
// plan9OpMap maps an Op to its Plan 9 mnemonics, if different than its GNU mnemonics.
var plan9OpMap = map[Op]string{
- LWARX: "LWAR",
- LDARX: "LDAR",
- LHARX: "LHAR",
- LBARX: "LBAR",
- ADDI: "ADD",
- SRADI: "SRAD",
- SUBF: "SUB",
- LI: "MOVD",
- LBZ: "MOVBZ", STB: "MOVB",
+ LWARX: "LWAR",
+ LDARX: "LDAR",
+ LHARX: "LHAR",
+ LBARX: "LBAR",
+ LWAX: "MOVW",
+ LHAX: "MOVH",
+ LWAUX: "MOVWU",
+ LHAU: "MOVHU",
+ LHAUX: "MOVHU",
+ LDX: "MOVD",
+ LDUX: "MOVDU",
+ LWZX: "MOVWZ",
+ LWZUX: "MOVWZU",
+ LHZX: "MOVHZ",
+ LHZUX: "MOVHZU",
+ LBZX: "MOVBZ",
+ LBZUX: "MOVBZU",
+ LDBRX: "MOVDBR",
+ LWBRX: "MOVWBR",
+ LHBRX: "MOVHBR",
+ MCRF: "MOVFL",
+ XORI: "XOR",
+ ORI: "OR",
+ ANDICC: "ANDCC",
+ ANDC: "ANDN",
+ ADDEO: "ADDEV",
+ ADDEOCC: "ADDEVCC",
+ ADDO: "ADDV",
+ ADDOCC: "ADDVCC",
+ ADDMEO: "ADDMEV",
+ ADDMEOCC: "ADDMEVCC",
+ ADDCO: "ADDCV",
+ ADDCOCC: "ADDCVCC",
+ ADDZEO: "ADDZEV",
+ ADDZEOCC: "ADDZEVCC",
+ SUBFME: "SUBME",
+ SUBFMECC: "SUBMECC",
+ SUBFZE: "SUBZE",
+ SUBFZECC: "SUBZECC",
+ SUBFZEO: "SUBZEV",
+ SUBFZEOCC: "SUBZEVCC",
+ SUBFC: "SUBC",
+ ORC: "ORN",
+ MULLWO: "MULLWV",
+ MULLWOCC: "MULLWVCC",
+ MULLDO: "MULLDV",
+ MULLDOCC: "MULLDVCC",
+ DIVDO: "DIVDV",
+ DIVDOCC: "DIVDVCC",
+ DIVDUO: "DIVDUV",
+ DIVDUOCC: "DIVDUVCC",
+ ADDI: "ADD",
+ SRADI: "SRAD",
+ SUBF: "SUB",
+ STBCXCC: "STBCCC",
+ STWCXCC: "STWCCC",
+ STDCXCC: "STDCCC",
+ LI: "MOVD",
+ LBZ: "MOVBZ", STB: "MOVB",
LBZU: "MOVBZU", STBU: "MOVBU",
LHZ: "MOVHZ", LHA: "MOVH", STH: "MOVH",
LHZU: "MOVHZU", STHU: "MOVHU",
@@ -235,6 +346,14 @@
LWZU: "MOVWZU", STWU: "MOVWU",
LD: "MOVD", STD: "MOVD",
LDU: "MOVDU", STDU: "MOVDU",
+ LFD: "FMOVD", STFD: "FMOVD",
+ LFS: "FMOVS", STFS: "FMOVS",
+ LFDX: "FMOVD", STFDX: "FMOVD",
+ LFDU: "FMOVDU", STFDU: "FMOVDU",
+ LFDUX: "FMOVDU", STFDUX: "FMOVDU",
+ LFSX: "FMOVS", STFSX: "FMOVS",
+ LFSU: "FMOVSU", STFSU: "FMOVSU",
+ LFSUX: "FMOVSU", STFSUX: "FMOVSU",
CMPD: "CMP", CMPDI: "CMP",
CMPW: "CMPW", CMPWI: "CMPW",
CMPLD: "CMPU", CMPLDI: "CMPU",
diff --git a/ppc64/ppc64asm/tables.go b/ppc64/ppc64asm/tables.go
index f536926..250d3b7 100644
--- a/ppc64/ppc64asm/tables.go
+++ b/ppc64/ppc64asm/tables.go
@@ -186,6 +186,10 @@
DIVDEUCC
DIVDEUO
DIVDEUOCC
+ MODSD
+ MODUD
+ MODSW
+ MODUW
CMPWI
CMPDI
CMPW
@@ -466,6 +470,7 @@
VSPLTISH
VSPLTISW
VPERM
+ VPERMR
VSEL
VSL
VSLDOI
@@ -524,6 +529,7 @@
VMSUMSHS
VMSUMUHM
VMSUMUHS
+ VMSUMUDM
VSUMSWS
VSUM2SWS
VSUM4SBS
@@ -559,6 +565,18 @@
VCMPEQUWCC
VCMPEQUD
VCMPEQUDCC
+ VCMPNEB
+ VCMPNEBCC
+ VCMPNEZB
+ VCMPNEZBCC
+ VCMPNEH
+ VCMPNEHCC
+ VCMPNEZH
+ VCMPNEZHCC
+ VCMPNEW
+ VCMPNEWCC
+ VCMPNEZW
+ VCMPNEZWCC
VCMPGTSB
VCMPGTSBCC
VCMPGTSD
@@ -647,6 +665,7 @@
VPOPCNTH
VPOPCNTW
VBPERMQ
+ VBPERMD
BCDADDCC
BCDSUBCC
MTVSCR
@@ -708,11 +727,17 @@
LXVD2X
LXVDSX
LXVW4X
+ LXV
+ LXVL
+ LXVLL
STXSDX
STXSIWX
STXSSPX
STXVD2X
STXVW4X
+ STXV
+ STXVL
+ STXVLL
XSABSDP
XSADDDP
XSADDSP
@@ -852,6 +877,7 @@
XXMRGHW
XXMRGLW
XXPERMDI
+ XXPERM
XXSEL
XXSLDWI
XXSPLTW
@@ -1528,6 +1554,10 @@
DIVDEUCC: "divdeu.",
DIVDEUO: "divdeuo",
DIVDEUOCC: "divdeuo.",
+ MODSD: "modsd",
+ MODUD: "modud",
+ MODSW: "modsw",
+ MODUW: "moduw",
CMPWI: "cmpwi",
CMPDI: "cmpdi",
CMPW: "cmpw",
@@ -1808,6 +1838,7 @@
VSPLTISH: "vspltish",
VSPLTISW: "vspltisw",
VPERM: "vperm",
+ VPERMR: "vpermr",
VSEL: "vsel",
VSL: "vsl",
VSLDOI: "vsldoi",
@@ -1866,6 +1897,7 @@
VMSUMSHS: "vmsumshs",
VMSUMUHM: "vmsumuhm",
VMSUMUHS: "vmsumuhs",
+ VMSUMUDM: "vmsumudm",
VSUMSWS: "vsumsws",
VSUM2SWS: "vsum2sws",
VSUM4SBS: "vsum4sbs",
@@ -1901,6 +1933,18 @@
VCMPEQUWCC: "vcmpequw.",
VCMPEQUD: "vcmpequd",
VCMPEQUDCC: "vcmpequd.",
+ VCMPNEB: "vcmpneb",
+ VCMPNEBCC: "vcmpneb.",
+ VCMPNEZB: "vcmpnezb",
+ VCMPNEZBCC: "vcmpnezb.",
+ VCMPNEH: "vcmpneh",
+ VCMPNEHCC: "vcmpneh.",
+ VCMPNEZH: "vcmpnezh",
+ VCMPNEZHCC: "vcmpnezh.",
+ VCMPNEW: "vcmpnew",
+ VCMPNEWCC: "vcmpnew.",
+ VCMPNEZW: "vcmpnezw",
+ VCMPNEZWCC: "vcmpnezw.",
VCMPGTSB: "vcmpgtsb",
VCMPGTSBCC: "vcmpgtsb.",
VCMPGTSD: "vcmpgtsd",
@@ -1989,6 +2033,7 @@
VPOPCNTH: "vpopcnth",
VPOPCNTW: "vpopcntw",
VBPERMQ: "vbpermq",
+ VBPERMD: "vbpermd",
BCDADDCC: "bcdadd.",
BCDSUBCC: "bcdsub.",
MTVSCR: "mtvscr",
@@ -2050,11 +2095,17 @@
LXVD2X: "lxvd2x",
LXVDSX: "lxvdsx",
LXVW4X: "lxvw4x",
+ LXV: "lxv",
+ LXVL: "lxvl",
+ LXVLL: "lxvll",
STXSDX: "stxsdx",
STXSIWX: "stxsiwx",
STXSSPX: "stxsspx",
STXVD2X: "stxvd2x",
STXVW4X: "stxvw4x",
+ STXV: "stxv",
+ STXVL: "stxvl",
+ STXVLL: "stxvll",
XSABSDP: "xsabsdp",
XSADDDP: "xsadddp",
XSADDSP: "xsaddsp",
@@ -2194,6 +2245,7 @@
XXMRGHW: "xxmrghw",
XXMRGLW: "xxmrglw",
XXPERMDI: "xxpermdi",
+ XXPERM: "xxperm",
XXSEL: "xxsel",
XXSLDWI: "xxsldwi",
XXSPLTW: "xxspltw",
@@ -2745,6 +2797,7 @@
ap_ImmUnsigned_21_22 = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{21, 2}}}
ap_ImmUnsigned_11_12 = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{11, 2}}}
ap_ImmUnsigned_11_11 = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{11, 1}}}
+ ap_VecSReg_28_28_6_10 = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{28, 1}, {6, 5}}}
ap_VecSReg_30_30_16_20 = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{30, 1}, {16, 5}}}
ap_VecSReg_29_29_11_15 = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{29, 1}, {11, 5}}}
ap_ImmUnsigned_22_23 = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{22, 2}}}
@@ -3125,6 +3178,14 @@
[5]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{DIVDEUOCC, 0xfc0007ff, 0x7c000713, 0x0, // Divide Doubleword Extended Unsigned XO-form (divdeuo. RT,RA,RB)
[5]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {MODSD, 0xfc0007fe, 0x7c000612, 0x1, // Modulo Signed Doubleword X-form (modsd RT,RA,RB)
+ [5]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {MODUD, 0xfc0007fe, 0x7c000212, 0x1, // Modulo Unsigned Doubleword X-form (modud RT,RA,RB)
+ [5]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {MODSW, 0xfc0007fe, 0x7c000616, 0x1, // Modulo Signed Word X-form (modsw RT,RA,RB)
+ [5]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {MODUW, 0xfc0007fe, 0x7c000216, 0x1, // Modulo Unsigned Word X-form (moduw RT,RA,RB)
+ [5]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{CMPWI, 0xfc200000, 0x2c000000, 0x400000, // Compare Immediate D-form (cmpwi BF,RA,SI)
[5]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_ImmSigned_16_31}},
{CMPDI, 0xfc200000, 0x2c200000, 0x400000, // Compare Immediate D-form (cmpdi BF,RA,SI)
@@ -3685,6 +3746,8 @@
[5]*argField{ap_VecReg_6_10, ap_ImmSigned_11_15}},
{VPERM, 0xfc00003f, 0x1000002b, 0x0, // Vector Permute VA-form (vperm VRT,VRA,VRB,VRC)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},
+ {VPERMR, 0xfc00003f, 0x1000003b, 0x0, // Vector Permute Right-indexed VA-form (vpermr VRT,VRA,VRB,VRC)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},
{VSEL, 0xfc00003f, 0x1000002a, 0x0, // Vector Select VA-form (vsel VRT,VRA,VRB,VRC)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},
{VSL, 0xfc0007ff, 0x100001c4, 0x0, // Vector Shift Left VX-form (vsl VRT,VRA,VRB)
@@ -3801,6 +3864,8 @@
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},
{VMSUMUHS, 0xfc00003f, 0x10000027, 0x0, // Vector Multiply-Sum Unsigned Halfword Saturate VA-form (vmsumuhs VRT,VRA,VRB,VRC)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},
+ {VMSUMUDM, 0xfc00003f, 0x10000023, 0x0, // Vector Multiply-Sum Unsigned Doubleword Modulo VA-form (vmsumudm VRT,VRA,VRB,VRC)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},
{VSUMSWS, 0xfc0007ff, 0x10000788, 0x0, // Vector Sum across Signed Word Saturate VX-form (vsumsws VRT,VRA,VRB)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
{VSUM2SWS, 0xfc0007ff, 0x10000688, 0x0, // Vector Sum across Half Signed Word Saturate VX-form (vsum2sws VRT,VRA,VRB)
@@ -3871,6 +3936,30 @@
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
{VCMPEQUDCC, 0xfc0007ff, 0x100004c7, 0x0, // Vector Compare Equal To Unsigned Doubleword VX-form (vcmpequd. VRT,VRA,VRB)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEB, 0xfc0007ff, 0x10000007, 0x0, // Vector Compare Not Equal Byte VX-form (vcmpneb VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEBCC, 0xfc0007ff, 0x10000407, 0x0, // Vector Compare Not Equal Byte VX-form (vcmpneb. VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEZB, 0xfc0007ff, 0x10000107, 0x0, // Vector Compare Not Equal or Zero Byte VX-form (vcmpnezb VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEZBCC, 0xfc0007ff, 0x10000507, 0x0, // Vector Compare Not Equal or Zero Byte VX-form (vcmpnezb. VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEH, 0xfc0007ff, 0x10000047, 0x0, // Vector Compare Not Equal Halfword VX-form (vcmpneh VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEHCC, 0xfc0007ff, 0x10000447, 0x0, // Vector Compare Not Equal Halfword VX-form (vcmpneh. VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEZH, 0xfc0007ff, 0x10000147, 0x0, // Vector Compare Not Equal or Zero Halfword VX-form (vcmpnezh VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEZHCC, 0xfc0007ff, 0x10000547, 0x0, // Vector Compare Not Equal or Zero Halfword VX-form (vcmpnezh. VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEW, 0xfc0007ff, 0x10000087, 0x0, // Vector Compare Not Equal Word VX-form (vcmpnew VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEWCC, 0xfc0007ff, 0x10000487, 0x0, // Vector Compare Not Equal Word VX-form (vcmpnew. VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEZW, 0xfc0007ff, 0x10000187, 0x0, // Vector Compare Not Equal or Zero Word VX-form (vcmpnezw VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VCMPNEZWCC, 0xfc0007ff, 0x10000587, 0x0, // Vector Compare Not Equal or Zero Word VX-form (vcmpnezw. VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
{VCMPGTSB, 0xfc0007ff, 0x10000306, 0x0, // Vector Compare Greater Than Signed Byte VC-form (vcmpgtsb VRT,VRA,VRB)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
{VCMPGTSBCC, 0xfc0007ff, 0x10000706, 0x0, // Vector Compare Greater Than Signed Byte VC-form (vcmpgtsb. VRT,VRA,VRB)
@@ -4047,6 +4136,8 @@
[5]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},
{VBPERMQ, 0xfc0007ff, 0x1000054c, 0x0, // Vector Bit Permute Quadword VX-form (vbpermq VRT,VRA,VRB)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
+ {VBPERMD, 0xfc0007ff, 0x100005cc, 0x0, // Vector Bit Permute Doubleword VX-form (vbpermd VRT,VRA,VRB)
+ [5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},
{BCDADDCC, 0xfc0005ff, 0x10000401, 0x0, // Decimal Add Modulo VX-form (bcdadd. VRT,VRA,VRB,PS)
[5]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},
{BCDSUBCC, 0xfc0005ff, 0x10000441, 0x0, // Decimal Subtract Modulo VX-form (bcdsub. VRT,VRA,VRB,PS)
@@ -4169,6 +4260,12 @@
[5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{LXVW4X, 0xfc0007fe, 0x7c000618, 0x0, // Load VSX Vector Word*4 Indexed XX1-form (lxvw4x XT,RA,RB)
[5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {LXV, 0xfc000007, 0xf4000001, 0x0, // Load VSX Vector DQ-form (lxv XT,DQ(RA))
+ [5]*argField{ap_VecSReg_28_28_6_10, ap_Offset_16_27_shift4, ap_Reg_11_15}},
+ {LXVL, 0xfc0007fe, 0x7c00021a, 0x0, // Load VSX Vector with Length X-form (lxvl XT,RA,RB)
+ [5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {LXVLL, 0xfc0007fe, 0x7c00025a, 0x0, // Load VSX Vector Left-justified with Length X-form (lxvll XT,RA,RB)
+ [5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{STXSDX, 0xfc0007fe, 0x7c000598, 0x0, // Store VSX Scalar Doubleword Indexed XX1-form (stxsdx XS,RA,RB)
[5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{STXSIWX, 0xfc0007fe, 0x7c000118, 0x0, // Store VSX Scalar as Integer Word Indexed XX1-form (stxsiwx XS,RA,RB)
@@ -4179,6 +4276,12 @@
[5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{STXVW4X, 0xfc0007fe, 0x7c000718, 0x0, // Store VSX Vector Word*4 Indexed XX1-form (stxvw4x XS,RA,RB)
[5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {STXV, 0xfc000007, 0xf4000005, 0x0, // Store VSX Vector DQ-form (stxv XS,DQ(RA))
+ [5]*argField{ap_VecSReg_28_28_6_10, ap_Offset_16_27_shift4, ap_Reg_11_15}},
+ {STXVL, 0xfc0007fe, 0x7c00031a, 0x0, // Store VSX Vector with Length X-form (stxvl XS,RA,RB)
+ [5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
+ {STXVLL, 0xfc0007fe, 0x7c00035a, 0x0, // Store VSX Vector Left-justified with Length X-form (stxvll XS,RA,RB)
+ [5]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},
{XSABSDP, 0xfc0007fc, 0xf0000564, 0x1f0000, // VSX Scalar Absolute Value Double-Precision XX2-form (xsabsdp XT,XB)
[5]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},
{XSADDDP, 0xfc0007f8, 0xf0000100, 0x0, // VSX Scalar Add Double-Precision XX3-form (xsadddp XT,XA,XB)
@@ -4457,6 +4560,8 @@
[5]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},
{XXPERMDI, 0xfc0004f8, 0xf0000050, 0x0, // VSX Permute Doubleword Immediate XX3-form (xxpermdi XT,XA,XB,DM)
[5]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_22_23}},
+ {XXPERM, 0xfc0007f8, 0xf00000d0, 0x0, // VSX Permute XX3-form (xxperm XT,XA,XB)
+ [5]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},
{XXSEL, 0xfc000030, 0xf0000030, 0x0, // VSX Select XX4-form (xxsel XT,XA,XB,XC)
[5]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20, ap_VecSReg_28_28_21_25}},
{XXSLDWI, 0xfc0004f8, 0xf0000010, 0x0, // VSX Shift Left Double by Word Immediate XX3-form (xxsldwi XT,XA,XB,SHW)
diff --git a/ppc64/ppc64asm/testdata/decode.txt b/ppc64/ppc64asm/testdata/decode.txt
index 69e6942..e094383 100644
--- a/ppc64/ppc64asm/testdata/decode.txt
+++ b/ppc64/ppc64asm/testdata/decode.txt
@@ -47,7 +47,7 @@
7c2b4840| gnu cmpld r11,r9
7c2b4840| plan9 CMPU R11,R9
7c6521ad| gnu stdcx. r3,r5,r4
-7c6521ad| plan9 STDCXCC R3,(R4)(R5)
+7c6521ad| plan9 STDCCC R3,(R4)(R5)
fbe1ffd1| gnu stdu r31,-48(r1)
fbe1ffd1| plan9 MOVDU R31,-48(R1)
7c941f19| gnu stxvw4x vs36,r20,r3
@@ -74,3 +74,759 @@
41880008| gnu blt cr2,0x8
418d0004| plan9 BGT CR3,0x4
418d0004| gnu bgt cr3,0x4
+e8830008| plan9 MOVD 8(R3),R4
+7ca4182a| plan9 MOVD (R3)(R4),R5
+e8830006| plan9 MOVW 4(R3),R4
+7ca41aaa| plan9 MOVW (R3)(R4),R5
+80830004| plan9 MOVWZ 4(R3),R4
+7ca4182e| plan9 MOVWZ (R3)(R4),R5
+a8830004| plan9 MOVH 4(R3),R4
+7ca41aae| plan9 MOVH (R3)(R4),R5
+a0830002| plan9 MOVHZ 2(R3),R4
+7ca41a2e| plan9 MOVHZ (R3)(R4),R5
+7ca418ae| plan9 MOVBZ (R3)(R4),R5
+7ca41c28| plan9 MOVDBR (R3)(R4),R5
+7ca41c2c| plan9 MOVWBR (R3)(R4),R5
+7ca41e2c| plan9 MOVHBR (R3)(R4),R5
+e8830009| plan9 MOVDU 8(R3),R4
+7ca4186a| plan9 MOVDU (R3)(R4),R5
+7ca41aea| plan9 MOVWU (R3)(R4),R5
+84830004| plan9 MOVWZU 4(R3),R4
+7ca4186e| plan9 MOVWZU (R3)(R4),R5
+ac830002| plan9 MOVHU 2(R3),R4
+7ca41aee| plan9 MOVHU (R3)(R4),R5
+a4830002| plan9 MOVHZU 2(R3),R4
+7ca41a6e| plan9 MOVHZU (R3)(R4),R5
+8c830001| plan9 MOVBZU 1(R3),R4
+7ca418ee| plan9 MOVBZU (R3)(R4),R5
+f8830008| plan9 MOVD R4,8(R3)
+7ca4192a| plan9 MOVD R5,(R3)(R4)
+90830004| plan9 MOVW R4,4(R3)
+7ca4192e| plan9 MOVW R5,(R3)(R4)
+b0830002| plan9 MOVH R4,2(R3)
+7ca41b2e| plan9 MOVH R5,(R3)(R4)
+98830001| plan9 MOVB R4,1(R3)
+7ca419ae| plan9 MOVB R5,(R3)(R4)
+7ca41d28| plan9 MOVDBR R5,(R3)(R4)
+7ca41d2c| plan9 MOVWBR R5,(R3)(R4)
+7ca41f2c| plan9 MOVHBR R5,(R3)(R4)
+f8830009| plan9 MOVDU R4,8(R3)
+7ca4196a| plan9 MOVDU R5,(R3)(R4)
+94830004| plan9 MOVWU R4,4(R3)
+7ca4196e| plan9 MOVWU R5,(R3)(R4)
+b4830002| plan9 MOVHU R4,2(R3)
+7ca41b6e| plan9 MOVHU R5,(R3)(R4)
+9c830001| plan9 MOVBU R4,1(R3)
+7ca419ee| plan9 MOVBU R5,(R3)(R4)
+7c232040| plan9 CMPU R3,R4
+7c032000| plan9 CMPW R3,R4
+7c032040| plan9 CMPWU R3,R4
+7ca41a14| plan9 ADD R3,R4,R5
+7ca41814| plan9 ADDC R3,R4,R5
+7ca41815| plan9 ADDCCC R3,R4,R5
+7c851838| plan9 AND R3,R4,R5
+7c851878| plan9 ANDN R3,R4,R5
+7c851839| plan9 ANDCC R3,R4,R5
+7c851b78| plan9 OR R3,R4,R5
+7c851b38| plan9 ORN R3,R4,R5
+7c851b79| plan9 ORCC R3,R4,R5
+7c851a78| plan9 XOR R3,R4,R5
+7c851a79| plan9 XORCC R3,R4,R5
+7c851bb8| plan9 NAND R3,R4,R5
+7c851bb9| plan9 NANDCC R3,R4,R5
+7c851a38| plan9 EQV R3,R4,R5
+7c851a39| plan9 EQVCC R3,R4,R5
+7c8518f8| plan9 NOR R3,R4,R5
+7c8518f9| plan9 NORCC R3,R4,R5
+7ca32050| plan9 SUB R3,R4,R5
+7ca32010| plan9 SUBC R3,R4,R5
+7ca419d6| plan9 MULLW R3,R4,R5
+7ca419d7| plan9 MULLWCC R3,R4,R5
+7ca41896| plan9 MULHW R3,R4,R5
+7ca41816| plan9 MULHWU R3,R4,R5
+7ca421d2| plan9 MULLD R4,R4,R5
+7ca419d3| plan9 MULLDCC R3,R4,R5
+7ca41892| plan9 MULHD R3,R4,R5
+7ca41893| plan9 MULHDCC R3,R4,R5
+7ca41dd6| plan9 MULLWV R3,R4,R5
+7ca41dd7| plan9 MULLWVCC R3,R4,R5
+7ca41817| plan9 MULHWUCC R3,R4,R5
+7ca41dd2| plan9 MULLDV R3,R4,R5
+7ca41dd3| plan9 MULLDVCC R3,R4,R5
+7ca41bd2| plan9 DIVD R3,R4,R5
+7ca41bd3| plan9 DIVDCC R3,R4,R5
+7ca41b92| plan9 DIVDU R3,R4,R5
+7ca41fd2| plan9 DIVDV R3,R4,R5
+7ca41b93| plan9 DIVDUCC R3,R4,R5
+7ca41fd3| plan9 DIVDVCC R3,R4,R5
+7ca41f92| plan9 DIVDUV R3,R4,R5
+7ca41f93| plan9 DIVDUVCC R3,R4,R5
+7ca41b52| plan9 DIVDE R3,R4,R5
+7ca41b53| plan9 DIVDECC R3,R4,R5
+7ca41b12| plan9 DIVDEU R3,R4,R5
+7ca41b13| plan9 DIVDEUCC R3,R4,R5
+7ca41a12| plan9 MODUD R3,R4,R5
+7ca41a16| plan9 MODUW R3,R4,R5
+7ca41e12| plan9 MODSD R3,R4,R5
+7ca41e16| plan9 MODSW R3,R4,R5
+7c851830| plan9 SLW R3,R4,R5
+7c851836| plan9 SLD R3,R4,R5
+7c851c30| plan9 SRW R3,R4,R5
+7c851e30| plan9 SRAW R3,R4,R5
+7c851c36| plan9 SRD R3,R4,R5
+7c851e34| plan9 SRAD R3,R4,R5
+7c6400f4| plan9 POPCNTB R3,R4
+7c6402f4| plan9 POPCNTW R3,R4
+7c6403f4| plan9 POPCNTD R3,R4
+7c23270d| plan9 PASTECC R3,R4
+7c23260c| plan9 COPY R3,R4
+7ca01868| plan9 LBAR (R3),R5
+7ca018e8| plan9 LHAR (R3),R5
+7ca01828| plan9 LWAR (R3),R5
+7ca018a8| plan9 LDAR (R3),R5
+7c65256d| plan9 STBCCC R3,(R4)(R5)
+7c65212d| plan9 STWCCC R3,(R4)(R5)
+7c6521ad| plan9 STDCCC R3,(R4)(R5)
+7c0004ac| plan9 HWSYNC
+4c00012c| plan9 ISYNC
+7c2004ac| plan9 LWSYNC
+7c041bac| plan9 DCBI (R3)(R4)
+7c04186c| plan9 DCBST (R3)(R4)
+7c041fec| plan9 DCBZ (R3)(R4)
+7c041a2c| plan9 DCBT (R3)(R4)
+7c041fac| plan9 ICBI (R3)(R4)
+c8230008| plan9 FMOVD 8(R3),F1
+7c241cae| plan9 FMOVD (R3)(R4),F1
+cc230008| plan9 FMOVDU 8(R3),F1
+7c241cee| plan9 FMOVDU (R3)(R4),F1
+c0230004| plan9 FMOVS 4(R3),F1
+7c241c2e| plan9 FMOVS (R3)(R4),F1
+c4230004| plan9 FMOVSU 4(R3),F1
+7c241c6e| plan9 FMOVSU (R3)(R4),F1
+d8230008| plan9 FMOVD F1,8(R3)
+7c241dae| plan9 FMOVD F1,(R3)(R4)
+dc230008| plan9 FMOVDU F1,8(R3)
+7c241dee| plan9 FMOVDU F1,(R3)(R4)
+d0230004| plan9 FMOVS F1,4(R3)
+7c241d2e| plan9 FMOVS F1,(R3)(R4)
+d4230004| plan9 FMOVSU F1,4(R3)
+7c241d6e| plan9 FMOVSU F1,(R3)(R4)
+fc62082a| plan9 FADD F1,F2,F3
+fc62082b| plan9 FADDCC F1,F2,F3
+ec62082a| plan9 FADDS F1,F2,F3
+ec62082b| plan9 FADDSCC F1,F2,F3
+fc620828| plan9 FSUB F1,F2,F3
+fc620829| plan9 FSUBCC F1,F2,F3
+ec620828| plan9 FSUBS F1,F2,F3
+fc620829| plan9 FSUBCC F1,F2,F3
+fc620072| plan9 FMUL F1,F2,F3
+fc620073| plan9 FMULCC F1,F2,F3
+ec620072| plan9 FMULS F1,F2,F3
+ec620073| plan9 FMULSCC F1,F2,F3
+fc620824| plan9 FDIV F1,F2,F3
+fc620825| plan9 FDIVCC F1,F2,F3
+ec620824| plan9 FDIVS F1,F2,F3
+ec620825| plan9 FDIVSCC F1,F2,F3
+fc8110fa| plan9 FMADD F1,F2,F3,F4
+fc8110fb| plan9 FMADDCC F1,F2,F3,F4
+ec8110fa| plan9 FMADDS F1,F2,F3,F4
+ec8110fb| plan9 FMADDSCC F1,F2,F3,F4
+fc8110f8| plan9 FMSUB F1,F2,F3,F4
+fc8110f9| plan9 FMSUBCC F1,F2,F3,F4
+ec8110f8| plan9 FMSUBS F1,F2,F3,F4
+ec8110f9| plan9 FMSUBSCC F1,F2,F3,F4
+fc8110fe| plan9 FNMADD F1,F2,F3,F4
+fc8110ff| plan9 FNMADDCC F1,F2,F3,F4
+ec8110fe| plan9 FNMADDS F1,F2,F3,F4
+ec8110ff| plan9 FNMADDSCC F1,F2,F3,F4
+fc8110fc| plan9 FNMSUB F1,F2,F3,F4
+fc8110fd| plan9 FNMSUBCC F1,F2,F3,F4
+ec8110fc| plan9 FNMSUBS F1,F2,F3,F4
+ec8110fd| plan9 FNMSUBSCC F1,F2,F3,F4
+fc8110ee| plan9 FSEL F1,F2,F3,F4
+fc8110ef| plan9 FSELCC F1,F2,F3,F4
+fc400a10| plan9 FABS F1,F2
+fc400a11| plan9 FABSCC F1,F2
+fc400850| plan9 FNEG F1,F2
+fc400a11| plan9 FABSCC F1,F2
+fc400818| plan9 FRSP F1,F2
+fc400819| plan9 FRSPCC F1,F2
+fc40081c| plan9 FCTIW F1,F2
+fc40081d| plan9 FCTIWCC F1,F2
+fc40081e| plan9 FCTIWZ F1,F2
+fc40081f| plan9 FCTIWZCC F1,F2
+fc400e5c| plan9 FCTID F1,F2
+fc400e5d| plan9 FCTIDCC F1,F2
+fc400e5e| plan9 FCTIDZ F1,F2
+fc400e5f| plan9 FCTIDZCC F1,F2
+fc400e9c| plan9 FCFID F1,F2
+fc400e9d| plan9 FCFIDCC F1,F2
+fc400f9c| plan9 FCFIDU F1,F2
+fc400f9d| plan9 FCFIDUCC F1,F2
+ec400e9c| plan9 FCFIDS F1,F2
+ec400e9d| plan9 FCFIDSCC F1,F2
+ec400830| plan9 FRES F1,F2
+ec400831| plan9 FRESCC F1,F2
+fc400bd0| plan9 FRIM F1,F2
+fc400bd1| plan9 FRIMCC F1,F2
+fc400b90| plan9 FRIP F1,F2
+fc400b91| plan9 FRIPCC F1,F2
+fc400b50| plan9 FRIZ F1,F2
+fc400b51| plan9 FRIZCC F1,F2
+fc400b10| plan9 FRIN F1,F2
+fc400b11| plan9 FRINCC F1,F2
+fc400834| plan9 FRSQRTE F1,F2
+fc400835| plan9 FRSQRTECC F1,F2
+fc40082c| plan9 FSQRT F1,F2
+fc40082d| plan9 FSQRTCC F1,F2
+ec40082c| plan9 FSQRTS F1,F2
+ec40082d| plan9 FSQRTSCC F1,F2
+fc011040| plan9 FCMPO F1,F2
+fc011000| plan9 FCMPU F1,F2
+7c2418ce| plan9 LVX (R3)(R4),V1
+7c241ace| plan9 LVXL (R3)(R4),V1
+7c24180c| plan9 LVSL (R3)(R4),V1
+7c24184c| plan9 LVSR (R3)(R4),V1
+7c24180e| plan9 LVEBX (R3)(R4),V1
+7c24184e| plan9 LVEHX (R3)(R4),V1
+7c24188e| plan9 LVEWX (R3)(R4),V1
+7c2419ce| plan9 STVX V1,(R3)(R4)
+7c241bce| plan9 STVXL V1,(R3)(R4)
+7c24190e| plan9 STVEBX V1,(R3)(R4)
+7c24194e| plan9 STVEHX V1,(R3)(R4)
+7c24198e| plan9 STVEWX V1,(R3)(R4)
+10611404| plan9 VAND V1,V2,V3
+10611444| plan9 VANDC V1,V2,V3
+10611584| plan9 VNAND V1,V2,V3
+10611484| plan9 VOR V1,V2,V3
+10611544| plan9 VORC V1,V2,V3
+106114c4| plan9 VXOR V1,V2,V3
+10611504| plan9 VNOR V1,V2,V3
+10611684| plan9 VEQV V1,V2,V3
+10611000| plan9 VADDUBM V1,V2,V3
+10611040| plan9 VADDUHM V1,V2,V3
+10611080| plan9 VADDUWM V1,V2,V3
+106110c0| plan9 VADDUDM V1,V2,V3
+10611100| plan9 VADDUQM V1,V2,V3
+10611140| plan9 VADDCUQ V1,V2,V3
+10611180| plan9 VADDCUW V1,V2,V3
+10611200| plan9 VADDUBS V1,V2,V3
+10611240| plan9 VADDUHS V1,V2,V3
+10611280| plan9 VADDUWS V1,V2,V3
+10611400| plan9 VSUBUBM V1,V2,V3
+10611440| plan9 VSUBUHM V1,V2,V3
+10611480| plan9 VSUBUWM V1,V2,V3
+106114c0| plan9 VSUBUDM V1,V2,V3
+10611500| plan9 VSUBUQM V1,V2,V3
+10611540| plan9 VSUBCUQ V1,V2,V3
+10611580| plan9 VSUBCUW V1,V2,V3
+10611600| plan9 VSUBUBS V1,V2,V3
+10611640| plan9 VSUBUHS V1,V2,V3
+10611680| plan9 VSUBUWS V1,V2,V3
+10611700| plan9 VSUBSBS V1,V2,V3
+10611740| plan9 VSUBSHS V1,V2,V3
+10611780| plan9 VSUBSWS V1,V2,V3
+108110fe| plan9 VSUBEUQM V1,V2,V3,V4
+108110ff| plan9 VSUBECUQ V1,V2,V3,V4
+10611308| plan9 VMULESB V1,V2,V3
+10611108| plan9 VMULOSB V1,V2,V3
+10611208| plan9 VMULEUB V1,V2,V3
+10611008| plan9 VMULOUB V1,V2,V3
+10611348| plan9 VMULESH V1,V2,V3
+10611148| plan9 VMULOSH V1,V2,V3
+10611248| plan9 VMULEUH V1,V2,V3
+10611048| plan9 VMULOUH V1,V2,V3
+10611348| plan9 VMULESH V1,V2,V3
+10611188| plan9 VMULOSW V1,V2,V3
+10611288| plan9 VMULEUW V1,V2,V3
+10611088| plan9 VMULOUW V1,V2,V3
+10611089| plan9 VMULUWM V1,V2,V3
+10611408| plan9 VPMSUMB V1,V2,V3
+10611448| plan9 VPMSUMH V1,V2,V3
+10611488| plan9 VPMSUMW V1,V2,V3
+106114c8| plan9 VPMSUMD V1,V2,V3
+108110e3| plan9 VMSUMUDM V1,V2,V3,V4
+10611004| plan9 VRLB V1,V2,V3
+10611044| plan9 VRLH V1,V2,V3
+10611084| plan9 VRLW V1,V2,V3
+106110c4| plan9 VRLD V1,V2,V3
+10611104| plan9 VSLB V1,V2,V3
+10611144| plan9 VSLH V1,V2,V3
+10611184| plan9 VSLW V1,V2,V3
+106111c4| plan9 VSL V1,V2,V3
+1061140c| plan9 VSLO V1,V2,V3
+10611204| plan9 VSRB V1,V2,V3
+10611244| plan9 VSRH V1,V2,V3
+10611284| plan9 VSRW V1,V2,V3
+106112c4| plan9 VSR V1,V2,V3
+1061144c| plan9 VSRO V1,V2,V3
+106115c4| plan9 VSLD V1,V2,V3
+10611304| plan9 VSRAB V1,V2,V3
+10611344| plan9 VSRAH V1,V2,V3
+10611384| plan9 VSRAW V1,V2,V3
+106113c4| plan9 VSRAD V1,V2,V3
+10400f02| plan9 VCLZB V1,V2
+10400f42| plan9 VCLZH V1,V2
+10400f82| plan9 VCLZW V1,V2
+10400fc2| plan9 VCLZD V1,V2
+10400f03| plan9 VPOPCNTB V1,V2
+10400f43| plan9 VPOPCNTH V1,V2
+10400f83| plan9 VPOPCNTW V1,V2
+10400fc3| plan9 VPOPCNTD V1,V2
+10611006| plan9 VCMPEQUB V1,V2,V3
+10611406| plan9 VCMPEQUBCC V1,V2,V3
+10611046| plan9 VCMPEQUH V1,V2,V3
+10611446| plan9 VCMPEQUHCC V1,V2,V3
+10611086| plan9 VCMPEQUW V1,V2,V3
+10611486| plan9 VCMPEQUWCC V1,V2,V3
+106110c7| plan9 VCMPEQUD V1,V2,V3
+106114c7| plan9 VCMPEQUDCC V1,V2,V3
+10611206| plan9 VCMPGTUB V1,V2,V3
+10611606| plan9 VCMPGTUBCC V1,V2,V3
+10611246| plan9 VCMPGTUH V1,V2,V3
+10611646| plan9 VCMPGTUHCC V1,V2,V3
+10611286| plan9 VCMPGTUW V1,V2,V3
+10611686| plan9 VCMPGTUWCC V1,V2,V3
+106112c7| plan9 VCMPGTUD V1,V2,V3
+106116c7| plan9 VCMPGTUDCC V1,V2,V3
+10611306| plan9 VCMPGTSB V1,V2,V3
+10611706| plan9 VCMPGTSBCC V1,V2,V3
+10611346| plan9 VCMPGTSH V1,V2,V3
+10611746| plan9 VCMPGTSHCC V1,V2,V3
+10611386| plan9 VCMPGTSW V1,V2,V3
+10611786| plan9 VCMPGTSWCC V1,V2,V3
+106113c7| plan9 VCMPGTSD V1,V2,V3
+106117c7| plan9 VCMPGTSDCC V1,V2,V3
+10611107| plan9 VCMPNEZB V1,V2,V3
+10611507| plan9 VCMPNEZBCC V1,V2,V3
+10611007| plan9 VCMPNEB V1,V2,V3
+10611407| plan9 VCMPNEBCC V1,V2,V3
+10611047| plan9 VCMPNEH V1,V2,V3
+10611447| plan9 VCMPNEHCC V1,V2,V3
+10611087| plan9 VCMPNEW V1,V2,V3
+10611487| plan9 VCMPNEWCC V1,V2,V3
+108110eb| plan9 VPERM V1,V2,V3,V4
+108110fb| plan9 VPERMR V1,V2,V3,V4
+108110ed| plan9 VPERMXOR V1,V2,V3,V4
+1061154c| plan9 VBPERMQ V1,V2,V3
+106115cc| plan9 VBPERMD V1,V2,V3
+108110ea| plan9 VSEL V1,V2,V3,V4
+10611508| plan9 VCIPHER V1,V2,V3
+10611509| plan9 VCIPHERLAST V1,V2,V3
+10611548| plan9 VNCIPHER V1,V2,V3
+10611549| plan9 VNCIPHERLAST V1,V2,V3
+104105c8| plan9 VSBOX V1,V2
+7c241e98| plan9 LXVD2X (R3)(R4),VS1
+f4230011| plan9 LXV 16(R3),VS1
+7c23221a| plan9 LXVL R3,R4,VS1
+7c23225a| plan9 LXVLL R3,R4,VS1
+7c241c98| plan9 LXSDX (R3)(R4),VS1
+7c241f98| plan9 STXVD2X VS1,(R3)(R4)
+f4230015| plan9 STXV VS1,16(R3)
+7c23231a| plan9 STXVL VS1,R3,R4
+7c23235a| plan9 STXVLL VS1,R3,R4
+7c241d98| plan9 STXSDX VS1,(R3)(R4)
+7c241898| plan9 LXSIWAX (R3)(R4),VS1
+7c241918| plan9 STXSIWX VS1,(R3)(R4)
+7c230066| plan9 MFVSRD VS1,R3
+7c230166| plan9 MTVSRD R3,VS1
+f0611410| plan9 XXLAND VS1,VS2,VS3
+f0611490| plan9 XXLOR VS1,VS2,VS3
+f0611550| plan9 XXLORC VS1,VS2,VS3
+f06114d0| plan9 XXLXOR VS1,VS2,VS3
+f08110f0| plan9 XXSEL VS1,VS2,VS3,VS4
+f0611090| plan9 XXMRGHW VS1,VS2,VS3
+f0410a90| plan9 XXSPLTW VS1,$1,VS2
+f06110d0| plan9 XXPERM VS1,VS2,VS3
+f0611110| plan9 XXSLDWI VS1,VS2,$1,VS3
+f0400c24| plan9 XSCVDPSP VS1,VS2
+f0400e24| plan9 XVCVDPSP VS1,VS2
+f0400de0| plan9 XSCVSXDDP VS1,VS2
+f0400f60| plan9 XVCVDPSXDS VS1,VS2
+f0400fe0| plan9 XVCVSXDDP VS1,VS2
+7c6803a6| plan9 MOVD R3,LR
+7c6903a6| plan9 MOVD R3,CTR
+7c6802a6| plan9 MOVD LR,R3
+7c6902a6| plan9 MOVD CTR,R3
+4c8c0000| plan9 MOVFL CR3,CR1
+7c6803a6| gnu mtlr r3
+7c6802a6| gnu mflr r3
+7c6903a6| gnu mtctr r3
+7c6902a6| gnu mfctr r3
+7c6c42a6| gnu mftb r3
+7c8202a6| gnu mfspr r4,2
+e8830008| gnu ld r4,8(r3)
+7ca4182a| gnu ldx r5,r4,r3
+e8830006| gnu lwa r4,4(r3)
+7ca41aaa| gnu lwax r5,r4,r3
+80830004| gnu lwz r4,4(r3)
+7ca4182e| gnu lwzx r5,r4,r3
+a8830004| gnu lha r4,4(r3)
+7ca41aae| gnu lhax r5,r4,r3
+a0830002| gnu lhz r4,2(r3)
+7ca41a2e| gnu lhzx r5,r4,r3
+7ca418ae| gnu lbzx r5,r4,r3
+7ca41c28| gnu ldbrx r5,r4,r3
+7ca41c2c| gnu lwbrx r5,r4,r3
+7ca41e2c| gnu lhbrx r5,r4,r3
+e8830009| gnu ldu r4,8(r3)
+7ca4186a| gnu ldux r5,r4,r3
+7ca41aea| gnu lwaux r5,r4,r3
+84830004| gnu lwzu r4,4(r3)
+7ca4186e| gnu lwzux r5,r4,r3
+ac830002| gnu lhau r4,2(r3)
+7ca41aee| gnu lhaux r5,r4,r3
+a4830002| gnu lhzu r4,2(r3)
+7ca41a6e| gnu lhzux r5,r4,r3
+8c830001| gnu lbzu r4,1(r3)
+7ca418ee| gnu lbzux r5,r4,r3
+f8830008| gnu std r4,8(r3)
+7ca4192a| gnu stdx r5,r4,r3
+90830004| gnu stw r4,4(r3)
+7ca4192e| gnu stwx r5,r4,r3
+b0830002| gnu sth r4,2(r3)
+7ca41b2e| gnu sthx r5,r4,r3
+98830001| gnu stb r4,1(r3)
+7ca419ae| gnu stbx r5,r4,r3
+7ca41d28| gnu stdbrx r5,r4,r3
+7ca41d2c| gnu stwbrx r5,r4,r3
+7ca41f2c| gnu sthbrx r5,r4,r3
+f8830009| gnu stdu r4,8(r3)
+7ca4196a| gnu stdux r5,r4,r3
+94830004| gnu stwu r4,4(r3)
+7ca4196e| gnu stwux r5,r4,r3
+b4830002| gnu sthu r4,2(r3)
+7ca41b6e| gnu sthux r5,r4,r3
+9c830001| gnu stbu r4,1(r3)
+7ca419ee| gnu stbux r5,r4,r3
+7c232040| gnu cmpld r3,r4
+7c032000| gnu cmpw r3,r4
+7c032040| gnu cmplw r3,r4
+7ca41a14| gnu add r5,r4,r3
+7ca41814| gnu addc r5,r4,r3
+7ca41815| gnu addc. r5,r4,r3
+7c851838| gnu and r5,r4,r3
+7c851878| gnu andc r5,r4,r3
+7c851839| gnu and. r5,r4,r3
+7c851b78| gnu or r5,r4,r3
+7c851b38| gnu orc r5,r4,r3
+7c851b79| gnu or. r5,r4,r3
+7c851a78| gnu xor r5,r4,r3
+7c851a79| gnu xor. r5,r4,r3
+7c851bb8| gnu nand r5,r4,r3
+7c851bb9| gnu nand. r5,r4,r3
+7c851a38| gnu eqv r5,r4,r3
+7c851a39| gnu eqv. r5,r4,r3
+7c8518f8| gnu nor r5,r4,r3
+7c8518f9| gnu nor. r5,r4,r3
+7ca32050| gnu subf r5,r3,r4
+7ca32010| gnu subfc r5,r3,r4
+7ca419d6| gnu mullw r5,r4,r3
+7ca419d7| gnu mullw. r5,r4,r3
+7ca41896| gnu mulhw r5,r4,r3
+7ca41816| gnu mulhwu r5,r4,r3
+7ca421d2| gnu mulld r5,r4,r4
+7ca419d3| gnu mulld. r5,r4,r3
+7ca41892| gnu mulhd r5,r4,r3
+7ca41893| gnu mulhd. r5,r4,r3
+7ca41dd6| gnu mullwo r5,r4,r3
+7ca41dd7| gnu mullwo. r5,r4,r3
+7ca41817| gnu mulhwu. r5,r4,r3
+7ca41dd2| gnu mulldo r5,r4,r3
+7ca41dd3| gnu mulldo. r5,r4,r3
+7ca41bd2| gnu divd r5,r4,r3
+7ca41bd3| gnu divd. r5,r4,r3
+7ca41b92| gnu divdu r5,r4,r3
+7ca41fd2| gnu divdo r5,r4,r3
+7ca41b93| gnu divdu. r5,r4,r3
+7ca41fd3| gnu divdo. r5,r4,r3
+7ca41f92| gnu divduo r5,r4,r3
+7ca41f93| gnu divduo. r5,r4,r3
+7ca41b52| gnu divde r5,r4,r3
+7ca41b53| gnu divde. r5,r4,r3
+7ca41b12| gnu divdeu r5,r4,r3
+7ca41b13| gnu divdeu. r5,r4,r3
+7ca41a12| gnu modud r5,r4,r3
+7ca41a16| gnu moduw r5,r4,r3
+7ca41e12| gnu modsd r5,r4,r3
+7ca41e16| gnu modsw r5,r4,r3
+7c851830| gnu slw r5,r4,r3
+7c851836| gnu sld r5,r4,r3
+7c851c30| gnu srw r5,r4,r3
+7c851e30| gnu sraw r5,r4,r3
+7c851c36| gnu srd r5,r4,r3
+7c851e34| gnu srad r5,r4,r3
+7c6400f4| gnu popcntb r4,r3
+7c6402f4| gnu popcntw r4,r3
+7c6403f4| gnu popcntd r4,r3
+7c23270d| gnu paste. r3,r4
+7c23260c| gnu copy r3,r4
+7ca01868| gnu lbarx r5,0,r3
+7ca018e8| gnu lharx r5,0,r3
+7ca01828| gnu lwarx r5,0,r3
+7ca018a8| gnu ldarx r5,0,r3
+7c65256d| gnu stbcx. r3,r5,r4
+7c65212d| gnu stwcx. r3,r5,r4
+7c6521ad| gnu stdcx. r3,r5,r4
+4c00012c| gnu isync
+7c0004ac| gnu hwsync
+7c2004ac| gnu lwsync
+7c041bac| gnu dcbi r4,r3
+7c04186c| gnu dcbst r4,r3
+7c041fec| gnu dcbz r4,r3
+7c041a2c| gnu dcbt r4,r3,0
+7c041fac| gnu icbi r4,r3
+c8230008| gnu lfd f1,8(r3)
+7c241cae| gnu lfdx f1,r4,r3
+cc230008| gnu lfdu f1,8(r3)
+7c241cee| gnu lfdux f1,r4,r3
+c0230004| gnu lfs f1,4(r3)
+7c241c2e| gnu lfsx f1,r4,r3
+c4230004| gnu lfsu f1,4(r3)
+7c241c6e| gnu lfsux f1,r4,r3
+d8230008| gnu stfd f1,8(r3)
+7c241dae| gnu stfdx f1,r4,r3
+dc230008| gnu stfdu f1,8(r3)
+7c241dee| gnu stfdux f1,r4,r3
+d0230004| gnu stfs f1,4(r3)
+7c241d2e| gnu stfsx f1,r4,r3
+d4230004| gnu stfsu f1,4(r3)
+7c241d6e| gnu stfsux f1,r4,r3
+fc62082a| gnu fadd f3,f2,f1
+fc62082b| gnu fadd. f3,f2,f1
+ec62082a| gnu fadds f3,f2,f1
+ec62082b| gnu fadds. f3,f2,f1
+fc620828| gnu fsub f3,f2,f1
+fc620829| gnu fsub. f3,f2,f1
+ec620828| gnu fsubs f3,f2,f1
+fc620829| gnu fsub. f3,f2,f1
+fc620072| gnu fmul f3,f2,f1
+fc620073| gnu fmul. f3,f2,f1
+ec620072| gnu fmuls f3,f2,f1
+ec620073| gnu fmuls. f3,f2,f1
+fc620824| gnu fdiv f3,f2,f1
+fc620825| gnu fdiv. f3,f2,f1
+ec620824| gnu fdivs f3,f2,f1
+ec620825| gnu fdivs. f3,f2,f1
+fc8110fa| gnu fmadd f4,f1,f3,f2
+fc8110fb| gnu fmadd. f4,f1,f3,f2
+ec8110fa| gnu fmadds f4,f1,f3,f2
+ec8110fb| gnu fmadds. f4,f1,f3,f2
+fc8110f8| gnu fmsub f4,f1,f3,f2
+fc8110f9| gnu fmsub. f4,f1,f3,f2
+ec8110f8| gnu fmsubs f4,f1,f3,f2
+ec8110f9| gnu fmsubs. f4,f1,f3,f2
+fc8110fe| gnu fnmadd f4,f1,f3,f2
+fc8110ff| gnu fnmadd. f4,f1,f3,f2
+ec8110fe| gnu fnmadds f4,f1,f3,f2
+ec8110ff| gnu fnmadds. f4,f1,f3,f2
+fc8110fc| gnu fnmsub f4,f1,f3,f2
+fc8110fd| gnu fnmsub. f4,f1,f3,f2
+ec8110fc| gnu fnmsubs f4,f1,f3,f2
+ec8110fd| gnu fnmsubs. f4,f1,f3,f2
+fc8110ee| gnu fsel f4,f1,f3,f2
+fc8110ef| gnu fsel. f4,f1,f3,f2
+fc400a10| gnu fabs f2,f1
+fc400a11| gnu fabs. f2,f1
+fc400850| gnu fneg f2,f1
+fc400a11| gnu fabs. f2,f1
+fc400818| gnu frsp f2,f1
+fc400819| gnu frsp. f2,f1
+fc40081c| gnu fctiw f2,f1
+fc40081d| gnu fctiw. f2,f1
+fc40081e| gnu fctiwz f2,f1
+fc40081f| gnu fctiwz. f2,f1
+fc400e5c| gnu fctid f2,f1
+fc400e5d| gnu fctid. f2,f1
+fc400e5e| gnu fctidz f2,f1
+fc400e5f| gnu fctidz. f2,f1
+fc400e9c| gnu fcfid f2,f1
+fc400e9d| gnu fcfid. f2,f1
+fc400f9c| gnu fcfidu f2,f1
+fc400f9d| gnu fcfidu. f2,f1
+ec400e9c| gnu fcfids f2,f1
+ec400e9d| gnu fcfids. f2,f1
+ec400830| gnu fres f2,f1
+ec400831| gnu fres. f2,f1
+fc400bd0| gnu frim f2,f1
+fc400bd1| gnu frim. f2,f1
+fc400b90| gnu frip f2,f1
+fc400b91| gnu frip. f2,f1
+fc400b50| gnu friz f2,f1
+fc400b51| gnu friz. f2,f1
+fc400b10| gnu frin f2,f1
+fc400b11| gnu frin. f2,f1
+fc400834| gnu frsqrte f2,f1
+fc400835| gnu frsqrte. f2,f1
+fc40082c| gnu fsqrt f2,f1
+fc40082d| gnu fsqrt. f2,f1
+ec40082c| gnu fsqrts f2,f1
+ec40082d| gnu fsqrts. f2,f1
+fc011040| gnu fcmpo cr0,f1,f2
+fc011000| gnu fcmpu cr0,f1,f2
+7c2418ce| gnu lvx v1,r4,r3
+7c241ace| gnu lvxl v1,r4,r3
+7c24180c| gnu lvsl v1,r4,r3
+7c24184c| gnu lvsr v1,r4,r3
+7c24180e| gnu lvebx v1,r4,r3
+7c24184e| gnu lvehx v1,r4,r3
+7c24188e| gnu lvewx v1,r4,r3
+7c2419ce| gnu stvx v1,r4,r3
+7c241bce| gnu stvxl v1,r4,r3
+7c24190e| gnu stvebx v1,r4,r3
+7c24194e| gnu stvehx v1,r4,r3
+7c24198e| gnu stvewx v1,r4,r3
+10611404| gnu vand v3,v1,v2
+10611444| gnu vandc v3,v1,v2
+10611584| gnu vnand v3,v1,v2
+10611484| gnu vor v3,v1,v2
+10611544| gnu vorc v3,v1,v2
+106114c4| gnu vxor v3,v1,v2
+10611504| gnu vnor v3,v1,v2
+10611684| gnu veqv v3,v1,v2
+10611000| gnu vaddubm v3,v1,v2
+10611040| gnu vadduhm v3,v1,v2
+10611080| gnu vadduwm v3,v1,v2
+106110c0| gnu vaddudm v3,v1,v2
+10611100| gnu vadduqm v3,v1,v2
+10611140| gnu vaddcuq v3,v1,v2
+10611180| gnu vaddcuw v3,v1,v2
+10611200| gnu vaddubs v3,v1,v2
+10611240| gnu vadduhs v3,v1,v2
+10611280| gnu vadduws v3,v1,v2
+10611400| gnu vsububm v3,v1,v2
+10611440| gnu vsubuhm v3,v1,v2
+10611480| gnu vsubuwm v3,v1,v2
+106114c0| gnu vsubudm v3,v1,v2
+10611500| gnu vsubuqm v3,v1,v2
+10611540| gnu vsubcuq v3,v1,v2
+10611580| gnu vsubcuw v3,v1,v2
+10611600| gnu vsububs v3,v1,v2
+10611640| gnu vsubuhs v3,v1,v2
+10611680| gnu vsubuws v3,v1,v2
+10611700| gnu vsubsbs v3,v1,v2
+10611740| gnu vsubshs v3,v1,v2
+10611780| gnu vsubsws v3,v1,v2
+108110fe| gnu vsubeuqm v4,v1,v2,v3
+108110ff| gnu vsubecuq v4,v1,v2,v3
+10611308| gnu vmulesb v3,v1,v2
+10611108| gnu vmulosb v3,v1,v2
+10611208| gnu vmuleub v3,v1,v2
+10611008| gnu vmuloub v3,v1,v2
+10611348| gnu vmulesh v3,v1,v2
+10611148| gnu vmulosh v3,v1,v2
+10611248| gnu vmuleuh v3,v1,v2
+10611048| gnu vmulouh v3,v1,v2
+10611348| gnu vmulesh v3,v1,v2
+10611188| gnu vmulosw v3,v1,v2
+10611288| gnu vmuleuw v3,v1,v2
+10611088| gnu vmulouw v3,v1,v2
+10611089| gnu vmuluwm v3,v1,v2
+10611408| gnu vpmsumb v3,v1,v2
+10611448| gnu vpmsumh v3,v1,v2
+10611488| gnu vpmsumw v3,v1,v2
+106114c8| gnu vpmsumd v3,v1,v2
+108110e3| gnu vmsumudm v4,v1,v2,v3
+10611004| gnu vrlb v3,v1,v2
+10611044| gnu vrlh v3,v1,v2
+10611084| gnu vrlw v3,v1,v2
+106110c4| gnu vrld v3,v1,v2
+10611104| gnu vslb v3,v1,v2
+10611144| gnu vslh v3,v1,v2
+10611184| gnu vslw v3,v1,v2
+106111c4| gnu vsl v3,v1,v2
+1061140c| gnu vslo v3,v1,v2
+10611204| gnu vsrb v3,v1,v2
+10611244| gnu vsrh v3,v1,v2
+10611284| gnu vsrw v3,v1,v2
+106112c4| gnu vsr v3,v1,v2
+1061144c| gnu vsro v3,v1,v2
+106115c4| gnu vsld v3,v1,v2
+10611304| gnu vsrab v3,v1,v2
+10611344| gnu vsrah v3,v1,v2
+10611384| gnu vsraw v3,v1,v2
+106113c4| gnu vsrad v3,v1,v2
+10400f02| gnu vclzb v2,v1
+10400f42| gnu vclzh v2,v1
+10400f82| gnu vclzw v2,v1
+10400fc2| gnu vclzd v2,v1
+10400f03| gnu vpopcntb v2,v1
+10400f43| gnu vpopcnth v2,v1
+10400f83| gnu vpopcntw v2,v1
+10400fc3| gnu vpopcntd v2,v1
+10611006| gnu vcmpequb v3,v1,v2
+10611406| gnu vcmpequb. v3,v1,v2
+10611046| gnu vcmpequh v3,v1,v2
+10611446| gnu vcmpequh. v3,v1,v2
+10611086| gnu vcmpequw v3,v1,v2
+10611486| gnu vcmpequw. v3,v1,v2
+106110c7| gnu vcmpequd v3,v1,v2
+106114c7| gnu vcmpequd. v3,v1,v2
+10611206| gnu vcmpgtub v3,v1,v2
+10611606| gnu vcmpgtub. v3,v1,v2
+10611246| gnu vcmpgtuh v3,v1,v2
+10611646| gnu vcmpgtuh. v3,v1,v2
+10611286| gnu vcmpgtuw v3,v1,v2
+10611686| gnu vcmpgtuw. v3,v1,v2
+106112c7| gnu vcmpgtud v3,v1,v2
+106116c7| gnu vcmpgtud. v3,v1,v2
+10611306| gnu vcmpgtsb v3,v1,v2
+10611706| gnu vcmpgtsb. v3,v1,v2
+10611346| gnu vcmpgtsh v3,v1,v2
+10611746| gnu vcmpgtsh. v3,v1,v2
+10611386| gnu vcmpgtsw v3,v1,v2
+10611786| gnu vcmpgtsw. v3,v1,v2
+106113c7| gnu vcmpgtsd v3,v1,v2
+106117c7| gnu vcmpgtsd. v3,v1,v2
+10611107| gnu vcmpnezb v3,v1,v2
+10611507| gnu vcmpnezb. v3,v1,v2
+10611007| gnu vcmpneb v3,v1,v2
+10611407| gnu vcmpneb. v3,v1,v2
+10611047| gnu vcmpneh v3,v1,v2
+10611447| gnu vcmpneh. v3,v1,v2
+10611087| gnu vcmpnew v3,v1,v2
+10611487| gnu vcmpnew. v3,v1,v2
+108110eb| gnu vperm v4,v1,v2,v3
+108110fb| gnu vpermr v4,v1,v2,v3
+108110ed| gnu vpermxor v4,v1,v2,v3
+1061154c| gnu vbpermq v3,v1,v2
+106115cc| gnu vbpermd v3,v1,v2
+108110ea| gnu vsel v4,v1,v2,v3
+10611508| gnu vcipher v3,v1,v2
+10611509| gnu vcipherlast v3,v1,v2
+10611548| gnu vncipher v3,v1,v2
+10611549| gnu vncipherlast v3,v1,v2
+104105c8| gnu vsbox v2,v1
+7c241e98| gnu lxvd2x vs1,r4,r3
+f4230011| gnu lxv vs1,16(r3)
+7c23221a| gnu lxvl vs1,r3,r4
+7c23225a| gnu lxvll vs1,r3,r4
+7c241c98| gnu lxsdx vs1,r4,r3
+7c241f98| gnu stxvd2x vs1,r4,r3
+f4230015| gnu stxv vs1,16(r3)
+7c23231a| gnu stxvl vs1,r3,r4
+7c23235a| gnu stxvll vs1,r3,r4
+7c241d98| gnu stxsdx vs1,r4,r3
+7c241898| gnu lxsiwax vs1,r4,r3
+7c241918| gnu stxsiwx vs1,r4,r3
+7c230066| gnu mfvsrd r3,vs1
+7c230166| gnu mtvsrd vs1,r3
+f0611410| gnu xxland vs3,vs1,vs2
+f0611490| gnu xxlor vs3,vs1,vs2
+f0611550| gnu xxlorc vs3,vs1,vs2
+f06114d0| gnu xxlxor vs3,vs1,vs2
+f08110f0| gnu xxsel vs4,vs1,vs2,vs3
+f0611090| gnu xxmrghw vs3,vs1,vs2
+f0410a90| gnu xxspltw vs2,vs1,1
+f06110d0| gnu xxperm vs3,vs1,vs2
+f0611110| gnu xxsldwi vs3,vs1,vs2,1
+f0400c24| gnu xscvdpsp vs2,vs1
+f0400e24| gnu xvcvdpsp vs2,vs1
+f0400de0| gnu xscvsxddp vs2,vs1
+f0400f60| gnu xvcvdpsxds vs2,vs1
+f0400fe0| gnu xvcvsxddp vs2,vs1
+7c6803a6| gnu mtlr r3
+7c6903a6| gnu mtctr r3
+7c6802a6| gnu mflr r3
+7c6902a6| gnu mfctr r3
+4c8c0000| gnu mcrf cr1,cr3