[PATCH] RISC-V: Fix build with GCC-8
Mark Zhuang <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils |
|---|---|
| Message-ID | <[email protected]> |
From: Mark Zhuang <[email protected]> GCC 8.5.0 rejects a declaration right after a case label. Add braces to fix it. --- gas/config/tc-riscv.c | 335 ++++++++++++++++++++++-------------------- opcodes/riscv-dis.c | 16 +- 2 files changed, 182 insertions(+), 169 deletions(-) diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 5ffa2ef1f1d..cec3c1f65a2 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -1791,49 +1791,53 @@ validate_riscv_insn (const struct riscv_opcode *opc, int length) } break; case 'p': /* Vendor-specific (SpacemiT) operands. */ - size_t n; - size_t s; - switch (*++oparg) - { - case 'V': - switch (*++oparg) - { - case 'd': - USE_BITS (OP_MASK_SPACEMIT_IME_VD, OP_SH_SPACEMIT_IME_VD); + { + size_t n; + size_t s; + switch (*++oparg) + { + case 'V': + switch (*++oparg) + { + case 'd': + USE_BITS (OP_MASK_SPACEMIT_IME_VD, + OP_SH_SPACEMIT_IME_VD); + break; + case 's': + USE_BITS (OP_MASK_SPACEMIT_IME_VS1, + OP_SH_SPACEMIT_IME_VS1); + break; + case 'm': + USE_BITS (OP_MASK_SPACEMIT_IME_VMASK, + OP_SH_SPACEMIT_IME_VMASK); + break; + default: + goto unknown_validate_operand; + } break; - case 's': - USE_BITS (OP_MASK_SPACEMIT_IME_VS1, - OP_SH_SPACEMIT_IME_VS1); + case 'u': /* Integer immediate, 'XpuN@S' ... + N-bit unsigned immediate at bit S. */ + n = strtol (oparg + 1, (char **)&oparg, 10); + if (*oparg != '@') + goto unknown_validate_operand; + s = strtol (oparg + 1, (char **)&oparg, 10); + oparg--; + USE_IMM (n, s); break; - case 'm': - USE_BITS (OP_MASK_SPACEMIT_IME_VMASK, - OP_SH_SPACEMIT_IME_VMASK); + case 'n': + case 'b': + used_bits |= ENCODE_SPACEMIT_IME_UIMM2_SP (-1U); + break; + case 'w': + case 'x': + USE_BITS (OP_MASK_SPACEMIT_IME_WI, + OP_SH_SPACEMIT_IME_WI); break; default: goto unknown_validate_operand; - } - break; - case 'u': /* Integer immediate, 'XpuN@S' ... - N-bit unsigned immediate at bit S. */ - n = strtol (oparg + 1, (char **)&oparg, 10); - if (*oparg != '@') - goto unknown_validate_operand; - s = strtol (oparg + 1, (char **)&oparg, 10); - oparg--; - USE_IMM (n, s); - break; - case 'n': - case 'b': - used_bits |= ENCODE_SPACEMIT_IME_UIMM2_SP (-1U); - break; - case 'w': - case 'x': - USE_BITS (OP_MASK_SPACEMIT_IME_WI, OP_SH_SPACEMIT_IME_WI); - break; - default: - goto unknown_validate_operand; - } - break; + } + break; + } default: goto unknown_validate_operand; } @@ -4309,144 +4313,149 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr, break; case 'p': /* Vendor-specific (SpacemiT) operands. */ - size_t n; - size_t s; - switch (*++oparg) - { - case 'V': - switch (*++oparg) - { - case 'd': - if (!reg_lookup (&asarg, RCLASS_VECR, ®no)) - break; - if ((regno & 0x1) != 0) + { + size_t n; + size_t s; + switch (*++oparg) + { + case 'V': + switch (*++oparg) { - error.msg - = _("illegal operands (vd must be even)"); - error.missing_ext = NULL; - goto out; + case 'd': + if (!reg_lookup (&asarg, RCLASS_VECR, ®no)) + break; + if ((regno & 0x1) != 0) + { + error.msg + = _("illegal operands (vd must be even)"); + error.missing_ext = NULL; + goto out; + } + INSERT_OPERAND (SPACEMIT_IME_VD, *ip, regno>>1); + continue; + case 's': + if (!reg_lookup (&asarg, RCLASS_VECR, ®no)) + break; + if ((regno & 0x1) != 0) + { + error.msg + = _("illegal operands " + "(vs1 must be even)"); + error.missing_ext = NULL; + goto out; + } + INSERT_OPERAND (SPACEMIT_IME_VS1, + *ip, regno>>1); + continue; + case 'm': + if (!reg_lookup (&asarg, RCLASS_VECR, ®no)) + break; + if (regno >= 2) + { + error.msg + = _("illegal operands " + "(mask must be v0/v1)"); + error.missing_ext = NULL; + goto out; + } + INSERT_OPERAND (SPACEMIT_IME_VMASK, *ip, regno); + continue; + default: + goto unknown_riscv_ip_operand; } - INSERT_OPERAND (SPACEMIT_IME_VD, *ip, regno>>1); + break; + case 'u': /* Integer immediate, 'XpuN@S' ... + N-bit unsigned immediate at bit S. */ + n = strtol (oparg + 1, (char **)&oparg, 10); + if (*oparg != '@') + goto unknown_riscv_ip_operand; + s = strtol (oparg + 1, (char **)&oparg, 10); + oparg--; + my_getExpression (imm_expr, asarg, force_reloc); + check_absolute_expr (ip, imm_expr, false); + if (!VALIDATE_U_IMM (imm_expr->X_add_number, n)) + as_bad (_("improper immediate value (%"PRIu64")"), + imm_expr->X_add_number); + INSERT_IMM (n, s, *ip, imm_expr->X_add_number); + imm_expr->X_op = O_absent; + asarg = expr_parse_end; continue; - case 's': - if (!reg_lookup (&asarg, RCLASS_VECR, ®no)) + case 'n': /* Xpn: stride (0-1), paired with Xpx. */ + my_getExpression (imm_expr, asarg, force_reloc); + check_absolute_expr (ip, imm_expr, false); + if (imm_expr->X_add_number < 0 + || imm_expr->X_add_number >= 2) break; - if ((regno & 0x1) != 0) + ip->insn_opcode + |= ENCODE_SPACEMIT_IME_UIMM2_SP + (imm_expr->X_add_number); + imm_expr->X_op = O_absent; + asarg = expr_parse_end; + continue; + case 'b': /* Xpb: stride (0-3), paired with Xpw. */ + my_getExpression (imm_expr, asarg, force_reloc); + check_absolute_expr (ip, imm_expr, false); + if (imm_expr->X_add_number < 0 + || imm_expr->X_add_number >= 4) { - error.msg - = _("illegal operands (vs1 must be even)"); - error.missing_ext = NULL; - goto out; + as_bad (_("bad value for stride field," + " value must be 0..3")); + break; } - INSERT_OPERAND (SPACEMIT_IME_VS1, *ip, regno>>1); + ip->insn_opcode + |= ENCODE_SPACEMIT_IME_UIMM2_SP + (imm_expr->X_add_number); + imm_expr->X_op = O_absent; + asarg = expr_parse_end; continue; - case 'm': - if (!reg_lookup (&asarg, RCLASS_VECR, ®no)) - break; - if (regno >= 2) + case 'w': + /* Xpw: optional data-width suffix, i8 only (WI=3). + If omitted, defaults to i8. */ + if (*asarg == ',') { - error.msg - = _("illegal operands (mask must be v0/v1)"); - error.missing_ext = NULL; - goto out; + if (strcmp (asarg + 1, "i8") != 0) + { + error.msg + = _("illegal operands (invalid data type)"); + error.missing_ext = NULL; + goto out; + } + asarg += 3; } - INSERT_OPERAND (SPACEMIT_IME_VMASK, *ip, regno); + else if (*asarg != '\0') + goto unknown_riscv_ip_operand; + regno = 3; + INSERT_OPERAND (SPACEMIT_IME_WI, *ip, regno); continue; - default: - goto unknown_riscv_ip_operand; - } - break; - case 'u': /* Integer immediate, 'XpuN@S' ... - N-bit unsigned immediate at bit S. */ - n = strtol (oparg + 1, (char **)&oparg, 10); - if (*oparg != '@') - goto unknown_riscv_ip_operand; - s = strtol (oparg + 1, (char **)&oparg, 10); - oparg--; - my_getExpression (imm_expr, asarg, force_reloc); - check_absolute_expr (ip, imm_expr, false); - if (!VALIDATE_U_IMM (imm_expr->X_add_number, n)) - as_bad (_("improper immediate value (%"PRIu64")"), - imm_expr->X_add_number); - INSERT_IMM (n, s, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; - case 'n': /* Xpn: stride (0-1), paired with Xpx. */ - my_getExpression (imm_expr, asarg, force_reloc); - check_absolute_expr (ip, imm_expr, false); - if (imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 2) - break; - ip->insn_opcode - |= ENCODE_SPACEMIT_IME_UIMM2_SP - (imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; - case 'b': /* Xpb: stride (0-3), paired with Xpw. */ - my_getExpression (imm_expr, asarg, force_reloc); - check_absolute_expr (ip, imm_expr, false); - if (imm_expr->X_add_number < 0 - || imm_expr->X_add_number >= 4) - { - as_bad (_("bad value for stride field," - " value must be 0..3")); - break; - } - ip->insn_opcode - |= ENCODE_SPACEMIT_IME_UIMM2_SP - (imm_expr->X_add_number); - imm_expr->X_op = O_absent; - asarg = expr_parse_end; - continue; - case 'w': - /* Xpw: optional data-width suffix, i8 only (WI=3). - If omitted, defaults to i8. */ - if (*asarg == ',') - { - if (strcmp (asarg + 1, "i8") != 0) + case 'x': + /* Xpx: optional data-width suffix, i4 or i8 (WI=2/3). + If omitted, defaults to i8. */ + if (*asarg == ',') { - error.msg - = _("illegal operands (invalid data type)"); - error.missing_ext = NULL; - goto out; + if (strcmp (asarg + 1, "i4") == 0) + regno = 2; + else if (strcmp (asarg + 1, "i8") == 0) + regno = 3; + else + { + error.msg + = _("illegal operands (invalid data type)"); + error.missing_ext = NULL; + goto out; + } + asarg += 3; } - asarg += 3; - } - else if (*asarg != '\0') - goto unknown_riscv_ip_operand; - regno = 3; - INSERT_OPERAND (SPACEMIT_IME_WI, *ip, regno); - continue; - case 'x': - /* Xpx: optional data-width suffix, i4 or i8 (WI=2/3). - If omitted, defaults to i8. */ - if (*asarg == ',') - { - if (strcmp (asarg + 1, "i4") == 0) - regno = 2; - else if (strcmp (asarg + 1, "i8") == 0) - regno = 3; + else if (*asarg != '\0') + goto unknown_riscv_ip_operand; else - { - error.msg - = _("illegal operands (invalid data type)"); - error.missing_ext = NULL; - goto out; - } - asarg += 3; - } - else if (*asarg != '\0') - goto unknown_riscv_ip_operand; - else - regno = 3; - INSERT_OPERAND (SPACEMIT_IME_WI, *ip, regno); - continue; - default: - goto unknown_riscv_ip_operand; - } - break; + regno = 3; + INSERT_OPERAND (SPACEMIT_IME_WI, *ip, regno); + continue; + default: + goto unknown_riscv_ip_operand; + } + break; + } default: goto unknown_riscv_ip_operand; } diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c index ca0d9bfd121..edb9ce04778 100644 --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -924,14 +924,18 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info switch (*++oparg) { case 'd': - unsigned vd = EXTRACT_OPERAND (SPACEMIT_IME_VD, l) * 2; - print (info->stream, dis_style_register, "%s", - riscv_vecr_names_numeric[vd]); + { + unsigned vd = EXTRACT_OPERAND (SPACEMIT_IME_VD, l) * 2; + print (info->stream, dis_style_register, "%s", + riscv_vecr_names_numeric[vd]); + } break; case 's': - unsigned vs = EXTRACT_OPERAND (SPACEMIT_IME_VS1, l) * 2; - print (info->stream, dis_style_register, "%s", - riscv_vecr_names_numeric[vs]); + { + unsigned vs = EXTRACT_OPERAND (SPACEMIT_IME_VS1, l) * 2; + print (info->stream, dis_style_register, "%s", + riscv_vecr_names_numeric[vs]); + } break; case 'm': { -- 2.34.1