s390: Be more verbose about missing operand type
Provide expected operand type in s390-specific assembler operand parsing error message: "error: operand <operand-number>: missing <operand-type> operand" With <operand-type> being one of: - base register - displacement - [vector] index register - length - access register - control register - floating-point register - general-purpose register - vector register - [un]signed number gas/ * config/tc-s390.c: Provide missing operand type in error message. * testsuite/gas/s390/zarch-base-index-0-err.l: Update test case result validation patterns to operand number in operand syntax error messages. * testsuite/gas/s390/zarch-omitted-base-index-err.l: Likewise. Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com> Signed-off-by: Jens Remus <jremus@linux.ibm.com>
This commit is contained in:
parent
ac6582253b
commit
5c97cb1c80
3 changed files with 54 additions and 18 deletions
|
@ -1329,6 +1329,41 @@ s390_elf_cons (int nbytes /* 1=.byte, 2=.word, 4=.long */)
|
|||
demand_empty_rest_of_line ();
|
||||
}
|
||||
|
||||
static const char *
|
||||
operand_type_str(const struct s390_operand * operand)
|
||||
{
|
||||
if (operand->flags & S390_OPERAND_BASE)
|
||||
return _("base register");
|
||||
else if (operand->flags & S390_OPERAND_DISP)
|
||||
return _("displacement");
|
||||
else if (operand->flags & S390_OPERAND_INDEX)
|
||||
{
|
||||
if (operand->flags & S390_OPERAND_VR)
|
||||
return _("vector index register");
|
||||
else
|
||||
return _("index register");
|
||||
}
|
||||
else if (operand->flags & S390_OPERAND_LENGTH)
|
||||
return _("length");
|
||||
else if (operand->flags & S390_OPERAND_AR)
|
||||
return _("access register");
|
||||
else if (operand->flags & S390_OPERAND_CR)
|
||||
return _("control register");
|
||||
else if (operand->flags & S390_OPERAND_FPR)
|
||||
return _("floating-point register");
|
||||
else if (operand->flags & S390_OPERAND_GPR)
|
||||
return _("general-purpose register");
|
||||
else if (operand->flags & S390_OPERAND_VR)
|
||||
return _("vector register");
|
||||
else
|
||||
{
|
||||
if (operand->flags & S390_OPERAND_SIGNED)
|
||||
return _("signed number");
|
||||
else
|
||||
return _("unsigned number");
|
||||
}
|
||||
}
|
||||
|
||||
/* Return true if all remaining operands in the opcode with
|
||||
OPCODE_FLAGS can be skipped. */
|
||||
static bool
|
||||
|
@ -1431,7 +1466,8 @@ md_gather_operands (char *str,
|
|||
{
|
||||
if (opindex_ptr[0] == '\0')
|
||||
break;
|
||||
as_bad (_("operand %d: missing operand"), operand_number);
|
||||
as_bad (_("operand %d: missing %s operand"), operand_number,
|
||||
operand_type_str(operand));
|
||||
}
|
||||
else if (ex.X_op == O_register || ex.X_op == O_constant)
|
||||
{
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
.*:16: Error: bad expression
|
||||
.*:16: Error: operand 2: syntax error; missing '\)' after base register
|
||||
.*:17: Error: operand 1: operand out of range \(0 is not between 1 and 256\)
|
||||
.*:18: Error: operand 1: missing operand
|
||||
.*:19: Error: operand 1: missing operand
|
||||
.*:20: Error: operand 1: missing operand
|
||||
.*:18: Error: operand 1: missing length operand
|
||||
.*:19: Error: operand 1: missing length operand
|
||||
.*:20: Error: operand 1: missing length operand
|
||||
.*:21: Error: bad expression
|
||||
.*:21: Error: operand 1: operand out of range \(0 is not between 1 and 256\)
|
||||
.*:21: Error: operand 1: operand out of range \(32 is not between 0 and 15\)
|
||||
|
@ -31,9 +31,9 @@
|
|||
.*:22: Error: operand 1: syntax error; missing '\(' after displacement
|
||||
.*:23: Error: operand 1: invalid length field specified
|
||||
.*:26: Error: operand 1: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:27: Error: operand 1: missing operand
|
||||
.*:28: Error: operand 1: missing operand
|
||||
.*:29: Error: operand 1: missing operand
|
||||
.*:27: Error: operand 1: missing length operand
|
||||
.*:28: Error: operand 1: missing length operand
|
||||
.*:29: Error: operand 1: missing length operand
|
||||
.*:30: Error: bad expression
|
||||
.*:30: Error: operand 1: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:30: Error: operand 1: operand out of range \(32 is not between 0 and 15\)
|
||||
|
@ -42,21 +42,21 @@
|
|||
.*:30: Error: found ',', expected: '\)'
|
||||
.*:31: Error: operand 1: syntax error; missing '\(' after displacement
|
||||
.*:32: Error: operand 2: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:33: Error: operand 2: missing operand
|
||||
.*:34: Error: operand 2: missing operand
|
||||
.*:35: Error: operand 2: missing operand
|
||||
.*:33: Error: operand 2: missing length operand
|
||||
.*:34: Error: operand 2: missing length operand
|
||||
.*:35: Error: operand 2: missing length operand
|
||||
.*:36: Error: bad expression
|
||||
.*:36: Error: operand 2: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:36: Error: operand 2: syntax error; expected ','
|
||||
.*:37: Error: operand 2: syntax error; missing '\(' after displacement
|
||||
.*:38: Error: operand 1: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:38: Error: operand 2: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:39: Error: operand 1: missing operand
|
||||
.*:39: Error: operand 2: missing operand
|
||||
.*:40: Error: operand 1: missing operand
|
||||
.*:40: Error: operand 2: missing operand
|
||||
.*:41: Error: operand 1: missing operand
|
||||
.*:41: Error: operand 2: missing operand
|
||||
.*:39: Error: operand 1: missing length operand
|
||||
.*:39: Error: operand 2: missing length operand
|
||||
.*:40: Error: operand 1: missing length operand
|
||||
.*:40: Error: operand 2: missing length operand
|
||||
.*:41: Error: operand 1: missing length operand
|
||||
.*:41: Error: operand 2: missing length operand
|
||||
.*:42: Error: bad expression
|
||||
.*:42: Error: operand 1: operand out of range \(0 is not between 1 and 16\)
|
||||
.*:42: Error: operand 1: operand out of range \(32 is not between 0 and 15\)
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
.*:11: Warning: operand 2: expected general register name as base register
|
||||
.*:12: Error: bad expression
|
||||
.*:12: Error: operand 2: syntax error; missing '\)' after base register
|
||||
.*:15: Error: operand 1: missing operand
|
||||
.*:16: Error: operand 1: missing operand
|
||||
.*:15: Error: operand 1: missing length operand
|
||||
.*:16: Error: operand 1: missing length operand
|
||||
.*:17: Error: operand 1: invalid length field specified
|
||||
.*:18: Error: bad expression
|
||||
.*:18: Error: operand 1: operand out of range \(0 is not between 1 and 256\)
|
||||
|
|
Loading…
Add table
Reference in a new issue