shithub: riscv

Download patch

ref: fe53c0930e8595a2e8b5aa71e907a1f2bec6059b
parent: 7b63c05b211e61f9dc6b604f04d7777136cf6e66
author: Jacob Moody <moody@posixcafe.org>
date: Fri Nov 3 11:34:48 EDT 2023

libmach: power64 catch up

--- a/sys/src/libmach/9.c
+++ b/sys/src/libmach/9.c
@@ -109,7 +109,7 @@
 	"LR",			/* name of link register */
 	"setSB",		/* static base register name */
 	0,			/* value */
-	0x100000,		/* page size (TODO, too many choices) */
+	0x1000,		/* page size (TODO, too many choices) */
 	0xffffffff80000000ull,	/* kernel base (TODO, likely incorrect) */
 	0xf000000000000000ull,	/* kernel text mask (TODO, likely incorrect) */
 	0x00007ffffff00000ull,	/* user stack top (TODO, likely incorrect) */
--- a/sys/src/libmach/qdb.c
+++ b/sys/src/libmach/qdb.c
@@ -137,6 +137,9 @@
 	uchar	ra;		/* bits 11-15 */
 	uchar	rb;		/* bits 16-20 */
 	uchar	rc;		/* bit 31 */
+	uchar	vra;		/* bit 11-15 */
+	uchar	vrb;		/* bit 16-20 */
+	uchar	vrd;		/* bit 6-10 */
 	union {
 		uchar	rs;	/* bits 6-10 */
 		uchar	rd;
@@ -149,6 +152,7 @@
 	uvlong	imm64;
 	long w0;
 	long w1;
+	uchar	pop;		/* op of second half of prefixed instruction */
 	uvlong	addr;		/* pc of instruction */
 	short	target;
 	short	m64;		/* 64-bit mode */
@@ -216,6 +220,9 @@
 	i->rb = IBF(w, 16, 20);
 	i->rc = IB(w, 31);
 	i->rs = IBF(w, 6, 10);	/* also rd */
+	i->vra = IBF(w, 11, 15);
+	i->vrb = IBF(w, 16, 20);
+	i->vrd = IBF(w, 6, 10);
 	i->sh = IBF(w, 16, 20);
 	i->xsh = (IB(w, 30)<<5) | i->sh;
 	i->spr = IBF(w, 11, 20);
@@ -225,7 +232,16 @@
 	if(i->op == 58){	/* class of 64-bit loads */
 		i->xo = i->simm & 3;
 		i->simm &= ~3;
-	}
+	} else if(i->op == 4)
+		i->xo = IBF(w, 21, 31);
+	else if(i->op == 6)
+		i->xo = IBF(w, 28, 31);
+	else if(i->op == 57)
+		i->xo = IBF(w, 30, 31);
+	else if(i->op == 61)
+		i->xo = IBF(w, 29, 31);
+	else if(i->op == 17)
+		i->xo = IBF(w, 30, 31);
 	i->imm64 = i->simm;
 	if(i->op == 15)
 		i->imm64 <<= 16;
@@ -242,6 +258,7 @@
 mkinstr(uvlong pc, Instr *i)
 {
 	Instr x;
+	ulong w;
 
 	if(decode(pc, i) < 0)
 		return -1;
@@ -249,10 +266,10 @@
 	 * combine ADDIS/ORI (CAU/ORIL) into MOVW
 	 * also ORIS/ORIL for unsigned in 64-bit mode
 	 */
-	if ((i->op == 15 || i->op == 25) && i->ra==0) {
+	if((i->op == 15 || i->op == 25) && i->ra==0) {
 		if(decode(pc+4, &x) < 0)
 			return -1;
-		if (x.op == 24 && x.rs == x.ra && x.ra == i->rd) {
+		if(x.op == 24 && x.rs == x.ra && x.ra == i->rd) {
 			i->imm64 |= (x.imm64 & 0xFFFF);
 			if(i->op != 15)
 				i->imm64 &= 0xFFFFFFFFUL;
@@ -262,6 +279,15 @@
 			return 1;
 		}
 	}
+
+	/* ISA3.1+ prefixed instructions */
+	if(i->op == 1){
+		if(get4(mymap, pc+4, &w) < 0)
+			return -1;
+		i->w1 = w;
+		i->pop = IBF(i->w1, 0, 5);
+		i->size++;
+	}
 	return 1;
 }
 
@@ -459,7 +485,7 @@
 		format(o->mnemonic, i, "R%d,(R%b)");
 	else
 		format(o->mnemonic, i, "R%d,(R%b+R%a)");
-	if(i->rc && i->xo != 150)
+	if(i->rc && (i->xo != 150 && i->xo != 214))
 		bprint(i, " [illegal Rc]");
 }
 
@@ -668,6 +694,167 @@
 		format(o->mnemonic, i, o->ken);
 }
 
+static void
+vra2s(Opcode *o, Instr *i)
+{
+	char **p;
+	int n;
+
+	static char* bcdc[] = {
+		[0] "bcdctsq.",
+		[2] "bcdcfsq.",
+		[4] "bcdctz.",
+		[5] "bcdctn.",
+		[6] "bcdcfz.",
+		[7] "bcdcfn.",
+		[31] "bcdsetsgn.",
+	};
+	static char* vcz[] = {
+		[0]  "vclzlsbb",
+		[1] "vctzlsbb",
+		[6] "vnegw",
+		[7] "vnegd",
+		[8] "vprtybw",
+		[9] "vprtybd",
+		[10] "vprtybq",
+		[31] "vctzd",
+		[16] "vextsb2w",
+		[17] "vextsh2w",
+		[24] "vextsb2d",
+		[25] "vextsh2d",
+		[26] "vextsw2d",
+		[27] "vextsd2q",
+		[28] "vctzb",
+		[29] "vctzh",
+		[30] "vctzw",
+	};
+	static char* exp[] = {
+		[1] "vexpandhm",
+		[2] "vexpandwm",
+		[3] "vexpanddm",
+		[4] "vexpandqm",
+		[8] "vextractbm",
+		[9] "vextracthm",
+		[10] "vextractwm",
+		[11] "vextractdm",
+		[12] "vextractqm",
+		[16] "mtvsrbm",
+		[17] "mtvsrhm",
+		[18] "mtvsrwm",
+		[19] "mtvsrdm",
+		[20] "mtvsrqm",
+		[24] "vcntmbb",
+		[26] "vcntmbd",
+		[28] "vcntmbh",
+		[30] "vcntmbw",
+	};
+	static char *vstr[] = {
+		[1] "vstribr[.]",
+		[2] "vstrihl[.]",
+		[3] "vstrihr[.]",
+	};
+	static char *xscv[] = {
+		[1] "xscvqpuwz",
+		[2] "xscvudqp",
+		[3] "xscvuqqp",
+		[8] "xscvqpsqz",
+		[9] "xscvqpswz",
+		[10] "xscvsdqp",
+		[11] "xscvsqqp",
+		[17] "xscvqpudz",
+		[20] "xscvqpdp[o]",
+		[22] "xscvdpqp",
+		[25] "xscvqpsdz",
+	};
+	static char *xsab[] = {
+		[2] "xsxexpqp",
+		[8] "xsnabsqp",
+		[16] "xsnegqp",
+		[18] "xsxsigqp",
+		[27] "xssqrtqp[o]",
+	};
+	static char *xvx[] = {
+		[1] "xvxsigdp",
+		[2] "xvtlsbb",
+		[7] "xxbrh",
+		[8] "xvxexpsp",
+		[9] "xvxsigsp",
+		[15] "xxbrw",
+		[16] "xvcvbf16sp",
+		[17] "xvcvspbf16",
+		[23] "xxbrd",
+		[24] "xvcvhpsp",
+		[25] "xvcvsphp",
+		[31] "xxbrq",
+	};
+	static char *xsc[] = {
+		[1] "xsxsigdp",
+		[16] "xscvhpdp",
+		[17] "xscvdphp",
+	};
+	static char *xxcc[] = {
+		[1] "xxmtacc",
+		[3] "xxsetaccz",
+	};
+	static char *dcff[] = {
+		[1] "dctfixqq",
+	};
+	static char *lxvk[] = {
+		[31] "lxvkq",
+	};
+	if(o->op == 4 && (o->xo & o->xomask) == 385){
+		p = bcdc; n = nelem(bcdc);
+	} else switch(o->xo){
+	case 1538: p = vcz; n = nelem(vcz); break;
+	case 1602:
+		if((i->vra & (12<<1)) == (12<<1))
+			i->vra &= ~1;
+		if((i->vra & (13<<1)) == (13<<1))
+			i->vra &= ~1;
+		p = exp; n = nelem(exp); break;
+	case 836: p = xscv; n = nelem(xscv); break;
+	case 804: p = xsab; n = nelem(xsab); break;
+	case 950: p = xvx; n = nelem(xvx); break;
+	case 13: p = vstr; n = nelem(vstr); break;
+	case 694: p = xsc; n = nelem(xsc); break;
+	case 177: p = xxcc; n = nelem(xxcc); break;
+	case 994: p = dcff; n = nelem(dcff); break;
+	case 360: p = lxvk; n = nelem(lxvk); break;
+	default: p = nil; n = 0; break;
+	}
+		
+	if(p == nil || i->vra > n || p[i->vra] == nil)
+		format(o->mnemonic, i, o->ken);
+	else
+		format(p[i->vra], i, o->ken);
+}
+
+static void
+addpcis(Opcode *o, Instr *i)
+{
+	long l;
+	char buf[16];
+
+	l = ((IBF(i->w0, 11, 15)<<11) | (IBF(i->w0, 16, 25)<<1) | (i->rc))<<16;
+	snprint(buf, sizeof buf, "$%ld,PC,R%%d", l);
+	format(o->mnemonic, i, buf);
+}
+
+static void
+vsldbi(Opcode *o, Instr *i)
+{
+	switch(IBF(i->w0, 21, 22)){
+	case 1:
+		format("vsrdbi", i, o->ken);
+		break;
+	case 0:
+		format("vsldbi", i, o->ken);
+		break;
+	default:
+		format("unknown instruction", i, 0);
+	}
+}
+
 static	char	ir2[] = "R%a,R%d";		/* reverse of IBM order */
 static	char	ir3[] = "R%b,R%a,R%d";
 static	char	ir3r[] = "R%a,R%b,R%d";
@@ -691,9 +878,16 @@
 static	char	rlim[] = "R%b,R%s,$%z,R%a";
 static	char	rlimi[] = "$%k,R%s,$%z,R%a";
 static	char	rldi[] = "$%e,R%s,$%E,R%a";
+static	char	vr2[] = "V%あ,V%う";
+static	char	vr3[] = "V%い,V%あ,V%う";
 
 #define	OEM	IBF(~0,22,30)
 #define	FP4	IBF(~0,26,30)
+#define VXM	IBF(~0,21,31)
+#define VXM2	IBF(~0,23,31)
+#define VCM	IBF(~0,22,31)
+#define DQM	IBF(~0,28,31)
+#define VAM	IBF(~0,26,31)
 #define	ALL	(~0)
 #define	RLDC	0xF
 #define	RLDI	0xE
@@ -703,6 +897,127 @@
 		also, L bit (bit 10) mbz or selects 64-bit operands
 */
 
