From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1448) id C9DAB385E828; Wed, 20 Dec 2023 10:53:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C9DAB385E828 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Andreas Krebbel To: bfd-cvs@sourceware.org Subject: [binutils-gdb] s390: Add suffix to conditional branch instruction descriptions X-Act-Checkin: binutils-gdb X-Git-Author: Jens Remus X-Git-Refname: refs/heads/master X-Git-Oldrev: f96fe7f454bdd077abec2acc415f546bb5646189 X-Git-Newrev: 1c354ebcbacada00db94e8563eca2c73df2096b4 Message-Id: <20231220105331.C9DAB385E828@sourceware.org> Date: Wed, 20 Dec 2023 10:53:31 +0000 (GMT) X-BeenThere: binutils-cvs@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Dec 2023 10:53:31 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D1c354ebcbaca= da00db94e8563eca2c73df2096b4 commit 1c354ebcbacada00db94e8563eca2c73df2096b4 Author: Jens Remus Date: Wed Dec 20 11:34:48 2023 +0100 s390: Add suffix to conditional branch instruction descriptions =20 Suffix the instruction description of conditional branch extended mnemonics with their condition (e.g. "on A high"). This complements the optional printing of instruction descriptions as comments in the disassembly. =20 Due to the added text the maximum description length is increased from 80 to 128 characters (including the trailing '\0' character). =20 opcodes/ * s390-mkopc.c: Add suffix to conditional branch extended mnemonic instruction descriptions. =20 gas/ * testsuite/gas/s390/zarch-insndesc.s: Add test cases for printing of suffixed instruction description of conditional branch extended mnemonics. * testsuite/gas/s390/zarch-insndesc.d: Likewise. =20 Signed-off-by: Jens Remus Reviewed-by: Andreas Krebbel Diff: --- gas/testsuite/gas/s390/zarch-insndesc.d | 2 + gas/testsuite/gas/s390/zarch-insndesc.s | 2 + opcodes/s390-mkopc.c | 78 +++++++++++++++++++----------= ---- 3 files changed, 48 insertions(+), 34 deletions(-) diff --git a/gas/testsuite/gas/s390/zarch-insndesc.d b/gas/testsuite/gas/s3= 90/zarch-insndesc.d index 9a121fb2c30..2ac0c7a0ca7 100644 --- a/gas/testsuite/gas/s390/zarch-insndesc.d +++ b/gas/testsuite/gas/s390/zarch-insndesc.d @@ -14,4 +14,6 @@ Disassembly of section .text: .*: ec 67 0c 8d 0e 5d [ ]*risbhgz %r6,%r7,12,13,14 # rotate then insert s= elected bits high and zero remaining bits .*: b3 96 37 59 [ ]*cxfbra %f5,3,%r9,7 # convert from 32 bit fixed to ext= ended bfp with rounding mode .*: ec 67 0c 94 0e 59 [ ]*risbgnz %r6,%r7,12,20,14 # rotate then insert s= elected bits and zero remaining bits nocc +.*: ec 6e 80 03 00 4e [ ]*lochhino %r6,-32765 # load halfword high immedi= ate on condition on not overflow / if not ones + *([\da-f]+): ec 6a 00 00 d6 7c [ ]*cgijnl %r6,-42,\1 # compa= re immediate and branch relative \(64<8\) on A not low .*: 07 07 [ ]*nopr %r7 # no operation diff --git a/gas/testsuite/gas/s390/zarch-insndesc.s b/gas/testsuite/gas/s3= 90/zarch-insndesc.s index e964315f0af..446832f813d 100644 --- a/gas/testsuite/gas/s390/zarch-insndesc.s +++ b/gas/testsuite/gas/s390/zarch-insndesc.s @@ -8,3 +8,5 @@ foo: risbhgz %r6,%r7,12,13,14 cxfbra %f5,3,%r9,7 risbgnz %r6,%r7,12,20,14 + lochhino %r6,-32765 + cgijnl %r6,-42,. diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c index c6930a3e9b5..025dbdb037f 100644 --- a/opcodes/s390-mkopc.c +++ b/opcodes/s390-mkopc.c @@ -32,7 +32,7 @@ #define MAX_OPCODE_LEN 15 #define MAX_MNEMONIC_LEN 15 #define MAX_FORMAT_LEN 15 -#define MAX_DESCRIPTION_LEN 79 +#define MAX_DESCRIPTION_LEN 127 =20 #define MAX_CPU_LEN 15 #define MAX_MODES_LEN 15 @@ -142,50 +142,52 @@ struct s390_cond_ext_format { char nibble; char extension[4]; + char *description_suffix; + }; =20 /* The mnemonic extensions for conditional jumps used to replace the '*' tag. */ #define NUM_COND_EXTENSIONS 20 const struct s390_cond_ext_format s390_cond_extensions[NUM_COND_EXTENSIONS= ] =3D -{ { '1', "o" }, /* jump on overflow / if ones */ - { '2', "h" }, /* jump on A high */ - { '2', "p" }, /* jump on plus */ - { '3', "nle" }, /* jump on not low or equal */ - { '4', "l" }, /* jump on A low */ - { '4', "m" }, /* jump on minus / if mixed */ - { '5', "nhe" }, /* jump on not high or equal */ - { '6', "lh" }, /* jump on low or high */ - { '7', "ne" }, /* jump on A not equal B */ - { '7', "nz" }, /* jump on not zero / if not zeros */ - { '8', "e" }, /* jump on A equal B */ - { '8', "z" }, /* jump on zero / if zeros */ - { '9', "nlh" }, /* jump on not low or high */ - { 'a', "he" }, /* jump on high or equal */ - { 'b', "nl" }, /* jump on A not low */ - { 'b', "nm" }, /* jump on not minus / if not mixed */ - { 'c', "le" }, /* jump on low or equal */ - { 'd', "nh" }, /* jump on A not high */ - { 'd', "np" }, /* jump on not plus */ - { 'e', "no" }, /* jump on not overflow / if not ones */ +{ { '1', "o", "on overflow / if ones"}, /* jump on overflow / if ones */ + { '2', "h", "on A high"}, /* jump on A high */ + { '2', "p", "on plus" }, /* jump on plus */ + { '3', "nle", "on not low or equal" }, /* jump on not low or equal */ + { '4', "l", "on A low" }, /* jump on A low */ + { '4', "m", "on minus / if mixed" }, /* jump on minus / if mixed */ + { '5', "nhe", "on not high or equal" }, /* jump on not high or equal */ + { '6', "lh", "on low or high" }, /* jump on low or high */ + { '7', "ne", "on A not equal B" }, /* jump on A not equal B */ + { '7', "nz", "on not zero / if not zeros" }, /* jump on not zero / if no= t zeros */ + { '8', "e", "on A equal B" }, /* jump on A equal B */ + { '8', "z", "on zero / if zeros" }, /* jump on zero / if zeros */ + { '9', "nlh", "on not low or high " }, /* jump on not low or high */ + { 'a', "he", "on high or equal" }, /* jump on high or equal */ + { 'b', "nl", "on A not low" }, /* jump on A not low */ + { 'b', "nm", "on not minus / if not mixed" }, /* jump on not minus / if = not mixed */ + { 'c', "le", "on low or equal" }, /* jump on low or equal */ + { 'd', "nh", "on A not high" }, /* jump on A not high */ + { 'd', "np", "on not plus" }, /* jump on not plus */ + { 'e', "no", "on not overflow / if not ones" },/* jump on not overflow /= if not ones */ }; =20 /* The mnemonic extensions for conditional branches used to replace the '$' tag. */ #define NUM_CRB_EXTENSIONS 12 const struct s390_cond_ext_format s390_crb_extensions[NUM_CRB_EXTENSIONS] = =3D -{ { '2', "h" }, /* jump on A high */ - { '2', "nle" }, /* jump on not low or equal */ - { '4', "l" }, /* jump on A low */ - { '4', "nhe" }, /* jump on not high or equal */ - { '6', "ne" }, /* jump on A not equal B */ - { '6', "lh" }, /* jump on low or high */ - { '8', "e" }, /* jump on A equal B */ - { '8', "nlh" }, /* jump on not low or high */ - { 'a', "nl" }, /* jump on A not low */ - { 'a', "he" }, /* jump on high or equal */ - { 'c', "nh" }, /* jump on A not high */ - { 'c', "le" }, /* jump on low or equal */ +{ { '2', "h", "on A high" }, /* jump on A high */ + { '2', "nle", "on not low or equal" }, /* jump on not low or equal */ + { '4', "l", "on A low" }, /* jump on A low */ + { '4', "nhe", "on not high or equal" }, /* jump on not high or equal */ + { '6', "ne", "on A not equal B" }, /* jump on A not equal B */ + { '6', "lh", "on low or high" }, /* jump on low or high */ + { '8', "e", "on A equal B" }, /* jump on A equal B */ + { '8', "nlh", "on not low or high" }, /* jump on not low or high */ + { 'a', "nl", "on A not low" }, /* jump on A not low */ + { 'a', "he", "on high or equal" }, /* jump on high or equal */ + { 'c', "nh", "on A not high" }, /* jump on A not high */ + { 'c', "le", "on low or equal" }, /* jump on low or equal */ }; =20 /* As with insertOpcode instructions are added to the sorted opcode @@ -283,6 +285,7 @@ insertExpandedMnemonic (char *opcode, char *mnemonic, c= har *format, for (i =3D 0; i < ext_table_length; i++) { char new_mnemonic[MAX_MNEMONIC_LEN + 1]; + char new_description[MAX_DESCRIPTION_LEN + 1]; =20 opcode[mask_start] =3D ext_table[i].nibble; =20 @@ -293,7 +296,14 @@ insertExpandedMnemonic (char *opcode, char *mnemonic, = char *format, return; } =20 - insertOpcode (opcode, new_mnemonic, format, min_cpu, mode_bits, flag= s, description); + if (snprintf (new_description, sizeof (new_description), "%s %s", de= scription, + ext_table[i].description_suffix) >=3D sizeof (new_description)) + { + print_error ("Mnemonic \"%s\": Concatenated description exceeds max. le= ngth\n", mnemonic); + return; + } + + insertOpcode (opcode, new_mnemonic, format, min_cpu, mode_bits, flag= s, new_description); } return;