Blob Blame History Raw
diff -rup binutils.orig/gas/config/tc-s390.c binutils-2.27/gas/config/tc-s390.c
--- binutils.orig/gas/config/tc-s390.c	2017-03-24 14:50:52.004815587 +0000
+++ binutils-2.27/gas/config/tc-s390.c	2017-03-24 14:55:19.129377655 +0000
@@ -282,7 +282,8 @@ s390_parse_cpu (const char *         arg
     { STRING_COMMA_LEN ("z10"), 0 },
     { STRING_COMMA_LEN ("z196"), 0 },
     { STRING_COMMA_LEN ("zEC12"), S390_INSTR_FLAG_HTM },
-    { STRING_COMMA_LEN ("z13"), S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX }
+    { STRING_COMMA_LEN ("z13"), S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX },
+    { STRING_COMMA_LEN ("arch12"), S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX | S390_INSTR_FLAG_VX2 }
   };
   static struct
   {
@@ -294,7 +295,9 @@ s390_parse_cpu (const char *         arg
     { "htm",   S390_INSTR_FLAG_HTM, TRUE },
     { "nohtm", S390_INSTR_FLAG_HTM, FALSE },
     { "vx",    S390_INSTR_FLAG_VX, TRUE },
-    { "novx",  S390_INSTR_FLAG_VX, FALSE }
+    { "novx",  S390_INSTR_FLAG_VX, FALSE },
+    { "vx2",    S390_INSTR_FLAG_VX2, TRUE },
+    { "novx2",  S390_INSTR_FLAG_VX2, FALSE }
   };
   unsigned int icpu;
   char *ilp_bak;
diff -rup binutils.orig/gas/doc/as.texinfo binutils-2.27/gas/doc/as.texinfo
--- binutils.orig/gas/doc/as.texinfo	2017-03-24 14:50:52.037815161 +0000
+++ binutils-2.27/gas/doc/as.texinfo	2017-03-24 14:56:29.325474523 +0000
@@ -1656,7 +1656,7 @@ Architecture (esa) or the z/Architecture
 @item -march=@var{processor}
 Specify which s390 processor variant is the target, @samp{g6}, @samp{g6},
 @samp{z900}, @samp{z990}, @samp{z9-109}, @samp{z9-ec}, @samp{z10},
-@samp{z196}, @samp{zEC12}, or @samp{z13}.
+@samp{z196}, @samp{zEC12}, or @samp{z13} (or @samp{arch11}), or @samp{arch12}.
 @item -mregnames
 @itemx -mno-regnames
 Allow or disallow symbolic names for registers.
diff -rup binutils.orig/gas/doc/c-s390.texi binutils-2.27/gas/doc/c-s390.texi
--- binutils.orig/gas/doc/c-s390.texi	2017-03-24 14:50:52.053814956 +0000
+++ binutils-2.27/gas/doc/c-s390.texi	2017-03-24 14:57:53.010397844 +0000
@@ -14,9 +14,11 @@
 @cindex s390 support
 
 The s390 version of @code{@value{AS}} supports two architectures modes
-and seven chip levels. The architecture modes are the Enterprise System
+and eleven chip levels.  The architecture modes are the Enterprise System
 Architecture (ESA) and the newer z/Architecture mode. The chip levels
-are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, zEC12, and z13.
+are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec
+(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13
+(or arch11), and arch12.
 
 @menu
 * s390 Options::                Command-line Options.
diff -rup binutils.orig/gas/testsuite/gas/s390/s390.exp binutils-2.27/gas/testsuite/gas/s390/s390.exp
--- binutils.orig/gas/testsuite/gas/s390/s390.exp	2017-03-24 14:50:54.051789225 +0000
+++ binutils-2.27/gas/testsuite/gas/s390/s390.exp	2017-03-24 14:54:05.065330554 +0000
@@ -28,6 +28,7 @@ if [expr [istarget "s390-*-*"] ||  [ista
     run_dump_test "zarch-z196" "{as -m64} {as -march=z196}"
     run_dump_test "zarch-zEC12" "{as -m64} {as -march=zEC12}"
     run_dump_test "zarch-z13" "{as -m64} {as -march=z13}"
+    run_dump_test "zarch-arch12" "{as -m64} {as -march=arch12}"
     run_dump_test "zarch-reloc" "{as -m64}"
     run_dump_test "zarch-operands" "{as -m64} {as -march=z9-109}"
     run_dump_test "zarch-machine" "{as -m64} {as -march=z900}"
diff --git a/gas/testsuite/gas/s390/zarch-arch12.d b/gas/testsuite/gas/s390/zarch-arch12.d
new file mode 100644
index 0000000..bc2ce18
--- /dev/null
+++ b/gas/testsuite/gas/s390/zarch-arch12.d
@@ -0,0 +1,200 @@
+#name: s390x opcode
+#objdump: -dr
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+.* <foo>:
+.*:	e7 f1 40 00 06 85 [	 ]*vbperm	%v15,%v17,%v20
+.*:	e7 f6 9f a0 60 04 [	 ]*vllezlf	%v15,4000\(%r6,%r9\)
+.*:	e7 f1 4d c0 87 b8 [	 ]*vmsl	%v15,%v17,%v20,%v24,13,12
+.*:	e7 f1 43 d0 87 b8 [	 ]*vmslg	%v15,%v17,%v20,%v24,13
+.*:	e7 f1 40 00 06 6c [	 ]*vnx	%v15,%v17,%v20
+.*:	e7 f1 40 00 06 6e [	 ]*vnn	%v15,%v17,%v20
+.*:	e7 f1 40 00 06 6f [	 ]*voc	%v15,%v17,%v20
+.*:	e7 f1 00 00 04 50 [	 ]*vpopctb	%v15,%v17
+.*:	e7 f1 00 00 14 50 [	 ]*vpopcth	%v15,%v17
+.*:	e7 f1 00 00 24 50 [	 ]*vpopctf	%v15,%v17
+.*:	e7 f1 00 00 34 50 [	 ]*vpopctg	%v15,%v17
+.*:	e7 f1 40 00 26 e3 [	 ]*vfasb	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 e3 [	 ]*wfasb	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 e3 [	 ]*wfaxb	%v15,%v17,%v20
+.*:	e7 f1 00 00 24 cb [	 ]*wfcsb	%v15,%v17
+.*:	e7 f1 00 00 44 cb [	 ]*wfcxb	%v15,%v17
+.*:	e7 f1 00 00 24 ca [	 ]*wfksb	%v15,%v17
+.*:	e7 f1 00 00 44 ca [	 ]*wfkxb	%v15,%v17
+.*:	e7 f1 40 00 26 e8 [	 ]*vfcesb	%v15,%v17,%v20
+.*:	e7 f1 40 10 26 e8 [	 ]*vfcesbs	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 e8 [	 ]*wfcesb	%v15,%v17,%v20
+.*:	e7 f1 40 18 26 e8 [	 ]*wfcesbs	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 e8 [	 ]*wfcexb	%v15,%v17,%v20
+.*:	e7 f1 40 18 46 e8 [	 ]*wfcexbs	%v15,%v17,%v20
+.*:	e7 f1 40 04 26 e8 [	 ]*vfkesb	%v15,%v17,%v20
+.*:	e7 f1 40 14 26 e8 [	 ]*vfkesbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 26 e8 [	 ]*wfkesb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 26 e8 [	 ]*wfkesbs	%v15,%v17,%v20
+.*:	e7 f1 40 04 36 e8 [	 ]*vfkedb	%v15,%v17,%v20
+.*:	e7 f1 40 14 36 e8 [	 ]*vfkedbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 36 e8 [	 ]*wfkedb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 36 e8 [	 ]*wfkedbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 46 e8 [	 ]*wfkexb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 46 e8 [	 ]*wfkexbs	%v15,%v17,%v20
+.*:	e7 f1 40 00 26 eb [	 ]*vfchsb	%v15,%v17,%v20
+.*:	e7 f1 40 10 26 eb [	 ]*vfchsbs	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 eb [	 ]*wfchsb	%v15,%v17,%v20
+.*:	e7 f1 40 18 26 eb [	 ]*wfchsbs	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 eb [	 ]*wfchxb	%v15,%v17,%v20
+.*:	e7 f1 40 18 46 eb [	 ]*wfchxbs	%v15,%v17,%v20
+.*:	e7 f1 40 04 26 eb [	 ]*vfkhsb	%v15,%v17,%v20
+.*:	e7 f1 40 14 26 eb [	 ]*vfkhsbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 26 eb [	 ]*wfkhsb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 26 eb [	 ]*wfkhsbs	%v15,%v17,%v20
+.*:	e7 f1 40 04 36 eb [	 ]*vfkhdb	%v15,%v17,%v20
+.*:	e7 f1 40 14 36 eb [	 ]*vfkhdbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 36 eb [	 ]*wfkhdb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 36 eb [	 ]*wfkhdbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 46 eb [	 ]*wfkhxb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 46 eb [	 ]*wfkhxbs	%v15,%v17,%v20
+.*:	e7 f1 40 00 26 ea [	 ]*vfchesb	%v15,%v17,%v20
+.*:	e7 f1 40 10 26 ea [	 ]*vfchesbs	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 ea [	 ]*wfchesb	%v15,%v17,%v20
+.*:	e7 f1 40 18 26 ea [	 ]*wfchesbs	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 ea [	 ]*wfchexb	%v15,%v17,%v20
+.*:	e7 f1 40 18 46 ea [	 ]*wfchexbs	%v15,%v17,%v20
+.*:	e7 f1 40 04 26 ea [	 ]*vfkhesb	%v15,%v17,%v20
+.*:	e7 f1 40 14 26 ea [	 ]*vfkhesbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 26 ea [	 ]*wfkhesb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 26 ea [	 ]*wfkhesbs	%v15,%v17,%v20
+.*:	e7 f1 40 04 36 ea [	 ]*vfkhedb	%v15,%v17,%v20
+.*:	e7 f1 40 14 36 ea [	 ]*vfkhedbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 36 ea [	 ]*wfkhedb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 36 ea [	 ]*wfkhedbs	%v15,%v17,%v20
+.*:	e7 f1 40 0c 46 ea [	 ]*wfkhexb	%v15,%v17,%v20
+.*:	e7 f1 40 1c 46 ea [	 ]*wfkhexbs	%v15,%v17,%v20
+.*:	e7 f1 40 00 26 e5 [	 ]*vfdsb	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 e5 [	 ]*wfdsb	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 e5 [	 ]*wfdxb	%v15,%v17,%v20
+.*:	e7 f1 00 cd 24 c7 [	 ]*wfisb	%v15,%v17,5,12
+.*:	e7 f1 00 cd 24 c7 [	 ]*wfisb	%v15,%v17,5,12
+.*:	e7 f1 00 cd 44 c7 [	 ]*wfixb	%v15,%v17,5,12
+.*:	e7 f1 00 0c d4 c4 [	 ]*vfll	%v15,%v17,13,12
+.*:	e7 f1 00 00 24 c4 [	 ]*vflls	%v15,%v17
+.*:	e7 f1 00 08 24 c4 [	 ]*wflls	%v15,%v17
+.*:	e7 f1 00 08 34 c4 [	 ]*wflld	%v15,%v17
+.*:	e7 f1 00 bc d4 c5 [	 ]*vflr	%v15,%v17,13,12,11
+.*:	e7 f1 00 cd 34 c5 [	 ]*wflrd	%v15,%v17,5,12
+.*:	e7 f1 00 cd 34 c5 [	 ]*wflrd	%v15,%v17,5,12
+.*:	e7 f1 00 cd 44 c5 [	 ]*wflrx	%v15,%v17,5,12
+.*:	e7 f1 40 bc d6 ef [	 ]*vfmax	%v15,%v17,%v20,13,12,11
+.*:	e7 f1 40 d0 26 ef [	 ]*vfmaxsb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d0 36 ef [	 ]*vfmaxdb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d8 26 ef [	 ]*wfmaxsb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d8 36 ef [	 ]*wfmaxdb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d8 46 ef [	 ]*wfmaxxb	%v15,%v17,%v20,13
+.*:	e7 f1 40 bc d6 ee [	 ]*vfmin	%v15,%v17,%v20,13,12,11
+.*:	e7 f1 40 d0 26 ee [	 ]*vfminsb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d0 36 ee [	 ]*vfmindb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d8 26 ee [	 ]*wfminsb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d8 36 ee [	 ]*wfmindb	%v15,%v17,%v20,13
+.*:	e7 f1 40 d8 46 ee [	 ]*wfminxb	%v15,%v17,%v20,13
+.*:	e7 f1 40 00 26 e7 [	 ]*vfmsb	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 e7 [	 ]*wfmsb	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 e7 [	 ]*wfmxb	%v15,%v17,%v20
+.*:	e7 f1 42 00 87 8f [	 ]*vfmasb	%v15,%v17,%v20,%v24
+.*:	e7 f1 42 08 87 8f [	 ]*wfmasb	%v15,%v17,%v20,%v24
+.*:	e7 f1 44 08 87 8f [	 ]*wfmaxb	%v15,%v17,%v20,%v24
+.*:	e7 f1 42 00 87 8e [	 ]*vfmssb	%v15,%v17,%v20,%v24
+.*:	e7 f1 42 08 87 8e [	 ]*wfmssb	%v15,%v17,%v20,%v24
+.*:	e7 f1 44 08 87 8e [	 ]*wfmsxb	%v15,%v17,%v20,%v24
+.*:	e7 f1 4c 0d 87 9f [	 ]*vfnma	%v15,%v17,%v20,%v24,13,12
+.*:	e7 f1 42 00 87 9f [	 ]*vfnmasb	%v15,%v17,%v20,%v24
+.*:	e7 f1 42 08 87 9f [	 ]*wfnmasb	%v15,%v17,%v20,%v24
+.*:	e7 f1 43 00 87 9f [	 ]*vfnmadb	%v15,%v17,%v20,%v24
+.*:	e7 f1 43 08 87 9f [	 ]*wfnmadb	%v15,%v17,%v20,%v24
+.*:	e7 f1 44 08 87 9f [	 ]*wfnmaxb	%v15,%v17,%v20,%v24
+.*:	e7 f1 4c 0d 87 9e [	 ]*vfnms	%v15,%v17,%v20,%v24,13,12
+.*:	e7 f1 42 00 87 9e [	 ]*vfnmssb	%v15,%v17,%v20,%v24
+.*:	e7 f1 42 08 87 9e [	 ]*wfnmssb	%v15,%v17,%v20,%v24
+.*:	e7 f1 43 00 87 9e [	 ]*vfnmsdb	%v15,%v17,%v20,%v24
+.*:	e7 f1 43 08 87 9e [	 ]*wfnmsdb	%v15,%v17,%v20,%v24
+.*:	e7 f1 44 08 87 9e [	 ]*wfnmsxb	%v15,%v17,%v20,%v24
+.*:	e7 f1 00 d0 24 cc [	 ]*vfpsosb	%v15,%v17,13
+.*:	e7 f1 00 d8 24 cc [	 ]*wfpsosb	%v15,%v17,13
+.*:	e7 f1 00 00 24 cc [	 ]*vflcsb	%v15,%v17
+.*:	e7 f1 00 08 24 cc [	 ]*wflcsb	%v15,%v17
+.*:	e7 f1 00 10 24 cc [	 ]*vflnsb	%v15,%v17
+.*:	e7 f1 00 18 24 cc [	 ]*wflnsb	%v15,%v17
+.*:	e7 f1 00 20 24 cc [	 ]*vflpsb	%v15,%v17
+.*:	e7 f1 00 28 24 cc [	 ]*wflpsb	%v15,%v17
+.*:	e7 f1 00 d8 44 cc [	 ]*wfpsoxb	%v15,%v17,13
+.*:	e7 f1 00 08 44 cc [	 ]*wflcxb	%v15,%v17
+.*:	e7 f1 00 18 44 cc [	 ]*wflnxb	%v15,%v17
+.*:	e7 f1 00 28 44 cc [	 ]*wflpxb	%v15,%v17
+.*:	e7 f1 00 00 24 ce [	 ]*vfsqsb	%v15,%v17
+.*:	e7 f1 00 08 24 ce [	 ]*wfsqsb	%v15,%v17
+.*:	e7 f1 00 08 44 ce [	 ]*wfsqxb	%v15,%v17
+.*:	e7 f1 40 00 26 e2 [	 ]*vfssb	%v15,%v17,%v20
+.*:	e7 f1 40 08 26 e2 [	 ]*wfssb	%v15,%v17,%v20
+.*:	e7 f1 40 08 46 e2 [	 ]*wfsxb	%v15,%v17,%v20
+.*:	e7 f1 ff d0 24 4a [	 ]*vftcisb	%v15,%v17,4093
+.*:	e7 f1 ff d8 24 4a [	 ]*wftcisb	%v15,%v17,4093
+.*:	e7 f1 ff d8 44 4a [	 ]*wftcixb	%v15,%v17,4093
+.*:	e3 69 b8 f0 fd 38 [	 ]*agh	%r6,-10000\(%r9,%r11\)
+.*:	e3 d6 98 f0 fd 47 [	 ]*binh	-10000\(%r6,%r9\)
+.*:	e3 f6 98 f0 fd 47 [	 ]*bi	-10000\(%r6,%r9\)
+.*:	e3 16 98 f0 fd 47 [	 ]*bio	-10000\(%r6,%r9\)
+.*:	e3 26 98 f0 fd 47 [	 ]*bih	-10000\(%r6,%r9\)
+.*:	e3 26 98 f0 fd 47 [	 ]*bih	-10000\(%r6,%r9\)
+.*:	e3 36 98 f0 fd 47 [	 ]*binle	-10000\(%r6,%r9\)
+.*:	e3 46 98 f0 fd 47 [	 ]*bil	-10000\(%r6,%r9\)
+.*:	e3 46 98 f0 fd 47 [	 ]*bil	-10000\(%r6,%r9\)
+.*:	e3 56 98 f0 fd 47 [	 ]*binhe	-10000\(%r6,%r9\)
+.*:	e3 66 98 f0 fd 47 [	 ]*bilh	-10000\(%r6,%r9\)
+.*:	e3 76 98 f0 fd 47 [	 ]*bine	-10000\(%r6,%r9\)
+.*:	e3 76 98 f0 fd 47 [	 ]*bine	-10000\(%r6,%r9\)
+.*:	e3 86 98 f0 fd 47 [	 ]*bie	-10000\(%r6,%r9\)
+.*:	e3 86 98 f0 fd 47 [	 ]*bie	-10000\(%r6,%r9\)
+.*:	e3 96 98 f0 fd 47 [	 ]*binlh	-10000\(%r6,%r9\)
+.*:	e3 a6 98 f0 fd 47 [	 ]*bihe	-10000\(%r6,%r9\)
+.*:	e3 b6 98 f0 fd 47 [	 ]*binl	-10000\(%r6,%r9\)
+.*:	e3 b6 98 f0 fd 47 [	 ]*binl	-10000\(%r6,%r9\)
+.*:	e3 c6 98 f0 fd 47 [	 ]*bile	-10000\(%r6,%r9\)
+.*:	e3 d6 98 f0 fd 47 [	 ]*binh	-10000\(%r6,%r9\)
+.*:	e3 d6 98 f0 fd 47 [	 ]*binh	-10000\(%r6,%r9\)
+.*:	e3 e6 98 f0 fd 47 [	 ]*bino	-10000\(%r6,%r9\)
+.*:	b9 ec b0 69 [	 ]*mgrk	%r6,%r9,%r11
+.*:	e3 69 b8 f0 fd 84 [	 ]*mg	%r6,-10000\(%r9,%r11\)
+.*:	e3 69 b8 f0 fd 3c [	 ]*mgh	%r6,-10000\(%r9,%r11\)
+.*:	b9 fd b0 69 [	 ]*msrkc	%r6,%r9,%r11
+.*:	b9 ed b0 69 [	 ]*msgrkc	%r6,%r9,%r11
+.*:	e3 69 b8 f0 fd 53 [	 ]*msc	%r6,-10000\(%r9,%r11\)
+.*:	e3 69 b8 f0 fd 83 [	 ]*msgc	%r6,-10000\(%r9,%r11\)
+.*:	e3 69 b8 f0 fd 39 [	 ]*sgh	%r6,-10000\(%r9,%r11\)
+.*:	e6 06 9f a0 f0 37 [	 ]*vlrlr	%v15,%r6,4000\(%r9\)
+.*:	e6 fd 6f a0 f0 35 [	 ]*vlrl	%v15,4000\(%r6\),253
+.*:	e6 06 9f a0 f0 3f [	 ]*vstrlr	%v15,%r6,4000\(%r9\)
+.*:	e6 fd 6f a0 f0 3d [	 ]*vstrl	%v15,4000\(%r6\),253
+.*:	e6 f1 40 cf d6 71 [	 ]*vap	%v15,%v17,%v20,253,12
+.*:	e6 0f 10 d0 02 77 [	 ]*vcp	%v15,%v17,13
+.*:	e6 6f 00 d0 00 50 [	 ]*vcvb	%r6,%v15,13
+.*:	e6 6f 00 d0 00 52 [	 ]*vcvbg	%r6,%v15,13
+.*:	e6 f6 00 cf d0 58 [	 ]*vcvd	%v15,%r6,253,12
+.*:	e6 f6 00 cf d0 5a [	 ]*vcvdg	%v15,%r6,253,12
+.*:	e6 f1 40 cf d6 7a [	 ]*vdp	%v15,%v17,%v20,253,12
+.*:	e6 f0 ff fd c0 49 [	 ]*vlip	%v15,65533,12
+.*:	e6 f1 40 cf d6 78 [	 ]*vmp	%v15,%v17,%v20,253,12
+.*:	e6 f1 40 cf d6 79 [	 ]*vmsp	%v15,%v17,%v20,253,12
+.*:	e6 fd 6f a0 f0 34 [	 ]*vpkz	%v15,4000\(%r6\),253
+.*:	e6 f1 fc bf d4 5b [	 ]*vpsop	%v15,%v17,253,252,11
+.*:	e6 f1 40 cf d6 7b [	 ]*vrp	%v15,%v17,%v20,253,12
+.*:	e6 f1 40 cf d6 7e [	 ]*vsdp	%v15,%v17,%v20,253,12
+.*:	e6 f1 fc bf d4 59 [	 ]*vsrp	%v15,%v17,253,252,11
+.*:	e6 f1 40 cf d6 73 [	 ]*vsp	%v15,%v17,%v20,253,12
+.*:	e6 0f 00 00 00 5f [	 ]*vtp	%v15
+.*:	e6 fd 6f a0 f0 3c [	 ]*vupkz	%v15,4000\(%r6\),253
+.*:	e3 69 b8 f0 fd 4c [	 ]*lgg	%r6,-10000\(%r9,%r11\)
+.*:	e3 69 b8 f0 fd 48 [	 ]*llgfsg	%r6,-10000\(%r9,%r11\)
+.*:	e3 69 b8 f0 fd 4d [	 ]*lgsc	%r6,-10000\(%r9,%r11\)
+.*:	e3 69 b8 f0 fd 49 [	 ]*stgsc	%r6,-10000\(%r9,%r11\)
+.*:	b9 29 90 6b [	 ]*kma	%r6,%r9,%r11
diff --git a/gas/testsuite/gas/s390/zarch-arch12.s b/gas/testsuite/gas/s390/zarch-arch12.s
new file mode 100644
index 0000000..6ebd2fd
--- /dev/null
+++ b/gas/testsuite/gas/s390/zarch-arch12.s
@@ -0,0 +1,194 @@
+.text
+foo:
+	vbperm	%v15,%v17,%v20
+	vllezlf	%v15,4000(%r6,%r9)
+	vmsl	%v15,%v17,%v20,%v24,13,12
+	vmslg	%v15,%v17,%v20,%v24,13
+	vnx	%v15,%v17,%v20
+	vnn	%v15,%v17,%v20
+	voc	%v15,%v17,%v20
+	vpopctb	%v15,%v17
+	vpopcth	%v15,%v17
+	vpopctf	%v15,%v17
+	vpopctg	%v15,%v17
+	vfasb	%v15,%v17,%v20
+	wfasb	%v15,%v17,%v20
+	wfaxb	%v15,%v17,%v20
+	wfcsb	%v15,%v17
+	wfcxb	%v15,%v17
+	wfksb	%v15,%v17
+	wfkxb	%v15,%v17
+	vfcesb	%v15,%v17,%v20
+	vfcesbs	%v15,%v17,%v20
+	wfcesb	%v15,%v17,%v20
+	wfcesbs	%v15,%v17,%v20
+	wfcexb	%v15,%v17,%v20
+	wfcexbs	%v15,%v17,%v20
+	vfkesb	%v15,%v17,%v20
+	vfkesbs	%v15,%v17,%v20
+	wfkesb	%v15,%v17,%v20
+	wfkesbs	%v15,%v17,%v20
+	vfkedb	%v15,%v17,%v20
+	vfkedbs	%v15,%v17,%v20
+	wfkedb	%v15,%v17,%v20
+	wfkedbs	%v15,%v17,%v20
+	wfkexb	%v15,%v17,%v20
+	wfkexbs	%v15,%v17,%v20
+	vfchsb	%v15,%v17,%v20
+	vfchsbs	%v15,%v17,%v20
+	wfchsb	%v15,%v17,%v20
+	wfchsbs	%v15,%v17,%v20
+	wfchxb	%v15,%v17,%v20
+	wfchxbs	%v15,%v17,%v20
+	vfkhsb	%v15,%v17,%v20
+	vfkhsbs	%v15,%v17,%v20
+	wfkhsb	%v15,%v17,%v20
+	wfkhsbs	%v15,%v17,%v20
+	vfkhdb	%v15,%v17,%v20
+	vfkhdbs	%v15,%v17,%v20
+	wfkhdb	%v15,%v17,%v20
+	wfkhdbs	%v15,%v17,%v20
+	wfkhxb	%v15,%v17,%v20
+	wfkhxbs	%v15,%v17,%v20
+	vfchesb	%v15,%v17,%v20
+	vfchesbs	%v15,%v17,%v20
+	wfchesb	%v15,%v17,%v20
+	wfchesbs	%v15,%v17,%v20
+	wfchexb	%v15,%v17,%v20
+	wfchexbs	%v15,%v17,%v20
+	vfkhesb	%v15,%v17,%v20
+	vfkhesbs	%v15,%v17,%v20
+	wfkhesb	%v15,%v17,%v20
+	wfkhesbs	%v15,%v17,%v20
+	vfkhedb	%v15,%v17,%v20
+	vfkhedbs	%v15,%v17,%v20
+	wfkhedb	%v15,%v17,%v20
+	wfkhedbs	%v15,%v17,%v20
+	wfkhexb	%v15,%v17,%v20
+	wfkhexbs	%v15,%v17,%v20
+	vfdsb	%v15,%v17,%v20
+	wfdsb	%v15,%v17,%v20
+	wfdxb	%v15,%v17,%v20
+	vfisb	%v15,%v17,13,12
+	wfisb	%v15,%v17,13,12
+	wfixb	%v15,%v17,13,12
+	vfll	%v15,%v17,13,12
+	vflls	%v15,%v17
+	wflls	%v15,%v17
+	wflld	%v15,%v17
+	vflr	%v15,%v17,13,12,11
+	vflrd	%v15,%v17,13,12
+	wflrd	%v15,%v17,13,12
+	wflrx	%v15,%v17,13,12
+	vfmax	%v15,%v17,%v20,13,12,11
+	vfmaxsb	%v15,%v17,%v20,13
+	vfmaxdb	%v15,%v17,%v20,13
+	wfmaxsb	%v15,%v17,%v20,13
+	wfmaxdb	%v15,%v17,%v20,13
+	wfmaxxb	%v15,%v17,%v20,13
+	vfmin	%v15,%v17,%v20,13,12,11
+	vfminsb	%v15,%v17,%v20,13
+	vfmindb	%v15,%v17,%v20,13
+	wfminsb	%v15,%v17,%v20,13
+	wfmindb	%v15,%v17,%v20,13
+	wfminxb	%v15,%v17,%v20,13
+	vfmsb	%v15,%v17,%v20
+	wfmsb	%v15,%v17,%v20
+	wfmxb	%v15,%v17,%v20
+	vfmasb	%v15,%v17,%v20,%v24
+	wfmasb	%v15,%v17,%v20,%v24
+	wfmaxb	%v15,%v17,%v20,%v24
+	vfmssb	%v15,%v17,%v20,%v24
+	wfmssb	%v15,%v17,%v20,%v24
+	wfmsxb	%v15,%v17,%v20,%v24
+	vfnma	%v15,%v17,%v20,%v24,13,12
+	vfnmasb	%v15,%v17,%v20,%v24
+	wfnmasb	%v15,%v17,%v20,%v24
+	vfnmadb	%v15,%v17,%v20,%v24
+	wfnmadb	%v15,%v17,%v20,%v24
+	wfnmaxb	%v15,%v17,%v20,%v24
+	vfnms	%v15,%v17,%v20,%v24,13,12
+	vfnmssb	%v15,%v17,%v20,%v24
+	wfnmssb	%v15,%v17,%v20,%v24
+	vfnmsdb	%v15,%v17,%v20,%v24
+	wfnmsdb	%v15,%v17,%v20,%v24
+	wfnmsxb	%v15,%v17,%v20,%v24
+	vfpsosb	%v15,%v17,13
+	wfpsosb	%v15,%v17,13
+	vflcsb	%v15,%v17
+	wflcsb	%v15,%v17
+	vflnsb	%v15,%v17
+	wflnsb	%v15,%v17
+	vflpsb	%v15,%v17
+	wflpsb	%v15,%v17
+	wfpsoxb	%v15,%v17,13
+	wflcxb	%v15,%v17
+	wflnxb	%v15,%v17
+	wflpxb	%v15,%v17
+	vfsqsb	%v15,%v17
+	wfsqsb	%v15,%v17
+	wfsqxb	%v15,%v17
+	vfssb	%v15,%v17,%v20
+	wfssb	%v15,%v17,%v20
+	wfsxb	%v15,%v17,%v20
+	vftcisb	%v15,%v17,4093
+	wftcisb	%v15,%v17,4093
+	wftcixb	%v15,%v17,4093
+	agh	%r6,-10000(%r9,%r11)
+	bic	13,-10000(%r6,%r9)
+	bi	-10000(%r6,%r9)
+	bio	-10000(%r6,%r9)
+	bih	-10000(%r6,%r9)
+	bip	-10000(%r6,%r9)
+	binle	-10000(%r6,%r9)
+	bil	-10000(%r6,%r9)
+	bim	-10000(%r6,%r9)
+	binhe	-10000(%r6,%r9)
+	bilh	-10000(%r6,%r9)
+	bine	-10000(%r6,%r9)
+	binz	-10000(%r6,%r9)
+	bie	-10000(%r6,%r9)
+	biz	-10000(%r6,%r9)
+	binlh	-10000(%r6,%r9)
+	bihe	-10000(%r6,%r9)
+	binl	-10000(%r6,%r9)
+	binm	-10000(%r6,%r9)
+	bile	-10000(%r6,%r9)
+	binh	-10000(%r6,%r9)
+	binp	-10000(%r6,%r9)
+	bino	-10000(%r6,%r9)
+	mgrk	%r6,%r9,%r11
+	mg	%r6,-10000(%r9,%r11)
+	mgh	%r6,-10000(%r9,%r11)
+	msrkc	%r6,%r9,%r11
+	msgrkc	%r6,%r9,%r11
+	msc	%r6,-10000(%r9,%r11)
+	msgc	%r6,-10000(%r9,%r11)
+	sgh	%r6,-10000(%r9,%r11)
+	vlrlr	%v15,%r6,4000(%r9)
+	vlrl	%v15,4000(%r6),253
+	vstrlr	%v15,%r6,4000(%r9)
+	vstrl	%v15,4000(%r6),253
+	vap	%v15,%v17,%v20,253,12
+	vcp	%v15,%v17,13
+	vcvb	%r6,%v15,13
+	vcvbg	%r6,%v15,13
+	vcvd	%v15,%r6,253,12
+	vcvdg	%v15,%r6,253,12
+	vdp	%v15,%v17,%v20,253,12
+	vlip	%v15,65533,12
+	vmp	%v15,%v17,%v20,253,12
+	vmsp	%v15,%v17,%v20,253,12
+	vpkz	%v15,4000(%r6),253
+	vpsop	%v15,%v17,253,252,11
+	vrp	%v15,%v17,%v20,253,12
+	vsdp	%v15,%v17,%v20,253,12
+	vsrp	%v15,%v17,253,252,11
+	vsp	%v15,%v17,%v20,253,12
+	vtp	%v15
+	vupkz	%v15,4000(%r6),253
+	lgg	%r6,-10000(%r9,%r11)
+	llgfsg	%r6,-10000(%r9,%r11)
+	lgsc	%r6,-10000(%r9,%r11)
+	stgsc	%r6,-10000(%r9,%r11)
+	kma	%r6,%r9,%r11
diff -rup binutils.orig/gas/testsuite/gas/s390/zarch-z13.d binutils-2.27/gas/testsuite/gas/s390/zarch-z13.d
--- binutils.orig/gas/testsuite/gas/s390/zarch-z13.d	2017-03-24 14:50:54.052789212 +0000
+++ binutils-2.27/gas/testsuite/gas/s390/zarch-z13.d	2017-03-24 14:54:05.065330554 +0000
@@ -513,12 +513,12 @@ Disassembly of section .text:
 .*:	e7 f1 00 bc d4 c7 [ 	]*vfi	%v15,%v17,13,12,11
 .*:	e7 f1 00 cd 34 c7 [ 	]*wfidb	%v15,%v17,5,12
 .*:	e7 f1 00 cd 34 c7 [ 	]*wfidb	%v15,%v17,5,12
-.*:	e7 f1 00 0c d4 c4 [ 	]*vlde	%v15,%v17,13,12
-.*:	e7 f1 00 00 24 c4 [ 	]*vldeb	%v15,%v17
-.*:	e7 f1 00 08 24 c4 [ 	]*wldeb	%v15,%v17
-.*:	e7 f1 00 bc d4 c5 [ 	]*vled	%v15,%v17,13,12,11
-.*:	e7 f1 00 cd 34 c5 [ 	]*wledb	%v15,%v17,5,12
-.*:	e7 f1 00 cd 34 c5 [ 	]*wledb	%v15,%v17,5,12
+.*:	e7 f1 00 0c d4 c4 [ 	]*vfll	%v15,%v17,13,12
+.*:	e7 f1 00 00 24 c4 [ 	]*vflls	%v15,%v17
+.*:	e7 f1 00 08 24 c4 [ 	]*wflls	%v15,%v17
+.*:	e7 f1 00 bc d4 c5 [ 	]*vflr	%v15,%v17,13,12,11
+.*:	e7 f1 00 cd 34 c5 [ 	]*wflrd	%v15,%v17,5,12
+.*:	e7 f1 00 cd 34 c5 [ 	]*wflrd	%v15,%v17,5,12
 .*:	e7 f1 40 0c d6 e7 [ 	]*vfm	%v15,%v17,%v20,13,12
 .*:	e7 f1 40 00 36 e7 [ 	]*vfmdb	%v15,%v17,%v20
 .*:	e7 f1 40 08 36 e7 [ 	]*wfmdb	%v15,%v17,%v20
diff -rup binutils.orig/include/opcode/s390.h binutils-2.27/include/opcode/s390.h
--- binutils.orig/include/opcode/s390.h	2017-03-24 14:51:01.896688195 +0000
+++ binutils-2.27/include/opcode/s390.h	2017-03-24 14:54:05.065330554 +0000
@@ -42,14 +42,17 @@ enum s390_opcode_cpu_val
     S390_OPCODE_Z196,
     S390_OPCODE_ZEC12,
     S390_OPCODE_Z13,
+    S390_OPCODE_ARCH12,
     S390_OPCODE_MAXCPU
   };
 
 /* Instruction specific flags.  */
 #define S390_INSTR_FLAG_OPTPARM 0x1
+
 #define S390_INSTR_FLAG_HTM 0x2
 #define S390_INSTR_FLAG_VX 0x4
-#define S390_INSTR_FLAG_FACILITY_MASK 0x6
+#define S390_INSTR_FLAG_VX2 0x8
+#define S390_INSTR_FLAG_FACILITY_MASK 0xe
 
 /* The opcode table is an array of struct s390_opcode.  */
 
diff -rup binutils.orig/opcodes/s390-mkopc.c binutils-2.27/opcodes/s390-mkopc.c
--- binutils.orig/opcodes/s390-mkopc.c	2017-03-24 14:50:54.849778948 +0000
+++ binutils-2.27/opcodes/s390-mkopc.c	2017-03-24 14:54:05.065330554 +0000
@@ -366,6 +366,8 @@ main (void)
 	min_cpu = S390_OPCODE_ZEC12;
       else if (strcmp (cpu_string, "z13") == 0)
 	min_cpu = S390_OPCODE_Z13;
+      else if (strcmp (cpu_string, "arch12") == 0)
+	min_cpu = S390_OPCODE_ARCH12;
       else {
 	fprintf (stderr, "Couldn't parse cpu string %s\n", cpu_string);
 	exit (1);
@@ -409,6 +411,10 @@ main (void)
 		&& (str[2] == 0 || str[2] == ',')) {
 	      flag_bits |= S390_INSTR_FLAG_VX;
 	      str += 2;
+	    } else if (strncmp (str, "vx2", 3) == 0
+		&& (str[3] == 0 || str[3] == ',')) {
+	      flag_bits |= S390_INSTR_FLAG_VX2;
+	      str += 3;
 	    } else {
 	      fprintf (stderr, "Couldn't parse flags string %s\n",
 		       flags_string);
diff -rup binutils.orig/opcodes/s390-opc.c binutils-2.27/opcodes/s390-opc.c
--- binutils.orig/opcodes/s390-opc.c	2017-03-24 14:50:54.850778935 +0000
+++ binutils-2.27/opcodes/s390-opc.c	2017-03-24 14:54:05.065330554 +0000
@@ -220,28 +220,30 @@ const struct s390_operand s390_operands[
   { 8, 16, 0 },
 #define U8_24       69            /* 8 bit unsigned value starting at 24 */
   { 8, 24, 0 },
-#define U8_32       70            /* 8 bit unsigned value starting at 32 */
+#define U8_28       70            /* 8 bit unsigned value starting at 28 */
+  { 8, 28, 0 },
+#define U8_32       71            /* 8 bit unsigned value starting at 32 */
   { 8, 32, 0 },
-#define U12_16      71            /* 12 bit unsigned value starting at 16 */
+#define U12_16      72            /* 12 bit unsigned value starting at 16 */
   { 12, 16, 0 },
-#define U16_16      72            /* 16 bit unsigned value starting at 16 */
+#define U16_16      73            /* 16 bit unsigned value starting at 16 */
   { 16, 16, 0 },
-#define U16_32      73		  /* 16 bit unsigned value starting at 32 */
+#define U16_32      74		  /* 16 bit unsigned value starting at 32 */
   { 16, 32, 0 },
-#define U32_16      74		  /* 32 bit unsigned value starting at 16 */
+#define U32_16      75		  /* 32 bit unsigned value starting at 16 */
   { 32, 16, 0 },
 
 /* PC-relative address operands.  */
 
-#define J12_12      75            /* 12 bit PC relative offset at 12 */
+#define J12_12      76            /* 12 bit PC relative offset at 12 */
   { 12, 12, S390_OPERAND_PCREL },
-#define J16_16      76            /* 16 bit PC relative offset at 16 */
+#define J16_16      77            /* 16 bit PC relative offset at 16 */
   { 16, 16, S390_OPERAND_PCREL },
-#define J16_32      77            /* 16 bit PC relative offset at 32 */
+#define J16_32      78            /* 16 bit PC relative offset at 32 */
   { 16, 32, S390_OPERAND_PCREL },
-#define J24_24      78            /* 24 bit PC relative offset at 24 */
+#define J24_24      79            /* 24 bit PC relative offset at 24 */
   { 24, 24, S390_OPERAND_PCREL },
-#define J32_16      79            /* 32 bit PC relative offset at 16 */
+#define J32_16      80            /* 32 bit PC relative offset at 16 */
   { 32, 16, S390_OPERAND_PCREL },
 
 };
@@ -425,6 +427,7 @@ const struct s390_operand s390_operands[
 #define INSTR_RXY_RERRD    6, { RE_8,D20_20,X_12,B_16,0,0 }      /* e.g. dsg   */
 #define INSTR_RXY_FRRD     6, { F_8,D20_20,X_12,B_16,0,0 }       /* e.g. ley   */
 #define INSTR_RXY_URRD     6, { U4_8,D20_20,X_12,B_16,0,0 }      /* e.g. pfd   */
+#define INSTR_RXY_0RRD     6, { D20_20,X_12,B_16,0,0 }           /* e.g. bic   */
 #define INSTR_RX_0RRD      4, { D_20,X_12,B_16,0,0,0 }           /* e.g. be    */
 #define INSTR_RX_FRRD      4, { F_8,D_20,X_12,B_16,0,0 }         /* e.g. ae    */
 #define INSTR_RX_FERRD     4, { FE_8,D_20,X_12,B_16,0,0 }        /* e.g. mxd   */
@@ -454,23 +457,29 @@ const struct s390_operand s390_operands[
 #define INSTR_VRI_V        6, { V_8,0,0,0,0,0 }                  /* e.g. vzero */
 #define INSTR_VRI_V0UUU    6, { V_8,U8_16,U8_24,U4_32,0,0 }      /* e.g. vgm   */
 #define INSTR_VRI_V0UU     6, { V_8,U8_16,U8_24,0,0,0 }          /* e.g. vgmb  */
+#define INSTR_VRI_V0UU2    6, { V_8,U16_16,U4_32,0,0,0 }         /* e.g. vlip  */
 #define INSTR_VRI_VVUU     6, { V_8,V_12,U16_16,U4_32,0,0 }      /* e.g. vrep  */
 #define INSTR_VRI_VVU      6, { V_8,V_12,U16_16,0,0,0 }          /* e.g. vrepb */
 #define INSTR_VRI_VVU2     6, { V_8,V_12,U12_16,0,0,0 }          /* e.g. vftcidb */
 #define INSTR_VRI_V0IU     6, { V_8,I16_16,U4_32,0,0,0 }         /* e.g. vrepi */
 #define INSTR_VRI_V0I      6, { V_8,I16_16,0,0,0,0 }             /* e.g. vrepib */
 #define INSTR_VRI_VVV0UU   6, { V_8,V_12,V_16,U8_24,U4_32,0 }    /* e.g. verim */
+#define INSTR_VRI_VVV0UU2  6, { V_8,V_12,V_16,U8_28,U4_24,0 }    /* e.g. vap   */
 #define INSTR_VRI_VVV0U    6, { V_8,V_12,V_16,U8_24,0,0 }        /* e.g. verimb*/
 #define INSTR_VRI_VVUUU    6, { V_8,V_12,U12_16,U4_32,U4_28,0 }  /* e.g. vftci */
+#define INSTR_VRI_VVUUU2   6, { V_8,V_12,U8_28,U8_16,U4_24,0 }   /* e.g. vpsop */
+#define INSTR_VRI_VR0UU    6, { V_8,R_12,U8_28,U4_24,0,0 }       /* e.g. vcvd  */
 #define INSTR_VRX_VRRD     6, { V_8,D_20,X_12,B_16,0,0 }         /* e.g. vl    */
 #define INSTR_VRX_VV       6, { V_8,V_12,0,0,0,0 }               /* e.g. vlr   */
-#define INSTR_VRX_VRRDU    6, { V_8,D_20,X_12,B_16,U4_32,0 }     /* e.g. vlrp  */
+#define INSTR_VRX_VRRDU    6, { V_8,D_20,X_12,B_16,U4_32,0 }     /* e.g. vlrep */
 #define INSTR_VRS_RVRDU    6, { R_8,V_12,D_20,B_16,U4_32,0 }     /* e.g. vlgv  */
 #define INSTR_VRS_RVRD     6, { R_8,V_12,D_20,B_16,0,0 }         /* e.g. vlgvb */
 #define INSTR_VRS_VVRDU    6, { V_8,V_12,D_20,B_16,U4_32,0 }     /* e.g. verll */
 #define INSTR_VRS_VVRD     6, { V_8,V_12,D_20,B_16,0,0 }         /* e.g. vlm   */
 #define INSTR_VRS_VRRDU    6, { V_8,R_12,D_20,B_16,U4_32,0 }     /* e.g. vlvg  */
 #define INSTR_VRS_VRRD     6, { V_8,R_12,D_20,B_16,0,0 }         /* e.g. vlvgb */
+#define INSTR_VRS_RRDV     6, { V_32,R_12,D_20,B_16,0,0 }        /* e.g. vlrlr */
+#define INSTR_VRR_0V       6, { V_12,0,0,0,0,0 }                 /* e.g. vtp   */
 #define INSTR_VRR_VRR      6, { V_8,R_12,R_16,0,0,0 }            /* e.g. vlvgp */
 #define INSTR_VRR_VVV0U    6, { V_8,V_12,V_16,U4_32,0,0 }        /* e.g. vmrh  */
 #define INSTR_VRR_VVV0U0   6, { V_8,V_12,V_16,U4_24,0,0 }        /* e.g. vfaeb */
@@ -499,6 +508,9 @@ const struct s390_operand s390_operands[
 #define INSTR_VRR_VV0UUU   6, { V_8,V_12,U4_32,U4_28,U4_24,0 }   /* e.g. vcdg  */
 #define INSTR_VRR_VVVU0UV  6, { V_8,V_12,V_16,V_32,U4_28,U4_20 } /* e.g. vfma  */
 #define INSTR_VRR_VV0U0U   6, { V_8,V_12,U4_32,U4_24,0,0 }       /* e.g. vistr */
+#define INSTR_VRR_0VV0U    6, { V_12,V_16,U4_24,0,0,0 }          /* e.g. vcp   */
+#define INSTR_VRR_RV0U     6, { R_8,V_12,U4_24,0,0,0 }           /* e.g. vcvb  */
+#define INSTR_VSI_URDV     6, { V_32,D_20,B_16,U8_8,0,0 }        /* e.g. vlrl  */
 
 #define MASK_E            { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
 #define MASK_IE_UU        { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
@@ -631,6 +643,7 @@ const struct s390_operand s390_operands[
 #define MASK_RXY_RERRD    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
 #define MASK_RXY_FRRD     { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
 #define MASK_RXY_URRD     { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RXY_0RRD     { 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff }
 #define MASK_RX_0RRD      { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
 #define MASK_RX_FRRD      { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
 #define MASK_RX_FERRD     { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
@@ -660,14 +673,18 @@ const struct s390_operand s390_operands[
 #define MASK_VRI_V        { 0xff, 0x0f, 0xff, 0xff, 0xf0, 0xff }
 #define MASK_VRI_V0UUU    { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff }
 #define MASK_VRI_V0UU     { 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff }
+#define MASK_VRI_V0UU2    { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff }
 #define MASK_VRI_VVUU     { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
 #define MASK_VRI_VVU      { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
 #define MASK_VRI_VVU2     { 0xff, 0x00, 0x00, 0x0f, 0xf0, 0xff }
 #define MASK_VRI_V0IU     { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff }
 #define MASK_VRI_V0I      { 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff }
 #define MASK_VRI_VVV0UU   { 0xff, 0x00, 0x0f, 0x00, 0x00, 0xff }
+#define MASK_VRI_VVV0UU2  { 0xff, 0x00, 0x0f, 0x00, 0x00, 0xff }
 #define MASK_VRI_VVV0U    { 0xff, 0x00, 0x0f, 0x00, 0xf0, 0xff }
 #define MASK_VRI_VVUUU    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_VRI_VVUUU2   { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_VRI_VR0UU    { 0xff, 0x00, 0xff, 0x00, 0x00, 0xff }
 #define MASK_VRX_VRRD     { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
 #define MASK_VRX_VV       { 0xff, 0x00, 0xff, 0xff, 0xf0, 0xff }
 #define MASK_VRX_VRRDU    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
@@ -677,6 +694,8 @@ const struct s390_operand s390_operands[
 #define MASK_VRS_VVRD     { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
 #define MASK_VRS_VRRDU    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
 #define MASK_VRS_VRRD     { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
+#define MASK_VRS_RRDV     { 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff }
+#define MASK_VRR_0V       { 0xff, 0xf0, 0xff, 0xff, 0xf0, 0xff }
 #define MASK_VRR_VRR      { 0xff, 0x00, 0x0f, 0xff, 0xf0, 0xff }
 #define MASK_VRR_VVV0U    { 0xff, 0x00, 0x0f, 0xff, 0x00, 0xff }
 #define MASK_VRR_VVV0U0   { 0xff, 0x00, 0x0f, 0x0f, 0xf0, 0xff }
@@ -705,36 +724,46 @@ const struct s390_operand s390_operands[
 #define MASK_VRR_VV0UUU   { 0xff, 0x00, 0xff, 0x00, 0x00, 0xff }
 #define MASK_VRR_VVVU0UV  { 0xff, 0x00, 0x00, 0xf0, 0x00, 0xff }
 #define MASK_VRR_VV0U0U   { 0xff, 0x00, 0xff, 0x0f, 0x00, 0xff }
+#define MASK_VRR_0VV0U    { 0xff, 0xf0, 0x0f, 0x0f, 0xf0, 0xff }
+#define MASK_VRR_RV0U     { 0xff, 0x00, 0xff, 0x0f, 0xf0, 0xff }
+#define MASK_VSI_URDV     { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+
 
 /* The opcode formats table (blueprints for .insn pseudo mnemonic).  */
 
 const struct s390_opcode s390_opformats[] =
   {
-  { "e",	OP8(0x00LL),	MASK_E,		INSTR_E,	3, 0 ,0 },
-  { "ri",	OP8(0x00LL),	MASK_RI_RI,	INSTR_RI_RI,	3, 0 ,0 },
-  { "rie",	OP8(0x00LL),	MASK_RIE_RRP,	INSTR_RIE_RRP,	3, 0 ,0 },
-  { "ril",	OP8(0x00LL),	MASK_RIL_RP,	INSTR_RIL_RP,	3, 0 ,0 },
-  { "rilu",	OP8(0x00LL),	MASK_RIL_RU,	INSTR_RIL_RU,	3, 0 ,0 },
-  { "ris",	OP8(0x00LL),	MASK_RIS_RURDI,	INSTR_RIS_RURDI,3, 6 ,0 },
-  { "rr",	OP8(0x00LL),	MASK_RR_RR,	INSTR_RR_RR,	3, 0 ,0 },
-  { "rre",	OP8(0x00LL),	MASK_RRE_RR,	INSTR_RRE_RR,	3, 0 ,0 },
-  { "rrf",	OP8(0x00LL),	MASK_RRF_RURR,	INSTR_RRF_RURR,	3, 0 ,0 },
-  { "rrs",	OP8(0x00LL),	MASK_RRS_RRRDU,	INSTR_RRS_RRRDU,3, 6 ,0 },
-  { "rs",	OP8(0x00LL),	MASK_RS_RRRD,	INSTR_RS_RRRD,	3, 0 ,0 },
-  { "rse",	OP8(0x00LL),	MASK_RSE_RRRD,	INSTR_RSE_RRRD,	3, 0 ,0 },
-  { "rsi",	OP8(0x00LL),	MASK_RSI_RRP,	INSTR_RSI_RRP,	3, 0 ,0 },
-  { "rsy",	OP8(0x00LL),	MASK_RSY_RRRD,	INSTR_RSY_RRRD,	3, 3 ,0 },
-  { "rx",	OP8(0x00LL),	MASK_RX_RRRD,	INSTR_RX_RRRD,	3, 0 ,0 },
-  { "rxe",	OP8(0x00LL),	MASK_RXE_RRRD,	INSTR_RXE_RRRD,	3, 0 ,0 },
-  { "rxf",	OP8(0x00LL),	MASK_RXF_RRRDR,	INSTR_RXF_RRRDR,3, 0 ,0 },
-  { "rxy",	OP8(0x00LL),	MASK_RXY_RRRD,	INSTR_RXY_RRRD,	3, 3 ,0 },
-  { "s",	OP8(0x00LL),	MASK_S_RD,	INSTR_S_RD,	3, 0 ,0 },
-  { "si",	OP8(0x00LL),	MASK_SI_URD,	INSTR_SI_URD,	3, 0 ,0 },
-  { "siy",	OP8(0x00LL),	MASK_SIY_URD,	INSTR_SIY_URD,	3, 3 ,0 },
-  { "sil",	OP8(0x00LL),    MASK_SIL_RDI,   INSTR_SIL_RDI,  3, 6 ,0 },
-  { "ss",	OP8(0x00LL),	MASK_SS_RRRDRD,	INSTR_SS_RRRDRD,3, 0 ,0 },
-  { "sse",	OP8(0x00LL),	MASK_SSE_RDRD,	INSTR_SSE_RDRD,	3, 0 ,0 },
-  { "ssf",	OP8(0x00LL),	MASK_SSF_RRDRD,	INSTR_SSF_RRDRD,3, 0 ,0 },
+  { "e",    OP8(0x00LL), MASK_E,	   INSTR_E,	      3,  0 ,0 },
+  { "ri",   OP8(0x00LL), MASK_RI_RI,	   INSTR_RI_RI,	      3,  0 ,0 },
+  { "rie",  OP8(0x00LL), MASK_RIE_RRP,	   INSTR_RIE_RRP,     3,  0 ,0 },
+  { "ril",  OP8(0x00LL), MASK_RIL_RP,	   INSTR_RIL_RP,      3,  0 ,0 },
+  { "rilu", OP8(0x00LL), MASK_RIL_RU,	   INSTR_RIL_RU,      3,  0 ,0 },
+  { "ris",  OP8(0x00LL), MASK_RIS_RURDI,   INSTR_RIS_RURDI,   3,  6 ,0 },
+  { "rr",   OP8(0x00LL), MASK_RR_RR,	   INSTR_RR_RR,       3,  0 ,0 },
+  { "rre",  OP8(0x00LL), MASK_RRE_RR,	   INSTR_RRE_RR,      3,  0 ,0 },
+  { "rrf",  OP8(0x00LL), MASK_RRF_RURR,	   INSTR_RRF_RURR,    3,  0 ,0 },
+  { "rrs",  OP8(0x00LL), MASK_RRS_RRRDU,   INSTR_RRS_RRRDU,   3,  6 ,0 },
+  { "rs",   OP8(0x00LL), MASK_RS_RRRD,	   INSTR_RS_RRRD,     3,  0 ,0 },
+  { "rse",  OP8(0x00LL), MASK_RSE_RRRD,	   INSTR_RSE_RRRD,    3,  0 ,0 },
+  { "rsi",  OP8(0x00LL), MASK_RSI_RRP,	   INSTR_RSI_RRP,     3,  0 ,0 },
+  { "rsy",  OP8(0x00LL), MASK_RSY_RRRD,	   INSTR_RSY_RRRD,    3,  3 ,0 },
+  { "rx",   OP8(0x00LL), MASK_RX_RRRD,	   INSTR_RX_RRRD,     3,  0 ,0 },
+  { "rxe",  OP8(0x00LL), MASK_RXE_RRRD,	   INSTR_RXE_RRRD,    3,  0 ,0 },
+  { "rxf",  OP8(0x00LL), MASK_RXF_RRRDR,   INSTR_RXF_RRRDR,   3,  0 ,0 },
+  { "rxy",  OP8(0x00LL), MASK_RXY_RRRD,	   INSTR_RXY_RRRD,    3,  3 ,0 },
+  { "s",    OP8(0x00LL), MASK_S_RD,	   INSTR_S_RD,	      3,  0 ,0 },
+  { "si",   OP8(0x00LL), MASK_SI_URD,	   INSTR_SI_URD,      3,  0 ,0 },
+  { "siy",  OP8(0x00LL), MASK_SIY_URD,	   INSTR_SIY_URD,     3,  3 ,0 },
+  { "sil",  OP8(0x00LL), MASK_SIL_RDI,     INSTR_SIL_RDI,     3,  6 ,0 },
+  { "ss",   OP8(0x00LL), MASK_SS_RRRDRD,   INSTR_SS_RRRDRD,   3,  0 ,0 },
+  { "sse",  OP8(0x00LL), MASK_SSE_RDRD,	   INSTR_SSE_RDRD,    3,  0 ,0 },
+  { "ssf",  OP8(0x00LL), MASK_SSF_RRDRD,   INSTR_SSF_RRDRD,   3,  0 ,0 },
+  { "vrv",  OP8(0x00LL), MASK_VRV_VVXRDU,  INSTR_VRV_VVXRDU,  3,  9 ,0 },
+  { "vri",  OP8(0x00LL), MASK_VRI_VVUUU,   INSTR_VRI_VVUUU,   3,  9 ,0 },
+  { "vrx",  OP8(0x00LL), MASK_VRX_VRRDU,   INSTR_VRX_VRRDU,   3,  9 ,0 },
+  { "vrs",  OP8(0x00LL), MASK_VRS_RVRDU,   INSTR_VRS_RVRDU,   3,  9 ,0 },
+  { "vrr",  OP8(0x00LL), MASK_VRR_VVV0UUU, INSTR_VRR_VVV0UUU, 3,  9 ,0 },
+  { "vsi",  OP8(0x00LL), MASK_VSI_URDV,	   INSTR_VSI_URDV,    3, 10 ,0 },
 };
 
 const int s390_num_opformats =
diff -rup binutils.orig/opcodes/s390-opc.txt binutils-2.27/opcodes/s390-opc.txt
--- binutils.orig/opcodes/s390-opc.txt	2017-03-24 14:50:54.851778922 +0000
+++ binutils-2.27/opcodes/s390-opc.txt	2017-03-24 14:54:05.066330541 +0000
@@ -630,7 +630,7 @@ eb0000000051 tmy SIY_URD "test under mas
 # 'old' instructions extended to long displacement
 # these instructions are entered into the opcode table twice.
 e30000000003 lrag RXY_RRRD "load real address with long offset 64" z990 zarch
-e30000000004 lg RXY_RRRD "	 load 64" z990 zarch
+e30000000004 lg RXY_RRRD "load 64" z990 zarch
 e30000000008 ag RXY_RRRD "add with long offset 64" z990 zarch
 e30000000009 sg RXY_RRRD "subtract with long offset 64" z990 zarch
 e3000000000a alg RXY_RRRD "add logical with long offset 64" z990 zarch
@@ -1584,27 +1584,27 @@ e7000230008a vstrczfs VRR_VVVU0VB3 "vect
 
 # Chapter 24
 e700000000e3 vfa VRR_VVV0UU "vector fp add" z13 zarch vx
-e700000030e3 vfadb VRR_VVV "vector fp add" z13 zarch vx
-e700000830e3 wfadb VRR_VVV "vector fp add" z13 zarch vx
+e700000030e3 vfadb VRR_VVV "vector fp add long" z13 zarch vx
+e700000830e3 wfadb VRR_VVV "vector fp add long" z13 zarch vx
 e700000000cb wfc VRR_VV0UU2 "vector fp compare scalar" z13 zarch vx
-e700000030cb wfcdb VRR_VV "vector fp compare scalar" z13 zarch vx
+e700000030cb wfcdb VRR_VV "vector fp compare scalar long" z13 zarch vx
 e700000000ca wfk VRR_VV0UU2 "vector fp compare and signal scalar" z13 zarch vx
-e700000030ca wfkdb VRR_VV "vector fp compare and signal scalar" z13 zarch vx
+e700000030ca wfkdb VRR_VV "vector fp compare and signal scalar long" z13 zarch vx
 e700000000e8 vfce VRR_VVV0UUU "vector fp compare equal" z13 zarch vx
-e700000030e8 vfcedb VRR_VVV "vector fp compare equal" z13 zarch vx
-e700001030e8 vfcedbs VRR_VVV "vector fp compare equal" z13 zarch vx
-e700000830e8 wfcedb VRR_VVV "vector fp compare equal" z13 zarch vx
-e700001830e8 wfcedbs VRR_VVV "vector fp compare equal" z13 zarch vx
+e700000030e8 vfcedb VRR_VVV "vector fp compare equal long" z13 zarch vx
+e700001030e8 vfcedbs VRR_VVV "vector fp compare equal long" z13 zarch vx
+e700000830e8 wfcedb VRR_VVV "vector fp compare equal long" z13 zarch vx
+e700001830e8 wfcedbs VRR_VVV "vector fp compare equal long" z13 zarch vx
 e700000000eb vfch VRR_VVV0UUU "vector fp compare high" z13 zarch vx
-e700000030eb vfchdb VRR_VVV "vector fp compare high" z13 zarch vx
-e700001030eb vfchdbs VRR_VVV "vector fp compare high" z13 zarch vx
-e700000830eb wfchdb VRR_VVV "vector fp compare high" z13 zarch vx
-e700001830eb wfchdbs VRR_VVV "vector fp compare high" z13 zarch vx
+e700000030eb vfchdb VRR_VVV "vector fp compare high long" z13 zarch vx
+e700001030eb vfchdbs VRR_VVV "vector fp compare high long" z13 zarch vx
+e700000830eb wfchdb VRR_VVV "vector fp compare high long" z13 zarch vx
+e700001830eb wfchdbs VRR_VVV "vector fp compare high long" z13 zarch vx
 e700000000ea vfche VRR_VVV0UUU "vector fp compare high or equal" z13 zarch vx
-e700000030ea vfchedb VRR_VVV "vector fp compare high or equal" z13 zarch vx
-e700001030ea vfchedbs VRR_VVV "vector fp compare high or equal" z13 zarch vx
-e700000830ea wfchedb VRR_VVV "vector fp compare high or equal" z13 zarch vx
-e700001830ea wfchedbs VRR_VVV "vector fp compare high or equal" z13 zarch vx
+e700000030ea vfchedb VRR_VVV "vector fp compare high or equal long" z13 zarch vx
+e700001030ea vfchedbs VRR_VVV "vector fp compare high or equal long" z13 zarch vx
+e700000830ea wfchedb VRR_VVV "vector fp compare high or equal long" z13 zarch vx
+e700001830ea wfchedbs VRR_VVV "vector fp compare high or equal long" z13 zarch vx
 e700000000c3 vcdg VRR_VV0UUU "vector fp convert from fixed 64 bit" z13 zarch vx
 e700000030c3 vcdgb VRR_VV0UU "vector fp convert from fixed 64 bit" z13 zarch vx
 e700000830c3 wcdgb VRR_VV0UU8 "vector fp convert from fixed 64 bit" z13 zarch vx
@@ -1618,41 +1618,41 @@ e700000000c0 vclgd VRR_VV0UUU "vector fp
 e700000030c0 vclgdb VRR_VV0UU "vector fp convert to logical 64 bit" z13 zarch vx
 e700000830c0 wclgdb VRR_VV0UU8 "vector fp convert to logical 64 bit" z13 zarch vx
 e700000000e5 vfd VRR_VVV0UU "vector fp divide" z13 zarch vx
-e700000030e5 vfddb VRR_VVV "vector fp divide" z13 zarch vx
-e700000830e5 wfddb VRR_VVV "vector fp divide" z13 zarch vx
+e700000030e5 vfddb VRR_VVV "vector fp divide long" z13 zarch vx
+e700000830e5 wfddb VRR_VVV "vector fp divide long" z13 zarch vx
 e700000000c7 vfi VRR_VV0UUU "vector load fp integer" z13 zarch vx
-e700000030c7 vfidb VRR_VV0UU "vector load fp integer" z13 zarch vx
-e700000830c7 wfidb VRR_VV0UU8 "vector load fp integer" z13 zarch vx
+e700000030c7 vfidb VRR_VV0UU "vector load fp integer long" z13 zarch vx
+e700000830c7 wfidb VRR_VV0UU8 "vector load fp integer long" z13 zarch vx
 e700000000c4 vlde VRR_VV0UU2 "vector fp load lengthened" z13 zarch vx
-e700000020c4 vldeb VRR_VV "vector fp load lengthened" z13 zarch vx
-e700000820c4 wldeb VRR_VV "vector fp load lengthened" z13 zarch vx
+e700000020c4 vldeb VRR_VV "vector fp load lengthened short to long" z13 zarch vx
+e700000820c4 wldeb VRR_VV "vector fp load lengthened short to long" z13 zarch vx
 e700000000c5 vled VRR_VV0UUU "vector fp load rounded" z13 zarch vx
-e700000030c5 vledb VRR_VV0UU "vector fp load rounded" z13 zarch vx
-e700000830c5 wledb VRR_VV0UU8 "vector fp load rounded" z13 zarch vx
+e700000030c5 vledb VRR_VV0UU "vector fp load rounded long to short" z13 zarch vx
+e700000830c5 wledb VRR_VV0UU8 "vector fp load rounded long to short" z13 zarch vx
 e700000000e7 vfm VRR_VVV0UU "vector fp multiply" z13 zarch vx
-e700000030e7 vfmdb VRR_VVV "vector fp multiply" z13 zarch vx
-e700000830e7 wfmdb VRR_VVV "vector fp multiply" z13 zarch vx
+e700000030e7 vfmdb VRR_VVV "vector fp multiply long" z13 zarch vx
+e700000830e7 wfmdb VRR_VVV "vector fp multiply long" z13 zarch vx
 e7000000008f vfma VRR_VVVU0UV "vector fp multiply and add" z13 zarch vx
-e7000300008f vfmadb VRR_VVVV "vector fp multiply and add" z13 zarch vx
-e7000308008f wfmadb VRR_VVVV "vector fp multiply and add" z13 zarch vx
+e7000300008f vfmadb VRR_VVVV "vector fp multiply and add long" z13 zarch vx
+e7000308008f wfmadb VRR_VVVV "vector fp multiply and add long" z13 zarch vx
 e7000000008e vfms VRR_VVVU0UV "vector fp multiply and subtract" z13 zarch vx
-e7000300008e vfmsdb VRR_VVVV "vector fp multiply and subtract" z13 zarch vx
-e7000308008e wfmsdb VRR_VVVV "vector fp multiply and subtract" z13 zarch vx
+e7000300008e vfmsdb VRR_VVVV "vector fp multiply and subtract long" z13 zarch vx
+e7000308008e wfmsdb VRR_VVVV "vector fp multiply and subtract long" z13 zarch vx
 e700000000cc vfpso VRR_VV0UUU "vector fp perform sign operation" z13 zarch vx
-e700000030cc vfpsodb VRR_VV0U2 "vector fp perform sign operation" z13 zarch vx
-e700000830cc wfpsodb VRR_VV0U2 "vector fp perform sign operation" z13 zarch vx
-e700000030cc vflcdb VRR_VV "vector fp perform sign operation" z13 zarch vx
-e700000830cc wflcdb VRR_VV "vector fp perform sign operation" z13 zarch vx
-e700001030cc vflndb VRR_VV "vector fp perform sign operation" z13 zarch vx
-e700001830cc wflndb VRR_VV "vector fp perform sign operation" z13 zarch vx
-e700002030cc vflpdb VRR_VV "vector fp perform sign operation" z13 zarch vx
-e700002830cc wflpdb VRR_VV "vector fp perform sign operation" z13 zarch vx
+e700000030cc vfpsodb VRR_VV0U2 "vector fp perform sign operation long" z13 zarch vx
+e700000830cc wfpsodb VRR_VV0U2 "vector fp perform sign operation long" z13 zarch vx
+e700000030cc vflcdb VRR_VV "vector fp perform sign operation long" z13 zarch vx
+e700000830cc wflcdb VRR_VV "vector fp perform sign operation long" z13 zarch vx
+e700001030cc vflndb VRR_VV "vector fp perform sign operation long" z13 zarch vx
+e700001830cc wflndb VRR_VV "vector fp perform sign operation long" z13 zarch vx
+e700002030cc vflpdb VRR_VV "vector fp perform sign operation long" z13 zarch vx
+e700002830cc wflpdb VRR_VV "vector fp perform sign operation long" z13 zarch vx
 e700000000ce vfsq VRR_VV0UU2 "vector fp square root" z13 zarch vx
-e700000030ce vfsqdb VRR_VV "vector fp square root" z13 zarch vx
-e700000830ce wfsqdb VRR_VV "vector fp square root" z13 zarch vx
+e700000030ce vfsqdb VRR_VV "vector fp square root long" z13 zarch vx
+e700000830ce wfsqdb VRR_VV "vector fp square root long" z13 zarch vx
 e700000000e2 vfs VRR_VVV0UU "vector fp subtract" z13 zarch vx
-e700000030e2 vfsdb VRR_VVV "vector fp subtract" z13 zarch vx
-e700000830e2 wfsdb VRR_VVV "vector fp subtract" z13 zarch vx
+e700000030e2 vfsdb VRR_VVV "vector fp subtract long" z13 zarch vx
+e700000830e2 wfsdb VRR_VVV "vector fp subtract long" z13 zarch vx
 e7000000004a vftci VRI_VVUUU "vector fp test data class immediate" z13 zarch vx
 e7000000304a vftcidb VRI_VVU2 "vector fp test data class immediate" z13 zarch vx
 e7000008304a wftcidb VRI_VVU2 "vector fp test data class immediate" z13 zarch vx
@@ -1679,3 +1679,200 @@ e3000000003a llzrgf RXY_RRRD "load logic
 e3000000003b lzrf RXY_RRRD "load and zero rightmost byte 32->32" z13 zarch
 e3000000002a lzrg RXY_RRRD "load and zero rightmost byte 64->64" z13 zarch
 b93c ppno RRE_RR "perform pseudorandom number operation" z13 zarch
+
+# arch12 instructions
+
+# Vector Enhancements Facility 1
+
+e70000000085 vbperm VRR_VVV "vector bit permute" arch12 zarch
+e70000006004 vllezlf VRX_VRRD "vector load logical word element and zero - left aligned" arch12 zarch vx2
+e700000000b8 vmsl VRR_VVVUU0V "vector multiply sum logical" arch12 zarch vx2
+e700030000b8 vmslg VRR_VVVU0VB "vector multiply sum logical double word" arch12 zarch vx2
+e7000000006c vnx VRR_VVV "vector not exclusive or" arch12 zarch vx2
+e7000000006e vnn VRR_VVV "vector nand" arch12 zarch
+e7000000006f voc VRR_VVV "vector or with complement" arch12 zarch vx2
+e70000000050 vpopctb VRR_VV "vector population count byte" arch12 zarch vx2
+e70000001050 vpopcth VRR_VV "vector population count halfword" arch12 zarch vx2
+e70000002050 vpopctf VRR_VV "vector population count word" arch12 zarch vx2
+e70000003050 vpopctg VRR_VV "vector population count double word" arch12 zarch vx2
+e700000020e3 vfasb VRR_VVV "vector fp add short" arch12 zarch vx2
+e700000820e3 wfasb VRR_VVV "scalar vector fp add scalar short" arch12 zarch vx2
+e700000840e3 wfaxb VRR_VVV "scalar vector fp add scalar extended" arch12 zarch vx2
+e700000020cb wfcsb VRR_VV "scalar vector fp compare scalar short" arch12 zarch vx2
+e700000040cb wfcxb VRR_VV "scalar vector fp compare scalar extended" arch12 zarch vx2
+e700000020ca wfksb VRR_VV "scalar vector fp compare and signal scalar short" arch12 zarch vx2
+e700000040ca wfkxb VRR_VV "scalar vector fp compare and signal scalar extended" arch12 zarch vx2
+
+e700000020e8 vfcesb VRR_VVV "vector fp compare equal short" arch12 zarch vx2
+e700001020e8 vfcesbs VRR_VVV "vector fp compare equal short" arch12 zarch vx2
+e700000820e8 wfcesb VRR_VVV "scalar vector fp compare equal scalar short" arch12 zarch vx2
+e700001820e8 wfcesbs VRR_VVV "scalar fp compare equal scalar short" arch12 zarch vx2
+e700000840e8 wfcexb VRR_VVV "scalar vector fp compare equal scalar extended" arch12 zarch vx2
+e700001840e8 wfcexbs VRR_VVV "scalar vector fp compare equal scalar extended" arch12 zarch vx2
+
+e700000420e8 vfkesb VRR_VVV "vector fp compare and signal equal short" arch12 zarch vx2
+e700001420e8 vfkesbs VRR_VVV "vector fp compare and signal equal short" arch12 zarch vx2
+e700000c20e8 wfkesb VRR_VVV "scalar vector fp compare and signal equal scalar short" arch12 zarch vx2
+e700001c20e8 wfkesbs VRR_VVV "scalar fp compare and signal equal scalar short" arch12 zarch vx2
+e700000430e8 vfkedb VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx
+e700001430e8 vfkedbs VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx
+e700000c30e8 wfkedb VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx
+e700001c30e8 wfkedbs VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx
+e700000c40e8 wfkexb VRR_VVV "scalar vector fp compare and signal equal scalar extended" arch12 zarch vx2
+e700001c40e8 wfkexbs VRR_VVV "scalar vector fp compare and signal equal scalar extended" arch12 zarch vx2
+
+e700000020eb vfchsb VRR_VVV "vector fp compare high short" arch12 zarch vx2
+e700001020eb vfchsbs VRR_VVV "vector fp compare high short" arch12 zarch vx2
+e700000820eb wfchsb VRR_VVV "scalar vector fp compare high scalar short" arch12 zarch vx2
+e700001820eb wfchsbs VRR_VVV "scalar vector fp compare high scalar short" arch12 zarch vx2
+e700000840eb wfchxb VRR_VVV "scalar vector fp compare high scalar extended" arch12 zarch vx2
+e700001840eb wfchxbs VRR_VVV "scalar vector fp compare high scalar extended" arch12 zarch vx2
+
+e700000420eb vfkhsb VRR_VVV "vector fp compare and signal high short" arch12 zarch vx2
+e700001420eb vfkhsbs VRR_VVV "vector fp compare and signal high short" arch12 zarch vx2
+e700000c20eb wfkhsb VRR_VVV "scalar vector fp compare and signal high scalar short" arch12 zarch vx2
+e700001c20eb wfkhsbs VRR_VVV "scalar vector fp compare and signal high scalar short" arch12 zarch vx2
+e700000430eb vfkhdb VRR_VVV "vector fp compare and signal high long" arch12 zarch vx
+e700001430eb vfkhdbs VRR_VVV "vector fp compare and signal high long" arch12 zarch vx
+e700000c30eb wfkhdb VRR_VVV "vector fp compare and signal high long" arch12 zarch vx
+e700001c30eb wfkhdbs VRR_VVV "vector fp compare and signal high long" arch12 zarch vx
+e700000c40eb wfkhxb VRR_VVV "scalar vector fp compare and signal high scalar extended" arch12 zarch vx2
+e700001c40eb wfkhxbs VRR_VVV "scalar vector fp compare and signal high scalar extended" arch12 zarch vx2
+
+e700000020ea vfchesb VRR_VVV "vector fp compare high or equal short" arch12 zarch vx2
+e700001020ea vfchesbs VRR_VVV "vector fp compare high or equal short" arch12 zarch vx2
+e700000820ea wfchesb VRR_VVV "scalar vector fp compare high or equal scalar short" arch12 zarch vx2
+e700001820ea wfchesbs VRR_VVV "scalar vector fp compare high or equal scalar short" arch12 zarch vx2
+e700000840ea wfchexb VRR_VVV "scalar vector fp compare high or equal scalar extended" arch12 zarch vx2
+e700001840ea wfchexbs VRR_VVV "scalar vector fp compare high or equal scalar extended" arch12 zarch vx2
+
+e700000420ea vfkhesb VRR_VVV "vector fp compare and signal high or equal short" arch12 zarch vx2
+e700001420ea vfkhesbs VRR_VVV "vector fp compare and signal high or equal short" arch12 zarch vx2
+e700000c20ea wfkhesb VRR_VVV "scalar vector fp compare and signal high or equal scalar short" arch12 zarch vx2
+e700001c20ea wfkhesbs VRR_VVV "scalar vector fp compare and signal high or equal scalar short" arch12 zarch vx2
+e700000430ea vfkhedb VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx
+e700001430ea vfkhedbs VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx
+e700000c30ea wfkhedb VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx
+e700001c30ea wfkhedbs VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx
+e700000c40ea wfkhexb VRR_VVV "scalar vector fp compare and signal high or equal scalar extended" arch12 zarch vx2
+e700001c40ea wfkhexbs VRR_VVV "scalar vector fp compare and signal high or equal scalar extended" arch12 zarch vx2
+
+e700000020e5 vfdsb VRR_VVV "vector fp divide short" arch12 zarch vx2
+e700000820e5 wfdsb VRR_VVV "scalar vector fp divide scalar short" arch12 zarch vx2
+e700000840e5 wfdxb VRR_VVV "scalar vector fp divide scalar extended" arch12 zarch vx2
+e700000020c7 vfisb VRR_VV0UU "vector load fp integer short" arch12 zarch vx2
+e700000820c7 wfisb VRR_VV0UU8 "scalar vector load fp integer scalar short" arch12 zarch vx2
+e700000840c7 wfixb VRR_VV0UU8 "scalar vector load fp integer scalar extended" arch12 zarch vx2
+e700000000c4 vfll VRR_VV0UU2 "vector fp load lengthened" arch12 zarch vx2
+e700000020c4 vflls VRR_VV "vector fp load lengthened" arch12 zarch vx2
+e700000820c4 wflls VRR_VV "scalar vector fp load lengthened short" arch12 zarch vx2
+e700000830c4 wflld VRR_VV "scalar vector fp load lengthened long" arch12 zarch vx2
+e700000000c5 vflr VRR_VV0UUU "vector fp load rounded" arch12 zarch vx2
+e700000030c5 vflrd VRR_VV0UU "vector fp load rounded long" arch12 zarch vx2
+e700000830c5 wflrd VRR_VV0UU8 "scalar vector fp load rounded long" arch12 zarch vx2
+e700000840c5 wflrx VRR_VV0UU8 "scalar vector fp load rounded extended" arch12 zarch vx2
+e700000000ef vfmax VRR_VVV0UUU "vector fp maximum" arch12 zarch vx2
+e700000020ef vfmaxsb VRR_VVV0U0 "vector fp maximum short" arch12 zarch vx2
+e700000030ef vfmaxdb VRR_VVV0U0 "vector fp maximum long" arch12 zarch vx2
+e700000820ef wfmaxsb VRR_VVV0U0 "scalar fp maximum scalar short" arch12 zarch vx2
+e700000830ef wfmaxdb VRR_VVV0U0 "scalar fp maximum scalar long" arch12 zarch vx2
+e700000840ef wfmaxxb VRR_VVV0U0 "scalar fp maximum scalar extended" arch12 zarch vx2
+e700000000ee vfmin VRR_VVV0UUU "vector fp minimum" arch12 zarch vx2
+e700000020ee vfminsb VRR_VVV0U0 "vector fp minimum short" arch12 zarch vx2
+e700000030ee vfmindb VRR_VVV0U0 "vector fp minimum long" arch12 zarch vx2
+e700000820ee wfminsb VRR_VVV0U0 "scalar fp minimum scalar short" arch12 zarch vx2
+e700000830ee wfmindb VRR_VVV0U0 "scalar fp minimum scalar long" arch12 zarch vx2
+e700000840ee wfminxb VRR_VVV0U0 "scalar fp minimum scalar extended" arch12 zarch vx2
+e700000020e7 vfmsb VRR_VVV "vector fp multiply short" arch12 zarch vx2
+e700000820e7 wfmsb VRR_VVV "scalar vector fp multiply scalar short" arch12 zarch vx2
+e700000840e7 wfmxb VRR_VVV "scalar vector fp multiply scalar extended" arch12 zarch vx2
+e7000200008f vfmasb VRR_VVVV "vector fp multiply and add short" arch12 zarch vx2
+e7000208008f wfmasb VRR_VVVV "scalar vector fp multiply and add scalar short" arch12 zarch vx2
+e7000408008f wfmaxb VRR_VVVV "scalar vector fp multiply and add scalar extended" arch12 zarch vx2
+e7000200008e vfmssb VRR_VVVV "vector fp multiply and subtract short" arch12 zarch vx2
+e7000208008e wfmssb VRR_VVVV "scalar vector fp multiply and subtract scalar short" arch12 zarch vx2
+e7000408008e wfmsxb VRR_VVVV "scalar vector fp multiply and subtract scalar extended" arch12 zarch vx2
+e7000000009f vfnma VRR_VVVU0UV "vector fp negative multiply and add" arch12 zarch vx2
+e7000200009f vfnmasb VRR_VVVV "vector fp negative multiply and add short" arch12 zarch vx2
+e7000208009f wfnmasb VRR_VVVV "scalar vector fp negative multiply and add scalar short" arch12 zarch vx2
+e7000300009f vfnmadb VRR_VVVV "vector fp negative multiply and add long" arch12 zarch vx2
+e7000308009f wfnmadb VRR_VVVV "scalar vector fp negative multiply and add scalar long" arch12 zarch vx2
+e7000408009f wfnmaxb VRR_VVVV "scalar vector fp negative multiply and add scalar extended" arch12 zarch vx2
+e7000000009e vfnms VRR_VVVU0UV "vector fp negative multiply and subtract" arch12 zarch vx2
+e7000200009e vfnmssb VRR_VVVV "vector fp negative multiply and subtract short" arch12 zarch vx2
+e7000208009e wfnmssb VRR_VVVV "scalar vector fp negative multiply and subtract scalar short" arch12 zarch vx2
+e7000300009e vfnmsdb VRR_VVVV "vector fp negative multiply and subtract long" arch12 zarch vx2
+e7000308009e wfnmsdb VRR_VVVV "scalar vector fp negative multiply and subtract scalar long" arch12 zarch vx2
+e7000408009e wfnmsxb VRR_VVVV "scalar vector fp negative multiply and subtract scalar extended" arch12 zarch vx2
+e700000020cc vfpsosb VRR_VV0U2 "vector fp perform sign operation short" arch12 zarch vx2
+e700000820cc wfpsosb VRR_VV0U2 "scalar vector fp perform sign operation scalar short" arch12 zarch vx2
+e700000020cc vflcsb VRR_VV "vector fp perform sign operation short" arch12 zarch vx2
+e700000820cc wflcsb VRR_VV "scalar vector fp perform sign operation scalar short" arch12 zarch vx2
+e700001020cc vflnsb VRR_VV "vector fp perform sign operation short" arch12 zarch vx2
+e700001820cc wflnsb VRR_VV "scalar vector fp perform sign operation scalar short" arch12 zarch vx2
+e700002020cc vflpsb VRR_VV "vector fp perform sign operation short" arch12 zarch vx2
+e700002820cc wflpsb VRR_VV "scalar vector fp perform sign operation scalar short" arch12 zarch vx2
+e700000840cc wfpsoxb VRR_VV0U2 "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2
+e700000840cc wflcxb VRR_VV "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2
+e700001840cc wflnxb VRR_VV "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2
+e700002840cc wflpxb VRR_VV "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2
+e700000020ce vfsqsb VRR_VV "vector fp square root short" arch12 zarch vx2
+e700000820ce wfsqsb VRR_VV "scalar vector fp square root scalar short" arch12 zarch vx2
+e700000840ce wfsqxb VRR_VV "scalar vector fp square root scalar extended" arch12 zarch vx2
+e700000020e2 vfssb VRR_VVV "vector fp subtract short" arch12 zarch vx2
+e700000820e2 wfssb VRR_VVV "scalar vector fp subtract scalar short" arch12 zarch vx2
+e700000840e2 wfsxb VRR_VVV "scalar vector fp subtract scalar extended" arch12 zarch vx2
+e7000000204a vftcisb VRI_VVU2 "vector fp test data class immediate short" arch12 zarch vx2
+e7000008204a wftcisb VRI_VVU2 "scalar vector fp test data class immediate scalar short" arch12 zarch vx2
+e7000008404a wftcixb VRI_VVU2 "scalar vector fp test data class immediate scalar extended" arch12 zarch vx2
+
+# Miscellaneous Instruction Extensions Facility 2
+
+e30000000038 agh RXY_RRRD "add halfword to 64 bit value" arch12 zarch
+e30000000047 bic RXY_URRD "branch indirect on condition" arch12 zarch
+e3f000000047 bi RXY_0RRD "unconditional indirect branch" arch12 zarch
+e30000000047 bi*8 RXY_0RRD "branch indirect on condition" arch12 zarch
+b9ec mgrk RRF_R0RR2 "multiply 64x64reg -&gt; 128" arch12 zarch
+e30000000084 mg RXY_RRRD "multiply 64x64mem -&gt; 128" arch12 zarch
+e3000000003c mgh RXY_RRRD "multiply halfword 64x16mem -&gt; 64" arch12 zarch
+b9fd msrkc RRF_R0RR2 "multiply single 32x32 -&gt; 32" arch12 zarch
+b9ed msgrkc RRF_R0RR2 "multiply single 64x64 -&gt; 64" arch12 zarch
+e30000000053 msc RXY_RRRD "multiply single 32x32mem -&gt; 32" arch12 zarch
+e30000000083 msgc RXY_RRRD "multiply single 64x64mem -&gt; 64" arch12 zarch
+e30000000039 sgh RXY_RRRD "subtract halfword from 64 bit value" arch12 zarch
+
+# Vector packed decimal facility
+
+e60000000037 vlrlr VRS_RRDV "vector load rightmost with length" arch12 zarch vx2
+e60000000035 vlrl VSI_URDV "vector load rightmost with immediate length" arch12 zarch vx2
+e6000000003f vstrlr VRS_RRDV "vector store rightmost with length" arch12 zarch vx2
+e6000000003d vstrl VSI_URDV "vector store rightmost with immediate length" arch12 zarch vx2
+e60000000071 vap VRI_VVV0UU2 "vector add decimal" arch12 zarch vx2
+e60000000077 vcp VRR_0VV0U "vector compare decimal" arch12 zarch vx2
+e60000000050 vcvb VRR_RV0U "vector convert to binary 32 bit" arch12 zarch vx2
+e60000000052 vcvbg VRR_RV0U "vector convert to binary 64 bit" arch12 zarch vx2
+e60000000058 vcvd VRI_VR0UU "vector convert to decimal 32 bit" arch12 zarch vx2
+e6000000005a vcvdg VRI_VR0UU "vector convert to decimal 64 bit" arch12 zarch vx2
+e6000000007a vdp VRI_VVV0UU2 "vector divide decimal" arch12 zarch vx2
+e60000000049 vlip VRI_V0UU2 "vector load immediate decimal" arch12 zarch vx2
+e60000000078 vmp VRI_VVV0UU2 "vector multiply decimal" arch12 zarch vx2
+e60000000079 vmsp VRI_VVV0UU2 "vector multiply and shift decimal" arch12 zarch vx2
+e60000000034 vpkz VSI_URDV "vector pack zoned" arch12 zarch vx2
+e6000000005b vpsop VRI_VVUUU2 "vector perform sign operation decimal" arch12 zarch vx2
+e6000000007b vrp VRI_VVV0UU2 "vector remainder decimal" arch12 zarch vx2
+e6000000007e vsdp VRI_VVV0UU2 "vector shift and divide decimal" arch12 zarch vx2
+e60000000059 vsrp VRI_VVUUU2 "vector shift and round decimal" arch12 zarch vx2
+e60000000073 vsp VRI_VVV0UU2 "vector subtract decimal" arch12 zarch vx2
+e6000000005f vtp VRR_0V "vector test decimal" arch12 zarch vx2
+e6000000003c vupkz VSI_URDV "vector unpack zoned" arch12 zarch vx2
+
+# Guarded storage facility
+
+e3000000004c lgg RXY_RRRD "load guarded 64 bit" arch12 zarch
+e30000000048 llgfsg RXY_RRRD "load logical and shift guarded 64 bit" arch12 zarch
+e3000000004d lgsc RXY_RRRD "load guarded storage controls" arch12 zarch
+e30000000049 stgsc RXY_RRRD "store guarded storage controls" arch12 zarch
+
+# Message-Security-Assist Extension 8
+
+b929 kma RRF_R0RR "cipher message with galois counter mode" arch12 zarch