[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