1a405f
diff -rup binutils-2.27.orig/bfd/elf32-ppc.c binutils-2.27/bfd/elf32-ppc.c
1a405f
--- binutils-2.27.orig/bfd/elf32-ppc.c	2016-09-28 08:49:28.280430815 +0100
1a405f
+++ binutils-2.27/bfd/elf32-ppc.c	2016-09-28 08:53:48.133843615 +0100
1a405f
@@ -3946,7 +3946,8 @@ is_branch_reloc (enum elf_ppc_reloc_type
1a405f
 	  || r_type == R_PPC_ADDR24
1a405f
 	  || r_type == R_PPC_ADDR14
1a405f
 	  || r_type == R_PPC_ADDR14_BRTAKEN
1a405f
-	  || r_type == R_PPC_ADDR14_BRNTAKEN);
1a405f
+	  || r_type == R_PPC_ADDR14_BRNTAKEN
1a405f
+	  || r_type == R_PPC_VLE_REL24);
1a405f
 }
1a405f
 
1a405f
 static void
1a405f
@@ -4897,6 +4898,7 @@ ppc_elf_vle_split16 (bfd *output_bfd, bf
1a405f
   insn = bfd_get_32 (output_bfd, loc);
1a405f
   top5 = value & 0xf800;
1a405f
   top5 = top5 << (split16_format == split16a_type ? 9 : 5);
1a405f
+  insn &= (split16_format == split16a_type ? ~0x1f007ff : ~0x1f07ff);
1a405f
   insn |= top5;
1a405f
   insn |= value & 0x7ff;
1a405f
   bfd_put_32 (output_bfd, insn, loc);
1a405f
diff -rup binutils-2.27.orig/gas/testsuite/gas/ppc/power9.d binutils-2.27/gas/testsuite/gas/ppc/power9.d
1a405f
--- binutils-2.27.orig/gas/testsuite/gas/ppc/power9.d	2016-09-28 08:49:28.783433550 +0100
1a405f
+++ binutils-2.27/gas/testsuite/gas/ppc/power9.d	2016-09-28 08:53:47.423839755 +0100
1a405f
@@ -280,14 +280,6 @@ Disassembly of section \.text:
1a405f
 .*:	(7f a8 49 80|80 49 a8 7f) 	cmprb   cr7,1,r8,r9
1a405f
 .*:	(7d e0 01 00|00 01 e0 7d) 	setb    r15,cr0
1a405f
 .*:	(7d fc 01 00|00 01 fc 7d) 	setb    r15,cr7
1a405f
-.*:	(7e 00 01 01|01 01 00 7e) 	setbool r16,lt
1a405f
-.*:	(7e 01 01 01|01 01 01 7e) 	setbool r16,gt
1a405f
-.*:	(7e 02 01 01|01 01 02 7e) 	setbool r16,eq
1a405f
-.*:	(7e 03 01 01|01 01 03 7e) 	setbool r16,so
1a405f
-.*:	(7e 1c 01 01|01 01 1c 7e) 	setbool r16,4\*cr7\+lt
1a405f
-.*:	(7e 1d 01 01|01 01 1d 7e) 	setbool r16,4\*cr7\+gt
1a405f
-.*:	(7e 1e 01 01|01 01 1e 7e) 	setbool r16,4\*cr7\+eq
1a405f
-.*:	(7e 1f 01 01|01 01 1f 7e) 	setbool r16,4\*cr7\+so
1a405f
 .*:	(7f 40 52 1a|1a 52 40 7f) 	lxvl    vs26,0,r10
1a405f
 .*:	(7f 14 52 1b|1b 52 14 7f) 	lxvl    vs56,r20,r10
1a405f
 .*:	(7f 60 5b 1a|1a 5b 60 7f) 	stxvl   vs27,0,r11
1a405f
@@ -331,6 +323,7 @@ Disassembly of section \.text:
1a405f
 .*:	(4c e0 80 04|04 80 e0 4c) 	addpcis r7,-32768
1a405f
 .*:	(4c e0 80 04|04 80 e0 4c) 	addpcis r7,-32768
1a405f
 .*:	(7c 00 02 a4|a4 02 00 7c) 	slbsync
1a405f
+.*:	(7d 40 06 a4|a4 06 40 7d) 	slbiag  r10
1a405f
 .*:	(7d 40 5b a4|a4 5b 40 7d) 	slbieg  r10,r11
1a405f
 .*:	(7c 60 27 26|26 27 60 7c) 	slbmfee r3,r4
1a405f
 .*:	(7c 60 27 26|26 27 60 7c) 	slbmfee r3,r4
1a405f
@@ -344,14 +337,9 @@ Disassembly of section \.text:
1a405f
 .*:	(7c 00 1a 24|24 1a 00 7c) 	tlbiel  r3
1a405f
 .*:	(7c 00 1a 24|24 1a 00 7c) 	tlbiel  r3
1a405f
 .*:	(7c 8f 1a 24|24 1a 8f 7c) 	tlbiel  r3,r4,3,1,1
1a405f
-.*:	(7c 0c 6e 0c|0c 6e 0c 7c) 	copy    r12,r13
1a405f
-.*:	(7c 2c 6e 0c|0c 6e 2c 7c) 	copy_first r12,r13
1a405f
-.*:	(7c 2c 6e 0c|0c 6e 2c 7c) 	copy_first r12,r13
1a405f
-.*:	(7c 0a 5f 0c|0c 5f 0a 7c) 	paste   r10,r11
1a405f
-.*:	(7c 0a 5f 0c|0c 5f 0a 7c) 	paste   r10,r11
1a405f
-.*:	(7c 2a 5f 0d|0d 5f 2a 7c) 	paste_last r10,r11
1a405f
-.*:	(7c 2a 5f 0d|0d 5f 2a 7c) 	paste_last r10,r11
1a405f
-.*:	(7c 00 06 8c|8c 06 00 7c) 	cp_abort
1a405f
+.*:	(7c 2c 6e 0c|0c 6e 2c 7c) 	copy    r12,r13
1a405f
+.*:	(7c 2a 5f 0d|0d 5f 2a 7c) 	paste\.  r10,r11
1a405f
+.*:	(7c 00 06 8c|8c 06 00 7c) 	cpabort
1a405f
 .*:	(7c 00 04 ac|ac 04 00 7c) 	hwsync
1a405f
 .*:	(7c 00 04 ac|ac 04 00 7c) 	hwsync
1a405f
 .*:	(7c 00 04 ac|ac 04 00 7c) 	hwsync
1a405f
@@ -359,8 +347,6 @@ Disassembly of section \.text:
1a405f
 .*:	(7c 20 04 ac|ac 04 20 7c) 	lwsync
1a405f
 .*:	(7c 40 04 ac|ac 04 40 7c) 	ptesync
1a405f
 .*:	(7c 40 04 ac|ac 04 40 7c) 	ptesync
1a405f
-.*:	(7c 07 04 ac|ac 04 07 7c) 	sync    0,7
1a405f
-.*:	(7c 28 04 ac|ac 04 28 7c) 	sync    1,8
1a405f
 .*:	(7e 80 04 cc|cc 04 80 7e) 	ldat    r20,0,0
1a405f
 .*:	(7e 8a e4 cc|cc e4 8a 7e) 	ldat    r20,r10,28
1a405f
 .*:	(7e a0 04 8c|8c 04 a0 7e) 	lwat    r21,0,0
1a405f
@@ -373,8 +359,6 @@ Disassembly of section \.text:
1a405f
 .*:	(7c 00 f6 e4|e4 f6 00 7c) 	rmieg   r30
1a405f
 .*:	(7d 40 7a 6a|6a 7a 40 7d) 	ldmx    r10,0,r15
1a405f
 .*:	(7d 43 7a 6a|6a 7a 43 7d) 	ldmx    r10,r3,r15
1a405f
-.*:	(7d 60 83 6a|6a 83 60 7d) 	lwzmx   r11,0,r16
1a405f
-.*:	(7d 63 83 6a|6a 83 63 7d) 	lwzmx   r11,r3,r16
1a405f
 .*:	(4c 00 02 e4|e4 02 00 4c) 	stop
1a405f
 .*:	(7c 00 00 3c|3c 00 00 7c) 	wait    
1a405f
 .*:	(7c 00 00 3c|3c 00 00 7c) 	wait    
1a405f
@@ -397,9 +381,6 @@ Disassembly of section \.text:
1a405f
 .*:	(7d 6c 69 54|54 69 6c 7d) 	addex   r11,r12,r13,0
1a405f
 .*:	(7d 6c 6b 54|54 6b 6c 7d) 	addex   r11,r12,r13,1
1a405f
 .*:	(7d 6c 6d 54|54 6d 6c 7d) 	addex   r11,r12,r13,2
1a405f
-.*:	(7e b6 b9 55|55 b9 b6 7e) 	addex\.  r21,r22,r23,0
1a405f
-.*:	(7e b6 bb 55|55 bb b6 7e) 	addex\.  r21,r22,r23,1
1a405f
-.*:	(7e b6 bd 55|55 bd b6 7e) 	addex\.  r21,r22,r23,2
1a405f
 .*:	(ff 20 04 8e|8e 04 20 ff) 	mffs    f25
1a405f
 .*:	(ff 20 04 8f|8f 04 20 ff) 	mffs\.   f25
1a405f
 .*:	(ff 41 04 8e|8e 04 41 ff) 	mffsce  f26
1a405f
@@ -410,12 +391,4 @@ Disassembly of section \.text:
1a405f
 .*:	(ff d7 04 8e|8e 04 d7 ff) 	mffscrni f30,0
1a405f
 .*:	(ff d7 1c 8e|8e 1c d7 ff) 	mffscrni f30,3
1a405f
 .*:	(ff f8 04 8e|8e 04 f8 ff) 	mffsl   f31
1a405f
-.*:	(7e 8a 01 76|76 01 8a 7e) 	brd     r10,r20
1a405f
-.*:	(7e ab 01 b6|b6 01 ab 7e) 	brh     r11,r21
1a405f
-.*:	(7e cc 01 36|36 01 cc 7e) 	brw     r12,r22
1a405f
-.*:	(11 6a 63 77|77 63 6a 11) 	nandxor r10,r11,r12,r13
1a405f
-.*:	(12 b4 b5 f6|f6 b5 b4 12) 	xor3    r20,r21,r22,r23
1a405f
-.*:	(11 6a 60 34|34 60 6a 11) 	rldixor r10,r11,0,r12
1a405f
-.*:	(11 6a 66 f4|f4 66 6a 11) 	rldixor r10,r11,27,r12
1a405f
-.*:	(11 6a 67 f5|f5 67 6a 11) 	rldixor r10,r11,63,r12
1a405f
 #pass
1a405f
diff -rup binutils-2.27.orig/gas/testsuite/gas/ppc/power9.s binutils-2.27/gas/testsuite/gas/ppc/power9.s
1a405f
--- binutils-2.27.orig/gas/testsuite/gas/ppc/power9.s	2016-09-28 08:49:28.783433550 +0100
1a405f
+++ binutils-2.27/gas/testsuite/gas/ppc/power9.s	2016-09-28 08:53:47.424839761 +0100
1a405f
@@ -271,14 +271,6 @@ power9:
1a405f
 	cmprb       7,1,8,9
1a405f
 	setb        15,0
1a405f
 	setb        15,7
1a405f
-	setbool     16,0
1a405f
-	setbool     16,1
1a405f
-	setbool     16,2
1a405f
-	setbool     16,3
1a405f
-	setbool     16,28
1a405f
-	setbool     16,29
1a405f
-	setbool     16,30
1a405f
-	setbool     16,31
1a405f
 	lxvl        26,0,10
1a405f
 	lxvl        56,20,10
1a405f
 	stxvl       27,0,11
1a405f
@@ -322,6 +314,7 @@ power9:
1a405f
 	addpcis     7,-0x8000
1a405f
 	subpcis     7,0x8000
1a405f
 	slbsync
1a405f
+	slbiag      10
1a405f
 	slbieg      10,11
1a405f
 	slbmfee     3,4
1a405f
 	slbmfee     3,4,0
1a405f
@@ -335,23 +328,16 @@ power9:
1a405f
 	tlbiel      3
1a405f
 	tlbiel      3,0,0,0,0
1a405f
 	tlbiel      3,4,3,1,1
1a405f
-	copy        12,13,0
1a405f
-	copy_first  12,13
1a405f
-	copy        12,13,1
1a405f
-	paste       10,11,0
1a405f
-	paste       10,11
1a405f
-	paste.      10,11,1
1a405f
-	paste_last  10,11
1a405f
-	cp_abort
1a405f
+	copy        12,13
1a405f
+	paste.      10,11
1a405f
+	cpabort
1a405f
 	hwsync
1a405f
 	sync
1a405f
-	sync        0,0x0
1a405f
+	sync        0
1a405f
 	lwsync
1a405f
-	sync        1,0x0
1a405f
+	sync        1
1a405f
 	ptesync
1a405f
-	sync        2,0x0
1a405f
-	sync	    0,0x7
1a405f
-	sync	    1,0x8
1a405f
+	sync        2
1a405f
 	ldat        20,0,0x0
1a405f
 	ldat        20,10,0x1c
1a405f
 	lwat        21,0,0x0
1a405f
@@ -364,8 +350,6 @@ power9:
1a405f
 	rmieg       30
1a405f
 	ldmx        10,0,15
1a405f
 	ldmx        10,3,15
1a405f
-	lwzmx       11,0,16
1a405f
-	lwzmx       11,3,16
1a405f
 	stop
1a405f
 	wait
1a405f
 	wait        0
1a405f
@@ -388,9 +372,6 @@ power9:
1a405f
 	addex       11,12,13,0
1a405f
 	addex       11,12,13,1
1a405f
 	addex       11,12,13,2
1a405f
-	addex.      21,22,23,0
1a405f
-	addex.      21,22,23,1
1a405f
-	addex.      21,22,23,2
1a405f
 	mffs        25
1a405f
 	mffs.       25
1a405f
 	mffsce      26
1a405f
@@ -401,11 +382,3 @@ power9:
1a405f
 	mffscrni    30,0
1a405f
 	mffscrni    30,3
1a405f
 	mffsl       31
1a405f
-	brd         10,20
1a405f
-	brh         11,21
1a405f
-	brw         12,22
1a405f
-	nandxor     10,11,12,13
1a405f
-	xor3        20,21,22,23
1a405f
-	rldixor     10,11,0,12
1a405f
-	rldixor     10,11,27,12
1a405f
-	rldixor     10,11,63,12
1a405f
diff -rup binutils-2.27.orig/include/opcode/ppc.h binutils-2.27/include/opcode/ppc.h
1a405f
--- binutils-2.27.orig/include/opcode/ppc.h	2016-09-28 08:49:28.845433887 +0100
1a405f
+++ binutils-2.27/include/opcode/ppc.h	2016-09-28 08:53:48.132843610 +0100
1a405f
@@ -214,6 +214,9 @@ extern const int vle_num_opcodes;
1a405f
 /* Opcode is supported by Vector-Scalar (VSX) Unit from ISA 2.08.  */
1a405f
 #define PPC_OPCODE_VSX3       0x40000000000ull
1a405f
 
1a405f
+/* Opcode is supported by e200z4.  */
1a405f
+#define PPC_OPCODE_E200Z4     0x80000000000ull
1a405f
+
1a405f
 /* A macro to extract the major opcode from an instruction.  */
1a405f
 #define PPC_OP(i) (((i) >> 26) & 0x3f)
1a405f
 
1a405f
diff -rup binutils-2.27.orig/opcodes/ppc-dis.c binutils-2.27/opcodes/ppc-dis.c
1a405f
--- binutils-2.27.orig/opcodes/ppc-dis.c	2016-09-28 08:49:29.236436013 +0100
1a405f
+++ binutils-2.27/opcodes/ppc-dis.c	2016-09-28 08:58:35.525406139 +0100
1a405f
@@ -105,6 +105,11 @@ struct ppc_mopt ppc_opts[] = {
1a405f
     0 },
1a405f
   { "com",     PPC_OPCODE_COMMON,
1a405f
     0 },
1a405f
+  { "e200z4",  (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE| PPC_OPCODE_SPE
1a405f
+		| PPC_OPCODE_ISEL | PPC_OPCODE_EFS | PPC_OPCODE_BRLOCK
1a405f
+		| PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK | PPC_OPCODE_RFMCI
1a405f
+		| PPC_OPCODE_E500 | PPC_OPCODE_E200Z4),
1a405f
+    PPC_OPCODE_VLE },
1a405f
   { "e300",    PPC_OPCODE_PPC | PPC_OPCODE_E300,
1a405f
     0 },
1a405f
   { "e500",    (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | PPC_OPCODE_SPE
1a405f
diff -rup binutils-2.27.orig/opcodes/ppc-opc.c binutils-2.27/opcodes/ppc-opc.c
1a405f
--- binutils-2.27.orig/opcodes/ppc-opc.c	2016-09-28 08:49:29.236436013 +0100
1a405f
+++ binutils-2.27/opcodes/ppc-opc.c	2016-09-28 08:58:16.374302016 +0100
1a405f
@@ -2374,6 +2374,12 @@ extract_vleil (unsigned long insn,
1a405f
 #define OPVUP(x,vup) (OP (x) | ((((unsigned long)(vup)) & 0xff) << 8))
1a405f
 #define OPVUP_MASK OPVUP (0x3f,  0xff)
1a405f
 
1a405f
+/* The main opcode combined with an update code and the RT fields specified in
1a405f
+   D form instruction.  Used for VLE volatile context save/restore
1a405f
+   instructions.  */
1a405f
+#define OPVUPRT(x,vup,rt) (OPVUP (x, vup) | ((((unsigned long)(rt)) & 0x1f) << 21))
1a405f
+#define OPVUPRT_MASK OPVUPRT (0x3f, 0xff, 0x1f)
1a405f
+
1a405f
 /* An A form instruction.  */
1a405f
 #define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))
1a405f
 #define A_MASK A (0x3f, 0x1f, 1)
1a405f
@@ -3055,6 +3061,7 @@ extract_vleil (unsigned long insn,
1a405f
 #define E6500	PPC_OPCODE_E6500
1a405f
 #define PPCVLE  PPC_OPCODE_VLE
1a405f
 #define PPCHTM  PPC_OPCODE_HTM
1a405f
+#define E200Z4  PPC_OPCODE_E200Z4
1a405f
 /* The list of embedded processors that use the embedded operand ordering
1a405f
    for the 3 operand dcbt and dcbtst instructions.  */
1a405f
 #define DCBT_EO	(PPC_OPCODE_E500 | PPC_OPCODE_E500MC | PPC_OPCODE_476 \
1a405f
@@ -3161,7 +3168,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"machhwu.",	XO (4,	12,0,1), XO_MASK,    MULHW,	0,		{RT, RA, RB}},
1a405f
 {"ps_muls1",	A  (4,	13,0),	AFRB_MASK,   PPCPS,	0,		{FRT, FRA, FRC}},
1a405f
 {"ps_muls1.",	A  (4,	13,1),	AFRB_MASK,   PPCPS,	0,		{FRT, FRA, FRC}},
1a405f
-{"rldixor",	VXASH(4,26),	VXASH_MASK,  POWER9,	0,		{RA, RS, SH6, RB}},
1a405f
 {"ps_madds0",	A  (4,	14,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
 {"ps_madds0.",	A  (4,	14,1),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
 {"ps_madds1",	A  (4,	15,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
@@ -3203,8 +3209,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"ps_msub.",	A  (4,	28,1),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
 {"ps_madd",	A  (4,	29,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
 {"ps_madd.",	A  (4,	29,1),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
-{"xor3",	VXA(4,	54),	VXA_MASK,    POWER9,	0,		{RA, RS, RB, RC}},
1a405f
-{"nandxor",	VXA(4,	55),	VXA_MASK,    POWER9,	0,		{RA, RS, RB, RC}},
1a405f
 {"vpermr",	VXA(4,	59),	VXA_MASK,    PPCVEC3,	0,		{VD, VA, VB, VC}},
1a405f
 {"ps_nmsub",	A  (4,	30,0),	A_MASK,	     PPCPS,	0,		{FRT, FRA, FRC, FRB}},
1a405f
 {"vaddeuqm",	VXA(4,	60),	VXA_MASK,    PPCVEC2,	0,		{VD, VA, VB, VC}},
1a405f
@@ -4943,8 +4947,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"dcbfep",	XRT(31,127,0),	XRT_MASK, E500MC|PPCA2, 0,		{RA0, RB}},
1a405f
 
1a405f
-{"setb",	VX(31,256),  VXVB_MASK|(3<<16), POWER9,	0,		{RT, BFA}},
1a405f
-{"setbool",	VX(31,257),  VXVB_MASK,         POWER9,	0,		{RT, BA}},
1a405f
+{"setb",	X(31,128),	XRB_MASK|(3<<16), POWER9, 0,		{RT, BFA}},
1a405f
 
1a405f
 {"wrtee",	X(31,131), XRARB_MASK, PPC403|BOOKE|PPCA2|PPC476, 0,	{RS}},
1a405f
 
1a405f
@@ -4994,8 +4997,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"prtyw",	X(31,154),    XRB_MASK, POWER6|PPCA2|PPC476, 0,		{RA, RS}},
1a405f
 
1a405f
-{"brw",		X(31,155),	XRB_MASK,    POWER9,	0,		{RA, RS}},
1a405f
-
1a405f
 {"stdepx",	X(31,157),	X_MASK,	  E500MC|PPCA2, 0,		{RS, RA0, RB}},
1a405f
 
1a405f
 {"stwepx",	X(31,159),	X_MASK,	  E500MC|PPCA2, 0,		{RS, RA0, RB}},
1a405f
@@ -5008,7 +5009,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"sthfcmx",	APU(31,167,0),	APU_MASK,    PPC405,	0,		{FCRT, RA, RB}},
1a405f
 
1a405f
 {"addex",	ZRC(31,170,0),	Z2_MASK,     POWER9,	0,		{RT, RA, RB, CY}},
1a405f
-{"addex.",	ZRC(31,170,1),	Z2_MASK,     POWER9,	0,		{RT, RA, RB, CY}},
1a405f
 
1a405f
 {"msgclrp",	XRTRA(31,174,0,0), XRTRA_MASK, POWER8,	0,		{RB}},
1a405f
 {"dcbtlse",	X(31,174),	X_MASK,	     PPCCHLK,	E500MC,		{CT, RA0, RB}},
1a405f
@@ -5033,8 +5033,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"prtyd",	X(31,186),	XRB_MASK, POWER6|PPCA2,	0,		{RA, RS}},
1a405f
 
1a405f
-{"brd",		X(31,187),	XRB_MASK,    POWER9,	0,		{RA, RS}},
1a405f
-
1a405f
 {"cmprb",	X(31,192),	XCMP_MASK,   POWER9,	0,		{BF, L, RA, RB}},
1a405f
 
1a405f
 {"icblq.",	XRC(31,198,1),	X_MASK,	     E6500,	0,		{CT, RA0, RB}},
1a405f
@@ -5073,8 +5071,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"sleq",	XRC(31,217,0),	X_MASK,	     M601,	0,		{RA, RS, RB}},
1a405f
 {"sleq.",	XRC(31,217,1),	X_MASK,	     M601,	0,		{RA, RS, RB}},
1a405f
 
1a405f
-{"brh",		X(31,219),	XRB_MASK,    POWER9,	0,		{RA, RS}},
1a405f
-
1a405f
 {"stbepx",	X(31,223),	X_MASK,	  E500MC|PPCA2, 0,		{RS, RA0, RB}},
1a405f
 
1a405f
 {"cmpeqb",	X(31,224),	XCMPL_MASK,  POWER9,	0,		{BF, RA, RB}},
1a405f
@@ -5541,8 +5537,6 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"mtvsrdd",	X(31,435),	XX1_MASK,    PPCVSX3,	0,		{XT6, RA0, RB}},
1a405f
 
1a405f
-{"lwzmx",	X(31,437),	X_MASK,	     POWER9,	0,		{RT, RA0, RB}},
1a405f
-
1a405f
 {"ecowx",	X(31,438),	X_MASK,	     PPC,	E500|TITAN,	{RT, RA0, RB}},
1a405f
 
1a405f
 {"sthux",	X(31,439),	X_MASK,	     COM,	0,		{RS, RAS, RB}},
1a405f
@@ -5815,6 +5809,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"mcrxr",	X(31,512),	XBFRARB_MASK, COM,	POWER7,		{BF}},
1a405f
 
1a405f
+{"lbdcbx",	X(31,514),	X_MASK,      E200Z4,	0,		{RT, RA, RB}},
1a405f
 {"lbdx",	X(31,515),	X_MASK,	     E500MC,	0,		{RT, RA, RB}},
1a405f
 
1a405f
 {"bblels",	X(31,518),	X_MASK,	     PPCBRLK,	0,		{0}},
1a405f
@@ -5865,6 +5860,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"maskir",	XRC(31,541,0),	X_MASK,	     M601,	0,		{RA, RS, RB}},
1a405f
 {"maskir.",	XRC(31,541,1),	X_MASK,	     M601,	0,		{RA, RS, RB}},
1a405f
 
1a405f
+{"lhdcbx",	X(31,546),	X_MASK,      E200Z4,	0,		{RT, RA, RB}},
1a405f
 {"lhdx",	X(31,547),	X_MASK,	     E500MC,	0,		{RT, RA, RB}},
1a405f
 
1a405f
 {"lvtrx",	X(31,549),	X_MASK,	     PPCVEC2,	0,		{VD, RA0, RB}},
1a405f
@@ -5888,6 +5884,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"mcrxrx",	X(31,576),     XBFRARB_MASK, POWER9,	0,		{BF}},
1a405f
 
1a405f
+{"lwdcbx",	X(31,578),	X_MASK,      E200Z4,	0,		{RT, RA, RB}},
1a405f
 {"lwdx",	X(31,579),	X_MASK,	     E500MC,	0,		{RT, RA, RB}},
1a405f
 
1a405f
 {"lvtlx",	X(31,581),	X_MASK,	     PPCVEC2,	0,		{VD, RA0, RB}},
1a405f
@@ -5906,8 +5903,8 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"hwsync",	XSYNC(31,598,0), 0xffffffff, POWER4,	BOOKE|PPC476,	{0}},
1a405f
 {"lwsync",	XSYNC(31,598,1), 0xffffffff, PPC,	E500,		{0}},
1a405f
 {"ptesync",	XSYNC(31,598,2), 0xffffffff, PPC64,	0,		{0}},
1a405f
-{"sync",	X(31,598),     XSYNCLE_MASK, POWER9|E6500, 0,		{LS, ESYNC}},
1a405f
-{"sync",	X(31,598),     XSYNC_MASK, PPCCOM, BOOKE|PPC476|POWER9, {LS}},
1a405f
+{"sync",	X(31,598),     XSYNCLE_MASK, E6500,	0,		{LS, ESYNC}},
1a405f
+{"sync",	X(31,598),     XSYNC_MASK,   PPCCOM,	BOOKE|PPC476,	{LS}},
1a405f
 {"msync",	X(31,598),     0xffffffff, BOOKE|PPCA2|PPC476, 0,	{0}},
1a405f
 {"sync",	X(31,598),     0xffffffff,   BOOKE|PPC476, E6500,	{0}},
1a405f
 {"lwsync",	X(31,598),     0xffffffff,   E500,	0,		{0}},
1a405f
@@ -5938,6 +5935,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"lfdux",	X(31,631),	X_MASK,	     COM,	PPCEFS,		{FRT, RAS, RB}},
1a405f
 
1a405f
+{"stbdcbx",	X(31,642),	X_MASK,      E200Z4,	0,		{RS, RA, RB}},
1a405f
 {"stbdx",	X(31,643),	X_MASK,	     E500MC,	0,		{RS, RA, RB}},
1a405f
 
1a405f
 {"stvlx",	X(31,647),	X_MASK,	     CELL,	0,		{VS, RA0, RB}},
1a405f
@@ -5975,6 +5973,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"sre",		XRC(31,665,0),	X_MASK,	     M601,	0,		{RA, RS, RB}},
1a405f
 {"sre.",	XRC(31,665,1),	X_MASK,	     M601,	0,		{RA, RS, RB}},
