You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
5.9 KiB
114 lines
5.9 KiB
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
|
From: Andreas Krebbel <krebbel@linux.ibm.com>
|
|
Date: Fri, 4 Dec 2020 09:00:43 +0100
|
|
Subject: gdb-rhbz2012819-ibmz-update-2of5.patch
|
|
|
|
;; IBM Z: Add risbgz and risbgnz extended mnemonics
|
|
;; (Andreas Krebbel, RHBZ 2012819)
|
|
|
|
These two extended mnemonics are documented in the Principles of
|
|
Operations manual but currently not supported by Binutils. They
|
|
provide aliases for already supported instructions with the zero flag
|
|
being set. The flag otherwise is mingled into one of the immediate
|
|
operands what makes asm code much harder to read.
|
|
|
|
opcodes/
|
|
|
|
* s390-opc.txt: Add risbgz and risbgnz.
|
|
* s390-opc.c (U6_26): New operand type.
|
|
(INSTR_RIE_RRUUU2, MASK_RIE_RRUUU2): New instruction format and
|
|
mask.
|
|
|
|
gas/
|
|
|
|
* testsuite/gas/s390/zarch-z10.s: Add tests for risbgz.
|
|
* testsuite/gas/s390/zarch-z10.d: Add regexp for risbgz.
|
|
* testsuite/gas/s390/zarch-zEC12.s: Add tests for risbgnz.
|
|
* testsuite/gas/s390/zarch-zEC12.d: Add regexp for risbgnz.
|
|
|
|
diff --git a/opcodes/s390-opc.c b/opcodes/s390-opc.c
|
|
--- a/opcodes/s390-opc.c
|
|
+++ b/opcodes/s390-opc.c
|
|
@@ -218,32 +218,34 @@ const struct s390_operand s390_operands[] =
|
|
{ 8, 8, 0 },
|
|
#define U8_16 68 /* 8 bit unsigned value starting at 16 */
|
|
{ 8, 16, 0 },
|
|
-#define U8_24 69 /* 8 bit unsigned value starting at 24 */
|
|
+#define U6_26 69 /* 6 bit unsigned value starting at 26 */
|
|
+ { 6, 26, 0 },
|
|
+#define U8_24 70 /* 8 bit unsigned value starting at 24 */
|
|
{ 8, 24, 0 },
|
|
-#define U8_28 70 /* 8 bit unsigned value starting at 28 */
|
|
+#define U8_28 71 /* 8 bit unsigned value starting at 28 */
|
|
{ 8, 28, 0 },
|
|
-#define U8_32 71 /* 8 bit unsigned value starting at 32 */
|
|
+#define U8_32 72 /* 8 bit unsigned value starting at 32 */
|
|
{ 8, 32, 0 },
|
|
-#define U12_16 72 /* 12 bit unsigned value starting at 16 */
|
|
+#define U12_16 73 /* 12 bit unsigned value starting at 16 */
|
|
{ 12, 16, 0 },
|
|
-#define U16_16 73 /* 16 bit unsigned value starting at 16 */
|
|
+#define U16_16 74 /* 16 bit unsigned value starting at 16 */
|
|
{ 16, 16, 0 },
|
|
-#define U16_32 74 /* 16 bit unsigned value starting at 32 */
|
|
+#define U16_32 75 /* 16 bit unsigned value starting at 32 */
|
|
{ 16, 32, 0 },
|
|
-#define U32_16 75 /* 32 bit unsigned value starting at 16 */
|
|
+#define U32_16 76 /* 32 bit unsigned value starting at 16 */
|
|
{ 32, 16, 0 },
|
|
|
|
/* PC-relative address operands. */
|
|
|
|
-#define J12_12 76 /* 12 bit PC relative offset at 12 */
|
|
+#define J12_12 77 /* 12 bit PC relative offset at 12 */
|
|
{ 12, 12, S390_OPERAND_PCREL },
|
|
-#define J16_16 77 /* 16 bit PC relative offset at 16 */
|
|
+#define J16_16 78 /* 16 bit PC relative offset at 16 */
|
|
{ 16, 16, S390_OPERAND_PCREL },
|
|
-#define J16_32 78 /* 16 bit PC relative offset at 32 */
|
|
+#define J16_32 79 /* 16 bit PC relative offset at 32 */
|
|
{ 16, 32, S390_OPERAND_PCREL },
|
|
-#define J24_24 79 /* 24 bit PC relative offset at 24 */
|
|
+#define J24_24 80 /* 24 bit PC relative offset at 24 */
|
|
{ 24, 24, S390_OPERAND_PCREL },
|
|
-#define J32_16 80 /* 32 bit PC relative offset at 16 */
|
|
+#define J32_16 81 /* 32 bit PC relative offset at 16 */
|
|
{ 32, 16, S390_OPERAND_PCREL },
|
|
|
|
};
|
|
@@ -313,6 +315,7 @@ const struct s390_operand s390_operands[] =
|
|
#define INSTR_RIE_R0U0 6, { R_8,U16_16,0,0,0,0 } /* e.g. clfitne */
|
|
#define INSTR_RIE_RUI0 6, { R_8,I16_16,U4_12,0,0,0 } /* e.g. lochi */
|
|
#define INSTR_RIE_RRUUU 6, { R_8,R_12,U8_16,U8_24,U8_32,0 } /* e.g. rnsbg */
|
|
+#define INSTR_RIE_RRUUU2 6, { R_8,R_12,U8_16,U6_26,U8_32,0 } /* e.g. rnsbg */
|
|
#define INSTR_RIL_0P 6, { J32_16,0,0,0,0 } /* e.g. jg */
|
|
#define INSTR_RIL_RP 6, { R_8,J32_16,0,0,0,0 } /* e.g. brasl */
|
|
#define INSTR_RIL_UP 6, { U4_8,J32_16,0,0,0,0 } /* e.g. brcl */
|
|
@@ -534,6 +537,7 @@ const struct s390_operand s390_operands[] =
|
|
#define MASK_RIE_R0U0 { 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff }
|
|
#define MASK_RIE_RUI0 { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
|
|
#define MASK_RIE_RRUUU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
|
|
+#define MASK_RIE_RRUUU2 { 0xff, 0x00, 0x00, 0xc0, 0x00, 0xff }
|
|
#define MASK_RIL_0P { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
|
|
#define MASK_RIL_RP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
|
|
#define MASK_RIL_UP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
|
|
diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt
|
|
--- a/opcodes/s390-opc.txt
|
|
+++ b/opcodes/s390-opc.txt
|
|
@@ -970,6 +970,7 @@ ec0000000054 rnsbg RIE_RRUUU "rotate then and selected bits" z10 zarch
|
|
ec0000000057 rxsbg RIE_RRUUU "rotate then exclusive or selected bits" z10 zarch
|
|
ec0000000056 rosbg RIE_RRUUU "rotate then or selected bits" z10 zarch
|
|
ec0000000055 risbg RIE_RRUUU "rotate then insert selected bits" z10 zarch
|
|
+ec0000800055 risbgz RIE_RRUUU2 "rotate then insert selected bits and zero remaining bits" z10 zarch
|
|
c40f strl RIL_RP "store relative long (32)" z10 zarch
|
|
c40b stgrl RIL_RP "store relative long (64)" z10 zarch
|
|
c407 sthrl RIL_RP "store halfword relative long" z10 zarch
|
|
@@ -1153,6 +1154,7 @@ eb0000000023 clt$12 RSY_R0RD "compare logical and trap 32 bit reg-mem" zEC12 zar
|
|
eb000000002b clgt RSY_RURD "compare logical and trap 64 bit reg-mem" zEC12 zarch
|
|
eb000000002b clgt$12 RSY_R0RD "compare logical and trap 64 bit reg-mem" zEC12 zarch
|
|
ec0000000059 risbgn RIE_RRUUU "rotate then insert selected bits nocc" zEC12 zarch
|
|
+ec0000800059 risbgnz RIE_RRUUU2 "rotate then insert selected bits and zero remaining bits nocc" zEC12 zarch
|
|
ed00000000aa cdzt RSL_LRDFU "convert from zoned long" zEC12 zarch
|
|
ed00000000ab cxzt RSL_LRDFEU "convert from zoned extended" zEC12 zarch
|
|
ed00000000a8 czdt RSL_LRDFU "convert to zoned long" zEC12 zarch
|