[PATCH 10/20] s390: kimd, klmd, and kmac operand R2 must be a register pair

Jens Remus jremus@linux.ibm.com
Wed Sep 30 08:18:45 GMT 2026


kimd R1,R2[,M3], klmd R1,R2[,M3], and kmac R1,R2 operand R2 must
designate an even-odd pair of general registers and must designate
an even-numbered register other than general register 0; otherwise,
a specification exception is recognized. [1, 2]

For now do not enforce the operands R1 and R2 not to designate general
register 0.

[1]: IBM ESA/390 Principles of Operation, SA22-7201-08, z990,
     https://publibfp.dhe.ibm.com/epubs/pdf/dz9ar008.pdf

[2]: IBM z/Architecture Principles of Operation, SA22-7832-14, IBM z17,
     https://www.ibm.com/docs/en/module_1678991624569/pdf/SA22-7832-14.pdf

opcodes/
	* s390-opc.c (INSTR_RRF_U0RRE, MASK_RRF_U0RRE): New RRF_U0RRE
	instruction format.
	* s390-opc.txt (kimd, klmd): Use RRE_RRE and new RRF_U0RRE
	instruction formats.
	(kmac): Use RRE_RRE instruction format.

gas/testsuite/
	* gas/s390/esa-z990.d (kimd, klmd, kmac): Operand R2 must
	designate an even-odd register pair.
	* gas/s390/esa-z990.s (kimd, klmd, kmac): Likewise.
	* gas/s390/zarch-arch15.d (kimd, klmd): Likewise.
	* gas/s390/zarch-arch15.s (kimd, klmd): Likewise.

Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
 gas/testsuite/gas/s390/esa-z990.d     |  6 +++---
 gas/testsuite/gas/s390/esa-z990.s     |  6 +++---
 gas/testsuite/gas/s390/zarch-arch15.d |  8 ++++----
 gas/testsuite/gas/s390/zarch-arch15.s |  8 ++++----
 opcodes/s390-opc.c                    |  2 ++
 opcodes/s390-opc.txt                  | 10 +++++-----
 6 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/gas/testsuite/gas/s390/esa-z990.d b/gas/testsuite/gas/s390/esa-z990.d
index 85612ad34192..61baffdc9948 100644
--- a/gas/testsuite/gas/s390/esa-z990.d
+++ b/gas/testsuite/gas/s390/esa-z990.d
@@ -8,8 +8,8 @@ Disassembly of section .text:
 .* <foo>:
 .*:	b9 2e 00 68 [	 ]*km	%r6,%r8
 .*:	b9 2f 00 68 [	 ]*kmc	%r6,%r8
-.*:	b9 3e 00 69 [	 ]*kimd	%r6,%r9
-.*:	b9 3f 00 69 [	 ]*klmd	%r6,%r9
-.*:	b9 1e 00 69 [	 ]*kmac	%r6,%r9
+.*:	b9 3e 00 68 [	 ]*kimd	%r6,%r8
+.*:	b9 3f 00 68 [	 ]*klmd	%r6,%r8
+.*:	b9 1e 00 68 [	 ]*kmac	%r6,%r8
 .*:	eb 69 50 00 80 8f [	 ]*clclu	%r6,%r9,-524288\(%r5\)
 .*:	07 07 [ 	]*nopr	%r7
diff --git a/gas/testsuite/gas/s390/esa-z990.s b/gas/testsuite/gas/s390/esa-z990.s
index d4da66722ef1..dffc7f2cff14 100644
--- a/gas/testsuite/gas/s390/esa-z990.s
+++ b/gas/testsuite/gas/s390/esa-z990.s
@@ -2,7 +2,7 @@
 foo:
 	km	%r6,%r8
 	kmc	%r6,%r8
-	kimd	%r6,%r9
-	klmd	%r6,%r9
-	kmac	%r6,%r9
+	kimd	%r6,%r8
+	klmd	%r6,%r8
+	kmac	%r6,%r8
 	clclu	%r6,%r9,-524288(%r5)
diff --git a/gas/testsuite/gas/s390/zarch-arch15.d b/gas/testsuite/gas/s390/zarch-arch15.d
index 474bcad3d700..239569f6e899 100644
--- a/gas/testsuite/gas/s390/zarch-arch15.d
+++ b/gas/testsuite/gas/s390/zarch-arch15.d
@@ -91,10 +91,10 @@ Disassembly of section .text:
 .*:	e3 69 b8 f0 fd 69 [	 ]*llxaq	%r6,-10000\(%r9,%r11\)
 .*:	b9 6c b0 69 [	 ]*bextg	%r6,%r9,%r11
 .*:	b9 6d b0 69 [	 ]*bdepg	%r6,%r9,%r11