1a405f
 
1a405f
+{"sthdcbx",	X(31,674),	X_MASK,      E200Z4,	0,		{RS, RA, RB}},
1a405f
 {"sthdx",	X(31,675),	X_MASK,	     E500MC,	0,		{RS, RA, RB}},
1a405f
 
1a405f
 {"stvfrx",	X(31,677),	X_MASK,	     PPCVEC2,	0,		{VS, RA0, RB}},
1a405f
@@ -5992,6 +5991,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"sriq",	XRC(31,696,0),	X_MASK,	     M601,	0,		{RA, RS, SH}},
1a405f
 {"sriq.",	XRC(31,696,1),	X_MASK,	     M601,	0,		{RA, RS, SH}},
1a405f
 
1a405f
+{"stwdcbx",	X(31,706),	X_MASK,	     E200Z4,	0,		{RS, RA, RB}},
1a405f
 {"stwdx",	X(31,707),	X_MASK,	     E500MC,	0,		{RS, RA, RB}},
1a405f
 
1a405f
 {"stvflx",	X(31,709),	X_MASK,	     PPCVEC2,	0,		{VS, RA0, RB}},
1a405f
@@ -6072,8 +6072,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"lvsm",	X(31,773),	X_MASK,	     PPCVEC2,	0,		{VD, RA0, RB}},
1a405f
 
