aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/testsuite/gas/s390/zarch-insndesc.d2
-rw-r--r--gas/testsuite/gas/s390/zarch-insndesc.s2
-rw-r--r--opcodes/s390-mkopc.c78
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 9a121fb..2ac0c7a 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 e964315..446832f 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 c6930a3..025dbdb 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;