-.*:	b9 3e 00 69 [	 ]*kimd	%r6,%r9
-.*:	b9 3e d0 69 [	 ]*kimd	%r6,%r9,13
-.*:	b9 3f 00 69 [	 ]*klmd	%r6,%r9
-.*:	b9 3f d0 69 [	 ]*klmd	%r6,%r9,13
+.*:	b9 3e 00 68 [	 ]*kimd	%r6,%r8
+.*:	b9 3e d0 68 [	 ]*kimd	%r6,%r8,13
+.*:	b9 3f 00 68 [	 ]*klmd	%r6,%r8
+.*:	b9 3f d0 68 [	 ]*klmd	%r6,%r8,13
 .*:	e6 f1 00 d0 04 4e [	 ]*vcvbq	%v15,%v17,13
 .*:	e6 f1 00 cf d4 4a [	 ]*vcvdq	%v15,%v17,253,12
 .*:	e6 0f 00 00 00 5f [	 ]*vtp	%v15
diff --git a/gas/testsuite/gas/s390/zarch-arch15.s b/gas/testsuite/gas/s390/zarch-arch15.s
index d9b89652fcbf..21137264d20b 100644
--- a/gas/testsuite/gas/s390/zarch-arch15.s
+++ b/gas/testsuite/gas/s390/zarch-arch15.s
@@ -85,10 +85,10 @@ foo:
 	llxaq	%r6,-10000(%r9,%r11)
 	bextg	%r6,%r9,%r11
 	bdepg	%r6,%r9,%r11
-	kimd	%r6,%r9
-	kimd	%r6,%r9,13
-	klmd	%r6,%r9
-	klmd	%r6,%r9,13
+	kimd	%r6,%r8
+	kimd	%r6,%r8,13
+	klmd	%r6,%r8
+	klmd	%r6,%r8,13
 	vcvbq	%v15,%v17,13
 	vcvdq	%v15,%v17,253,12
 	vtp	%v15
diff --git a/opcodes/s390-opc.c b/opcodes/s390-opc.c
index e4f8fee9e3e6..3d5778e3a79d 100644
--- a/opcodes/s390-opc.c
+++ b/opcodes/s390-opc.c
@@ -387,6 +387,7 @@ unused_s390_operands_static_asserts (void)
 #define INSTR_RRF_FFRU     4, { F_24,F_16,R_28,U4_20,0,0 }       /* e.g. rrdtr */
 #define INSTR_RRF_FEFERU   4, { FE_24,FE_16,R_28,U4_20,0,0 }     /* e.g. rrxtr */
 #define INSTR_RRF_U0RR     4, { R_24,R_28,U4_16,0,0,0 }          /* e.g. sske  */
+#define INSTR_RRF_U0RRE    4, { R_24,RE_28,U4_16,0,0,0 }         /* e.g. kimd  */
 #define INSTR_RRF_U0RER    4, { RE_24,R_28,U4_16,0,0,0 }         /* e.g. trte  */
 #define INSTR_RRF_U0RERE   4, { RE_24,RE_28,U4_16,0,0,0 }        /* e.g. cu24  */
 #define INSTR_RRF_00RR     4, { R_24,R_28,0,0,0,0 }              /* e.g. clrtne */
@@ -622,6 +623,7 @@ unused_s390_operands_static_asserts (void)
 #define MASK_RRF_FFRU     { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
 #define MASK_RRF_FEFERU   { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
 #define MASK_RRF_U0RR     { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
+#define MASK_RRF_U0RRE    { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
 #define MASK_RRF_U0RER    { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
 #define MASK_RRF_U0RERE   { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
 #define MASK_RRF_00RR     { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt
index ab88a83f76bc..4e131709ae12 100644
--- a/opcodes/s390-opc.txt
+++ b/opcodes/s390-opc.txt
@@ -735,9 +735,9 @@ b32f mser RRF_F0FF "mutliply and subtract short hfp" z990 esa,zarch
 ed000000002f mse RXF_FRRDF "multiply and subttract short hfp" z990 esa,zarch
 b92e km RRE_RERE "cipher message" z990 esa,zarch
 b92f kmc RRE_RERE "cipher message with chaining" z990 esa,zarch
-b93e kimd RRE_RR "compute intermediate message digest" z990 esa,zarch
-b93f klmd RRE_RR "compute last message digest" z990 esa,zarch
-b91e kmac RRE_RR "compute message authentication code" z990 esa,zarch
+b93e kimd RRE_RRE "compute intermediate message digest" z990 esa,zarch
+b93f klmd RRE_RRE "compute last message digest" z990 esa,zarch
+b91e kmac RRE_RRE "compute message authentication code" z990 esa,zarch
 b99a epair RRE_R0 "extract primary ASN and instance" z990 esa,zarch
 b99b esair RRE_R0 "extract secondary ASN and instance" z990 esa,zarch
 b99e pti RRE_RR "program transfer with instance" z990 esa,zarch
@@ -2196,8 +2196,8 @@ b96d bdepg RRF_R0RR2 "bit deposit" arch15 zarch
 
 # Message-Security-Assist Extension 12
 
-b93e kimd RRF_U0RR "compute intermediate message digest" arch15 zarch optparm
-b93f klmd RRF_U0RR "compute last message digest" arch15 zarch optparm
+b93e kimd RRF_U0RRE "compute intermediate message digest" arch15 zarch optparm
+b93f klmd RRF_U0RRE "compute last message digest" arch15 zarch optparm
 
 # Vector-Packed-Decimal-Enhancement Facility 3
 
-- 
2.53.0



More information about the Binutils mailing list