1a405f
-{"copy_first",	XOPL(31,774,1),	XRT_MASK,    POWER9,	0,		{RA0, RB}},
1a405f
-{"copy",	X(31,774),	XLRT_MASK,   POWER9,	0,		{RA0, RB, L}},
1a405f
+{"copy",	XOPL(31,774,1),	XRT_MASK,    POWER9,	0,		{RA0, RB}},
1a405f
 
1a405f
 {"stvepxl",	X(31,775),	X_MASK,	     PPCVEC2,	0,		{VS, RA0, RB}},
1a405f
 {"lvlxl",	X(31,775),	X_MASK,	     CELL,	0,		{VD, RA0, RB}},
1a405f
@@ -6143,7 +6142,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"lvtlxl",	X(31,837),	X_MASK,	     PPCVEC2,	0,		{VD, RA0, RB}},
1a405f
 
1a405f
-{"cp_abort",	X(31,838),	XRTRARB_MASK,POWER9,	0,		{0}},
1a405f
+{"cpabort",	X(31,838),	XRTRARB_MASK,POWER9,	0,		{0}},
1a405f
 
1a405f
 {"divo",	XO(31,331,1,0),	XO_MASK,     M601,	0,		{RT, RA, RB}},
1a405f
 {"divo.",	XO(31,331,1,1),	XO_MASK,     M601,	0,		{RT, RA, RB}},
