public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Jens Remus <jremus@linux.ibm.com>
To: binutils@sourceware.org
Cc: Jens Remus <jremus@linux.ibm.com>,
	Andreas Krebbel <krebbel@linux.ibm.com>,
	Nick Clifton <nickc@redhat.com>
Subject: [PATCH v2 7/7] s390: Add suffix to conditional branch instruction descriptions
Date: Fri, 15 Dec 2023 15:36:16 +0100	[thread overview]
Message-ID: <20231215143616.820185-8-jremus@linux.ibm.com> (raw)
In-Reply-To: <20231215143616.820185-1-jremus@linux.ibm.com>

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.

Due to the added text the maximum description length is increased from
80 to 128 characters (including the trailing '\0' character).

opcodes/
	* s390-mkopc.c: Add suffix to conditional branch extended
	  mnemonic instruction descriptions.

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.

Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
---
 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/s390/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 selected bits high and zero remaining bits
 .*:	b3 96 37 59 [	 ]*cxfbra	%f5,3,%r9,7	# convert from 32 bit fixed to extended bfp with rounding mode
 .*:	ec 67 0c 94 0e 59 [	 ]*risbgnz	%r6,%r7,12,20,14	# rotate then insert selected bits and zero remaining bits nocc
+.*:	ec 6e 80 03 00 4e [	 ]*lochhino	%r6,-32765	# load halfword high immediate on condition on not overflow / if not ones
+ *([\da-f]+):	ec 6a 00 00 d6 7c [	 ]*cgijnl	%r6,-42,\1 <foo\+0x\1>	# compare 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/s390/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
 
 #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;
+
 };
 
 /* 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] =
-{ { '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 not 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 */
 };
 
 /* 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] =
-{ { '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 */
 };
 
 /* As with insertOpcode instructions are added to the sorted opcode
@@ -283,6 +285,7 @@ insertExpandedMnemonic (char *opcode, char *mnemonic, char *format,
   for (i = 0; i < ext_table_length; i++)
     {
       char new_mnemonic[MAX_MNEMONIC_LEN + 1];
+      char new_description[MAX_DESCRIPTION_LEN + 1];
 
       opcode[mask_start] = ext_table[i].nibble;
 
@@ -293,7 +296,14 @@ insertExpandedMnemonic (char *opcode, char *mnemonic, char *format,
 	  return;
 	}
 
-      insertOpcode (opcode, new_mnemonic, format, min_cpu, mode_bits, flags, description);
+      if (snprintf (new_description, sizeof (new_description), "%s %s", description,
+		    ext_table[i].description_suffix) >= sizeof (new_description))
+	{
+	  print_error ("Mnemonic \"%s\": Concatenated description exceeds max. length\n", mnemonic);
+	  return;
+	}
+
+      insertOpcode (opcode, new_mnemonic, format, min_cpu, mode_bits, flags, new_description);
     }
   return;
 
-- 
2.40.1


  parent reply	other threads:[~2023-12-15 14:39 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-15 14:36 [PATCH v2 0/7] s390: Optionally print instruction description in disassembly Jens Remus
2023-12-15 14:36 ` [PATCH v2 1/7] s390: Fix build when using EXEEXT_FOR_BUILD Jens Remus
2023-12-15 14:36 ` [PATCH v2 2/7] s390: Align letter case of instruction descriptions Jens Remus
2023-12-15 14:36 ` [PATCH v2 3/7] s390: Provide IBM z16 (arch14) " Jens Remus
2023-12-15 14:36 ` [PATCH v2 4/7] s390: Enhance error handling in s390-mkopc Jens Remus
2023-12-15 14:36 ` [PATCH v2 5/7] s390: Use safe string functions and length macros " Jens Remus
2023-12-15 14:36 ` [PATCH v2 6/7] s390: Optionally print instruction description in disassembly Jens Remus
2023-12-15 14:36 ` Jens Remus [this message]
2023-12-18 12:14 ` [PATCH v2 0/7] " Nick Clifton
2023-12-20 10:56 ` Andreas Krebbel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231215143616.820185-8-jremus@linux.ibm.com \
    --to=jremus@linux.ibm.com \
    --cc=binutils@sourceware.org \
    --cc=krebbel@linux.ibm.com \
    --cc=nickc@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).