+typedef struct Popcode Popcode;
+
+struct Popcode {
+	ulong xo1;
+	ulong xomask1;
+
+	ulong op2;
+	ulong xo2;
+	ulong xomask2;
+
+	char *mnemonic;
+};
+
+/* mask of bits [lo, hi] */
+#define IBM(lo,hi)	( ((((~0UL)>>(31-hi))<<(31-hi))<<(lo))>>(lo) )
+
+#define PLM	IBM(6,8)
+#define XXM1	IBM(6,11)
+#define XXM2	IBM(11,13)
+#define XXM3	IBM(26,27)
+#define XXM4	IBM(6,8)
+#define XXM5	IBM(21,28)
+
+#define PMXOP	(((3<<4)|9)<<20)
+
+/* this is where they hide the x86 */
+static Popcode popcodes[] = {
+	{0,	PLM,	61,	0,	0,	"pstd"},
+	{0,	PLM,	62,	0,	0,	"pstxvp"},
+	{2<<24,	PLM,	32,	0,	0,	"plwz"},
+	{1<<24,	XXM1,	32,	3<<17,	IBM(11,14),	"xxspltiw"},
+	{1<<24,	XXM1,	32,	2<<17,	IBM(11,14),	"xxspltidp"},
+	{1<<24,	XXM1,	32,	0,	XXM2,	"xxsplti32dx"},
+	{1<<24,	XXM1,	33,	0,	XXM3,	"xxblendvb"},
+	{1<<24,	XXM1,	33,	1<<4,	XXM3,	"xxblendvh"},
+	{1<<24,	XXM1,	33,	2<<4,	XXM3,	"xxblendvw"},
+	{1<<24,	XXM1,	33,	3<<4,	XXM3,	"xxblendvd"},
+	{2<<24,	XXM4,	34,	0,	0,	"plbz"},
+	{1<<24, XXM1,	34,	0,	XXM3,	"xxpermx"},
+	{1<<24,	XXM1,	34,	1<<4,	XXM3,	"xxeval"},
+	{2<<24,	XXM4,	36,	0,	0,	"pstw"},
+	{2<<24,	XXM4,	38,	0,	0,	"pstb"},
+	{2<<24,	XXM4,	40,	0,	0,	"plhz"},
+	{0,	XXM4,	41,	0,	0,	"plwa"},
+	{0,	XXM4,	42,	0,	0,	"plxsd"},
+	{2<<24,	XXM4,	42,	0,	0,	"plha"},
+	{0,	XXM4,	43,	0,	0,	"plxssp"},
+	{2<<24,	XXM4,	44,	0,	0,	"psth"},
+	{0,	XXM4,	46,	0,	0,	"pstxsd"},
+	{0,	XXM4,	47,	0,	0,	"pstxssp"},
+	{2<<24,	XXM4,	48,	0,	0,	"plfs"},
+	{2<<24,	XXM4,	50,	0,	0,	"plfd"},
+	{2<<24,	XXM4,	52,	0,	0,	"pstfs"},
+	{2<<24,	XXM4,	54,	0,	0,	"pstfd"},
+	{0,	XXM4,	56,	0,	0,	"plq"},
+	{0,	XXM4,	57,	0,	0,	"pld"},
+	{0,	XXM4,	58,	0,	0,	"plxvp"},
+	{PMXOP,	XXM1,	59,	2<<3,	XXM5,	"pmxvi8ger4pp"},
+	{PMXOP,	XXM1,	59,	18<<3,	XXM5,	"pmxvf16ger2pp"},
+	{PMXOP,	XXM1,	59,	26<<3,	XXM5,	"pmxvf32gerpp"},
+	{PMXOP,	XXM1,	59,	34<<3,	XXM5,	"pmxvi4ger8pp"},
+	{PMXOP,	XXM1,	59,	34<<3,	XXM5,	"pmxvi16ger2spp"},
+	{PMXOP,	XXM1,	59,	42<<3,	XXM5,	"pmxvi16ger2spp"},
+	{PMXOP,	XXM1,	59,	50<<3,	XXM5,	"pmxvbf16ger2pp"},
+	{PMXOP,	XXM1,	59,	58<<3,	XXM5,	"pmxvf64gerpp"},
+	{PMXOP,	XXM1,	59,	82<<3,	XXM5,	"pmxvf16ger2np"},
+	{PMXOP,	XXM1,	59,	90<<3,	XXM5,	"pmxvf32gernp"},
+	{PMXOP,	XXM1,	59,	114<<3,	XXM5,	"pmxvbf16ger2n"},
+	{PMXOP,	XXM1,	59,	122<<3,	XXM5,	"pmxvf64gernp"},
+	{PMXOP,	XXM1,	59,	146<<3,	XXM5,	"pmxvf16ger2pn"},
+	{PMXOP,	XXM1,	59,	154<<3,	XXM5,	"pmxvf32gerpn"},
+	{PMXOP,	XXM1,	59,	178<<3,	XXM5,	"pmxvbf16ger2pn"},
+	{PMXOP,	XXM1,	59,	186<<3,	XXM5,	"pmxvf64gerpn"},
+	{PMXOP,	XXM1,	59,	210<<3,	XXM5,	"pmxvf16ger2nn"},
+	{PMXOP,	XXM1,	59,	218<<3,	XXM5,	"pmxvf32gernn"},
+	{PMXOP,	XXM1,	59,	242<<3,	XXM5,	"pmxvbf16ger2nn"},
+	{PMXOP,	XXM1,	59,	250<<3,	XXM5,	"pmxvf64gernn"},
+	{PMXOP,	XXM1,	59,	3<<3,	XXM5,	"pmxvi8ger4"},
+	{PMXOP,	XXM1,	59,	19<<3,	XXM5,	"pmxvf16ger2"},
+	{PMXOP,	XXM1,	59,	27<<3,	XXM5,	"pmxvf32ger"},
+	{PMXOP,	XXM1,	59,	35<<3,	XXM5,	"pmxvi4ger8"},
+	{PMXOP,	XXM1,	59,	43<<3,	XXM5,	"pmxvi16ger2s"},
+	{PMXOP,	XXM1,	59,	51<<3,	XXM5,	"pmxvbf16ger2"},
+	{PMXOP,	XXM1,	59,	59<<3,	XXM5,	"pmxvf64ger"},
+	{PMXOP,	XXM1,	59,	75<<3,	XXM5,	"pmxvi16ger2"},
+	{PMXOP,	XXM1,	59,	99<<3,	XXM5,	"pmxvi8ger4spp"},
+	{PMXOP,	XXM1,	59,	107<<3,	XXM5,	"pmxvi16ger2pp"},
+	{0,	XXM4,	60,	0,	0,	"pstq"},
+	{2<<24,	XXM4,	14,	0,	0,	"paddi"},
+
+	{0},
+};
+
+static void
+prefixed(Opcode*, Instr *i)
+{
+	Popcode *p;
+
+	for(p = popcodes; p->mnemonic != nil; p++){
+		if(i->pop != p->op2)
+			continue;
+		if((i->w0 & p->xomask1) != p->xo1)
+			continue;
+		if((i->w1 & p->xomask2) != p->xo2)
+			continue;
+		format(p->mnemonic, i, nil);
+		return;
+	}
+	if((i->w0 & XXM1) == 3<<24)
+		format("NOP", i, nil);
+	else if((i->w0 & XXM4) == 0){
+		if((i->pop & ~1) == 25<<1)
+			format("plxv", i, nil);
+		else if((i->pop & ~1) == 27<<1)
+			format("pstxv", i, nil);
+		else
+			format("unknown instruction", i, nil);
+	} else
+		format("unknown instruction", i, nil);
+}
+
 static Opcode opcodes[] = {
 	{31,	266,	OEM,	"ADD%V%C",	add,	ir3},
 	{31,	 10,	OEM,	"ADDC%V%C",	add,	ir3},
@@ -902,7 +1217,7 @@
 	{21,	0,	0,	"RLWNM%C",	gencc,	rlimi},
 	{23,	0,	0,	"RLWNM%C",	gencc,	rlim},
 
-	{17,	1,	ALL,	"SYSCALL",	gen,	0},
+	{17,	2,	ALL,	"SYSCALL",	gen,	0},
 
 	{31,	27,	ALL,	"SLD%C",	shift,	il3},	/* 64 */
 	{31,	24,	ALL,	"SLW%C",	shift,	il3},
@@ -978,6 +1293,882 @@
 	{26,	0,	0,	"XOR",		and,	il2u},
 	{27,	0,	0,	"XOR",		shifted, 0},
 
+	/* unimplemented/lightly implemented from here on out */
+	{19,	2,	FP4, "ADD",	addpcis,	0},
+	{19,	560,	ALL,	"BC%L.T",	0,	"%d,%a,(TAR)"},
+	{19,	370,	ALL,	"STOP",		0,	0},
+	{17,	1,	ALL,	"SYSCALL.V",	0,	0},
+	{19,	82,	ALL,	"RETURN.V",	0,	0},
+	{19,	146,	ALL,	"RETURN.E",	0,	0},
+	{19,	18,	ALL,	"RETURN.I",	0,	0},
+	{19,	274,	ALL,	"HRETURN.I",	0,	0},
+	{19,	306,	ALL,	"URETURN.I",	0,	0},
+
+	{4,	0,	VXM,	"vaddubm",	0,	vr3},
+	{4,	64,	VXM,	"vadduhm",	0,	vr3},
+	{4,	128,	VXM,	"vadduwm",	0,	vr3},
+	{4,	192,	VXM,	"vaddudm",	0,	vr3},
+	{4,	256,	VXM,	"vadduqm",	0,	vr3},
+	{4,	320,	VXM,	"vaddcuq",	0,	vr3},
+	{4,	384,	VXM,	"vaddcuw",	0,	vr3},
+	{4,	512,	VXM,	"vaddubs",	0,	vr3},
+	{4,	576,	VXM,	"vadduhs",	0,	vr3},
+	{4,	640,	VXM,	"vadduws",	0,	vr3},
+	{4,	768,	VXM,	"vaddsbs",	0,	vr3},
+	{4,	832,	VXM,	"vaddshs",	0,	vr3},
+	{4,	896,	VXM,	"vaddsws",	0,	vr3},
+	{4,	1024,	VXM,	"vsububm",	0,	vr3},
+	{4,	1088,	VXM,	"vsubuhm",	0,	vr3},
+	{4,	1152,	VXM,	"vsubuwm",	0,	vr3},
+	{4,	1216,	VXM,	"vsubudm",	0,	vr3},
+	{4,	1280,	VXM,	"vsubuqm",	0,	vr3},
+	{4,	1344,	VXM,	"vsubcuq",	0,	vr3},
+	{4,	1408,	VXM,	"vsubcuw",	0,	vr3},
+	{4,	1536,	VXM,	"vsububs",	0,	vr3},
+	{4,	1600,	VXM,	"vsubuhs",	0,	vr3},
+	{4,	1664,	VXM,	"vsubuws",	0,	vr3},
+	{4,	1792,	VXM,	"vsubsbs",	0,	vr3},
+	{4,	1856,	VXM,	"vsubshs",	0,	vr3},
+	{4,	1920,	VXM,	"vsubsws",	0,	vr3},
+	{4,	1,	VXM,	"vmul10cuq",	0,	vr2},
+	{4,	65,	VXM,	"vmul10ecuq",	0,	vr2},
+	{4,	257,	VXM,	"vcmpuq",	0,	vr3},
+	{4,	321,	VXM,	"vcmpsq",	0,	vr3},
+	{4,	513,	VXM,	"vmul10uq",	0,	vr2},
+	{4,	577,	VXM,	"vmul10euq",	0,	vr2},
+	{4,	833,	VXM,	"bcdcpsgn.",	0,	vr3},
+	{4,	1,	VXM2,	"bcdadd.",	0,	vr3},
+	{4,	65,	VXM2,	"bcdsub.",	0,	vr3},
+	{4,	129,	VXM2,	"bcdus.",	0,	vr3},
+	{4,	193,	VXM2,	"bcds.",	0,	vr3},
+	{4,	257,	VXM2,	"bcdtrunc.",	0,	vr3},
+	{4,	1345,	VXM,	"bcdutrunc.",	0,	vr3},
+	{4,	385,	VXM2,	"bcdctsq.",	vra2s,	vr2},
+	{4,	385,	VXM2,	"bcdcfsq.",	vra2s,	vr2},
+	{4,	385,	VXM2,	"bcdctz.",	vra2s,	vr2},
+	{4,	385,	VXM2,	"bcdctn.",	vra2s,	vr2},
+	{4,	385,	VXM2,	"bcdcfz.",	vra2s,	vr2},
+	{4,	385,	VXM2,	"bcdcfn.",	vra2s,	vr2},
+	{4,	385,	VXM2,	"bcdsetsgn.",	0,	vr3},
+	{4,	449,	VXM2,	"bcdsr.",	0,	vr3},
+	{4,	2,	VXM,	"vmaxub",	0,	vr3},
+	{4,	66,	VXM,	"vmaxuh",	0,	vr3},
+	{4,	130,	VXM,	"vmaxuw",	0,	vr3},
+	{4,	194,	VXM,	"vmaxud",	0,	vr3},
+	{4,	258,	VXM,	"vmaxsb",	0,	vr3},
+	{4,	322,	VXM,	"vmaxsh",	0,	vr3},
+	{4,	386,	VXM,	"vmaxsw",	0,	vr3},
+	{4,	450,	VXM,	"vmaxsd",	0,	vr3},
+	{4,	514,	VXM,	"vminub",	0,	vr3},
+	{4,	578,	VXM,	"vminuh",	0,	vr3},
+	{4,	642,	VXM,	"vminuw",	0,	vr3},
+	{4,	706,	VXM,	"vminud",	0,	vr3},
+	{4,	770,	VXM,	"vminsb",	0,	vr3},
+	{4,	834,	VXM,	"vminsh",	0,	vr3},
+	{4,	898,	VXM,	"vminsw",	0,	vr3},
+	{4,	962,	VXM,	"vminsd",	0,	vr3},
+	{4,	1026,	VXM,	"vavgub",	0,	vr3},
+	{4,	1090,	VXM,	"vavguh",	0,	vr3},
+	{4,	1154,	VXM,	"vavguw",	0,	vr3},
+	{4,	1282,	VXM,	"vavgsb",	0,	vr3},
+	{4,	1346,	VXM,	"vavgsh",	0,	vr3},
+	{4,	1410,	VXM,	"vavgsw",	0,	vr3},
+	{4,	1538,	VXM,	"vclzlsbb",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vctzlsbb",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vnegw",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vnegd",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vprtybw",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vprtybd",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vprtybq",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vextsb2w",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vextsh2w",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vextsb2d",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vextsh2d",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vextsw",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vextsd",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vctzb",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vctzh",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vctzw",	vra2s,	vr2},
+	{4,	1538,	VXM,	"vctzd",	vra2s,	vr2},
+	{4,	1602,	ALL,	"vexpandbm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vexpandhm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vexpandwm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vexpanddm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vexpandqm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vextractbm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vextracthm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vextractwm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vextractdm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"vextractqm",	vra2s,	vr2},
+	{4,	1602,	VXM,	"mtvsrbm",	0,	vr3},
+	{4,	1602,	VXM,	"mtvsrhm",	0,	vr3},
+	{4,	1602,	VXM,	"mtvsrwm",	0,	vr3},
+	{4,	1602,	VXM,	"mtvsrdm",	0,	vr3},
+	{4,	1602,	VXM,	"mtvsrqm",	0,	vr3},
+	{4,	1602,	VXM,	"vcntmbb",	0,	vr3},
+	{4,	1602,	VXM,	"vcntmbd",	0,	vr3},
+	{4,	1602,	VXM,	"vcntmbh",	0,	vr3},
+	{4,	1602,	VXM,	"vcntmbw",	0,	vr3},
+	{4,	1666,	VXM,	"vshasigmaw",	0,	vr3},
+	{4,	1730,	VXM,	"vshasigmad",	0,	vr3},
+	{4,	1794,	VXM,	"vclzb",	0,	vr3},
+	{4,	1858,	VXM,	"vclzh",	0,	vr3},
+	{4,	1922,	VXM,	"vclzw",	0,	vr3},
+	{4,	1986,	VXM,	"vclzd",	0,	vr3},
+	{4,	1027,	VXM,	"vabsdub",	0,	vr3},
+	{4,	1091,	VXM,	"vabsduh",	0,	vr3},
+	{4,	1155,	VXM,	"vabsduw",	0,	vr3},
+	{4,	1795,	VXM,	"vpopcntb",	0,	vr3},
+	{4,	1859,	VXM,	"vpopcnth",	0,	vr3},
+	{4,	1923,	VXM,	"vpopcntw",	0,	vr3},
+	{4,	1987,	VXM,	"vpopcntd",	0,	vr3},
+	{4,	4,	VXM,	"vrlb",	0,	vr3},
+	{4,	68,	VXM,	"vrlh",	0,	vr3},
+	{4,	132,	VXM,	"vrlw",	0,	vr3},
+	{4,	196,	VXM,	"vrld",	0,	vr3},
+	{4,	260,	VXM,	"vslb",	0,	vr3},
+	{4,	324,	VXM,	"vslh",	0,	vr3},
+	{4,	388,	VXM,	"vslw",	0,	vr3},
+	{4,	452,	VXM,	"vsl",	0,	vr3},
+	{4,	516,	VXM,	"vsrb",	0,	vr3},
+	{4,	580,	VXM,	"vsrh",	0,	vr3},
+	{4,	644,	VXM,	"vsrw",	0,	vr3},
+	{4,	708,	VXM,	"vsr",	0,	vr3},
+	{4,	772,	VXM,	"vsrab",	0,	vr3},
+	{4,	836,	VXM,	"vsrah",	0,	vr3},
+	{4,	900,	VXM,	"vsraw",	0,	vr3},
+	{4,	964,	VXM,	"vsrad",	0,	vr3},
+	{4,	1028,	VXM,	"vand",	0,	vr3},
+	{4,	1092,	VXM,	"vandc",	0,	vr3},
+	{4,	1156,	VXM,	"vor",	0,	vr3},
+	{4,	1220,	VXM,	"vxor",	0,	vr3},
+	{4,	1284,	VXM,	"vnor",	0,	vr3},
+	{4,	1348,	VXM,	"vorc",	0,	vr3},
+	{4,	1412,	VXM,	"vnand",	0,	vr3},
+	{4,	1476,	VXM,	"vsld",	0,	vr3},
+	{4,	1540,	VXM,	"mfvscr",	0,	vr3},
+	{4,	1604,	VXM,	"mtvscr",	0,	vr3},
+	{4,	1668,	VXM,	"veqv",	0,	vr3},
+	{4,	1732,	VXM,	"vsrd",	0,	vr3},
+	{4,	1796,	VXM,	"vsrv",	0,	vr3},
+	{4,	1860,	VXM,	"vslv",	0,	vr3},
+	{4,	1924,	VXM,	"vclzdm",	0,	vr3},
+	{4,	1988,	VXM,	"vctzdm",	0,	vr3},
+	{4,	5,	VXM,	"vrlq",	0,	vr3},
+	{4,	69,	VXM,	"vrlqmi",	0,	vr3},
+	{4,	133,	VXM,	"vrlwmi",	0,	vr3},
+	{4,	197,	VXM,	"vrldmi",	0,	vr3},
+	{4,	261,	VXM,	"vslq",	0,	vr3},
+	{4,	325,	VXM,	"vrlqnm",	0,	vr3},
+	{4,	389,	VXM,	"vrlwnm",	0,	vr3},
+	{4,	453,	VXM,	"vrldnm",	0,	vr3},
+	{4,	517,	VXM,	"vsrq",	0,	vr3},
+	{4,	773,	VXM,	"vsraq",	0,	vr3},
+	{4,	6,	VCM,	"vcmpequb[.]",	0,	vr3},
+	{4,	70,	VCM,	"vcmpequh[.]",	0,	vr3},
+	{4,	134,	VCM,	"vcmpequw[.]",	0,	vr3},
+	{4,	198,	VCM,	"vcmpeqfp[.]",	0,	vr3},
+	{4,	454,	VCM,	"vcmpgefp[.]",	0,	vr3},
+	{4,	518,	VCM,	"vcmpgtub[.]",	0,	vr3},
+	{4,	582,	VCM,	"vcmpgtuh[.]",	0,	vr3},
+	{4,	646,	VCM,	"vcmpgtuw[.]",	0,	vr3},
+	{4,	710,	VCM,	"vcmpgtfp[.]",	0,	vr3},
+	{4,	774,	VCM,	"vcmpgtsb[.]",	0,	vr3},
+	{4,	838,	VCM,	"vcmpgtsh[.]",	0,	vr3},
+	{4,	902,	VCM,	"vcmpgtsw[.]",	0,	vr3},
+	{4,	966,	VCM,	"vcmpbfp[.]",	0,	vr3},
+	{4,	7,	VCM,	"vcmpneb[.]",	0,	vr3},
+	{4,	71,	VCM,	"vcmpneh[.]",	0,	vr3},
+	{4,	135,	VCM,	"vcmpnew[.]",	0,	vr3},
+	{4,	199,	VCM,	"vcmpequd[.]",	0,	vr3},
+	{4,	263,	VCM,	"vcmpnezb[.]",	0,	vr3},
+	{4,	327,	VCM,	"vcmpnezh[.]",	0,	vr3},
+	{4,	391,	VCM,	"vcmpnezw[.]",	0,	vr3},
+	{4,	455,	VCM,	"vcmpequq[.]",	0,	vr3},
+	{4,	647,	VCM,	"vcmpgtuq[.]",	0,	vr3},
+	{4,	711,	VCM,	"vcmpgtud[.]",	0,	vr3},
+	{4,	903,	VCM,	"vcmpgtsq[.]",	0,	vr3},
+	{4,	967,	VCM,	"vcmpgtsd[.]",	0,	vr3},
+	{4,	8,	VXM,	"vmuloub",	0,	vr3},
+	{4,	72,	VXM,	"vmulouh",	0,	vr3},
+	{4,	136,	VXM,	"vmulouw",	0,	vr3},
+	{4,	200,	VXM,	"vmuloud",	0,	vr3},
+	{4,	264,	VXM,	"vmulosb",	0,	vr3},
+	{4,	328,	VXM,	"vmulosh",	0,	vr3},
+	{4,	392,	VXM,	"vmulosw",	0,	vr3},
+	{4,	456,	VXM,	"vmulosd",	0,	vr3},
+	{4,	520,	VXM,	"vmuleub",	0,	vr3},
+	{4,	584,	VXM,	"vmuleuh",	0,	vr3},
+	{4,	648,	VXM,	"vmuleuw",	0,	vr3},
+	{4,	712,	VXM,	"vmuleud",	0,	vr3},
+	{4,	776,	VXM,	"vmulesb",	0,	vr3},
+	{4,	840,	VXM,	"vmulesh",	0,	vr3},
+	{4,	904,	VXM,	"vmulesw",	0,	vr3},
+	{4,	968,	VXM,	"vmulesd",	0,	vr3},
+	{4,	1032,	VXM,	"vpmsumb",	0,	vr3},
+	{4,	1096,	VXM,	"vpmsumh",	0,	vr3},
+	{4,	1160,	VXM,	"vpmsumw",	0,	vr3},
+	{4,	1224,	VXM,	"vpmsumd",	0,	vr3},
+	{4,	1288,	VXM,	"vcipher",	0,	vr3},
+	{4,	1352,	VXM,	"vncipher",	0,	vr3},
+	{4,	1480,	VXM,	"vsbox",	0,	vr3},
+	{4,	1544,	VXM,	"vsum4ubs",	0,	vr3},
+	{4,	1608,	VXM,	"vsum4shs",	0,	vr3},
+	{4,	1672,	VXM,	"vsum2sws",	0,	vr3},
+	{4,	1800,	VXM,	"vsum4sbs",	0,	vr3},
+	{4,	1928,	VXM,	"vsumsws",	0,	vr3},
+	{4,	137,	VXM,	"vmuluwm",	0,	vr3},
+	{4,	457,	VXM,	"vmulld",	0,	vr3},
+	{4,	649,	VXM,	"vmulhuw",	0,	vr3},
+	{4,	713,	VXM,	"vmulhud",	0,	vr3},
+	{4,	905,	VXM,	"vmulhsw",	0,	vr3},
+	{4,	969,	VXM,	"vmulhsd",	0,	vr3},
+	{4,	1289,	VXM,	"vcipherlast",	0,	vr3},
+	{4,	1353,	VXM,	"vncipherlast",	0,	vr3},
+	{4,	10,	VXM,	"vaddfp",	0,	vr3},
+	{4,	74,	VXM,	"vsubfp",	0,	vr3},
+	{4,	266,	VXM,	"vrefp",	0,	vr3},
+	{4,	330,	VXM,	"vrsqrtefp",	0,	vr3},
+	{4,	394,	VXM,	"vexptefp",	0,	vr3},
+	{4,	458,	VXM,	"vlogefp",	0,	vr3},
+	{4,	522,	VXM,	"vrfin",	0,	vr3},
+	{4,	586,	VXM,	"vrfiz",	0,	vr3},
+	{4,	650,	VXM,	"vrfip",	0,	vr3},
+	{4,	714,	VXM,	"vrfim",	0,	vr3},
+	{4,	778,	VXM,	"vcfux",	0,	vr3},
+	{4,	842,	VXM,	"vcfsx",	0,	vr3},
+	{4,	906,	VXM,	"vctuxs",	0,	vr3},
+	{4,	970,	VXM,	"vctsxs",	0,	vr3},
+	{4,	1034,	VXM,	"vmaxfp",	0,	vr3},
+	{4,	1098,	VXM,	"vminfp",	0,	vr3},
+	{4,	11,	VXM,	"vdivuq",	0,	vr3},
+	{4,	139,	VXM,	"vdivuw",	0,	vr3},
+	{4,	203,	VXM,	"vdivud",	0,	vr3},
+	{4,	267,	VXM,	"vdivsq",	0,	vr3},
+	{4,	395,	VXM,	"vdivsw",	0,	vr3},
+	{4,	459,	VXM,	"vdivsd",	0,	vr3},
+	{4,	523,	VXM,	"vdiveuq",	0,	vr3},
+	{4,	651,	VXM,	"vdiveuw",	0,	vr3},
+	{4,	715,	VXM,	"vdiveud",	0,	vr3},
+	{4,	779,	VXM,	"vdivesq",	0,	vr3},
+	{4,	907,	VXM,	"vdivesw",	0,	vr3},
+	{4,	971,	VXM,	"vdivesd",	0,	vr3},
+	{4,	1547,	VXM,	"vmoduq",	0,	vr3},
+	{4,	1675,	VXM,	"vmoduw",	0,	vr3},
+	{4,	1739,	VXM,	"vmodud",	0,	vr3},
+	{4,	1803,	VXM,	"vmodsq",	0,	vr3},
+	{4,	1931,	VXM,	"vmodsw",	0,	vr3},
+	{4,	1995,	VXM,	"vmodsd",	0,	vr3},
+	{4,	12,	VXM,	"vmrghb",	0,	vr3},
+	{4,	76,	VXM,	"vmrghh",	0,	vr3},
+	{4,	140,	VXM,	"vmrghw",	0,	vr3},
+	{4,	268,	VXM,	"vmrglb",	0,	vr3},
+	{4,	332,	VXM,	"vmrglh",	0,	vr3},
+	{4,	396,	VXM,	"vmrglw",	0,	vr3},
+	{4,	524,	VXM,	"vspltb",	0,	vr3},
+	{4,	588,	VXM,	"vsplth",	0,	vr3},
+	{4,	652,	VXM,	"vspltw",	0,	vr3},
+	{4,	780,	VXM,	"vspltisb",	0,	vr3},
+	{4,	844,	VXM,	"vspltish",	0,	vr3},
+	{4,	908,	VXM,	"vspltisw",	0,	vr3},
+	{4,	1036,	VXM,	"vslo",	0,	vr3},
+	{4,	1100,	VXM,	"vsro",	0,	vr3},
+	{4,	1228,	VXM,	"vgnb",	0,	vr3},
+	{4,	1292,	VXM,	"vgbbd",	0,	vr3},
+	{4,	1356,	VXM,	"vbpermq",	0,	vr3},
+	{4,	1484,	VXM,	"vbpermd",	0,	vr3},
+	{4,	1676,	VXM,	"vmrgow",	0,	vr3},
+	{4,	1932,	VXM,	"vmrgew",	0,	vr3},
+	{4,	13,	VCM,	"vstribl[.]",	vra2s,	vr2},
+	{4,	13,	VCM,	"vstribr[.]",	vra2s,	vr2},
+	{4,	13,	VCM,	"vstrihl[.]",	vra2s,	vr2},
+	{4,	13,	VCM,	"vstrihr[.]",	vra2s,	vr2},
+	{4,	397,	VXM,	"vclrlb",	0,	vr3},
+	{4,	461,	VXM,	"vclrrb",	0,	vr3},
+	{4,	525,	VXM,	"vextractub",	0,	vr3},
+	{4,	589,	VXM,	"vextractuh",	0,	vr3},
+	{4,	653,	VXM,	"vextractuw",	0,	vr3},
+	{4,	717,	VXM,	"vextractd",	0,	vr3},
+	{4,	781,	VXM,	"vinsertb",	0,	vr3},
+	{4,	845,	VXM,	"vinserth",	0,	vr3},
+	{4,	909,	VXM,	"vinsertw",	0,	vr3},
+	{4,	973,	VXM,	"vinsertd",	0,	vr3},
+	{4,	1357,	VXM,	"vcfuged",	0,	vr3},
+	{4,	1421,	VXM,	"vpextd",	0,	vr3},
+	{4,	1485,	VXM,	"vpdepd",	0,	vr3},
+	{4,	1549,	VXM,	"vextublx",	0,	vr3},
+	{4,	1613,	VXM,	"vextuhlx",	0,	vr3},
+	{4,	1677,	VXM,	"vextuwlx",	0,	vr3},
+	{4,	1805,	VXM,	"vextubrx",	0,	vr3},
+	{4,	1869,	VXM,	"vextuhrx",	0,	vr3},
+	{4,	1933,	VXM,	"vextuwrx",	0,	vr3},
+	{4,	14,	VXM,	"vpkuhum",	0,	vr3},
+	{4,	78,	VXM,	"vpkuwum",	0,	vr3},
+	{4,	142,	VXM,	"vpkuhus",	0,	vr3},
+	{4,	206,	VXM,	"vpkuwus",	0,	vr3},
+	{4,	270,	VXM,	"vpkshus",	0,	vr3},
+	{4,	334,	VXM,	"vpkswus",	0,	vr3},
+	{4,	398,	VXM,	"vpkshss",	0,	vr3},
+	{4,	462,	VXM,	"vpkswss",	0,	vr3},
+	{4,	526,	VXM,	"vupkhsb",	0,	vr3},
+	{4,	590,	VXM,	"vupkhsh",	0,	vr3},
+	{4,	654,	VXM,	"vupklsb",	0,	vr3},
+	{4,	718,	VXM,	"vupklsh",	0,	vr3},
+	{4,	782,	VXM,	"vpkpx",	0,	vr3},
+	{4,	846,	VXM,	"vupkhpx",	0,	vr3},
+	{4,	974,	VXM,	"vupklpx",	0,	vr3},
+	{4,	1102,	VXM,	"vpkudum",	0,	vr3},
+	{4,	1230,	VXM,	"vpkudus",	0,	vr3},
+	{4,	1358,	VXM,	"vpksdus",	0,	vr3},
+	{4,	1486,	VXM,	"vpksdss",	0,	vr3},
+	{4,	1614,	VXM,	"vupkhsw",	0,	vr3},
+	{4,	1742,	VXM,	"vupklsw",	0,	vr3},
+	{4,	15,	VXM,	"vinsbvlx",	0,	vr3},
+	{4,	79,	VXM,	"vinshvlx",	0,	vr3},
+	{4,	143,	VXM,	"vinswvlx",	0,	vr3},
+	{4,	207,	VXM,	"vinsw",	0,	vr3},
+	{4,	271,	VXM,	"vinsbvrx",	0,	vr3},
+	{4,	335,	VXM,	"vinshvrx",	0,	vr3},
+	{4,	399,	VXM,	"vinswvrx",	0,	vr3},
+	{4,	463,	VXM,	"vinsd",	0,	vr3},
+	{4,	527,	VXM,	"vinsblx",	0,	vr3},
+	{4,	591,	VXM,	"vinshlx",	0,	vr3},
+	{4,	655,	VXM,	"vinswlx",	0,	vr3},
+	{4,	719,	VXM,	"vinsdlx",	0,	vr3},
+	{4,	783,	VXM,	"vinsbrx",	0,	vr3},
+	{4,	847,	VXM,	"vinshrx",	0,	vr3},
+	{4,	911,	VXM,	"vinswrx",	0,	vr3},
+	{4,	975,	VXM,	"vinsdrx",	0,	vr3},
+	{4,	20,	0b111110,	"mtvsrbmi",	0,	vr3},
+	{4,	22,	VAM,	"vsldbi",	vsldbi,	vr3},
+	{4,	22,	VAM,	"vsrdbi",	vsldbi,	vr3},
+	{4,	23,	VAM,	"vmsumcud",	0,	vr3},
+	{4,	24,	VAM,	"vextdubvlx",	0,	vr3},
+	{4,	25,	VAM,	"vextdubvrx",	0,	vr3},
+	{4,	26,	VAM,	"vextduhvlx",	0,	vr3},
+	{4,	27,	VAM,	"vextduhvrx",	0,	vr3},
+	{4,	28,	VAM,	"vextduwvlx",	0,	vr3},
+	{4,	29,	VAM,	"vextduwvrx",	0,	vr3},
+	{4,	30,	VAM,	"vextddvlx",	0,	vr3},
+	{4,	31,	VAM,	"vextddvrx",	0,	vr3},
+	{4,	32,	VAM,	"vmhaddshs",	0,	vr3},
+	{4,	33,	VAM,	"vmhraddshs",	0,	vr3},
+	{4,	34,	VAM,	"vmladduhm",	0,	vr3},
+	{4,	35,	VAM,	"vmsumudm",	0,	vr3},
+	{4,	36,	VAM,	"vmsumubm",	0,	vr3},
+	{4,	37,	VAM,	"vmsummbm",	0,	vr3},
+	{4,	38,	VAM,	"vmsumuhm",	0,	vr3},
+	{4,	39,	VAM,	"vmsumuhs",	0,	vr3},
+	{4,	40,	VAM,	"vmsumshm",	0,	vr3},
+	{4,	41,	VAM,	"vmsumshs",	0,	vr3},
+	{4,	42,	VAM,	"vsel",	0,	vr3},
+	{4,	43,	VAM,	"vperm",	0,	vr3},
+	{4,	44,	VAM,	"vsldoi",	0,	vr3},
+	{4,	45,	VAM,	"vpermxor",	0,	vr3},
+	{4,	46,	VAM,	"vmaddfp",	0,	vr3},
+	{4,	47,	VAM,	"vnmsubfp",	0,	vr3},
+	{4,	48,	VAM,	"maddhd",	0,	vr3},
+	{4,	49,	VAM,	"maddhdu",	0,	vr3},
+	{4,	51,	VAM,	"maddld",	0,	vr3},
+	{4,	59,	VAM,	"vpermr",	0,	vr3},
+	{4,	60,	VAM,	"vaddeuqm",	0,	vr3},
+	{4,	61,	VAM,	"vaddecuq",	0,	vr3},
+	{4,	62,	VAM,	"vsubeuqm",	0,	vr3},
+	{4,	63,	VAM,	"vsubecuq",	0,	vr3},
+	{6,	0,	ALL,	"lxvp",	0,	0},
+	{6,	1,	ALL,	"stxvp",	0,	0},
+	{31,	128,	ALL,	"setb",	0,	0},
+	{31,	192,	ALL,	"cmprb",	0,	0},
+	{31,	224,	ALL,	"cmpeqb",	0,	0},
+	{31,	384,	ALL,	"setbc",	0,	0},
+	{31,	416,	ALL,	"setbcr",	0,	0},
+	{31,	448,	ALL,	"setnbc",	0,	0},
+	{31,	480,	ALL,	"setnbcr",	0,	0},
+	{31,	576,	ALL,	"mcrxrx",	0,	0},
+	{31,	6,	ALL,	"lvsl",	0,	0},
+	{31,	38,	ALL,	"lvsr",	0,	0},
+	{31,	582,	ALL,	"lwat",	0,	0},
+	{31,	614,	ALL,	"ldat",	0,	0},
+	{31,	710,	ALL,	"stwat",	0,	0},
+	{31,	742,	ALL,	"stdat",	0,	0},
+	{31,	774,	ALL,	"copy",	0,	0},
+	{31,	838,	ALL,	"cpabort",	0,	0},
+	{31,	902,	ALL,	"paste[.]",	0,	0},
+	{31,	7,	ALL,	"lvebx",	0,	0},
+	{31,	39,	ALL,	"lvehx",	0,	0},
+	{31,	71,	ALL,	"lvewx",	0,	0},
+	{31,	103,	ALL,	"lvx",	0,	0},
+	{31,	135,	ALL,	"stvebx",	0,	0},
+	{31,	167,	ALL,	"stvehx",	0,	0},
+	{31,	199,	ALL,	"stvewx",	0,	0},
+	{31,	231,	ALL,	"stvx",	0,	0},
+	{31,	359,	ALL,	"lvxl",	0,	0},
+	{31,	487,	ALL,	"stvxl",	0,	0},
+	{31,	265,	ALL,	"modud",	0,	0},
+	{31,	393,	ALL,	"divdeu[.]",	0,	0},
+	{31,	425,	ALL,	"divde[.]",	0,	0},
+	{31,	777,	ALL,	"modsd",	0,	0},
+	{31,	905,	ALL,	"divdeuo[.]",	0,	0},
+	{31,	937,	ALL,	"divdeo[.]",	0,	0},
+	{31,	170,	0b11111111,	"addex",	0,	0},
+	{31,	74,	ALL,	"addg",	0,	0},
+	{31,	267,	ALL,	"moduw",	0,	0},
+	{31,	395,	ALL,	"divweu[.]",	0,	0},
+	{31,	427,	ALL,	"divwe[.]",	0,	0},
+	{31,	779,	ALL,	"modsw",	0,	0},
+	{31,	907,	ALL,	"divweuo[.]",	0,	0},
+	{31,	939,	ALL,	"divweo[.]",	0,	0},
+	{31,	12,	ALL,	"lxsiwzx",	0,	0},
+	{31,	76,	ALL,	"lxsiwax",	0,	0},
+	{31,	140,	ALL,	"stxsiwx",	0,	0},
+	{31,	268,	ALL,	"lxvx",	0,	0},
+	{31,	332,	ALL,	"lxvdsx",	0,	0},
+	{31,	364,	ALL,	"lxvwsx",	0,	0},
+	{31,	396,	ALL,	"stxvx",	0,	0},
+	{31,	524,	ALL,	"lxsspx",	0,	0},
+	{31,	588,	ALL,	"lxsdx",	0,	0},
+	{31,	652,	ALL,	"stxsspx",	0,	0},
+	{31,	716,	ALL,	"stxsdx",	0,	0},
+	{31,	780,	ALL,	"lxvw4x",	0,	0},
+	{31,	812,	ALL,	"lxvh8x",	0,	0},
+	{31,	844,	ALL,	"lxvd2x",	0,	0},
+	{31,	876,	ALL,	"lxvb16x",	0,	0},
+	{31,	908,	ALL,	"stxvw4x",	0,	0},
+	{31,	940,	ALL,	"stxvh8x",	0,	0},
+	{31,	972,	ALL,	"stxvd2x",	0,	0},
+	{31,	1004,	ALL,	"stxvb16x",	0,	0},
+	{31,	13,	ALL,	"lxvrbx",	0,	0},
+	{31,	45,	ALL,	"lxvrhx",	0,	0},
+	{31,	77,	ALL,	"lxvrwx",	0,	0},
+	{31,	109,	ALL,	"lxvrdx",	0,	0},
+	{31,	141,	ALL,	"stxvrbx",	0,	0},
+	{31,	173,	ALL,	"stxvrhx",	0,	0},
+	{31,	205,	ALL,	"stxvrwx",	0,	0},
+	{31,	237,	ALL,	"stxvrdx",	0,	0},
+	{31,	269,	ALL,	"lxvl",	0,	0},
+	{31,	301,	ALL,	"lxvll",	0,	0},
+	{31,	333,	ALL,	"lxvpx",	0,	0},
+	{31,	397,	ALL,	"stxvl",	0,	0},
+	{31,	429,	ALL,	"stxvll",	0,	0},
+	{31,	461,	ALL,	"stxvpx",	0,	0},
+	{31,	781,	ALL,	"lxsibzx",	0,	0},
+	{31,	813,	ALL,	"lxsihzx",	0,	0},
+	{31,	909,	ALL,	"stxsibx",	0,	0},
+	{31,	941,	ALL,	"stxsihx",	0,	0},
+	{31,	78,	ALL,	"msgsndu",	0,	0},
+	{31,	110,	ALL,	"msgclru",	0,	0},
+	{31,	142,	ALL,	"msgsndp",	0,	0},
+	{31,	174,	ALL,	"msgclrp",	0,	0},
+	{31,	206,	ALL,	"msgsnd",	0,	0},
+	{31,	238,	ALL,	"msgclr",	0,	0},
+	{31,	302,	ALL,	"mfbhrbe",	0,	0},
+	{31,	430,	ALL,	"clrbhrb",	0,	0},
+	{31,	15,	0b11111,	"isel",	0,	0},
+	{31,	177,	ALL,	"xxmfacc",	vra2s,	vr2},
+	{31,	177,	ALL,	"xxmtacc",	vra2s,	vr2},
+	{31,	177,	ALL,	"xxsetaccz",	vra2s,	vr2},
+	{31,	338,	ALL,	"slbsync",	0,	0},
+	{31,	850,	ALL,	"slbiag",	0,	0},
+	{31,	51,	ALL,	"mfvsrd",	0,	0},
+	{31,	115,	ALL,	"mfvsrwz",	0,	0},
+	{31,	179,	ALL,	"mtvsrd",	0,	0},
+	{31,	211,	ALL,	"mtvsrwa",	0,	0},
+	{31,	243,	ALL,	"mtvsrwz",	0,	0},
+	{31,	307,	ALL,	"mfvsrld",	0,	0},
+	{31,	371,	ALL,	"mftb",	0,	0},
+	{31,	403,	ALL,	"mtvsrws",	0,	0},
+	{31,	435,	ALL,	"mtvsrdd",	0,	0},
+	{31,	755,	ALL,	"darn",	0,	0},
+	{31,	979,	ALL,	"slbfee.",	0,	0},
+	{31,	52,	ALL,	"lbarx",	0,	0},
+	{31,	116,	ALL,	"lharx",	0,	0},
+	{31,	276,	ALL,	"lqarx",	0,	0},
+	{31,	532,	ALL,	"ldbrx",	0,	0},
+	{31,	660,	ALL,	"stdbrx",	0,	0},
+	{31,	789,	ALL,	"lwzcix",	0,	0},
+	{31,	821,	ALL,	"lhzcix",	0,	0},
+	{31,	853,	ALL,	"lbzcix",	0,	0},
+	{31,	885,	ALL,	"ldcix",	0,	0},
+	{31,	917,	ALL,	"stwcix",	0,	0},
+	{31,	949,	ALL,	"sthcix",	0,	0},
+	{31,	981,	ALL,	"stbcix",	0,	0},
+	{31,	1013,	ALL,	"stdcix",	0,	0},
+	{31,	22,	ALL,	"icbt",	0,	0},
+	{31,	886,	ALL,	"msgsync",	0,	0},
+	{31,	182,	ALL,	"stqcx.",	0,	0},
+	{31,	694,	ALL,	"stbcx.",	0,	0},
+	{31,	726,	ALL,	"sthcx.",	0,	0},
+	{31,	503,	ALL,	"spom",	0,	0},
+	{31,	791,	ALL,	"lfdpx",	0,	0},
+	{31,	855,	ALL,	"lfiwax",	0,	0},
+	{31,	887,	ALL,	"lfiwzx",	0,	0},
+	{31,	919,	ALL,	"stfdpx",	0,	0},
+	{31,	983,	ALL,	"stfiwx",	0,	0},
+	{31,	1015,	ALL,	"lqm",	0,	0},
+	{31,	445<<1,	0b1111111110,	"extswsli[.]",	0,	0},
+	{31,	122,	ALL,	"popcntb",	0,	0},
+	{31,	154,	ALL,	"prtyw",	0,	0},
+	{31,	186,	ALL,	"prtyd",	0,	0},
+	{31,	282,	ALL,	"cdtbcd",	0,	0},
+	{31,	314,	ALL,	"cbcdtd",	0,	0},
+	{31,	378,	ALL,	"popcntw",	0,	0},
+	{31,	506,	ALL,	"popcntd",	0,	0},
+	{31,	538,	ALL,	"cnttzw[.]",	0,	0},
+	{31,	570,	ALL,	"cnttzd[.]",	0,	0},
+	{31,	59,	ALL,	"cntlzdm",	0,	0},
+	{31,	155,	ALL,	"brw",	0,	0},
+	{31,	187,	ALL,	"brd",	0,	0},
+	{31,	219,	ALL,	"brh",	0,	0},
+	{31,	571,	ALL,	"cnttzdm",	0,	0},
+	{31,	156,	ALL,	"pdepd",	0,	0},
+	{31,	188,	ALL,	"pextd",	0,	0},
+	{31,	220,	ALL,	"cfuged",	0,	0},
+	{31,	252,	ALL,	"bpermd",	0,	0},
+	{31,	508,	ALL,	"cmpb",	0,	0},
+	{31,	30,	ALL,	"wait",	0,	0},
+	{56,	0,	0b111,	"lq",	0,	0},
+	{57,	0,	ALL,	"lfdp",	0,	0},
+	{57,	2,	ALL,	"lxsd",	0,	0},
+	{57,	3,	ALL,	"lxssp",	0,	0},
+	{59,	66,	0b1111111111,	"dscli[.]",	0,	0},
+	{59,	98,	ALL,	"dscri[.]",	0,	0},
+	{59,	194,	ALL,	"dtstdc",	0,	0},
+	{59,	226,	ALL,	"dtstdg",	0,	0},
+	{59,	2,	ALL,	"dadd[.]",	0,	0},
+	{59,	34,	ALL,	"dmul[.]",	0,	0},
+	{59,	130,	ALL,	"dcmpo",	0,	0},
+	{59,	162,	ALL,	"dtstex",	0,	0},
+	{59,	258,	ALL,	"dctdp[.]",	0,	0},
+	{59,	290,	ALL,	"dctfix[.]",	0,	0},
+	{59,	322,	ALL,	"ddedpd[.]",	0,	0},
+	{59,	354,	ALL,	"dxex[.]",	0,	0},
+	{59,	514,	ALL,	"dsub[.]",	0,	0},
+	{59,	546,	ALL,	"ddiv[.]",	0,	0},
+	{59,	642,	ALL,	"dcmpu",	0,	0},
+	{59,	674,	ALL,	"dtstsf",	0,	0},
+	{59,	770,	ALL,	"drsp[.]",	0,	0},
+	{59,	802,	ALL,	"dcffix[.]",	0,	0},
+	{59,	834,	ALL,	"denbcd[.]",	0,	0},
+	{59,	866,	ALL,	"diex[.]",	0,	0},
+	{59,	3,	0b11111111,	"dqua[.]",	0,	0},
+	{59,	35,	0b11111111,	"drrnd[.]",	0,	0},
+	{59,	67,	0b11111111,	"dquai[.]",	0,	0},
+	{59,	99,	0b11111111,	"drintx[.]",	0,	0},
+	{59,	227,	0b11111111,	"drintn[.]",	0,	0},
+	{59,	675,	ALL,	"dtstsfi",	0,	0},
+	{59,	2<<2,	0b1111111100,	"xvi8ger4pp",	0,	0},
+	{59,	18<<2,	0b1111111100,	"xvf16ger2pp",	0,	0},
+	{59,	26<<2,	0b1111111100,	"xvf32gerpp",	0,	0},
+	{59,	34<<2,	0b1111111100,	"xvi4ger8pp",	0,	0},
+	{59,	210<<2,	0b1111111100,	"xvf16ger2nn",	0,	0},
+	{59,	218<<2,	0b1111111100,	"xvf32gernn",	0,	0},
+	{59,	242<<2,	0b1111111100,	"xvbf16ger2nn",	0,	0},
+	{59,	250<<2,	0b1111111100,	"xvf64gernn",	0,	0},
+	{59,	3<<2,	0b1111111100,	"xvi8ger4",	0,	0},
+	{59,	19<<2,	0b1111111100,	"xvf16ger2",	0,	0},
+	{59,	27<<2,	0b1111111100,	"xvf32ger",	0,	0},
+	{59,	35<<2,	0b1111111100,	"xvi4ger8",	0,	0},
+	{59,	43<<2,	0b1111111100,	"xvi16ger2s",	0,	0},
+	{59,	59<<2,	0b1111111100,	"xvf64ger",	0,	0},
+	{59,	75<<2,	0b1111111100,	"xvi16ger2",	0,	0},
+	{59,	99<<2,	0b1111111100,	"xvi8ger4spp",	0,	0},
+	{59,	107<<2,	0b1111111100,	"xvi16ger2pp",	0,	0},
+	{59,	51<<2,	0b1111111100,	"xvbf16ger2",	0,	0},
+	{59,	99<<2,	0b1111111100,	"xvi8ger4spp",	0,	0},
+	{59,	846,	ALL,	"fcfids[.]",	0,	0},
+	{59,	974,	ALL,	"fcfidus[.]",	0,	0},
+	{59,	26,	ALL,	"frsqrtes[.]",	0,	0},
+	{60,	0,	~3,	"xsaddsp",	0,	0},
+	{60,	32,	~3,	"xssubsp",	0,	0},
+	{60,	64,	~3,	"xsmulsp",	0,	0},
+	{60,	96,	~3,	"xsdivsp",	0,	0},
+	{60,	128,	~3,	"xsadddp",	0,	0},
+	{60,	160,	~3,	"xssubdp",	0,	0},
+	{60,	192,	~3,	"xsmuldp",	0,	0},
+	{60,	224,	~3,	"xsdivdp",	0,	0},
+	{60,	256,	~3,	"xvaddsp",	0,	0},
+	{60,	288,	~3,	"xvsubsp",	0,	0},
+	{60,	320,	~3,	"xvmulsp",	0,	0},
+	{60,	352,	~3,	"xvdivsp",	0,	0},
+	{60,	384,	~3,	"xvadddp",	0,	0},
+	{60,	416,	~3,	"xvsubdp",	0,	0},
+	{60,	448,	~3,	"xvmuldp",	0,	0},
+	{60,	480,	~3,	"xvdivdp",	0,	0},
+	{60,	512,	~3,	"xsmaxcdp",	0,	0},
+	{60,	544,	~3,	"xsmincdp",	0,	0},
+	{60,	576,	~3,	"xsmaxjdp",	0,	0},
+	{60,	608,	~3,	"xsminjdp",	0,	0},
+	{60,	640,	~3,	"xsmaxdp",	0,	0},
+	{60,	672,	~3,	"xsmindp",	0,	0},
+	{60,	704,	~3,	"xscpsgndp",	0,	0},
+	{60,	768,	~3,	"xvmaxsp",	0,	0},
+	{60,	800,	~3,	"xvminsp",	0,	0},
+	{60,	832,	~3,	"xvcpsgnsp",	0,	0},
+	{60,	864,	~3,	"xviexpsp",	0,	0},
+	{60,	896,	~3,	"xvmaxdp",	0,	0},
+	{60,	928,	~3,	"xvmindp",	0,	0},
+	{60,	960,	~3,	"xvcpsgndp",	0,	0},
+	{60,	992,	~3,	"xviexpdp",	0,	0},
+	{60,	4,	~3,	"xsmaddasp",	0,	0},
+	{60,	36,	~3,	"xsmaddmsp",	0,	0},
+	{60,	68,	~3,	"xsmsubasp",	0,	0},
+	{60,	100,	~3,	"xsmsubmsp",	0,	0},
+	{60,	132,	~3,	"xsmaddadp",	0,	0},
+	{60,	164,	~3,	"xsmaddmdp",	0,	0},
+	{60,	196,	~3,	"xsmsubadp",	0,	0},
+	{60,	228,	~3,	"xsmsubmdp",	0,	0},
+	{60,	260,	~3,	"xvmaddasp",	0,	0},
+	{60,	292,	~3,	"xvmaddmsp",	0,	0},
+	{60,	324,	~3,	"xvmsubasp",	0,	0},
+	{60,	356,	~3,	"xvmsubmsp",	0,	0},
+	{60,	388,	~3,	"xvmaddadp",	0,	0},
+	{60,	420,	~3,	"xvmaddmdp",	0,	0},
+	{60,	452,	~3,	"xvmsubadp",	0,	0},
+	{60,	484,	~3,	"xvmsubmdp",	0,	0},
+	{60,	516,	~3,	"xsnmaddasp",	0,	0},
+	{60,	548,	~3,	"xsnmaddmsp",	0,	0},
+	{60,	580,	~3,	"xsnmsubasp",	0,	0},
+	{60,	612,	~3,	"xsnmsubmsp",	0,	0},
+	{60,	644,	~3,	"xsnmaddadp",	0,	0},
+	{60,	676,	~3,	"xsnmaddmdp",	0,	0},
+	{60,	708,	~3,	"xsnmsubadp",	0,	0},
+	{60,	740,	~3,	"xsnmsubmdp",	0,	0},
+	{60,	772,	~3,	"xvnmaddasp",	0,	0},
+	{60,	804,	~3,	"xvnmaddmsp",	0,	0},
+	{60,	836,	~3,	"xvnmsubasp",	0,	0},
+	{60,	868,	~3,	"xvnmsubmsp",	0,	0},
+	{60,	900,	~3,	"xvnmaddadp",	0,	0},
+	{60,	932,	~3,	"xvnmaddmdp",	0,	0},
+	{60,	964,	~3,	"xvnmsubadp",	0,	0},
+	{60,	996,	~3,	"xvnmsubmdp",	0,	0},
+	{60,	2<<2,	0b1001111100,	"xxsldwi",	0,	0},
+	{60,	10<<2,	0b1001111100,	"xxpermdi",	0,	0},
+	{60,	72,	~3,	"xxmrghw",	0,	0},
+	{60,	104,	~3,	"xxperm",	0,	0},
+	{60,	200,	~3,	"xxmrglw",	0,	0},
+	{60,	232,	~3,	"xxpermr",	0,	0},
+	{60,	130<<2,	~3,	"xxland",	0,	0},
+	{60,	552,	~3,	"xxlandc",	0,	0},
+	{60,	584,	~3,	"xxlor",	0,	0},
+	{60,	616,	~3,	"xxlxor",	0,	0},
+	{60,	648,	~3,	"xxlnor",	0,	0},
+	{60,	680,	~3,	"xxlorc",	0,	0},
+	{60,	712,	~3,	"xxlnand",	0,	0},
+	{60,	744,	~3,	"xxleqv",	0,	0},
+	{60,	164<<1,	~1,	"xxspltw",	0,	0},
+	{60,	360,	ALL,	"xxspltib",	vra2s,	vr2},
+	{60,	360,	ALL,	"lxvkq",	vra2s,	vr2},
+	{60,	165<<1,	~1,	"xxextractuw",	0,	0},
+	{60,	181<<1,	~1,	"xxinsertw",	0,	0},
+	{60,	268,	0b111111100,	"xvcmpeqsp[.]",	0,	0},
+	{60,	300,	0b111111100,	"xvcmpgtsp[.]",	0,	0},
+	{60,	332,	0b111111100,	"xvcmpgesp[.]",	0,	0},
+	{60,	396,	0b111111100,	"xvcmpeqdp[.]",	0,	0},
+	{60,	428,	0b111111100,	"xvcmpgtdp[.]",	0,	0},
+	{60,	460,	0b111111100,	"xvcmpgedp[.]",	0,	0},
+	{60,	12,	~3,	"xscmpeqdp",	0,	0},
+	{60,	44,	~3,	"xscmpgtdp",	0,	0},
+	{60,	76,	~3,	"xscmpgedp",	0,	0},
+	{60,	140,	~3,	"xscmpudp",	0,	0},
+	{60,	172,	~3,	"xscmpodp",	0,	0},
+	{60,	236,	~3,	"xscmpexpdp",	0,	0},
+	{60,	72<<1,	~1,	"xscvdpuxws",	0,	0},
+	{60,	88<<1,	~1,	"xscvdpsxws",	0,	0},
+	{60,	136<<1,	~1,	"xvcvspuxws",	0,	0},
+	{60,	304,	~1,	"xvcvspsxws",	0,	0},
+	{60,	336,	~1,	"xvcvuxwsp",	0,	0},
+	{60,	368,	~1,	"xvcvsxwsp",	0,	0},
+	{60,	400,	~1,	"xvcvdpuxws",	0,	0},
+	{60,	432,	~1,	"xvcvdpsxws",	0,	0},
+	{60,	464,	~1,	"xvcvuxwdp",	0,	0},
+	{60,	496,	~1,	"xvcvsxwdp",	0,	0},
+	{60,	592,	~1,	"xscvuxdsp",	0,	0},
+	{60,	624,	~1,	"xscvsxdsp",	0,	0},
+	{60,	656,	~1,	"xscvdpuxds",	0,	0},
+	{60,	688,	~1,	"xscvdpsxds",	0,	0},
+	{60,	720,	~1,	"xscvuxddp",	0,	0},
+	{60,	752,	~1,	"xscvsxddp",	0,	0},
+	{60,	784,	~1,	"xvcvspuxds",	0,	0},
+	{60,	816,	~1,	"xvcvspsxds",	0,	0},
+	{60,	848,	~1,	"xvcvuxdsp",	0,	0},
+	{60,	880,	~1,	"xvcvsxdsp",	0,	0},
+	{60,	912,	~1,	"xvcvdpuxds",	0,	0},
+	{60,	944,	~1,	"xvcvdpsxds",	0,	0},
+	{60,	976,	~1,	"xvcvuxddp",	0,	0},
+	{60,	1008,	~1,	"xvcvsxddp",	0,	0},
+	{60,	73<<1,	~1,	"xsrdpi",	0,	0},
+	{60,	89<<1,	~1,	"xsrdpiz",	0,	0},
+	{60,	210,	~1,	"xsrdpip",	0,	0},
+	{60,	242,	~1,	"xsrdpim",	0,	0},
+	{60,	137<<1,	~1,	"xvrspi",	0,	0},
+	{60,	153<<1,	~1,	"xvrspiz",	0,	0},
+	{60,	169<<1,	~1,	"xvrspip",	0,	0},
+	{60,	185<<1,	~1,	"xvrspim",	0,	0},
+	{60,	201<<1,	~1,	"xvrdpi",	0,	0},
+	{60,	217<<1,	~1,	"xvrdpiz",	0,	0},
+	{60,	466,	~1,	"xvrdpip",	0,	0},
+	{60,	498,	~1,	"xvrdpim",	0,	0},
+	{60,	530,	~1,	"xscvdpsp",	0,	0},
+	{60,	562,	~1,	"xsrsp",	0,	0},
+	{60,	329<<1,	~1,	"xscvspdp",	0,	0},
+	{60,	690,	~1,	"xsabsdp",	0,	0},
+	{60,	722,	~1,	"xsnabsdp",	0,	0},
+	{60,	754,	~1,	"xsnegdp",	0,	0},
+	{60,	786,	~1,	"xvcvdpsp",	0,	0},
+	{60,	818,	~1,	"xvabssp",	0,	0},
+	{60,	850,	~1,	"xvnabssp",	0,	0},
+	{60,	882,	~1,	"xvnegsp",	0,	0},
+	{60,	457<<1,	~1,	"xvcvspdp",	0,	0},
+	{60,	473<<1,	~1,	"xvabsdp",	0,	0},
+	{60,	489<<1,	~1,	"xvnabsdp",	0,	0},
+	{60,	505<<1,	~1,	"xvnegdp",	0,	0},
+	{60,	61<<2,	~3,	"xstdivdp",	0,	0},
+	{60,	93<<2,	~3,	"xvtdivsp",	0,	0},
+	{60,	125<<2,	~3,	"xvtdivdp",	0,	0},
+	{60,	(13<<6)|(5<<2),	0b1111011100,	"xvtstdcsp",	0,	0},
+	{60,	(15<<6)|(5<<2),	0b1111011100,	"xvtstdcdp",	0,	0},
+	{60,	10<<1,	~1,	"xsrsqrtesp",	0,	0},
+	{60,	26<<1,	~1,	"xsresp",	0,	0},
+	{60,	74<<1,	~1,	"xsrsqrtedp",	0,	0},
+	{60,	90<<1,	~1,	"xsredp",	0,	0},
+	{60,	106<<1,	~1,	"xstsqrtdp",	0,	0},
+	{60,	138<<1,	~1,	"xvrsqrtesp",	0,	0},
+	{60,	154<<1,	~1,	"xvresp",	0,	0},
+	{60,	170<<1,	~1,	"xvtsqrtsp",	0,	0},
+	{60,	202<<1,	~1,	"xvrsqrtedp",	0,	0},
+	{60,	218<<1,	~1,	"xvredp",	0,	0},
+	{60,	234<<1,	~1,	"xvtsqrtdp",	0,	0},
+	{60,	298<<1,	~1,	"xststdcsp",	0,	0},
+	{60,	362<<1,	~1,	"xststdcdp",	0,	0},
+	{60,	916,	ALL,	"xxgenpcvbm",	0,	0},
+	{60,	948,	ALL,	"xxgenpcvwm",	0,	0},
+	{60,	917,	ALL,	"xxgenpcvhm",	0,	0},
+	{60,	949,	ALL,	"xxgenpcvdm",	0,	0},
+	{60,	11<<1,	~1,	"xssqrtsp",	0,	0},
+	{60,	75<<1,	~1,	"xssqrtdp",	0,	0},
+	{60,	107<<1,	~1,	"xsrdpic",	0,	0},
+	{60,	139<<1,	~1,	"xvsqrtsp",	0,	0},
+	{60,	171<<1,	~1,	"xvrspic",	0,	0},
+	{60,	203<<1,	~1,	"xvsqrtdp",	0,	0},
+	{60,	235<<1,	~1,	"xvrdpic",	0,	0},
+	{60,	267<<1,	~1,	"xscvdpspn",	0,	0},
+	{60,	331<<1,	~1,	"xscvspdpn",	0,	0},
+	{60,	347<<1,	~1,	"xsxexpdp",	vra2s,	vr2},
+	{60,	347<<1,	~1,	"xsxsigdp",	vra2s,	vr2},
+	{60,	347<<1,	~1,	"xscvhpdp",	vra2s,	vr2},
+	{60,	347<<1,	~1,	"xscvdphp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvxexpdp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvxsigdp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvtlsbb",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xxbrh",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvxexpsp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvxsigsp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xxbrw",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvcvbf16sp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvcvspbf16",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xxbrd",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvcvhpsp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xvcvsphp",	vra2s,	vr2},
+	{60,	475<<1,	~1,	"xxbrq",	vra2s,	vr2},
+	{60,	918,	ALL,	"xsiexpdp",	0,	0},
+	{60,	3<<3,	0b11000,	"xxsel",	0,	0},
+	{61,	0,	0b11,	"stfdp",	0,	0},
+	{61,	2,	0b11,	"stxsd",	0,	0},
+	{61,	3,	0b11,	"stxssp",	0,	0},
+	{61,	1,	ALL,	"lxv",	0,	0},
+	{61,	5,	ALL,	"stxv",	0,	0},
+	{63,	128,	ALL,	"ftdiv",	0,	0},
+	{63,	160,	ALL,	"ftsqrt",	0,	0},
+	{63,	66,	ALL,	"dscliq[.]",	0,	0},
+	{63,	98,	ALL,	"dscriq[.]",	0,	0},
+	{63,	194,	ALL,	"dtstdcq",	0,	0},
+	{63,	226,	ALL,	"dtstdgq",	0,	0},
+	{63,	2,	ALL,	"daddq[.]",	0,	0},
+	{63,	34,	ALL,	"dmulq[.]",	0,	0},
+	{63,	130,	ALL,	"dcmpoq",	0,	0},
+	{63,	162,	ALL,	"dtstexq",	0,	0},
+	{63,	258,	ALL,	"dctqpq[.]",	0,	0},
+	{63,	290,	ALL,	"dctfixq[.]",	0,	0},
+	{63,	322,	ALL,	"ddedpdq[.]",	0,	0},
+	{63,	354,	ALL,	"dxexq[.]",	0,	0},
+	{63,	514,	ALL,	"dsubq[.]",	0,	0},
+	{63,	546,	ALL,	"ddivq[.]",	0,	0},
+	{63,	642,	ALL,	"dcmpuq",	0,	0},
+	{63,	674,	ALL,	"dtstsfq",	0,	0},
+	{63,	770,	ALL,	"drdpq[.]",	0,	0},
+	{63,	802,	ALL,	"dcffixq[.]",	0,	0},
+	{63,	834,	ALL,	"denbcdq[.]",	0,	0},
+	{63,	866,	ALL,	"diexq[.]",	0,	0},
+	{63,	994,	ALL,	"dcffixqq",	vra2s,	vr2},
+	{63,	994,	ALL,	"dctfixqq",	vra2s,	vr2},
+	{63,	3,	0b11111111,	"dquaq[.]",	0,	0},
+	{63,	35,	0b11111111,	"drrndq[.]",	0,	0},
+	{63,	67,	0b11111111,	"dquaiq[.]",	0,	0},
+	{63,	99,	0b11111111,	"drintxq[.]",	0,	0},
+	{63,	227,	0b11111111,	"drintnq[.]",	0,	0},
+	{63,	675,	ALL,	"dtstsfiq",	0,	0},
+	{63,	4,	ALL,	"xsaddqp[o]",	0,	0},
+	{63,	36,	ALL,	"xsmulqp[o]",	0,	0},
+	{63,	68,	ALL,	"xscmpeqqp",	0,	0},
+	{63,	100,	ALL,	"xscpsgnqp",	0,	0},
+	{63,	132,	ALL,	"xscmpoqp",	0,	0},
+	{63,	164,	ALL,	"xscmpexpqp",	0,	0},
+	{63,	196,	ALL,	"xscmpgeqp",	0,	0},
+	{63,	228,	ALL,	"xscmpgtqp",	0,	0},
+	{63,	388,	ALL,	"xsmaddqp[o]",	0,	0},
+	{63,	420,	ALL,	"xsmsubqp[o]",	0,	0},
+	{63,	452,	ALL,	"xsnmaddqp[o]",	0,	0},
+	{63,	484,	ALL,	"xsnmsubqp[o]",	0,	0},
+	{63,	516,	ALL,	"xssubqp[o]",	0,	0},
+	{63,	548,	ALL,	"xsdivqp[o]",	0,	0},
+	{63,	644,	ALL,	"xscmpuqp",	0,	0},
+	{63,	676,	ALL,	"xsmaxcqp",	0,	0},
+	{63,	708,	ALL,	"xststdcqp",	0,	0},
+	{63,	740,	ALL,	"xsmincqp",	0,	0},
+	{63,	804,	ALL,	"xsabsqp",	vra2s,	vr2},
+	{63,	804,	ALL,	"xsxexpqp",	vra2s,	vr2},
+	{63,	804,	ALL,	"xsnabsqp",	vra2s,	vr2},
+	{63,	804,	ALL,	"xsnegqp",	vra2s,	vr2},
+	{63,	804,	ALL,	"xsxsigqp",	vra2s,	vr2},
+	{63,	804,	ALL,	"xssqrtqp[o]",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvqpuqz",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvqpuwz",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvudqp",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvuqqp",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvqpsqz",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvqpswz",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvsdqp",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvsqqp",	vra2s,	vr2},
+	{63,	836,	ALL,	"xscvqpudz",	vra2s,	vr2},
+	{63,	868,	ALL,	"xsiexpqp",	0,	0},
+	{63,	5,	0b11111111,	"xsrqpi[x]",	0,	0},
+	{63,	37,	0b11111111,	"xsrqpxp",	0,	0},
+	{63,	838,	ALL,	"fmrgow",	0,	0},
+	{63,	966,	ALL,	"fmrgew",	0,	0},
+	{63,	8,	ALL,	"fcpsgn[.]",	0,	0},
+	{63,	392,	ALL,	"frin[.]",	0,	0},
+	{63,	424,	ALL,	"friz[.]",	0,	0},
+	{63,	456,	ALL,	"frip[.]",	0,	0},
+	{63,	488,	ALL,	"frim[.]",	0,	0},
+	{63,	142,	ALL,	"fctiwu[.]",	0,	0},
+	{63,	942,	ALL,	"fctidu[.]",	0,	0},
+	{63,	974,	ALL,	"fcfidu[.]",	0,	0},
+	{63,	143,	ALL,	"fctiwuz[.]",	0,	0},
+	{63,	943,	ALL,	"fctiduz[.]",	0,	0},
+	{63,	24,	ALL,	"fre[.]",	0,	0},
+	{59,	42<<2,	~3,	"xvi16ger2spp",	0,	0},
+	{59,	50<<2,	~3,	"xvbf16ger2pp",	0,	0},
+	{59,	58<<2,	~3,	"xvf64gerpp",	0,	0},
+	{59,	82<<2,	~3,	"xvf16ger2np",	0,	0},
+	{59,	90<<2,	~3,	"xvf32gernp",	0,	0},
+	{59,	114<<2,	~3,	"xvbf16ger2np",	0,	0},
+	{59,	122<<2,	~3,	"xvf64gernp",	0,	0},
+	{59,	146<<2,	~3,	"xvf16ger2pn",	0,	0},
+	{59,	154<<2,	~3,	"xvf32gerpn",	0,	0},
+	{59,	178<<2,	~3,	"xvbf16ger2pn",	0,	0},
+	{59,	186<<2,	~3,	"xvf64gerpn",	0,	0},
+
+	{1,	0,	0,	"",	prefixed, 0},
 	{0},
 };
 
@@ -1062,6 +2253,7 @@
 	int n, s;
 	ulong mask;
 	uvlong vmask;
+	Rune r;
 
 	if (mnemonic)
 		format(0, i, mnemonic);
@@ -1069,12 +2261,27 @@
 		return;
 	if (mnemonic)
 		bprint(i, "\t");
-	for ( ; *f; f++) {
-		if (*f != '%') {
-			bprint(i, "%c", *f);
+	for (;;){
+		f += chartorune(&r, f);
+		if(r == 0)
+			break;
+		if (r != '%') {
+			bprint(i, "%C", r);
 			continue;
 		}
-		switch (*++f) {
+		f += chartorune(&r, f);
+		switch (r) {
+		case L'あ':
+			bprint(i, "%d", i->vra);
+			break;
+
+		case L'い':
+			bprint(i, "%d", i->vrb);
+			break;
+
+		case L'う':
+			bprint(i, "%d", i->vrd);
+			break;
 
 		case 'a':
 			bprint(i, "%d", i->ra);
--- /dev/null
+++ b/sys/src/libmach/test/mkfile
@@ -1,0 +1,6 @@
+</$objtype/mkfile
+
+TEST=\
+	q\
+
+</sys/src/cmd/mktest
--- /dev/null
+++ b/sys/src/libmach/test/q.c
@@ -1,0 +1,1323 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <mach.h>
+
+/*
+ * The following tables are copy-pasted from
+ * the POWER ISA 3.1 instruction manual
+ * "Instructions Ordered By Opcode" section
+ */
+
+typedef struct Ins Ins;
+typedef struct Word Word;
+
+struct Ins {
+	char *op;
+	char *a1;
+	char *a2;
+	char *a3;
+	char *xop;
+};
+
+struct Word {
+	Ins;
+	char *mneomic;
+};
+
+Word instab[] = {
+	{"000010", ".....", ".....", ".....", "...........", "tdi"},
+	{"000011", ".....", ".....", ".....", "...........", "twi"},
+	{"000100", ".....", ".....", ".....", "00000000000", "vaddubm"},
+	{"000100", ".....", ".....", ".....", "00001000000", "vadduhm"},
+	{"000100", ".....", ".....", ".....", "00010000000", "vadduwm"},
+	{"000100", ".....", ".....", ".....", "00011000000", "vaddudm"},
+	{"000100", ".....", ".....", ".....", "00100000000", "vadduqm"},
+	{"000100", ".....", ".....", ".....", "00101000000", "vaddcuq"},
+	{"000100", ".....", ".....", ".....", "00110000000", "vaddcuw"},
+	{"000100", ".....", ".....", ".....", "01000000000", "vaddubs"},
+	{"000100", ".....", ".....", ".....", "01001000000", "vadduhs"},
+	{"000100", ".....", ".....", ".....", "01010000000", "vadduws"},
+	{"000100", ".....", ".....", ".....", "01100000000", "vaddsbs"},
+	{"000100", ".....", ".....", ".....", "01101000000", "vaddshs"},
+	{"000100", ".....", ".....", ".....", "01110000000", "vaddsws"},
+	{"000100", ".....", ".....", ".....", "10000000000", "vsububm"},
+	{"000100", ".....", ".....", ".....", "10001000000", "vsubuhm"},
+	{"000100", ".....", ".....", ".....", "10010000000", "vsubuwm"},
+	{"000100", ".....", ".....", ".....", "10011000000", "vsubudm"},
+	{"000100", ".....", ".....", ".....", "10100000000", "vsubuqm"},
+	{"000100", ".....", ".....", ".....", "10101000000", "vsubcuq"},
+	{"000100", ".....", ".....", ".....", "10110000000", "vsubcuw"},
+	{"000100", ".....", ".....", ".....", "11000000000", "vsububs"},
+	{"000100", ".....", ".....", ".....", "11001000000", "vsubuhs"},
+	{"000100", ".....", ".....", ".....", "11010000000", "vsubuws"},
+	{"000100", ".....", ".....", ".....", "11100000000", "vsubsbs"},
+	{"000100", ".....", ".....", ".....", "11101000000", "vsubshs"},
+	{"000100", ".....", ".....", ".....", "11110000000", "vsubsws"},
+	{"000100", ".....", ".....", "/////", "00000000001", "vmul10cuq"},
+	{"000100", ".....", ".....", ".....", "00001000001", "vmul10ecuq"},
+	{"000100", "...//", ".....", ".....", "00100000001", "vcmpuq"},
+	{"000100", "...//", ".....", ".....", "00101000001", "vcmpsq"},
+	{"000100", ".....", ".....", "/////", "01000000001", "vmul10uq"},
+	{"000100", ".....", ".....", ".....", "01001000001", "vmul10euq"},
+	{"000100", ".....", ".....", ".....", "01101000001", "bcdcpsgn."},
+	{"000100", ".....", ".....", ".....", "1.000000001", "bcdadd."},
+	{"000100", ".....", ".....", ".....", "1.001000001", "bcdsub."},
+	{"000100", ".....", ".....", ".....", "1/010000001", "bcdus."},
+	{"000100", ".....", ".....", ".....", "1.011000001", "bcds."},
+	{"000100", ".....", ".....", ".....", "1.100000001", "bcdtrunc."},
+	{"000100", ".....", ".....", ".....", "1/101000001", "bcdutrunc."},
+	{"000100", ".....", "00000", ".....", "1/110000001", "bcdctsq."},
+	{"000100", ".....", "00010", ".....", "1.110000001", "bcdcfsq."},
+	{"000100", ".....", "00100", ".....", "1.110000001", "bcdctz."},
+	{"000100", ".....", "00101", ".....", "1/110000001", "bcdctn."},
+	{"000100", ".....", "00110", ".....", "1.110000001", "bcdcfz."},
+	{"000100", ".....", "00111", ".....", "1.110000001", "bcdcfn."},
+	{"000100", ".....", "11111", ".....", "1.110000001", "bcdsetsgn."},
+	{"000100", ".....", ".....", ".....", "1.111000001", "bcdsr."},
+	{"000100", ".....", ".....", ".....", "00000000010", "vmaxub"},
+	{"000100", ".....", ".....", ".....", "00001000010", "vmaxuh"},
+	{"000100", ".....", ".....", ".....", "00010000010", "vmaxuw"},
+	{"000100", ".....", ".....", ".....", "00011000010", "vmaxud"},
+	{"000100", ".....", ".....", ".....", "00100000010", "vmaxsb"},
+	{"000100", ".....", ".....", ".....", "00101000010", "vmaxsh"},
+	{"000100", ".....", ".....", ".....", "00110000010", "vmaxsw"},
+	{"000100", ".....", ".....", ".....", "00111000010", "vmaxsd"},
+	{"000100", ".....", ".....", ".....", "01000000010", "vminub"},
+	{"000100", ".....", ".....", ".....", "01001000010", "vminuh"},
+	{"000100", ".....", ".....", ".....", "01010000010", "vminuw"},
+	{"000100", ".....", ".....", ".....", "01011000010", "vminud"},
+	{"000100", ".....", ".....", ".....", "01100000010", "vminsb"},
+	{"000100", ".....", ".....", ".....", "01101000010", "vminsh"},
+	{"000100", ".....", ".....", ".....", "01110000010", "vminsw"},
+	{"000100", ".....", ".....", ".....", "01111000010", "vminsd"},
+	{"000100", ".....", ".....", ".....", "10000000010", "vavgub"},
+	{"000100", ".....", ".....", ".....", "10001000010", "vavguh"},
+	{"000100", ".....", ".....", ".....", "10010000010", "vavguw"},
+	{"000100", ".....", ".....", ".....", "10100000010", "vavgsb"},
+	{"000100", ".....", ".....", ".....", "10101000010", "vavgsh"},
+	{"000100", ".....", ".....", ".....", "10110000010", "vavgsw"},
+	{"000100", ".....", "00000", ".....", "11000000010", "vclzlsbb"},
+	{"000100", ".....", "00001", ".....", "11000000010", "vctzlsbb"},
+	{"000100", ".....", "00110", ".....", "11000000010", "vnegw"},
+	{"000100", ".....", "00111", ".....", "11000000010", "vnegd"},
+	{"000100", ".....", "01000", ".....", "11000000010", "vprtybw"},
+	{"000100", ".....", "01001", ".....", "11000000010", "vprtybd"},
+	{"000100", ".....", "01010", ".....", "11000000010", "vprtybq"},
+	{"000100", ".....", "10000", ".....", "11000000010", "vextsb2w"},
+	{"000100", ".....", "10001", ".....", "11000000010", "vextsh2w"},
+	{"000100", ".....", "11000", ".....", "11000000010", "vextsb2d"},
+	{"000100", ".....", "11001", ".....", "11000000010", "vextsh2d"},
+	{"000100", ".....", "11010", ".....", "11000000010", "vextsw2d"},
+	{"000100", ".....", "11011", ".....", "11000000010", "vextsd2q"},
+	{"000100", ".....", "11100", ".....", "11000000010", "vctzb"},
+	{"000100", ".....", "11101", ".....", "11000000010", "vctzh"},
+	{"000100", ".....", "11110", ".....", "11000000010", "vctzw"},
+	{"000100", ".....", "11111", ".....", "11000000010", "vctzd"},
+	{"000100", ".....", "00000", ".....", "11001000010", "vexpandbm"},
+	{"000100", ".....", "00001", ".....", "11001000010", "vexpandhm"},
+	{"000100", ".....", "00010", ".....", "11001000010", "vexpandwm"},
+	{"000100", ".....", "00011", ".....", "11001000010", "vexpanddm"},
+	{"000100", ".....", "00100", ".....", "11001000010", "vexpandqm"},
+	{"000100", ".....", "01000", ".....", "11001000010", "vextractbm"},
+	{"000100", ".....", "01001", ".....", "11001000010", "vextracthm"},
+	{"000100", ".....", "01010", ".....", "11001000010", "vextractwm"},
+	{"000100", ".....", "01011", ".....", "11001000010", "vextractdm"},
+	{"000100", ".....", "01100", ".....", "11001000010", "vextractqm"},
+	{"000100", ".....", "10000", ".....", "11001000010", "mtvsrbm"},
+	{"000100", ".....", "10001", ".....", "11001000010", "mtvsrhm"},
+	{"000100", ".....", "10010", ".....", "11001000010", "mtvsrwm"},
+	{"000100", ".....", "10011", ".....", "11001000010", "mtvsrdm"},
+	{"000100", ".....", "10100", ".....", "11001000010", "mtvsrqm"},
+	{"000100", ".....", "1100.", ".....", "11001000010", "vcntmbb"},
+	{"000100", ".....", "1101.", ".....", "11001000010", "vcntmbd"},
+	{"000100", ".....", "1110.", ".....", "11001000010", "vcntmbh"},
+	{"000100", ".....", "1111.", ".....", "11001000010", "vcntmbw"},
+	{"000100", ".....", ".....", ".....", "11010000010", "vshasigmaw"},
+	{"000100", ".....", ".....", ".....", "11011000010", "vshasigmad"},
+	{"000100", ".....", "/////", ".....", "11100000010", "vclzb"},
+	{"000100", ".....", "/////", ".....", "11101000010", "vclzh"},
+	{"000100", ".....", "/////", ".....", "11110000010", "vclzw"},
+	{"000100", ".....", "/////", ".....", "11111000010", "vclzd"},
+	{"000100", ".....", ".....", ".....", "10000000011", "vabsdub"},
+	{"000100", ".....", ".....", ".....", "10001000011", "vabsduh"},
+	{"000100", ".....", ".....", ".....", "10010000011", "vabsduw"},
+	{"000100", ".....", "/////", ".....", "11100000011", "vpopcntb"},
+	{"000100", ".....", "/////", ".....", "11101000011", "vpopcnth"},
+	{"000100", ".....", "/////", ".....", "11110000011", "vpopcntw"},
+	{"000100", ".....", "/////", ".....", "11111000011", "vpopcntd"},
+	{"000100", ".....", ".....", ".....", "00000000100", "vrlb"},
+	{"000100", ".....", ".....", ".....", "00001000100", "vrlh"},
+	{"000100", ".....", ".....", ".....", "00010000100", "vrlw"},
+	{"000100", ".....", ".....", ".....", "00011000100", "vrld"},
+	{"000100", ".....", ".....", ".....", "00100000100", "vslb"},
+	{"000100", ".....", ".....", ".....", "00101000100", "vslh"},
+	{"000100", ".....", ".....", ".....", "00110000100", "vslw"},
+	{"000100", ".....", ".....", ".....", "00111000100", "vsl"},
+	{"000100", ".....", ".....", ".....", "01000000100", "vsrb"},
+	{"000100", ".....", ".....", ".....", "01001000100", "vsrh"},
+	{"000100", ".....", ".....", ".....", "01010000100", "vsrw"},
+	{"000100", ".....", ".....", ".....", "01011000100", "vsr"},
+	{"000100", ".....", ".....", ".....", "01100000100", "vsrab"},
+	{"000100", ".....", ".....", ".....", "01101000100", "vsrah"},
+	{"000100", ".....", ".....", ".....", "01110000100", "vsraw"},
+	{"000100", ".....", ".....", ".....", "01111000100", "vsrad"},
+	{"000100", ".....", ".....", ".....", "10000000100", "vand"},
+	{"000100", ".....", ".....", ".....", "10001000100", "vandc"},
+	{"000100", ".....", ".....", ".....", "10010000100", "vor"},
+	{"000100", ".....", ".....", ".....", "10011000100", "vxor"},
+	{"000100", ".....", ".....", ".....", "10100000100", "vnor"},
+	{"000100", ".....", ".....", ".....", "10101000100", "vorc"},
+	{"000100", ".....", ".....", ".....", "10110000100", "vnand"},
+	{"000100", ".....", ".....", ".....", "10111000100", "vsld"},
+	{"000100", ".....", "/////", "/////", "11000000100", "mfvscr"},
+	{"000100", "/////", "/////", ".....", "11001000100", "mtvscr"},
+	{"000100", ".....", ".....", ".....", "11010000100", "veqv"},
+	{"000100", ".....", ".....", ".....", "11011000100", "vsrd"},
+	{"000100", ".....", ".....", ".....", "11100000100", "vsrv"},
+	{"000100", ".....", ".....", ".....", "11101000100", "vslv"},
+	{"000100", ".....", ".....", ".....", "11110000100", "vclzdm"},
+	{"000100", ".....", ".....", ".....", "11111000100", "vctzdm"},
+	{"000100", ".....", ".....", ".....", "00000000101", "vrlq"},
+	{"000100", ".....", ".....", ".....", "00001000101", "vrlqmi"},
+	{"000100", ".....", ".....", ".....", "00010000101", "vrlwmi"},
+	{"000100", ".....", ".....", ".....", "00011000101", "vrldmi"},
+	{"000100", ".....", ".....", ".....", "00100000101", "vslq"},
+	{"000100", ".....", ".....", ".....", "00101000101", "vrlqnm"},
+	{"000100", ".....", ".....", ".....", "00110000101", "vrlwnm"},
+	{"000100", ".....", ".....", ".....", "00111000101", "vrldnm"},
+	{"000100", ".....", ".....", ".....", "01000000101", "vsrq"},
+	{"000100", ".....", ".....", ".....", "01100000101", "vsraq"},
+	{"000100", ".....", ".....", ".....", ".0000000110", "vcmpequb[.]"},
+	{"000100", ".....", ".....", ".....", ".0001000110", "vcmpequh[.]"},
+	{"000100", ".....", ".....", ".....", ".0010000110", "vcmpequw[.]"},
+	{"000100", ".....", ".....", ".....", ".0011000110", "vcmpeqfp[.]"},
+	{"000100", ".....", ".....", ".....", ".0111000110", "vcmpgefp[.]"},
+	{"000100", ".....", ".....", ".....", ".1000000110", "vcmpgtub[.]"},
+	{"000100", ".....", ".....", ".....", ".1001000110", "vcmpgtuh[.]"},
+	{"000100", ".....", ".....", ".....", ".1010000110", "vcmpgtuw[.]"},
+	{"000100", ".....", ".....", ".....", ".1011000110", "vcmpgtfp[.]"},
+	{"000100", ".....", ".....", ".....", ".1100000110", "vcmpgtsb[.]"},
+	{"000100", ".....", ".....", ".....", ".1101000110", "vcmpgtsh[.]"},
+	{"000100", ".....", ".....", ".....", ".1110000110", "vcmpgtsw[.]"},
+	{"000100", ".....", ".....", ".....", ".1111000110", "vcmpbfp[.]"},
+	{"000100", ".....", ".....", ".....", ".0000000111", "vcmpneb[.]"},
+	{"000100", ".....", ".....", ".....", ".0001000111", "vcmpneh[.]"},
+	{"000100", ".....", ".....", ".....", ".0010000111", "vcmpnew[.]"},
+	{"000100", ".....", ".....", ".....", ".0011000111", "vcmpequd[.]"},
+	{"000100", ".....", ".....", ".....", ".0100000111", "vcmpnezb[.]"},
+	{"000100", ".....", ".....", ".....", ".0101000111", "vcmpnezh[.]"},
+	{"000100", ".....", ".....", ".....", ".0110000111", "vcmpnezw[.]"},
+	{"000100", ".....", ".....", ".....", ".0111000111", "vcmpequq[.]"},
+	{"000100", ".....", ".....", ".....", ".1010000111", "vcmpgtuq[.]"},
+	{"000100", ".....", ".....", ".....", ".1011000111", "vcmpgtud[.]"},
+	{"000100", ".....", ".....", ".....", ".1110000111", "vcmpgtsq[.]"},
+	{"000100", ".....", ".....", ".....", ".1111000111", "vcmpgtsd[.]"},
+	{"000100", ".....", ".....", ".....", "00000001000", "vmuloub"},
+	{"000100", ".....", ".....", ".....", "00001001000", "vmulouh"},
+	{"000100", ".....", ".....", ".....", "00010001000", "vmulouw"},
+	{"000100", ".....", ".....", ".....", "00011001000", "vmuloud"},
+	{"000100", ".....", ".....", ".....", "00100001000", "vmulosb"},
+	{"000100", ".....", ".....", ".....", "00101001000", "vmulosh"},
+	{"000100", ".....", ".....", ".....", "00110001000", "vmulosw"},
+	{"000100", ".....", ".....", ".....", "00111001000", "vmulosd"},
+	{"000100", ".....", ".....", ".....", "01000001000", "vmuleub"},
+	{"000100", ".....", ".....", ".....", "01001001000", "vmuleuh"},
+	{"000100", ".....", ".....", ".....", "01010001000", "vmuleuw"},
+	{"000100", ".....", ".....", ".....", "01011001000", "vmuleud"},
+	{"000100", ".....", ".....", ".....", "01100001000", "vmulesb"},
+	{"000100", ".....", ".....", ".....", "01101001000", "vmulesh"},
+	{"000100", ".....", ".....", ".....", "01110001000", "vmulesw"},
+	{"000100", ".....", ".....", ".....", "01111001000", "vmulesd"},
+	{"000100", ".....", ".....", ".....", "10000001000", "vpmsumb"},
+	{"000100", ".....", ".....", ".....", "10001001000", "vpmsumh"},
+	{"000100", ".....", ".....", ".....", "10010001000", "vpmsumw"},
+	{"000100", ".....", ".....", ".....", "10011001000", "vpmsumd"},
+	{"000100", ".....", ".....", ".....", "10100001000", "vcipher"},
+	{"000100", ".....", ".....", ".....", "10101001000", "vncipher"},
+	{"000100", ".....", ".....", "/////", "10111001000", "vsbox"},
+	{"000100", ".....", ".....", ".....", "11000001000", "vsum4ubs"},
+	{"000100", ".....", ".....", ".....", "11001001000", "vsum4shs"},
+	{"000100", ".....", ".....", ".....", "11010001000", "vsum2sws"},
+	{"000100", ".....", ".....", ".....", "11100001000", "vsum4sbs"},
+	{"000100", ".....", ".....", ".....", "11110001000", "vsumsws"},
+	{"000100", ".....", ".....", ".....", "00010001001", "vmuluwm"},
+	{"000100", ".....", ".....", ".....", "00111001001", "vmulld"},
+	{"000100", ".....", ".....", ".....", "01010001001", "vmulhuw"},
+	{"000100", ".....", ".....", ".....", "01011001001", "vmulhud"},
+	{"000100", ".....", ".....", ".....", "01110001001", "vmulhsw"},
+	{"000100", ".....", ".....", ".....", "01111001001", "vmulhsd"},
+	{"000100", ".....", ".....", ".....", "10100001001", "vcipherlast"},
+	{"000100", ".....", ".....", ".....", "10101001001", "vncipherlast"},
+	{"000100", ".....", ".....", ".....", "00000001010", "vaddfp"},
+	{"000100", ".....", ".....", ".....", "00001001010", "vsubfp"},
+	{"000100", ".....", "/////", ".....", "00100001010", "vrefp"},
+	{"000100", ".....", "/////", ".....", "00101001010", "vrsqrtefp"},
+	{"000100", ".....", "/////", ".....", "00110001010", "vexptefp"},
+	{"000100", ".....", "/////", ".....", "00111001010", "vlogefp"},
+	{"000100", ".....", "/////", ".....", "01000001010", "vrfin"},
+	{"000100", ".....", "/////", ".....", "01001001010", "vrfiz"},
+	{"000100", ".....", "/////", ".....", "01010001010", "vrfip"},
+	{"000100", ".....", "/////", ".....", "01011001010", "vrfim"},
+	{"000100", ".....", ".....", ".....", "01100001010", "vcfux"},
+	{"000100", ".....", ".....", ".....", "01101001010", "vcfsx"},
+	{"000100", ".....", ".....", ".....", "01110001010", "vctuxs"},
+	{"000100", ".....", ".....", ".....", "01111001010", "vctsxs"},
+	{"000100", ".....", ".....", ".....", "10000001010", "vmaxfp"},
+	{"000100", ".....", ".....", ".....", "10001001010", "vminfp"},
+	{"000100", ".....", ".....", ".....", "00000001011", "vdivuq"},
+	{"000100", ".....", ".....", ".....", "00010001011", "vdivuw"},
+	{"000100", ".....", ".....", ".....", "00011001011", "vdivud"},
+	{"000100", ".....", ".....", ".....", "00100001011", "vdivsq"},
+	{"000100", ".....", ".....", ".....", "00110001011", "vdivsw"},
+	{"000100", ".....", ".....", ".....", "00111001011", "vdivsd"},
+	{"000100", ".....", ".....", ".....", "01000001011", "vdiveuq"},
+	{"000100", ".....", ".....", ".....", "01010001011", "vdiveuw"},
+	{"000100", ".....", ".....", ".....", "01011001011", "vdiveud"},
+	{"000100", ".....", ".....", ".....", "01100001011", "vdivesq"},
+	{"000100", ".....", ".....", ".....", "01110001011", "vdivesw"},
+	{"000100", ".....", ".....", ".....", "01111001011", "vdivesd"},
+	{"000100", ".....", ".....", ".....", "11000001011", "vmoduq"},
+	{"000100", ".....", ".....", ".....", "11010001011", "vmoduw"},
+	{"000100", ".....", ".....", ".....", "11011001011", "vmodud"},
+	{"000100", ".....", ".....", ".....", "11100001011", "vmodsq"},
+	{"000100", ".....", ".....", ".....", "11110001011", "vmodsw"},
+	{"000100", ".....", ".....", ".....", "11111001011", "vmodsd"},
+	{"000100", ".....", ".....", ".....", "00000001100", "vmrghb"},
+	{"000100", ".....", ".....", ".....", "00001001100", "vmrghh"},
+	{"000100", ".....", ".....", ".....", "00010001100", "vmrghw"},
+	{"000100", ".....", ".....", ".....", "00100001100", "vmrglb"},
+	{"000100", ".....", ".....", ".....", "00101001100", "vmrglh"},
+	{"000100", ".....", ".....", ".....", "00110001100", "vmrglw"},
+	{"000100", ".....", "/....", ".....", "01000001100", "vspltb"},
+	{"000100", ".....", "//...", ".....", "01001001100", "vsplth"},
+	{"000100", ".....", "///..", ".....", "01010001100", "vspltw"},
+	{"000100", ".....", ".....", "/////", "01100001100", "vspltisb"},
+	{"000100", ".....", ".....", "/////", "01101001100", "vspltish"},
+	{"000100", ".....", ".....", "/////", "01110001100", "vspltisw"},
+	{"000100", ".....", ".....", ".....", "10000001100", "vslo"},
+	{"000100", ".....", ".....", ".....", "10001001100", "vsro"},
+	{"000100", ".....", "//...", ".....", "10011001100", "vgnb"},
+	{"000100", ".....", "/////", ".....", "10100001100", "vgbbd"},
+	{"000100", ".....", ".....", ".....", "10101001100", "vbpermq"},
+	{"000100", ".....", ".....", ".....", "10111001100", "vbpermd"},
+	{"000100", ".....", ".....", ".....", "11010001100", "vmrgow"},
+	{"000100", ".....", ".....", ".....", "11110001100", "vmrgew"},
+	{"000100", ".....", "00000", ".....", ".0000001101", "vstribl[.]"},
+	{"000100", ".....", "00001", ".....", ".0000001101", "vstribr[.]"},
+	{"000100", ".....", "00010", ".....", ".0000001101", "vstrihl[.]"},
+	{"000100", ".....", "00011", ".....", ".0000001101", "vstrihr[.]"},
+	{"000100", ".....", ".....", ".....", "00110001101", "vclrlb"},
+	{"000100", ".....", ".....", ".....", "00111001101", "vclrrb"},
+	{"000100", ".....", "/....", ".....", "01000001101", "vextractub"},
+	{"000100", ".....", "/....", ".....", "01001001101", "vextractuh"},
+	{"000100", ".....", "/....", ".....", "01010001101", "vextractuw"},
+	{"000100", ".....", "/....", ".....", "01011001101", "vextractd"},
+	{"000100", ".....", "/....", ".....", "01100001101", "vinsertb"},
+	{"000100", ".....", "/....", ".....", "01101001101", "vinserth"},
+	{"000100", ".....", "/....", ".....", "01110001101", "vinsertw"},
+	{"000100", ".....", "/....", ".....", "01111001101", "vinsertd"},
+	{"000100", ".....", ".....", ".....", "10101001101", "vcfuged"},
+	{"000100", ".....", ".....", ".....", "10110001101", "vpextd"},
+	{"000100", ".....", ".....", ".....", "10111001101", "vpdepd"},
+	{"000100", ".....", ".....", ".....", "11000001101", "vextublx"},
+	{"000100", ".....", ".....", ".....", "11001001101", "vextuhlx"},
+	{"000100", ".....", ".....", ".....", "11010001101", "vextuwlx"},
+	{"000100", ".....", ".....", ".....", "11100001101", "vextubrx"},
+	{"000100", ".....", ".....", ".....", "11101001101", "vextuhrx"},
+	{"000100", ".....", ".....", ".....", "11110001101", "vextuwrx"},
+	{"000100", ".....", ".....", ".....", "00000001110", "vpkuhum"},
+	{"000100", ".....", ".....", ".....", "00001001110", "vpkuwum"},
+	{"000100", ".....", ".....", ".....", "00010001110", "vpkuhus"},
+	{"000100", ".....", ".....", ".....", "00011001110", "vpkuwus"},
+	{"000100", ".....", ".....", ".....", "00100001110", "vpkshus"},
+	{"000100", ".....", ".....", ".....", "00101001110", "vpkswus"},
+	{"000100", ".....", ".....", ".....", "00110001110", "vpkshss"},
+	{"000100", ".....", ".....", ".....", "00111001110", "vpkswss"},
+	{"000100", ".....", "/////", ".....", "01000001110", "vupkhsb"},
+	{"000100", ".....", "/////", ".....", "01001001110", "vupkhsh"},
+	{"000100", ".....", "/////", ".....", "01010001110", "vupklsb"},
+	{"000100", ".....", "/////", ".....", "01011001110", "vupklsh"},
+	{"000100", ".....", ".....", ".....", "01100001110", "vpkpx"},
+	{"000100", ".....", "/////", ".....", "01101001110", "vupkhpx"},
+	{"000100", ".....", "/////", ".....", "01111001110", "vupklpx"},
+	{"000100", ".....", ".....", ".....", "10001001110", "vpkudum"},
+	{"000100", ".....", ".....", ".....", "10011001110", "vpkudus"},
+	{"000100", ".....", ".....", ".....", "10101001110", "vpksdus"},
+	{"000100", ".....", ".....", ".....", "10111001110", "vpksdss"},
+	{"000100", ".....", "/////", ".....", "11001001110", "vupkhsw"},
+	{"000100", ".....", "/////", ".....", "11011001110", "vupklsw"},
+	{"000100", ".....", ".....", ".....", "00000001111", "vinsbvlx"},
+	{"000100", ".....", ".....", ".....", "00001001111", "vinshvlx"},
+	{"000100", ".....", ".....", ".....", "00010001111", "vinswvlx"},
+	{"000100", ".....", "/....", ".....", "00011001111", "vinsw"},
+	{"000100", ".....", ".....", ".....", "00100001111", "vinsbvrx"},
+	{"000100", ".....", ".....", ".....", "00101001111", "vinshvrx"},
+	{"000100", ".....", ".....", ".....", "00110001111", "vinswvrx"},
+	{"000100", ".....", "/....", ".....", "00111001111", "vinsd"},
+	{"000100", ".....", ".....", ".....", "01000001111", "vinsblx"},
+	{"000100", ".....", ".....", ".....", "01001001111", "vinshlx"},
+	{"000100", ".....", ".....", ".....", "01010001111", "vinswlx"},
+	{"000100", ".....", ".....", ".....", "01011001111", "vinsdlx"},
+	{"000100", ".....", ".....", ".....", "01100001111", "vinsbrx"},
+	{"000100", ".....", ".....", ".....", "01101001111", "vinshrx"},
+	{"000100", ".....", ".....", ".....", "01110001111", "vinswrx"},
+	{"000100", ".....", ".....", ".....", "01111001111", "vinsdrx"},
+	{"000100", ".....", ".....", ".....", ".....01010.", "mtvsrbmi"},
+	{"000100", ".....", ".....", ".....", "00...010110", "vsldbi"},
+	{"000100", ".....", ".....", ".....", "01...010110", "vsrdbi"},
+	{"000100", ".....", ".....", ".....", ".....010111", "vmsumcud"},
+	{"000100", ".....", ".....", ".....", ".....011000", "vextdubvlx"},
+	{"000100", ".....", ".....", ".....", ".....011001", "vextdubvrx"},
+	{"000100", ".....", ".....", ".....", ".....011010", "vextduhvlx"},
+	{"000100", ".....", ".....", ".....", ".....011011", "vextduhvrx"},
+	{"000100", ".....", ".....", ".....", ".....011100", "vextduwvlx"},
+	{"000100", ".....", ".....", ".....", ".....011101", "vextduwvrx"},
+	{"000100", ".....", ".....", ".....", ".....011110", "vextddvlx"},
+	{"000100", ".....", ".....", ".....", ".....011111", "vextddvrx"},
+	{"000100", ".....", ".....", ".....", ".....100000", "vmhaddshs"},
+	{"000100", ".....", ".....", ".....", ".....100001", "vmhraddshs"},
+	{"000100", ".....", ".....", ".....", ".....100010", "vmladduhm"},
+	{"000100", ".....", ".....", ".....", ".....100011", "vmsumudm"},
+	{"000100", ".....", ".....", ".....", ".....100100", "vmsumubm"},
+	{"000100", ".....", ".....", ".....", ".....100101", "vmsummbm"},
+	{"000100", ".....", ".....", ".....", ".....100110", "vmsumuhm"},
+	{"000100", ".....", ".....", ".....", ".....100111", "vmsumuhs"},
+	{"000100", ".....", ".....", ".....", ".....101000", "vmsumshm"},
+	{"000100", ".....", ".....", ".....", ".....101001", "vmsumshs"},
+	{"000100", ".....", ".....", ".....", ".....101010", "vsel"},
+	{"000100", ".....", ".....", ".....", ".....101011", "vperm"},
+	{"000100", ".....", ".....", ".....", "/....101100", "vsldoi"},
+	{"000100", ".....", ".....", ".....", ".....101101", "vpermxor"},
+	{"000100", ".....", ".....", ".....", ".....101110", "vmaddfp"},
+	{"000100", ".....", ".....", ".....", ".....101111", "vnmsubfp"},
+	{"000100", ".....", ".....", ".....", ".....110000", "maddhd"},
+	{"000100", ".....", ".....", ".....", ".....110001", "maddhdu"},
+	{"000100", ".....", ".....", ".....", ".....110011", "maddld"},
+	{"000100", ".....", ".....", ".....", ".....111011", "vpermr"},
+	{"000100", ".....", ".....", ".....", ".....111100", "vaddeuqm"},
+	{"000100", ".....", ".....", ".....", ".....111101", "vaddecuq"},
+	{"000100", ".....", ".....", ".....", ".....111110", "vsubeuqm"},
+	{"000100", ".....", ".....", ".....", ".....111111", "vsubecuq"},
+	{"000110", ".....", ".....", ".....", ".......0000", "lxvp"},
+	{"000110", ".....", ".....", ".....", ".......0001", "stxvp"},
+	{"000111", ".....", ".....", ".....", "...........", "mulli"},
+	{"001000", ".....", ".....", ".....", "...........", "subfic"},
+	{"001010", ".../.", ".....", ".....", "...........", "cmpli"},
+	{"001011", ".../.", ".....", ".....", "...........", "cmpi"},
+	{"001100", ".....", ".....", ".....", "...........", "addic"},
+	{"001101", ".....", ".....", ".....", "...........", "addic."},
+	{"001110", ".....", ".....", ".....", "...........", "addi"},
+	{"001111", ".....", ".....", ".....", "...........", "addis"},
+	{"010000", ".....", ".....", ".....", "...........", "bc[l][a]"},
+	{"010001", "/////", "/////", "////.", "......///01", "scv"},
+	{"010001", "/////", "/////", "////.", "......///1/", "sc"},
+	{"010010", ".....", ".....", ".....", "...........", "b[l][a]"},
+	{"010011", "...//", "...//", "/////", "0000000000/", "mcrf"},
+	{"010011", ".....", ".....", ".....", "0000100001/", "crnor"},
+	{"010011", ".....", ".....", ".....", "0010000001/", "crandc"},
+	{"010011", ".....", ".....", ".....", "0011000001/", "crxor"},
+	{"010011", ".....", ".....", ".....", "0011100001/", "crnand"},
+	{"010011", ".....", ".....", ".....", "0100000001/", "crand"},
+	{"010011", ".....", ".....", ".....", "0100100001/", "creqv"},
+	{"010011", ".....", ".....", ".....", "0110100001/", "crorc"},
+	{"010011", ".....", ".....", ".....", "0111000001/", "cror"},
+	{"010011", ".....", ".....", ".....", ".....00010.", "addpcis"},
+	{"010011", ".....", ".....", "///..", "0000010000.", "bclr[l]"},
+	{"010011", ".....", ".....", "///..", "1000010000.", "bcctr[l]"},
+	{"010011", ".....", ".....", "///..", "1000110000.", "bctar[l]"},
+	{"010011", "/////", "/////", "/////", "0000010010/", "rfid"},
+	{"010011", "/////", "/////", "/////", "0001010010/", "rfscv"},
+	{"010011", "/////", "/////", "////.", "0010010010/", "rfebb"},
+	{"010011", "/////", "/////", "/////", "0100010010/", "hrfid"},
+	{"010011", "/////", "/////", "/////", "0100110010/", "urfid"},
+	{"010011", "/////", "/////", "/////", "0101110010/", "stop"},
+	{"010011", "/////", "/////", "/////", "0010010110/", "isync"},
+	{"010100", ".....", ".....", ".....", "...........", "rlwimi[.]"},
+	{"010101", ".....", ".....", ".....", "...........", "rlwinm[.]"},
+	{"010111", ".....", ".....", ".....", "...........", "rlwnm[.]"},
+	{"011000", ".....", ".....", ".....", "...........", "ori"},
+	{"011001", ".....", ".....", ".....", "...........", "oris"},
+	{"011010", ".....", ".....", ".....", "...........", "xori"},
+	{"011011", ".....", ".....", ".....", "...........", "xoris"},
+	{"011100", ".....", ".....", ".....", "...........", "andi."},
+	{"011101", ".....", ".....", ".....", "...........", "andis."},
+	{"011110", ".....", ".....", ".....", "......000..", "rldicl[.]"},
+	{"011110", ".....", ".....", ".....", "......001..", "rldicr[.]"},
+	{"011110", ".....", ".....", ".....", "......010..", "rldic[.]"},
+	{"011110", ".....", ".....", ".....", "......011..", "rldimi[.]"},
+	{"011110", ".....", ".....", ".....", "......1000.", "rldcl[.]"},
+	{"011110", ".....", ".....", ".....", "......1001.", "rldcr[.]"},
+	{"011111", ".../.", ".....", ".....", "0000000000/", "cmp"},
+	{"011111", ".../.", ".....", ".....", "0000100000/", "cmpl"},
+	{"011111", ".....", "...//", "/////", "0010000000/", "setb"},
+	{"011111", ".../.", ".....", ".....", "0011000000/", "cmprb"},
+	{"011111", "...//", ".....", ".....", "0011100000/", "cmpeqb"},
+	{"011111", ".....", ".....", "/////", "0110000000/", "setbc"},
+	{"011111", ".....", ".....", "/////", "0110100000/", "setbcr"},
+	{"011111", ".....", ".....", "/////", "0111000000/", "setnbc"},
+	{"011111", ".....", ".....", "/////", "0111100000/", "setnbcr"},
+	{"011111", "...//", "/////", "/////", "1001000000/", "mcrxrx"},
+	{"011111", ".....", ".....", ".....", "0000000100/", "tw"},
+	{"011111", ".....", ".....", ".....", "0001000100/", "td"},
+	{"011111", ".....", ".....", ".....", "0000000110/", "lvsl"},
+	{"011111", ".....", ".....", ".....", "0000100110/", "lvsr"},
+	{"011111", ".....", ".....", ".....", "1001000110/", "lwat"},
+	{"011111", ".....", ".....", ".....", "1001100110/", "ldat"},
+	{"011111", ".....", ".....", ".....", "1011000110/", "stwat"},
+	{"011111", ".....", ".....", ".....", "1011100110/", "stdat"},
+	{"011111", "////.", ".....", ".....", "1100000110/", "copy"},
+	{"011111", "/////", "/////", "/////", "1101000110/", "cpabort"},
+	{"011111", "////.", ".....", ".....", "1110000110.", "paste[.]"},
+	{"011111", ".....", ".....", ".....", "0000000111/", "lvebx"},
+	{"011111", ".....", ".....", ".....", "0000100111/", "lvehx"},
+	{"011111", ".....", ".....", ".....", "0001000111/", "lvewx"},
+	{"011111", ".....", ".....", ".....", "0001100111/", "lvx"},
+	{"011111", ".....", ".....", ".....", "0010000111/", "stvebx"},
+	{"011111", ".....", ".....", ".....", "0010100111/", "stvehx"},
+	{"011111", ".....", ".....", ".....", "0011000111/", "stvewx"},
+	{"011111", ".....", ".....", ".....", "0011100111/", "stvx"},
+	{"011111", ".....", ".....", ".....", "0101100111/", "lvxl"},
+	{"011111", ".....", ".....", ".....", "0111100111/", "stvxl"},
+	{"011111", ".....", ".....", ".....", "0000001000.", "subfc[.]"},
+	{"011111", ".....", ".....", ".....", "0000101000.", "subf[.]"},
+	{"011111", ".....", ".....", "/////", "0001101000.", "neg[.]"},
+	{"011111", ".....", ".....", ".....", "0010001000.", "subfe[.]"},
+	{"011111", ".....", ".....", "/////", "0011001000.", "subfze[.]"},
+	{"011111", ".....", ".....", "/////", "0011101000.", "subfme[.]"},
+	{"011111", ".....", ".....", ".....", "1000001000.", "subfco[.]"},
+	{"011111", ".....", ".....", ".....", "1000101000.", "subfo[.]"},
+	{"011111", ".....", ".....", "/////", "1001101000.", "nego[.]"},
+	{"011111", ".....", ".....", ".....", "1010001000.", "subfeo[.]"},
+	{"011111", ".....", ".....", "/////", "1011001000.", "subfzeo[.]"},
+	{"011111", ".....", ".....", "/////", "1011101000.", "subfmeo[.]"},
+	{"011111", ".....", ".....", ".....", "/000001001.", "mulhdu[.]"},
+	{"011111", ".....", ".....", ".....", "/001001001.", "mulhd[.]"},
+	{"011111", ".....", ".....", ".....", "0011101001.", "mulld[.]"},
+	{"011111", ".....", ".....", ".....", "0100001001/", "modud"},
+	{"011111", ".....", ".....", ".....", "0110001001.", "divdeu[.]"},
+	{"011111", ".....", ".....", ".....", "0110101001.", "divde[.]"},
+	{"011111", ".....", ".....", ".....", "0111001001.", "divdu[.]"},
+	{"011111", ".....", ".....", ".....", "0111101001.", "divd[.]"},
+	{"011111", ".....", ".....", ".....", "1011101001.", "mulldo[.]"},
+	{"011111", ".....", ".....", ".....", "1100001001/", "modsd"},
+	{"011111", ".....", ".....", ".....", "1110001001.", "divdeuo[.]"},
+	{"011111", ".....", ".....", ".....", "1110101001.", "divdeo[.]"},
+	{"011111", ".....", ".....", ".....", "1111001001.", "divduo[.]"},
+	{"011111", ".....", ".....", ".....", "1111101001.", "divdo[.]"},
+	{"011111", ".....", ".....", ".....", "..10101010/", "addex"},
+	{"011111", ".....", ".....", ".....", "/001001010/", "addg"},
+	{"011111", ".....", ".....", ".....", "0000001010.", "addc[.]"},
+	{"011111", ".....", ".....", ".....", "0010001010.", "adde[.]"},
+	{"011111", ".....", ".....", "/////", "0011001010.", "addze[.]"},
+	{"011111", ".....", ".....", "/////", "0011101010.", "addme[.]"},
+	{"011111", ".....", ".....", ".....", "0100001010.", "add[.]"},
+	{"011111", ".....", ".....", ".....", "1000001010.", "addco[.]"},
+	{"011111", ".....", ".....", ".....", "1010001010.", "addeo[.]"},
+	{"011111", ".....", ".....", "/////", "1011001010.", "addzeo[.]"},
+	{"011111", ".....", ".....", "/////", "1011101010.", "addmeo[.]"},
+	{"011111", ".....", ".....", ".....", "1100001010.", "addo[.]"},
+	{"011111", ".....", ".....", ".....", "/000001011.", "mulhwu[.]"},
+	{"011111", ".....", ".....", ".....", "/001001011.", "mulhw[.]"},
+	{"011111", ".....", ".....", ".....", "0011101011.", "mullw[.]"},
+	{"011111", ".....", ".....", ".....", "0100001011/", "moduw"},
+	{"011111", ".....", ".....", ".....", "0110001011.", "divweu[.]"},
+	{"011111", ".....", ".....", ".....", "0110101011.", "divwe[.]"},
+	{"011111", ".....", ".....", ".....", "0111001011.", "divwu[.]"},
+	{"011111", ".....", ".....", ".....", "0111101011.", "divw[.]"},
+	{"011111", ".....", ".....", ".....", "1011101011.", "mullwo[.]"},
+	{"011111", ".....", ".....", ".....", "1100001011/", "modsw"},
+	{"011111", ".....", ".....", ".....", "1110001011.", "divweuo[.]"},
+	{"011111", ".....", ".....", ".....", "1110101011.", "divweo[.]"},
+	{"011111", ".....", ".....", ".....", "1111001011.", "divwuo[.]"},
+	{"011111", ".....", ".....", ".....", "1111101011.", "divwo[.]"},
+	{"011111", ".....", ".....", ".....", "0000001100.", "lxsiwzx"},
+	{"011111", ".....", ".....", ".....", "0001001100.", "lxsiwax"},
+	{"011111", ".....", ".....", ".....", "0010001100.", "stxsiwx"},
+	{"011111", ".....", ".....", ".....", "0100/01100.", "lxvx"},
+	{"011111", ".....", ".....", ".....", "0101001100.", "lxvdsx"},
+	{"011111", ".....", ".....", ".....", "0101101100.", "lxvwsx"},
+	{"011111", ".....", ".....", ".....", "0110001100.", "stxvx"},
+	{"011111", ".....", ".....", ".....", "1000001100.", "lxsspx"},
+	{"011111", ".....", ".....", ".....", "1001001100.", "lxsdx"},
+	{"011111", ".....", ".....", ".....", "1010001100.", "stxsspx"},
+	{"011111", ".....", ".....", ".....", "1011001100.", "stxsdx"},
+	{"011111", ".....", ".....", ".....", "1100001100.", "lxvw4x"},
+	{"011111", ".....", ".....", ".....", "1100101100.", "lxvh8x"},
+	{"011111", ".....", ".....", ".....", "1101001100.", "lxvd2x"},
+	{"011111", ".....", ".....", ".....", "1101101100.", "lxvb16x"},
+	{"011111", ".....", ".....", ".....", "1110001100.", "stxvw4x"},
+	{"011111", ".....", ".....", ".....", "1110101100.", "stxvh8x"},
+	{"011111", ".....", ".....", ".....", "1111001100.", "stxvd2x"},
+	{"011111", ".....", ".....", ".....", "1111101100.", "stxvb16x"},
+	{"011111", ".....", ".....", ".....", "0000001101.", "lxvrbx"},
+	{"011111", ".....", ".....", ".....", "0000101101.", "lxvrhx"},
+	{"011111", ".....", ".....", ".....", "0001001101.", "lxvrwx"},
+	{"011111", ".....", ".....", ".....", "0001101101.", "lxvrdx"},
+	{"011111", ".....", ".....", ".....", "0010001101.", "stxvrbx"},
+	{"011111", ".....", ".....", ".....", "0010101101.", "stxvrhx"},
+	{"011111", ".....", ".....", ".....", "0011001101.", "stxvrwx"},
+	{"011111", ".....", ".....", ".....", "0011101101.", "stxvrdx"},
+	{"011111", ".....", ".....", ".....", "0100001101.", "lxvl"},
+	{"011111", ".....", ".....", ".....", "0100101101.", "lxvll"},
+	{"011111", ".....", ".....", ".....", "0101001101/", "lxvpx"},
+	{"011111", ".....", ".....", ".....", "0110001101.", "stxvl"},
+	{"011111", ".....", ".....", ".....", "0110101101.", "stxvll"},
+	{"011111", ".....", ".....", ".....", "0111001101/", "stxvpx"},
+	{"011111", ".....", ".....", ".....", "1100001101.", "lxsibzx"},
+	{"011111", ".....", ".....", ".....", "1100101101.", "lxsihzx"},
+	{"011111", ".....", ".....", ".....", "1110001101.", "stxsibx"},
+	{"011111", ".....", ".....", ".....", "1110101101.", "stxsihx"},
+	{"011111", "/////", "/////", ".....", "0001001110/", "msgsndu"},
+	{"011111", "/////", "/////", ".....", "0001101110/", "msgclru"},
+	{"011111", "/////", "/////", ".....", "0010001110/", "msgsndp"},
+	{"011111", "/////", "/////", ".....", "0010101110/", "msgclrp"},
+	{"011111", "/////", "/////", ".....", "0011001110/", "msgsnd"},
+	{"011111", "/////", "/////", ".....", "0011101110/", "msgclr"},
+	{"011111", ".....", ".....", ".....", "0100101110/", "mfbhrbe"},
+	{"011111", "/////", "/////", "/////", "0110101110/", "clrbhrb"},
+	{"011111", ".....", ".....", ".....", ".....01111/", "isel"},
+	{"011111", ".....", "0....", "..../", "0010010000/", "mtcrf"},
+	{"011111", ".....", "1....", "..../", "0010010000/", "mtocrf"},
+	{"011111", "...//", "00000", "/////", "0010110001/", "xxmfacc"},
+	{"011111", "...//", "00001", "/////", "0010110001/", "xxmtacc"},
+	{"011111", "...//", "00011", "/////", "0010110001/", "xxsetaccz"},
+	{"011111", ".....", "////.", "/////", "0010010010/", "mtmsr"},
+	{"011111", ".....", "////.", "/////", "0010110010/", "mtmsrd"},
+	{"011111", ".....", "/....", ".....", "0100010010/", "tlbiel"},
+	{"011111", ".....", "/....", ".....", "0100110010/", "tlbie"},
+	{"011111", "/////", "/////", "/////", "0101010010/", "slbsync"},
+	{"011111", ".....", "/////", ".....", "0110010010/", "slbmte"},
+	{"011111", "/////", "/////", ".....", "0110110010/", "slbie"},
+	{"011111", ".....", "/////", ".....", "0111010010/", "slbieg"},
+	{"011111", "//...", "/////", "/////", "0111110010/", "slbia"},
+	{"011111", ".....", "/////", ".....", "1101010010/", "slbiag"},
+	{"011111", ".....", "0////", "/////", "0000010011/", "mfcr"},
+	{"011111", ".....", "1....", "..../", "0000010011/", "mfocrf"},
+	{"011111", ".....", ".....", "/////", "0000110011.", "mfvsrd"},
+	{"011111", ".....", "/////", "/////", "0001010011/", "mfmsr"},
+	{"011111", ".....", ".....", "/////", "0001110011.", "mfvsrwz"},
+	{"011111", ".....", ".....", "/////", "0010110011.", "mtvsrd"},
+	{"011111", ".....", ".....", "/////", "0011010011.", "mtvsrwa"},
+	{"011111", ".....", ".....", "/////", "0011110011.", "mtvsrwz"},
+	{"011111", ".....", ".....", "/////", "0100110011.", "mfvsrld"},
+	{"011111", ".....", ".....", ".....", "0101010011/", "mfspr"},
+	{"011111", ".....", ".....", ".....", "0101110011/", "mftb"},
+	{"011111", ".....", ".....", "/////", "0110010011.", "mtvsrws"},
+	{"011111", ".....", ".....", ".....", "0110110011.", "mtvsrdd"},
+	{"011111", ".....", ".....", ".....", "0111010011/", "mtspr"},
+	{"011111", ".....", "///..", "/////", "1011110011/", "darn"},
+	{"011111", ".....", "/////", ".....", "1101010011/", "slbmfev"},
+	{"011111", ".....", "/////", ".....", "1110010011/", "slbmfee"},
+	{"011111", ".....", "/////", ".....", "11110100111", "slbfee."},
+	{"011111", ".....", ".....", ".....", "0000010100/", "lwarx"},
+	{"011111", ".....", ".....", ".....", "0000110100.", "lbarx"},
+	{"011111", ".....", ".....", ".....", "0001010100/", "ldarx"},
+	{"011111", ".....", ".....", ".....", "0001110100.", "lharx"},
+	{"011111", ".....", ".....", ".....", "0100010100.", "lqarx"},
+	{"011111", ".....", ".....", ".....", "1000010100/", "ldbrx"},
+	{"011111", ".....", ".....", ".....", "1010010100/", "stdbrx"},
+	{"011111", ".....", ".....", ".....", "0000010101/", "ldx"},
+	{"011111", ".....", ".....", ".....", "0000110101/", "ldux"},
+	{"011111", ".....", ".....", ".....", "0010010101/", "stdx"},
+	{"011111", ".....", ".....", ".....", "0010110101/", "stdux"},
+	{"011111", ".....", ".....", ".....", "0101010101/", "lwax"},
+	{"011111", ".....", ".....", ".....", "0101110101/", "lwaux"},
+	{"011111", ".....", ".....", ".....", "1000010101/", "lswx"},
+	{"011111", ".....", ".....", ".....", "1001010101/", "lswi"},
+	{"011111", ".....", ".....", ".....", "1010010101/", "stswx"},
+	{"011111", ".....", ".....", ".....", "1011010101/", "stswi"},
+	{"011111", ".....", ".....", ".....", "1100010101/", "lwzcix"},
+	{"011111", ".....", ".....", ".....", "1100110101/", "lhzcix"},
+	{"011111", ".....", ".....", ".....", "1101010101/", "lbzcix"},
+	{"011111", ".....", ".....", ".....", "1101110101/", "ldcix"},
+	{"011111", ".....", ".....", ".....", "1110010101/", "stwcix"},
+	{"011111", ".....", ".....", ".....", "1110110101/", "sthcix"},
+	{"011111", ".....", ".....", ".....", "1111010101/", "stbcix"},
+	{"011111", ".....", ".....", ".....", "1111110101/", "stdcix"},
+	{"011111", "/....", ".....", ".....", "0000010110/", "icbt"},
+	{"011111", "/////", ".....", ".....", "0000110110/", "dcbst"},
+	{"011111", "///..", ".....", ".....", "0001010110/", "dcbf"},
+	{"011111", ".....", ".....", ".....", "0011110110/", "dcbtst"},
+	{"011111", ".....", ".....", ".....", "0100010110/", "dcbt"},
+	{"011111", ".....", ".....", ".....", "1000010110/", "lwbrx"},
+	{"011111", "/////", "/////", "/////", "1000110110/", "tlbsync"},
+	{"011111", "///..", "/////", "/////", "1001010110/", "sync"},
+	{"011111", ".....", ".....", ".....", "1010010110/", "stwbrx"},
+	{"011111", ".....", ".....", ".....", "1100010110/", "lhbrx"},
+	{"011111", "/////", "/////", "/////", "1101010110/", "eieio"},
+	{"011111", "/////", "/////", "/////", "1101110110/", "msgsync"},
+	{"011111", ".....", ".....", ".....", "1110010110/", "sthbrx"},
+	{"011111", "/////", ".....", ".....", "1111010110/", "icbi"},
+	{"011111", "/////", ".....", ".....", "1111110110/", "dcbz"},
+	{"011111", ".....", ".....", ".....", "00100101101", "stwcx."},
+	{"011111", ".....", ".....", ".....", "00101101101", "stqcx."},
+	{"011111", ".....", ".....", ".....", "00110101101", "stdcx."},
+	{"011111", ".....", ".....", ".....", "10101101101", "stbcx."},
+	{"011111", ".....", ".....", ".....", "10110101101", "sthcx."},
+	{"011111", ".....", ".....", ".....", "0000010111/", "lwzx"},
+	{"011111", ".....", ".....", ".....", "0000110111/", "lwzux"},
+	{"011111", ".....", ".....", ".....", "0001010111/", "lbzx"},
+	{"011111", ".....", ".....", ".....", "0001110111/", "lbzux"},
+	{"011111", ".....", ".....", ".....", "0010010111/", "stwx"},
+	{"011111", ".....", ".....", ".....", "0010110111/", "stwux"},
+	{"011111", ".....", ".....", ".....", "0011010111/", "stbx"},
+	{"011111", ".....", ".....", ".....", "0011110111/", "stbux"},
+	{"011111", ".....", ".....", ".....", "0100010111/", "lhzx"},
+	{"011111", ".....", ".....", ".....", "0100110111/", "lhzux"},
+	{"011111", ".....", ".....", ".....", "0101010111/", "lhax"},
+	{"011111", ".....", ".....", ".....", "0101110111/", "lhaux"},
+	{"011111", ".....", ".....", ".....", "0110010111/", "sthx"},
+	{"011111", ".....", ".....", ".....", "0110110111/", "sthux"},
+	{"011111", "///..", ".....", ".....", "0111110111/", "spom"},
+	{"011111", ".....", ".....", ".....", "1000010111/", "lfsx"},
+	{"011111", ".....", ".....", ".....", "1000110111/", "lfsux"},
+	{"011111", ".....", ".....", ".....", "1001010111/", "lfdx"},
+	{"011111", ".....", ".....", ".....", "1001110111/", "lfdux"},
+	{"011111", ".....", ".....", ".....", "1010010111/", "stfsx"},
+	{"011111", ".....", ".....", ".....", "1010110111/", "stfsux"},
+	{"011111", ".....", ".....", ".....", "1011010111/", "stfdx"},
+	{"011111", ".....", ".....", ".....", "1011110111/", "stfdux"},
+	{"011111", ".....", ".....", ".....", "1100010111/", "lfdpx"},
+	{"011111", ".....", ".....", ".....", "1101010111/", "lfiwax"},
+	{"011111", ".....", ".....", ".....", "1101110111/", "lfiwzx"},
+	{"011111", ".....", ".....", ".....", "1110010111/", "stfdpx"},
+	{"011111", ".....", ".....", ".....", "1111010111/", "stfiwx"},
+	{"011111", "/////", ".....", ".....", "1111110111/", "lqm"},
+	{"011111", ".....", ".....", ".....", "0000011000.", "slw[.]"},
+	{"011111", ".....", ".....", ".....", "1000011000.", "srw[.]"},
+	{"011111", ".....", ".....", ".....", "1100011000.", "sraw[.]"},
+	{"011111", ".....", ".....", ".....", "1100111000.", "srawi[.]"},
+	{"011111", ".....", ".....", ".....", "110011101..", "sradi[.]"},
+	{"011111", ".....", ".....", ".....", "110111101..", "extswsli[.]"},
+	{"011111", ".....", ".....", "/////", "0000011010.", "cntlzw[.]"},
+	{"011111", ".....", ".....", "/////", "0000111010.", "cntlzd[.]"},
+	{"011111", ".....", ".....", "/////", "0001111010/", "popcntb"},
+	{"011111", ".....", ".....", "/////", "0010011010/", "prtyw"},
+	{"011111", ".....", ".....", "/////", "0010111010/", "prtyd"},
+	{"011111", ".....", ".....", "/////", "0100011010/", "cdtbcd"},
+	{"011111", ".....", ".....", "/////", "0100111010/", "cbcdtd"},
+	{"011111", ".....", ".....", "/////", "0101111010/", "popcntw"},
+	{"011111", ".....", ".....", "/////", "0111111010/", "popcntd"},
+	{"011111", ".....", ".....", "/////", "1000011010.", "cnttzw[.]"},
+	{"011111", ".....", ".....", "/////", "1000111010.", "cnttzd[.]"},
+	{"011111", ".....", ".....", ".....", "1100011010.", "srad[.]"},
+	{"011111", ".....", ".....", "/////", "1110011010.", "extsh[.]"},
+	{"011111", ".....", ".....", "/////", "1110111010.", "extsb[.]"},
+	{"011111", ".....", ".....", "/////", "1111011010.", "extsw[.]"},
+	{"011111", ".....", ".....", ".....", "0000011011.", "sld[.]"},
+	{"011111", ".....", ".....", ".....", "0000111011/", "cntlzdm"},
+	{"011111", ".....", ".....", "/////", "0010011011/", "brw"},
+	{"011111", ".....", ".....", "/////", "0010111011/", "brd"},
+	{"011111", ".....", ".....", "/////", "0011011011/", "brh"},
+	{"011111", ".....", ".....", ".....", "1000011011.", "srd[.]"},
+	{"011111", ".....", ".....", ".....", "1000111011/", "cnttzdm"},
+	{"011111", ".....", ".....", ".....", "0000011100.", "and[.]"},
+	{"011111", ".....", ".....", ".....", "0000111100.", "andc[.]"},
+	{"011111", ".....", ".....", ".....", "0001111100.", "nor[.]"},
+	{"011111", ".....", ".....", ".....", "0010011100/", "pdepd"},
+	{"011111", ".....", ".....", ".....", "0010111100/", "pextd"},
+	{"011111", ".....", ".....", ".....", "0011011100/", "cfuged"},
+	{"011111", ".....", ".....", ".....", "0011111100/", "bpermd"},
+	{"011111", ".....", ".....", ".....", "0100011100.", "eqv[.]"},
+	{"011111", ".....", ".....", ".....", "0100111100.", "xor[.]"},
+	{"011111", ".....", ".....", ".....", "0110011100.", "orc[.]"},
+	{"011111", ".....", ".....", ".....", "0110111100.", "or[.]"},
+	{"011111", ".....", ".....", ".....", "0111011100.", "nand[.]"},
+	{"011111", ".....", ".....", ".....", "0111111100/", "cmpb"},
+	{"011111", "///..", "/////", "/////", "0000011110/", "wait"},
+	{"100000", ".....", ".....", ".....", "...........", "lwz"},
+	{"100001", ".....", ".....", ".....", "...........", "lwzu"},
+	{"100010", ".....", ".....", ".....", "...........", "lbz"},
+	{"100011", ".....", ".....", ".....", "...........", "lbzu"},
+	{"100100", ".....", ".....", ".....", "...........", "stw"},
+	{"100101", ".....", ".....", ".....", "...........", "stwu"},
+	{"100110", ".....", ".....", ".....", "...........", "stb"},
+	{"100111", ".....", ".....", ".....", "...........", "stbu"},
+	{"101000", ".....", ".....", ".....", "...........", "lhz"},
+	{"101001", ".....", ".....", ".....", "...........", "lhzu"},
+	{"101010", ".....", ".....", ".....", "...........", "lha"},
+	{"101011", ".....", ".....", ".....", "...........", "lhau"},
+	{"101100", ".....", ".....", ".....", "...........", "sth"},
+	{"101101", ".....", ".....", ".....", "...........", "sthu"},
+	{"101110", ".....", ".....", ".....", "...........", "lmw"},
+	{"101111", ".....", ".....", ".....", "...........", "stmw"},
+	{"110000", ".....", ".....", ".....", "...........", "lfs"},
+	{"110001", ".....", ".....", ".....", "...........", "lfsu"},
+	{"110010", ".....", ".....", ".....", "...........", "lfd"},
+	{"110011", ".....", ".....", ".....", "...........", "lfdu"},
+	{"110100", ".....", ".....", ".....", "...........", "stfs"},
+	{"110101", ".....", ".....", ".....", "...........", "stfsu"},
+	{"110110", ".....", ".....", ".....", "...........", "stfd"},
+	{"110111", ".....", ".....", ".....", "...........", "stfdu"},
+	{"111000", ".....", ".....", ".....", ".......////", "lq"},
+	{"111001", ".....", ".....", ".....", ".........00", "lfdp"},
+	{"111001", ".....", ".....", ".....", ".........10", "lxsd"},
+	{"111001", ".....", ".....", ".....", ".........11", "lxssp"},
+	{"111010", ".....", ".....", ".....", ".........00", "ld"},
+	{"111010", ".....", ".....", ".....", ".........01", "ldu"},
+	{"111010", ".....", ".....", ".....", ".........10", "lwa"},
+	{"111011", ".....", ".....", ".....", "0001000010.", "dscli[.]"},
+	{"111011", ".....", ".....", ".....", "0001100010.", "dscri[.]"},
+	{"111011", "...//", ".....", ".....", "0011000010/", "dtstdc"},
+	{"111011", "...//", ".....", ".....", "0011100010/", "dtstdg"},
+	{"111011", ".....", ".....", ".....", "0000000010.", "dadd[.]"},
+	{"111011", ".....", ".....", ".....", "0000100010.", "dmul[.]"},
+	{"111011", "...//", ".....", ".....", "0010000010/", "dcmpo"},
+	{"111011", "...//", ".....", ".....", "0010100010/", "dtstex"},
+	{"111011", ".....", "/////", ".....", "0100000010.", "dctdp[.]"},
+	{"111011", ".....", "/////", ".....", "0100100010.", "dctfix[.]"},
+	{"111011", ".....", "..///", ".....", "0101000010.", "ddedpd[.]"},
+	{"111011", ".....", "/////", ".....", "0101100010.", "dxex[.]"},
+	{"111011", ".....", ".....", ".....", "1000000010.", "dsub[.]"},
+	{"111011", ".....", ".....", ".....", "1000100010.", "ddiv[.]"},
+	{"111011", "...//", ".....", ".....", "1010000010/", "dcmpu"},
+	{"111011", "...//", ".....", ".....", "1010100010/", "dtstsf"},
+	{"111011", ".....", "/////", ".....", "1100000010.", "drsp[.]"},
+	{"111011", ".....", "/////", ".....", "1100100010.", "dcffix[.]"},
+	{"111011", ".....", ".////", ".....", "1101000010.", "denbcd[.]"},
+	{"111011", ".....", ".....", ".....", "1101100010.", "diex[.]"},
+	{"111011", ".....", ".....", ".....", "..00000011.", "dqua[.]"},
+	{"111011", ".....", ".....", ".....", "..00100011.", "drrnd[.]"},
+	{"111011", ".....", ".....", ".....", "..01000011.", "dquai[.]"},
+	{"111011", ".....", "////.", ".....", "..01100011.", "drintx[.]"},
+	{"111011", ".....", "////.", ".....", "..11100011.", "drintn[.]"},
+	{"111011", "...//", ".....", ".....", "1010100011/", "dtstsfi"},
+	{"111011", "...//", ".....", ".....", "00000010../", "xvi8ger4pp"},
+	{"111011", "...//", ".....", ".....", "00010010../", "xvf16ger2pp"},
+	{"111011", "...//", ".....", ".....", "00011010../", "xvf32gerpp"},
+	{"111011", "...//", ".....", ".....", "00100010../", "xvi4ger8pp"},
+	{"111011", "...//", ".....", ".....", "11010010../", "xvf16ger2nn"},
+	{"111011", "...//", ".....", ".....", "11011010../", "xvf32gernn"},
+	{"111011", "...//", ".....", ".....", "11110010../", "xvbf16ger2nn"},
+	{"111011", "...//", ".....", ".....", "11111010../", "xvf64gernn"},
+	{"111011", "...//", ".....", ".....", "00000011../", "xvi8ger4"},
+	{"111011", "...//", ".....", ".....", "00010011../", "xvf16ger2"},
+	{"111011", "...//", ".....", ".....", "00011011../", "xvf32ger"},
+	{"111011", "...//", ".....", ".....", "00100011../", "xvi4ger8"},
+	{"111011", "...//", ".....", ".....", "00101011../", "xvi16ger2s"},
+	{"111011", "...//", ".....", ".....", "00110011../", "xvbf16ger2"},
+	{"111011", "...//", ".....", ".....", "00111011../", "xvf64ger"},
+	{"111011", "...//", ".....", ".....", "01001011../", "xvi16ger2"},
+	{"111011", "...//", ".....", ".....", "01101011../", "xvi16ger2pp"},
+	{"111011", "...//", ".....", ".....", "01100011../", "xvi8ger4spp"},
+	{"111011", ".....", "/////", ".....", "1101001110.", "fcfids[.]"},
+	{"111011", ".....", "/////", ".....", "1111001110.", "fcfidus[.]"},
+	{"111011", ".....", ".....", ".....", "/////10010.", "fdivs[.]"},
+	{"111011", ".....", ".....", ".....", "/////10100.", "fsubs[.]"},
+	{"111011", ".....", ".....", ".....", "/////10101.", "fadds[.]"},
+	{"111011", ".....", "/////", ".....", "/////10110.", "fsqrts[.]"},
+	{"111011", ".....", "/////", ".....", "/////11000.", "fres[.]"},
+	{"111011", ".....", ".....", "/////", ".....11001.", "fmuls[.]"},
+	{"111011", ".....", "/////", ".....", "/////11010.", "frsqrtes[.]"},
+	{"111011", ".....", ".....", ".....", ".....11100.", "fmsubs[.]"},
+	{"111011", ".....", ".....", ".....", ".....11101.", "fmadds[.]"},
+	{"111011", ".....", ".....", ".....", ".....11110.", "fnmsubs[.]"},
+	{"111011", ".....", ".....", ".....", ".....11111.", "fnmadds[.]"},
+	{"111100", ".....", ".....", ".....", "00000000...", "xsaddsp"},
+	{"111100", ".....", ".....", ".....", "00001000...", "xssubsp"},
+	{"111100", ".....", ".....", ".....", "00010000...", "xsmulsp"},
+	{"111100", ".....", ".....", ".....", "00011000...", "xsdivsp"},
+	{"111100", ".....", ".....", ".....", "00100000...", "xsadddp"},
+	{"111100", ".....", ".....", ".....", "00101000...", "xssubdp"},
+	{"111100", ".....", ".....", ".....", "00110000...", "xsmuldp"},
+	{"111100", ".....", ".....", ".....", "00111000...", "xsdivdp"},
+	{"111100", ".....", ".....", ".....", "01000000...", "xvaddsp"},
+	{"111100", ".....", ".....", ".....", "01001000...", "xvsubsp"},
+	{"111100", ".....", ".....", ".....", "01010000...", "xvmulsp"},
+	{"111100", ".....", ".....", ".....", "01011000...", "xvdivsp"},
+	{"111100", ".....", ".....", ".....", "01100000...", "xvadddp"},
+	{"111100", ".....", ".....", ".....", "01101000...", "xvsubdp"},
+	{"111100", ".....", ".....", ".....", "01110000...", "xvmuldp"},
+	{"111100", ".....", ".....", ".....", "01111000...", "xvdivdp"},
+	{"111100", ".....", ".....", ".....", "10000000...", "xsmaxcdp"},
+	{"111100", ".....", ".....", ".....", "10001000...", "xsmincdp"},
+	{"111100", ".....", ".....", ".....", "10010000...", "xsmaxjdp"},
+	{"111100", ".....", ".....", ".....", "10011000...", "xsminjdp"},
+	{"111100", ".....", ".....", ".....", "10100000...", "xsmaxdp"},
+	{"111100", ".....", ".....", ".....", "10101000...", "xsmindp"},
+	{"111100", ".....", ".....", ".....", "10110000...", "xscpsgndp"},
+	{"111100", ".....", ".....", ".....", "11000000...", "xvmaxsp"},
+	{"111100", ".....", ".....", ".....", "11001000...", "xvminsp"},
+	{"111100", ".....", ".....", ".....", "11010000...", "xvcpsgnsp"},
+	{"111100", ".....", ".....", ".....", "11011000...", "xviexpsp"},
+	{"111100", ".....", ".....", ".....", "11100000...", "xvmaxdp"},
+	{"111100", ".....", ".....", ".....", "11101000...", "xvmindp"},
+	{"111100", ".....", ".....", ".....", "11110000...", "xvcpsgndp"},
+	{"111100", ".....", ".....", ".....", "11111000...", "xviexpdp"},
+	{"111100", ".....", ".....", ".....", "00000001...", "xsmaddasp"},
+	{"111100", ".....", ".....", ".....", "00001001...", "xsmaddmsp"},
+	{"111100", ".....", ".....", ".....", "00010001...", "xsmsubasp"},
+	{"111100", ".....", ".....", ".....", "00011001...", "xsmsubmsp"},
+	{"111100", ".....", ".....", ".....", "00100001...", "xsmaddadp"},
+	{"111100", ".....", ".....", ".....", "00101001...", "xsmaddmdp"},
+	{"111100", ".....", ".....", ".....", "00110001...", "xsmsubadp"},
+	{"111100", ".....", ".....", ".....", "00111001...", "xsmsubmdp"},
+	{"111100", ".....", ".....", ".....", "01000001...", "xvmaddasp"},
+	{"111100", ".....", ".....", ".....", "01001001...", "xvmaddmsp"},
+	{"111100", ".....", ".....", ".....", "01010001...", "xvmsubasp"},
+	{"111100", ".....", ".....", ".....", "01011001...", "xvmsubmsp"},
+	{"111100", ".....", ".....", ".....", "01100001...", "xvmaddadp"},
+	{"111100", ".....", ".....", ".....", "01101001...", "xvmaddmdp"},
+	{"111100", ".....", ".....", ".....", "01110001...", "xvmsubadp"},
+	{"111100", ".....", ".....", ".....", "01111001...", "xvmsubmdp"},
+	{"111100", ".....", ".....", ".....", "10000001...", "xsnmaddasp"},
+	{"111100", ".....", ".....", ".....", "10001001...", "xsnmaddmsp"},
+	{"111100", ".....", ".....", ".....", "10010001...", "xsnmsubasp"},
+	{"111100", ".....", ".....", ".....", "10011001...", "xsnmsubmsp"},
+	{"111100", ".....", ".....", ".....", "10100001...", "xsnmaddadp"},
+	{"111100", ".....", ".....", ".....", "10101001...", "xsnmaddmdp"},
+	{"111100", ".....", ".....", ".....", "10110001...", "xsnmsubadp"},
+	{"111100", ".....", ".....", ".....", "10111001...", "xsnmsubmdp"},
+	{"111100", ".....", ".....", ".....", "11000001...", "xvnmaddasp"},
+	{"111100", ".....", ".....", ".....", "11001001...", "xvnmaddmsp"},
+	{"111100", ".....", ".....", ".....", "11010001...", "xvnmsubasp"},
+	{"111100", ".....", ".....", ".....", "11011001...", "xvnmsubmsp"},
+	{"111100", ".....", ".....", ".....", "11100001...", "xvnmaddadp"},
+	{"111100", ".....", ".....", ".....", "11101001...", "xvnmaddmdp"},
+	{"111100", ".....", ".....", ".....", "11110001...", "xvnmsubadp"},
+	{"111100", ".....", ".....", ".....", "11111001...", "xvnmsubmdp"},
+	{"111100", ".....", ".....", ".....", "0..00010...", "xxsldwi"},
+	{"111100", ".....", ".....", ".....", "0..01010...", "xxpermdi"},
+	{"111100", ".....", ".....", ".....", "00010010...", "xxmrghw"},
+	{"111100", ".....", ".....", ".....", "00011010...", "xxperm"},
+	{"111100", ".....", ".....", ".....", "00110010...", "xxmrglw"},
+	{"111100", ".....", ".....", ".....", "00111010...", "xxpermr"},
+	{"111100", ".....", ".....", ".....", "10000010...", "xxland"},
+	{"111100", ".....", ".....", ".....", "10001010...", "xxlandc"},
+	{"111100", ".....", ".....", ".....", "10010010...", "xxlor"},
+	{"111100", ".....", ".....", ".....", "10011010...", "xxlxor"},
+	{"111100", ".....", ".....", ".....", "10100010...", "xxlnor"},
+	{"111100", ".....", ".....", ".....", "10101010...", "xxlorc"},
+	{"111100", ".....", ".....", ".....", "10110010...", "xxlnand"},
+	{"111100", ".....", ".....", ".....", "10111010...", "xxleqv"},
+	{"111100", ".....", "///..", ".....", "010100100..", "xxspltw"},
+	{"111100", ".....", "00...", ".....", "0101101000.", "xxspltib"},
+	{"111100", ".....", "11111", ".....", "0101101000.", "lxvkq"},
+	{"111100", ".....", "/....", ".....", "010100101..", "xxextractuw"},
+	{"111100", ".....", "/....", ".....", "010110101..", "xxinsertw"},
+	{"111100", ".....", ".....", ".....", ".1000011...", "xvcmpeqsp[.]"},
+	{"111100", ".....", ".....", ".....", ".1001011...", "xvcmpgtsp[.]"},
+	{"111100", ".....", ".....", ".....", ".1010011...", "xvcmpgesp[.]"},
+	{"111100", ".....", ".....", ".....", ".1100011...", "xvcmpeqdp[.]"},
+	{"111100", ".....", ".....", ".....", ".1101011...", "xvcmpgtdp[.]"},
+	{"111100", ".....", ".....", ".....", ".1110011...", "xvcmpgedp[.]"},
+	{"111100", ".....", ".....", ".....", "00000011...", "xscmpeqdp"},
+	{"111100", ".....", ".....", ".....", "00001011...", "xscmpgtdp"},
+	{"111100", ".....", ".....", ".....", "00010011...", "xscmpgedp"},
+	{"111100", "...//", ".....", ".....", "00100011../", "xscmpudp"},
+	{"111100", "...//", ".....", ".....", "00101011../", "xscmpodp"},
+	{"111100", "...//", ".....", ".....", "00111011../", "xscmpexpdp"},
+	{"111100", ".....", "/////", ".....", "001001000..", "xscvdpuxws"},
+	{"111100", ".....", "/////", ".....", "001011000..", "xscvdpsxws"},
+	{"111100", ".....", "/////", ".....", "010001000..", "xvcvspuxws"},
+	{"111100", ".....", "/////", ".....", "010011000..", "xvcvspsxws"},
+	{"111100", ".....", "/////", ".....", "010101000..", "xvcvuxwsp"},
+	{"111100", ".....", "/////", ".....", "010111000..", "xvcvsxwsp"},
+	{"111100", ".....", "/////", ".....", "011001000..", "xvcvdpuxws"},
+	{"111100", ".....", "/////", ".....", "011011000..", "xvcvdpsxws"},
+	{"111100", ".....", "/////", ".....", "011101000..", "xvcvuxwdp"},
+	{"111100", ".....", "/////", ".....", "011111000..", "xvcvsxwdp"},
+	{"111100", ".....", "/////", ".....", "100101000..", "xscvuxdsp"},
+	{"111100", ".....", "/////", ".....", "100111000..", "xscvsxdsp"},
+	{"111100", ".....", "/////", ".....", "101001000..", "xscvdpuxds"},
+	{"111100", ".....", "/////", ".....", "101011000..", "xscvdpsxds"},
+	{"111100", ".....", "/////", ".....", "101101000..", "xscvuxddp"},
+	{"111100", ".....", "/////", ".....", "101111000..", "xscvsxddp"},
+	{"111100", ".....", "/////", ".....", "110001000..", "xvcvspuxds"},
+	{"111100", ".....", "/////", ".....", "110011000..", "xvcvspsxds"},
+	{"111100", ".....", "/////", ".....", "110101000..", "xvcvuxdsp"},
+	{"111100", ".....", "/////", ".....", "110111000..", "xvcvsxdsp"},
+	{"111100", ".....", "/////", ".....", "111001000..", "xvcvdpuxds"},
+	{"111100", ".....", "/////", ".....", "111011000..", "xvcvdpsxds"},
+	{"111100", ".....", "/////", ".....", "111101000..", "xvcvuxddp"},
+	{"111100", ".....", "/////", ".....", "111111000..", "xvcvsxddp"},
+	{"111100", ".....", "/////", ".....", "001001001..", "xsrdpi"},
+	{"111100", ".....", "/////", ".....", "001011001..", "xsrdpiz"},
+	{"111100", ".....", "/////", ".....", "001101001..", "xsrdpip"},
+	{"111100", ".....", "/////", ".....", "001111001..", "xsrdpim"},
+	{"111100", ".....", "/////", ".....", "010001001..", "xvrspi"},
+	{"111100", ".....", "/////", ".....", "010011001..", "xvrspiz"},
+	{"111100", ".....", "/////", ".....", "010101001..", "xvrspip"},
+	{"111100", ".....", "/////", ".....", "010111001..", "xvrspim"},
+	{"111100", ".....", "/////", ".....", "011001001..", "xvrdpi"},
+	{"111100", ".....", "/////", ".....", "011011001..", "xvrdpiz"},
+	{"111100", ".....", "/////", ".....", "011101001..", "xvrdpip"},
+	{"111100", ".....", "/////", ".....", "011111001..", "xvrdpim"},
+	{"111100", ".....", "/////", ".....", "100001001..", "xscvdpsp"},
+	{"111100", ".....", "/////", ".....", "100011001..", "xsrsp"},
+	{"111100", ".....", "/////", ".....", "101001001..", "xscvspdp"},
+	{"111100", ".....", "/////", ".....", "101011001..", "xsabsdp"},
+	{"111100", ".....", "/////", ".....", "101101001..", "xsnabsdp"},
+	{"111100", ".....", "/////", ".....", "101111001..", "xsnegdp"},
+	{"111100", ".....", "/////", ".....", "110001001..", "xvcvdpsp"},
+	{"111100", ".....", "/////", ".....", "110011001..", "xvabssp"},
+	{"111100", ".....", "/////", ".....", "110101001..", "xvnabssp"},
+	{"111100", ".....", "/////", ".....", "110111001..", "xvnegsp"},
+	{"111100", ".....", "/////", ".....", "111001001..", "xvcvspdp"},
+	{"111100", ".....", "/////", ".....", "111011001..", "xvabsdp"},
+	{"111100", ".....", "/////", ".....", "111101001..", "xvnabsdp"},
+	{"111100", ".....", "/////", ".....", "111111001..", "xvnegdp"},
+	{"111100", "...//", ".....", ".....", "00111101../", "xstdivdp"},
+	{"111100", "...//", ".....", ".....", "01011101../", "xvtdivsp"},
+	{"111100", "...//", ".....", ".....", "01111101../", "xvtdivdp"},
+	{"111100", ".....", ".....", ".....", "1101.101...", "xvtstdcsp"},
+	{"111100", ".....", ".....", ".....", "1111.101...", "xvtstdcdp"},
+	{"111100", ".....", "/////", ".....", "000001010..", "xsrsqrtesp"},
+	{"111100", ".....", "/////", ".....", "000011010..", "xsresp"},
+	{"111100", ".....", "/////", ".....", "001001010..", "xsrsqrtedp"},
+	{"111100", ".....", "/////", ".....", "001011010..", "xsredp"},
+	{"111100", "...//", "/////", ".....", "001101010./", "xstsqrtdp"},
+	{"111100", ".....", "/////", ".....", "010001010..", "xvrsqrtesp"},
+	{"111100", ".....", "/////", ".....", "010011010..", "xvresp"},
+	{"111100", "...//", "/////", ".....", "010101010./", "xvtsqrtsp"},
+	{"111100", ".....", "/////", ".....", "011001010..", "xvrsqrtedp"},
+	{"111100", ".....", "/////", ".....", "011011010..", "xvredp"},
+	{"111100", "...//", "/////", ".....", "011101010./", "xvtsqrtdp"},
+	{"111100", ".....", ".....", ".....", "100101010./", "xststdcsp"},
+	{"111100", ".....", ".....", ".....", "101101010./", "xststdcdp"},
+	{"111100", ".....", ".....", ".....", "1110010100.", "xxgenpcvbm"},
+	{"111100", ".....", ".....", ".....", "1110110100.", "xxgenpcvwm"},
+	{"111100", ".....", ".....", ".....", "1110010101.", "xxgenpcvhm"},
+	{"111100", ".....", ".....", ".....", "1110110101.", "xxgenpcvdm"},
+	{"111100", ".....", "/////", ".....", "000001011..", "xssqrtsp"},
+	{"111100", ".....", "/////", ".....", "001001011..", "xssqrtdp"},
+	{"111100", ".....", "/////", ".....", "001101011..", "xsrdpic"},
+	{"111100", ".....", "/////", ".....", "010001011..", "xvsqrtsp"},
+	{"111100", ".....", "/////", ".....", "010101011..", "xvrspic"},
+	{"111100", ".....", "/////", ".....", "011001011..", "xvsqrtdp"},
+	{"111100", ".....", "/////", ".....", "011101011..", "xvrdpic"},
+	{"111100", ".....", "/////", ".....", "100001011..", "xscvdpspn"},
+	{"111100", ".....", "/////", ".....", "101001011..", "xscvspdpn"},
+	{"111100", ".....", "00000", ".....", "101011011./", "xsxexpdp"},
+	{"111100", ".....", "00001", ".....", "101011011./", "xsxsigdp"},
+	{"111100", ".....", "10000", ".....", "101011011..", "xscvhpdp"},
+	{"111100", ".....", "10001", ".....", "101011011..", "xscvdphp"},
+	{"111100", ".....", "00000", ".....", "111011011..", "xvxexpdp"},
+	{"111100", ".....", "00001", ".....", "111011011..", "xvxsigdp"},
+	{"111100", "...//", "00010", ".....", "111011011./", "xvtlsbb"},
+	{"111100", ".....", "00111", ".....", "111011011..", "xxbrh"},
+	{"111100", ".....", "01000", ".....", "111011011..", "xvxexpsp"},
+	{"111100", ".....", "01001", ".....", "111011011..", "xvxsigsp"},
+	{"111100", ".....", "01111", ".....", "111011011..", "xxbrw"},
+	{"111100", ".....", "10000", ".....", "111011011..", "xvcvbf16sp"},
+	{"111100", ".....", "10001", ".....", "111011011..", "xvcvspbf16"},
+	{"111100", ".....", "10111", ".....", "111011011..", "xxbrd"},
+	{"111100", ".....", "11000", ".....", "111011011..", "xvcvhpsp"},
+	{"111100", ".....", "11001", ".....", "111011011..", "xvcvsphp"},
+	{"111100", ".....", "11111", ".....", "111011011..", "xxbrq"},
+	{"111100", ".....", ".....", ".....", "1110010110.", "xsiexpdp"},
+	{"111100", ".....", ".....", ".....", ".....11....", "xxsel"},
+	{"111101", ".....", ".....", ".....", ".........00", "stfdp"},
+	{"111101", ".....", ".....", ".....", ".........10", "stxsd"},
+	{"111101", ".....", ".....", ".....", ".........11", "stxssp"},
+	{"111101", ".....", ".....", ".....", "........001", "lxv"},
+	{"111101", ".....", ".....", ".....", "........101", "stxv"},
+	{"111110", ".....", ".....", ".....", ".........00", "std"},
+	{"111110", ".....", ".....", ".....", ".........01", "stdu"},
+	{"111110", ".....", ".....", ".....", ".........10", "stq"},
+	{"111111", "...//", ".....", ".....", "0000000000/", "fcmpu"},
+	{"111111", "...//", ".....", ".....", "0000100000/", "fcmpo"},
+	{"111111", "...//", "...//", "/////", "0001000000/", "mcrfs"},
+	{"111111", "...//", ".....", ".....", "0010000000/", "ftdiv"},
+	{"111111", "...//", "/////", ".....", "0010100000/", "ftsqrt"},
+	{"111111", ".....", ".....", ".....", "0001000010.", "dscliq[.]"},
+	{"111111", ".....", ".....", ".....", "0001100010.", "dscriq[.]"},
+	{"111111", "...//", ".....", ".....", "0011000010/", "dtstdcq"},
+	{"111111", "...//", ".....", ".....", "0011100010/", "dtstdgq"},
+	{"111111", ".....", ".....", ".....", "0000000010.", "daddq[.]"},
+	{"111111", ".....", ".....", ".....", "0000100010.", "dmulq[.]"},
+	{"111111", "...//", ".....", ".....", "0010000010/", "dcmpoq"},
+	{"111111", "...//", ".....", ".....", "0010100010/", "dtstexq"},
+	{"111111", ".....", "/////", ".....", "0100000010.", "dctqpq[.]"},
+	{"111111", ".....", "/////", ".....", "0100100010.", "dctfixq[.]"},
+	{"111111", ".....", "..///", ".....", "0101000010.", "ddedpdq[.]"},
+	{"111111", ".....", "/////", ".....", "0101100010.", "dxexq[.]"},
+	{"111111", ".....", ".....", ".....", "1000000010.", "dsubq[.]"},
+	{"111111", ".....", ".....", ".....", "1000100010.", "ddivq[.]"},
+	{"111111", "...//", ".....", ".....", "1010000010/", "dcmpuq"},
+	{"111111", "...//", ".....", ".....", "1010100010/", "dtstsfq"},
+	{"111111", ".....", "/////", ".....", "1100000010.", "drdpq[.]"},
+	{"111111", ".....", "/////", ".....", "1100100010.", "dcffixq[.]"},
+	{"111111", ".....", ".////", ".....", "1101000010.", "denbcdq[.]"},
+	{"111111", ".....", ".....", ".....", "1101100010.", "diexq[.]"},
+	{"111111", ".....", "00000", ".....", "1111100010/", "dcffixqq"},
+	{"111111", ".....", "00001", ".....", "1111100010/", "dctfixqq"},
+	{"111111", ".....", ".....", ".....", "..00000011.", "dquaq[.]"},
+	{"111111", ".....", ".....", ".....", "..00100011.", "drrndq[.]"},
+	{"111111", ".....", ".....", ".....", "..01000011.", "dquaiq[.]"},
+	{"111111", ".....", "////.", ".....", "..01100011.", "drintxq[.]"},
+	{"111111", ".....", "////.", ".....", "..11100011.", "drintnq[.]"},
+	{"111111", "...//", ".....", ".....", "1010100011/", "dtstsfiq"},
+	{"111111", ".....", ".....", ".....", "0000000100.", "xsaddqp[o]"},
+	{"111111", ".....", ".....", ".....", "0000100100.", "xsmulqp[o]"},
+	{"111111", ".....", ".....", ".....", "0001000100/", "xscmpeqqp"},
+	{"111111", ".....", ".....", ".....", "0001100100/", "xscpsgnqp"},
+	{"111111", "...//", ".....", ".....", "0010000100/", "xscmpoqp"},
+	{"111111", "...//", ".....", ".....", "0010100100/", "xscmpexpqp"},
+	{"111111", ".....", ".....", ".....", "0011000100/", "xscmpgeqp"},
+	{"111111", ".....", ".....", ".....", "0011100100/", "xscmpgtqp"},
+	{"111111", ".....", ".....", ".....", "0110000100.", "xsmaddqp[o]"},
+	{"111111", ".....", ".....", ".....", "0110100100.", "xsmsubqp[o]"},
+	{"111111", ".....", ".....", ".....", "0111000100.", "xsnmaddqp[o]"},
+	{"111111", ".....", ".....", ".....", "0111100100.", "xsnmsubqp[o]"},
+	{"111111", ".....", ".....", ".....", "1000000100.", "xssubqp[o]"},
+	{"111111", ".....", ".....", ".....", "1000100100.", "xsdivqp[o]"},
+	{"111111", "...//", ".....", ".....", "1010000100/", "xscmpuqp"},
+	{"111111", ".....", ".....", ".....", "1010100100/", "xsmaxcqp"},
+	{"111111", ".....", ".....", ".....", "1011000100/", "xststdcqp"},
+	{"111111", ".....", ".....", ".....", "1011100100/", "xsmincqp"},
+	{"111111", ".....", "00000", ".....", "1100100100/", "xsabsqp"},
+	{"111111", ".....", "00010", ".....", "1100100100/", "xsxexpqp"},
+	{"111111", ".....", "01000", ".....", "1100100100/", "xsnabsqp"},
+	{"111111", ".....", "10000", ".....", "1100100100/", "xsnegqp"},
+	{"111111", ".....", "10010", ".....", "1100100100/", "xsxsigqp"},
+	{"111111", ".....", "11011", ".....", "1100100100.", "xssqrtqp[o]"},
+	{"111111", ".....", "00000", ".....", "1101000100/", "xscvqpuqz"},
+	{"111111", ".....", "00001", ".....", "1101000100/", "xscvqpuwz"},
+	{"111111", ".....", "00010", ".....", "1101000100/", "xscvudqp"},
+	{"111111", ".....", "00011", ".....", "1101000100/", "xscvuqqp"},
+	{"111111", ".....", "01000", ".....", "1101000100/", "xscvqpsqz"},
+	{"111111", ".....", "01001", ".....", "1101000100/", "xscvqpswz"},
+	{"111111", ".....", "01010", ".....", "1101000100/", "xscvsdqp"},
+	{"111111", ".....", "01011", ".....", "1101000100/", "xscvsqqp"},
+	{"111111", ".....", "10001", ".....", "1101000100/", "xscvqpudz"},
+	{"111111", ".....", "10100", ".....", "1101000100.", "xscvqpdp[o]"},
+	{"111111", ".....", "10110", ".....", "1101000100/", "xscvdpqp"},
+	{"111111", ".....", "11001", ".....", "1101000100/", "xscvqpsdz"},
+	{"111111", ".....", ".....", ".....", "1101100100/", "xsiexpqp"},
+	{"111111", ".....", "////.", ".....", "..00000101.", "xsrqpi[x]"},
+	{"111111", ".....", "////.", ".....", "..00100101/", "xsrqpxp"},
+	{"111111", ".....", "/////", "/////", "0000100110.", "mtfsb"},
+	{"111111", ".....", "/////", "/////", "0001000110.", "mtfsb"},
+	{"111111", "...//", "////.", "..../", "0010000110.", "mtfsfi[.]"},
+	{"111111", ".....", ".....", ".....", "1101000110/", "fmrgow"},
+	{"111111", ".....", ".....", ".....", "1111000110/", "fmrgew"},
+	{"111111", ".....", "00000", "/////", "1001000111.", "mffs[.]"},
+	{"111111", ".....", "00001", "/////", "1001000111/", "mffsce"},
+	{"111111", ".....", "10100", ".....", "1001000111/", "mffscdrn"},
+	{"111111", ".....", "10101", "//...", "1001000111/", "mffscdrni"},
+	{"111111", ".....", "10110", ".....", "1001000111/", "mffscrn"},
+	{"111111", ".....", "10111", "///..", "1001000111/", "mffscrni"},
+	{"111111", ".....", "11000", "/////", "1001000111/", "mffsl"},
+	{"111111", ".....", ".....", ".....", "1011000111.", "mtfsf[.]"},
+	{"111111", ".....", ".....", ".....", "0000001000.", "fcpsgn[.]"},
+	{"111111", ".....", "/////", ".....", "0000101000.", "fneg[.]"},
+	{"111111", ".....", "/////", ".....", "0001001000.", "fmr[.]"},
+	{"111111", ".....", "/////", ".....", "0010001000.", "fnabs[.]"},
+	{"111111", ".....", "/////", ".....", "0100001000.", "fabs[.]"},
+	{"111111", ".....", "/////", ".....", "0110001000.", "frin[.]"},
+	{"111111", ".....", "/////", ".....", "0110101000.", "friz[.]"},
+	{"111111", ".....", "/////", ".....", "0111001000.", "frip[.]"},
+	{"111111", ".....", "/////", ".....", "0111101000.", "frim[.]"},
+	{"111111", ".....", "/////", ".....", "0000001100.", "frsp[.]"},
+	{"111111", ".....", "/////", ".....", "0000001110.", "fctiw[.]"},
+	{"111111", ".....", "/////", ".....", "0010001110.", "fctiwu[.]"},
+	{"111111", ".....", "/////", ".....", "1100101110.", "fctid[.]"},
+	{"111111", ".....", "/////", ".....", "1101001110.", "fcfid[.]"},
+	{"111111", ".....", "/////", ".....", "1110101110.", "fctidu[.]"},
+	{"111111", ".....", "/////", ".....", "1111001110.", "fcfidu[.]"},
+	{"111111", ".....", "/////", ".....", "0000001111.", "fctiwz[.]"},
+	{"111111", ".....", "/////", ".....", "0010001111.", "fctiwuz[.]"},
+	{"111111", ".....", "/////", ".....", "1100101111.", "fctidz[.]"},
+	{"111111", ".....", "/////", ".....", "1110101111.", "fctiduz[.]"},
+	{"111111", ".....", ".....", ".....", "/////10010.", "fdiv[.]"},
+	{"111111", ".....", ".....", ".....", "/////10100.", "fsub[.]"},
+	{"111111", ".....", ".....", ".....", "/////10101.", "fadd[.]"},
+	{"111111", ".....", "/////", ".....", "/////10110.", "fsqrt[.]"},
+	{"111111", ".....", ".....", ".....", ".....10111.", "fsel[.]"},
+	{"111111", ".....", "/////", ".....", "/////11000.", "fre[.]"},
+	{"111111", ".....", ".....", "/////", ".....11001.", "fmul[.]"},
+	{"111111", ".....", "/////", ".....", "/////11010.", "frsqrte[.]"},
+	{"111111", ".....", ".....", ".....", ".....11100.", "fmsub[.]"},
+	{"111111", ".....", ".....", ".....", ".....11101.", "fmadd[.]"},
+	{"111111", ".....", ".....", ".....", ".....11110.", "fnmsub[.]"},
+	{"111111", ".....", ".....", ".....", ".....11111.", "fnmadd[.]"},
+	{"111011", "...//", ".....", ".....", "00101010../", "xvi16ger2spp"},
+	{"111011", "...//", ".....", ".....", "00110010../", "xvbf16ger2pp"},
+	{"111011", "...//", ".....", ".....", "00111010../", "xvf64gerpp"},
+	{"111011", "...//", ".....", ".....", "01010010../", "xvf16ger2np"},
+	{"111011", "...//", ".....", ".....", "01011010../", "xvf32gernp"},
+	{"111011", "...//", ".....", ".....", "01110010../", "xvbf16ger2np"},
+	{"111011", "...//", ".....", ".....", "01111010../", "xvf64gernp"},
+	{"111011", "...//", ".....", ".....", "10010010../", "xvf16ger2pn"},
+	{"111011", "...//", ".....", ".....", "10011010../", "xvf32gerpn"},
+	{"111011", "...//", ".....", ".....", "10110010../", "xvbf16ger2pn"},
+	{"111011", "...//", ".....", ".....", "10111010../", "xvf64gerpn"},
+};
+
+struct {
+	Ins pfx;
+	Ins ins;
+	char *mneomic;
+} instab2[] = {
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"111101", ".....", ".....", ".....", "..........."}, "pstd"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"111110", ".....", ".....", ".....", "..........."}, "pstxvp"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"100000", ".....", ".....", ".....", "..........."}, "plwz"},
+	{{"000001", "01000", "0////", ".....", "..........."}, {"100000", ".....", "000..", ".....", "..........."}, "xxsplti32dx"},
+	{{"000001", "01000", "0////", ".....", "..........."}, {"100000", ".....", "0010.", ".....", "..........."}, "xxspltidp"},
+	{{"000001", "01000", "0////", ".....", "..........."}, {"100000", ".....", "0011.", ".....", "..........."}, "xxspltiw"},
+	{{"000001", "01000", "0////", "/////", "///////////"}, {"100001", ".....", ".....", ".....", ".....00...."}, "xxblendvb"},
+	{{"000001", "01000", "0////", "/////", "///////////"}, {"100001", ".....", ".....", ".....", ".....01...."}, "xxblendvh"},
+	{{"000001", "01000", "0////", "/////", "///////////"}, {"100001", ".....", ".....", ".....", ".....10...."}, "xxblendvw"},
+	{{"000001", "01000", "0////", "/////", "///////////"}, {"100001", ".....", ".....", ".....", ".....11...."}, "xxblendvd"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"100010", ".....", ".....", ".....", "..........."}, "plbz"},
+	{{"000001", "01000", "0////", "/////", "////////..."}, {"100010", ".....", ".....", ".....", ".....00...."}, "xxpermx"},
+	{{"000001", "01000", "0////", "/////", "///........"}, {"100010", ".....", ".....", ".....", ".....01...."}, "xxeval"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"100100", ".....", ".....", ".....", "..........."}, "pstw"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"100110", ".....", ".....", ".....", "..........."}, "pstb"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"101000", ".....", ".....", ".....", "..........."}, "plhz"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"101001", ".....", ".....", ".....", "..........."}, "plwa"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"101010", ".....", ".....", ".....", "..........."}, "plxsd"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"101010", ".....", ".....", ".....", "..........."}, "plha"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"101011", ".....", ".....", ".....", "..........."}, "plxssp"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"101100", ".....", ".....", ".....", "..........."}, "psth"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"101110", ".....", ".....", ".....", "..........."}, "pstxsd"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"101111", ".....", ".....", ".....", "..........."}, "pstxssp"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"110000", ".....", ".....", ".....", "..........."}, "plfs"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"11001.", ".....", ".....", ".....", "..........."}, "plxv"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"110010", ".....", ".....", ".....", "..........."}, "plfd"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"110100", ".....", ".....", ".....", "..........."}, "pstfs"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"11011.", ".....", ".....", ".....", "..........."}, "pstxv"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"110110", ".....", ".....", ".....", "..........."}, "pstfd"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"111000", ".....", ".....", ".....", "..........."}, "plq"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"111001", ".....", ".....", ".....", "..........."}, "pld"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"111010", ".....", ".....", ".....", "..........."}, "plxvp"},
+	{{"000001", "11100", "1////", "..../", "///........"}, {"111011", "...//", ".....", ".....", "00000010../"}, "pmxvi8ger4pp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "00010010../"}, "pmxvf16ger2pp"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "00011010../"}, "pmxvf32gerpp"},
+	{{"000001", "11100", "1////", ".....", "..........."}, {"111011", "...//", ".....", ".....", "00100010../"}, "pmxvi4ger8pp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "00101010../"}, "pmxvi16ger2spp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "00110010../"}, "pmxvbf16ger2pp"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "00111010../"}, "pmxvf64gerpp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "01010010../"}, "pmxvf16ger2np"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "01011010../"}, "pmxvf32gernp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "01110010../"}, "pmxvbf16ger2n"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "01111010../"}, "pmxvf64gernp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "10010010../"}, "pmxvf16ger2pn"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "10011010../"}, "pmxvf32gerpn"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "10110010../"}, "pmxvbf16ger2pn"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "10111010../"}, "pmxvf64gerpn"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "11010010../"}, "pmxvf16ger2nn"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "11011010../"}, "pmxvf32gernn"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "11110010../"}, "pmxvbf16ger2nn"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "11111010../"}, "pmxvf64gernn"},
+	{{"000001", "11100", "1////", "..../", "///........"}, {"111011", "...//", ".....", ".....", "00000011../"}, "pmxvi8ger4"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "00010011../"}, "pmxvf16ger2"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "00011011../"}, "pmxvf32ger"},
+	{{"000001", "11100", "1////", ".....", "..........."}, {"111011", "...//", ".....", ".....", "00100011../"}, "pmxvi4ger8"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "00101011../"}, "pmxvi16ger2s"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "00110011../"}, "pmxvbf16ger2"},
+	{{"000001", "11100", "1////", "/////", "///........"}, {"111011", "...//", ".....", ".....", "00111011../"}, "pmxvf64ger"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "01001011../"}, "pmxvi16ger2"},
+	{{"000001", "11100", "1////", "..../", "///........"}, {"111011", "...//", ".....", ".....", "01100011../"}, "pmxvi8ger4spp"},
+	{{"000001", "11100", "1////", "..///", "///........"}, {"111011", "...//", ".....", ".....", "01101011../"}, "pmxvi16ger2pp"},
+	{{"000001", "000//", ".//..", ".....", "..........."}, {"111100", ".....", ".....", ".....", "..........."}, "pstq"},
+	{{"000001", "100//", ".//..", ".....", "..........."}, {"001110", ".....", ".....", ".....", "..........."}, "paddi"},
+	{{"000001", "11000", "000//", "/////", "///////////"}, {"......", ".....", ".....", ".....", "..........."}, "pnop"},
+};
+
+static int which = 0;
+
+static ulong
+str2i(char *s)
+{
+	ulong o;
+
+	for(o = 0; *s != '\0'; s++){
+		o <<= 1;
+		switch(*s){
+		case '.':
+			o |= which&1;
+			break;
+		case '0': case '/':
+			break;
+		case '1':
+			o |= 1;
+			break;
+		}
+	}
+	return o;
+}
+
+static ulong
+parsefmt(Ins *w)
+{
+	return (str2i(w->op)<<26) | (str2i(w->a1)<<21) | (str2i(w->a2)<<16) | (str2i(w->a3)<<11) | (str2i(w->xop)<<0);
+}
+
+#define GET4(p) (u32int)(p)[3] | (u32int)(p)[2]<<8 | (u32int)(p)[1]<<16 | (u32int)(p)[0]<<24
+#define PUT4(p, u) (p)[0] = (u)>>24, (p)[1] = (u)>>16, (p)[2] = (u)>>8, (p)[3] = (u)
+
+long
+fakeread(int, void *buf, long n, vlong off)
+{
+	uvlong o;
+
+	if(n < 0 || n%4 != 0 || off%4 != 0)
+		return -1;
+	if(off < nelem(instab)*4){
+		o = parsefmt(instab+off/4);
+		PUT4(((uchar*)buf), o);
+		return 4;
+	}
+	off -= nelem(instab)*4;
+	switch(off%8){
+	case 0:
+		o = parsefmt(&instab2[off/8].pfx);
+		PUT4(((uchar*)buf), o);
+		return 4;
+	case 4:
+		o = parsefmt(&instab2[off/8].ins);
+		PUT4(((uchar*)buf), o);
+		return 4;
+	default:
+		return -1;
+	}
+}
+
+Map fakemap = {
+	1,
+	"", -1, fakeread, 1, 0, 0, nelem(instab)*4 + nelem(instab2)*8, 0,
+};
+
+void
+main(int, char**)
+{
+	uchar buf[64];
+	int i, w;
+	int fail;
+
+	fail = 0;
+	machbytype(FPOWER64);
+
+	for(w = 0; w < 2; w++){
+		which = w;
+		for(i = 0; i < nelem(instab); i++){
+			buf[0] = 0;
+			machdata->das(&fakemap, i*4, 0, (char*)buf, sizeof buf);
+			if(strstr((char*)buf, "unknown") != nil)
+				fail++;
+			else if(strstr((char*)buf, instab[i].mneomic) == nil)
+				print("%s\t%s\n", instab[i].mneomic, (char*)buf);
+			if(fail > 20)
+				sysfatal("fail %d", i-20);
+		}
+	}
+	for(w = 0; w < 2; w++){
+		which = w;
+		for(i = 0; i < nelem(instab2); i++){
+			buf[0] = 0;
+			machdata->das(&fakemap, nelem(instab)*4+i*8, 0, (char*)buf, sizeof buf);
+			if(strstr((char*)buf, "unknown") != nil){
+				print("(%d) %s\t%s\n", which, instab2[i].mneomic, (char*)buf);
+				fail++;
+			} else if(strstr((char*)buf, instab2[i].mneomic) == nil){
+				print("%s\t%s\n", instab2[i].mneomic, (char*)buf);
+			}
+			if(fail > 20)
+				sysfatal("fail %d", i-20);
+		}
+	}
+	exits(nil);
+}