1a405f
@@ -6155,6 +6154,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 
1a405f
 {"tlbsrx.",	XRC(31,850,1),	XRT_MASK,    PPCA2,	0,		{RA0, RB}},
1a405f
 
1a405f
+{"slbiag",	X(31,850),	XRARB_MASK,  POWER9,	0,		{RS}},
1a405f
 {"slbmfev",	X(31,851),	XRLA_MASK,   POWER9,	0,		{RT, RB, A_L}},
1a405f
 {"slbmfev",	X(31,851),	XRA_MASK,    PPC64,	POWER9,		{RT, RB}},
1a405f
 
1a405f
@@ -6190,9 +6190,7 @@ const struct powerpc_opcode powerpc_opco
1a405f
 {"extswsli",	XS(31,445,0),	XS_MASK,     POWER9,	0,		{RA, RS, SH6}},
1a405f
 {"extswsli.",	XS(31,445,1),	XS_MASK,     POWER9,	0,		{RA, RS, SH6}},
1a405f
 
1a405f
-{"paste",	XRC(31,902,0),	XLRT_MASK,   POWER9,	0,		{RA0, RB, L0}},
1a405f
-{"paste_last",	XRCL(31,902,1,1),XRT_MASK,   POWER9,	0,		{RA0, RB}},
1a405f
-{"paste.",	XRC(31,902,1),	XLRT_MASK,   POWER9,	0,		{RA0, RB, L1}},
1a405f
+{"paste.",	XRCL(31,902,1,1),XRT_MASK,   POWER9,	0,		{RA0, RB}},
1a405f
 
1a405f
 {"stvlxl",	X(31,903),	X_MASK,	     CELL,	0,		{VS, RA0, RB}},
1a405f
 {"stdfcmux",	APU(31,903,0),	APU_MASK,    PPC405,	0,		{FCRT, RA, RB}},
1a405f
@@ -7070,7 +7068,9 @@ const struct powerpc_opcode vle_opcodes[
1a405f
 {"se_cmphl",	SE_RR(3,3),	SE_RR_MASK,	PPCVLE,	0,		{RX, RY}},
1a405f
 
1a405f
 {"e_cmpi",	SCI8BF(6,0,21),	SCI8BF_MASK,	PPCVLE,	0,		{CRD32, RA, SCLSCI8}},
1a405f
+{"e_cmpwi",	SCI8BF(6,0,21),	SCI8BF_MASK,	PPCVLE,	0,		{CRD32, RA, SCLSCI8}},
1a405f
 {"e_cmpli",	SCI8BF(6,1,21),	SCI8BF_MASK,	PPCVLE,	0,		{CRD32, RA, SCLSCI8}},
1a405f
+{"e_cmplwi",	SCI8BF(6,1,21),	SCI8BF_MASK,	PPCVLE,	0,		{CRD32, RA, SCLSCI8}},
1a405f
 {"e_addi",	SCI8(6,16),	SCI8_MASK,	PPCVLE,	0,		{RT, RA, SCLSCI8}},
1a405f
 {"e_subi",	SCI8(6,16),	SCI8_MASK,	PPCVLE,	0,		{RT, RA, SCLSCI8N}},
1a405f
 {"e_addi.",	SCI8(6,17),	SCI8_MASK,	PPCVLE,	0,		{RT, RA, SCLSCI8}},
1a405f
@@ -7097,6 +7097,16 @@ const struct powerpc_opcode vle_opcodes[
1a405f
 {"e_sthu",	OPVUP(6,5),	OPVUP_MASK,	PPCVLE,	0,		{RT, D8, RA0}},
1a405f
 {"e_stwu",	OPVUP(6,6),	OPVUP_MASK,	PPCVLE,	0,		{RT, D8, RA0}},
1a405f
 {"e_stmw",	OPVUP(6,9),	OPVUP_MASK,	PPCVLE,	0,		{RT, D8, RA0}},
1a405f
+{"e_ldmvgprw",	OPVUPRT(6,16,0),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_stmvgprw",	OPVUPRT(6,17,0),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_ldmvsprw",	OPVUPRT(6,16,1),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_stmvsprw",	OPVUPRT(6,17,1),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_ldmvsrrw",	OPVUPRT(6,16,4),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_stmvsrrw",	OPVUPRT(6,17,4),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_ldmvcsrrw",	OPVUPRT(6,16,5),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_stmvcsrrw",	OPVUPRT(6,17,5),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_ldmvdsrrw",	OPVUPRT(6,16,6),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
+{"e_stmvdsrrw",	OPVUPRT(6,17,6),OPVUPRT_MASK,	PPCVLE,	0,		{D8, RA0}},
1a405f
 {"e_add16i",	OP(7),		OP_MASK,	PPCVLE,	0,		{RT, RA, SI}},
1a405f
 {"e_la",	OP(7),		OP_MASK,	PPCVLE,	0,		{RT, D, RA0}},
1a405f
 {"e_sub16i",	OP(7),		OP_MASK,	PPCVLE,	0,		{RT, RA, NSI}},
1a405f
@@ -7144,10 +7154,8 @@ const struct powerpc_opcode vle_opcodes[
1a405f
 {"e_cmphl16i",	IA16(28,23),	IA16_MASK,	PPCVLE,	0,		{RA, VLEUIMM}},
1a405f
 {"e_cmph16i",	IA16(28,22),	IA16_MASK,	PPCVLE,	0,		{RA, VLESIMM}},
1a405f
 {"e_cmpl16i",	I16A(28,21),	I16A_MASK,	PPCVLE,	0,		{RA, VLEUIMM}},
1a405f
-{"e_cmplwi",	I16A(28,21),	I16A_MASK,	PPCVLE,	0,		{RA, VLESIMM}},
1a405f
 {"e_mull2i",	I16A(28,20),	I16A_MASK,	PPCVLE,	0,		{RA, VLESIMM}},
1a405f
 {"e_cmp16i",	IA16(28,19),	IA16_MASK,	PPCVLE,	0,		{RA, VLESIMM}},
1a405f
-{"e_cmpwi",	IA16(28,19),	IA16_MASK,	PPCVLE,	0,		{RA, VLESIMM}},
1a405f
 {"e_sub2is",	I16A(28,18),	I16A_MASK,	PPCVLE,	0,		{RA, VLENSIMM}},
1a405f
 {"e_add2is",	I16A(28,18),	I16A_MASK,	PPCVLE,	0,		{RA, VLESIMM}},
1a405f
 {"e_sub2i.",	I16A(28,17),	I16A_MASK,	PPCVLE,	0,		{RA, VLENSIMM}},
1a405f