aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r--gas/config/tc-arm.c57
1 files changed, 29 insertions, 28 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 99c07d4..a58949f 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -920,20 +920,16 @@ struct asm_opcode
#define BAD_CDE_COPROC _("coprocessor for insn is not enabled for cde")
#define UNPRED_REG(R) _("using " R " results in unpredictable behaviour")
#define THUMB1_RELOC_ONLY _("relocation valid in thumb1 code only")
-#define MVE_NOT_IT _("Warning: instruction is UNPREDICTABLE in an IT " \
- "block")
-#define MVE_NOT_VPT _("Warning: instruction is UNPREDICTABLE in a VPT " \
- "block")
-#define MVE_BAD_PC _("Warning: instruction is UNPREDICTABLE with PC" \
- " operand")
-#define MVE_BAD_SP _("Warning: instruction is UNPREDICTABLE with SP" \
- " operand")
+#define MVE_NOT_IT _("instruction is UNPREDICTABLE in an IT block")
+#define MVE_NOT_VPT _("instruction is UNPREDICTABLE in a VPT block")
+#define MVE_BAD_PC _("instruction is UNPREDICTABLE with PC operand")
+#define MVE_BAD_SP _("instruction is UNPREDICTABLE with SP operand")
#define BAD_SIMD_TYPE _("bad type in SIMD instruction")
#define BAD_MVE_AUTO \
_("GAS auto-detection mode and -march=all is deprecated for MVE, please" \
" use a valid -march or -mcpu option.")
-#define BAD_MVE_SRCDEST _("Warning: 32-bit element size and same destination "\
- "and source operands makes instruction UNPREDICTABLE")
+#define BAD_MVE_SRCDEST _("32-bit element size and same destination and " \
+ "source operands makes instruction UNPREDICTABLE")
#define BAD_EL_TYPE _("bad element type for instruction")
#define MVE_BAD_QREG _("MVE vector register Q[0..7] expected")
#define BAD_PACBTI _("selected processor does not support PACBTI extention")
@@ -1474,7 +1470,7 @@ parse_neon_type (struct neon_type *type, char **str)
while (type->elems < NEON_MAX_TYPE_ELS)
{
enum neon_el_type thistype = NT_untyped;
- unsigned thissize = -1u;
+ unsigned long thissize = -1ul;
if (*ptr != '.')
break;
@@ -1505,14 +1501,17 @@ parse_neon_type (struct neon_type *type, char **str)
return FAIL;
}
ptr += 1;
+ if (!ISDIGIT (*ptr) || *ptr == '0')
+ goto unexpected;
thissize = strtoul (ptr, &ptr, 10);
if (thissize != 16)
{
- as_bad (_("bad size %d in type specifier"), thissize);
+ as_bad (_("bad size %lu in type specifier"), thissize);
return FAIL;
}
goto done;
default:
+ unexpected:
as_bad (_("unexpected character `%c' in type specifier"), *ptr);
return FAIL;
}
@@ -1525,12 +1524,14 @@ parse_neon_type (struct neon_type *type, char **str)
else
{
parsesize:
+ if (!ISDIGIT (*ptr) || *ptr == '0')
+ goto unexpected;
thissize = strtoul (ptr, &ptr, 10);
if (thissize != 8 && thissize != 16 && thissize != 32
&& thissize != 64)
{
- as_bad (_("bad size %d in type specifier"), thissize);
+ as_bad (_("bad size %lu in type specifier"), thissize);
return FAIL;
}
}
@@ -1972,7 +1973,7 @@ parse_reg_list (char ** strp, enum reg_list_els etype)
{
if (range & (1 << i))
as_tsktsk
- (_("Warning: duplicated register (r%d) in register list"),
+ (_("duplicated register (r%d) in register list"),
i);
else
range |= 1 << i;
@@ -1981,10 +1982,10 @@ parse_reg_list (char ** strp, enum reg_list_els etype)
}
if (range & (1 << reg))
- as_tsktsk (_("Warning: duplicated register (r%d) in register list"),
+ as_tsktsk (_("duplicated register (r%d) in register list"),
reg);
else if (reg <= cur_reg)
- as_tsktsk (_("Warning: register range not in ascending order"));
+ as_tsktsk (_("register range not in ascending order"));
range |= 1 << reg;
cur_reg = reg;
@@ -2022,7 +2023,7 @@ parse_reg_list (char ** strp, enum reg_list_els etype)
regno &= -regno;
regno = (1 << regno) - 1;
as_tsktsk
- (_("Warning: duplicated register (r%d) in register list"),
+ (_("duplicated register (r%d) in register list"),
regno);
}
@@ -4350,10 +4351,10 @@ parse_dot_save (char **str_p, int prev_reg)
if (!in_range)
{
if (core_regs & (1 << reg))
- as_tsktsk (_("Warning: duplicated register (r%d) in register list"),
+ as_tsktsk (_("duplicated register (r%d) in register list"),
reg);
else if (reg <= prev_reg)
- as_tsktsk (_("Warning: register list not in ascending order"));
+ as_tsktsk (_("register list not in ascending order"));
core_regs |= (1 << reg);
prev_reg = reg;
@@ -4370,7 +4371,7 @@ parse_dot_save (char **str_p, int prev_reg)
for (i = prev_reg + 1; i <= reg; i++)
{
if (core_regs & (1 << i))
- as_tsktsk (_("Warning: duplicated register (r%d) in register list"),
+ as_tsktsk (_("duplicated register (r%d) in register list"),
i);
else
core_regs |= 1 << i;
@@ -9454,7 +9455,7 @@ struct deprecated_coproc_regs_s
};
#define DEPR_ACCESS_V8 \
- N_("This coprocessor register access is deprecated in ARMv8")
+ N_("this coprocessor register access is deprecated in ARMv8")
/* Table of all deprecated coprocessor registers. */
static struct deprecated_coproc_regs_s deprecated_coproc_regs[] =
@@ -9516,7 +9517,7 @@ do_co_reg (void)
&& inst.operands[4].reg == r->crm
&& inst.operands[5].imm == r->opc2)
{
- if (! ARM_CPU_IS_ANY (cpu_variant)
+ if (!(r->obs_msg && check_obsolete (&r->obsoleted, r->obs_msg))
&& warn_on_deprecated
&& ARM_CPU_HAS_FEATURE (cpu_variant, r->deprecated))
as_tsktsk ("%s", r->dep_msg);
@@ -17953,7 +17954,7 @@ do_mve_vhcadd (void)
constraint (rot != 90 && rot != 270, _("immediate out of range"));
if (et.size == 32 && inst.operands[0].reg == inst.operands[2].reg)
- as_tsktsk (_("Warning: 32-bit element size and same first and third "
+ as_tsktsk (_("32-bit element size and same first and third "
"operand makes instruction UNPREDICTABLE"));
mve_encode_qqq (0, et.size);
@@ -19725,7 +19726,7 @@ do_neon_rev (void)
if (ARM_CPU_HAS_FEATURE (cpu_variant, mve_ext) && elsize == 64
&& inst.operands[0].reg == inst.operands[1].reg)
- as_tsktsk (_("Warning: 64-bit element size and same destination and source"
+ as_tsktsk (_("64-bit element size and same destination and source"
" operands makes instruction UNPREDICTABLE"));
gas_assert (elsize != 0);
@@ -21276,7 +21277,7 @@ do_vcadd (void)
et = neon_check_type (3, rs, N_EQK, N_EQK, N_KEY | N_F16 | N_F32 | N_I8
| N_I16 | N_I32);
if (et.size == 32 && inst.operands[0].reg == inst.operands[2].reg)
- as_tsktsk (_("Warning: 32-bit element size and same first and third "
+ as_tsktsk (_("32-bit element size and same first and third "
"operand makes instruction UNPREDICTABLE"));
}
@@ -22470,7 +22471,8 @@ opcode_lookup (char **str)
if (parse_neon_type (&inst.vectype, str) == FAIL)
return NULL;
}
- else if (end[offset] != '\0' && !is_whitespace (end[offset]))
+
+ if (**str != '\0' && !is_whitespace (**str))
return NULL;
}
else
@@ -22818,8 +22820,7 @@ handle_pred_state (void)
{
if (unified_syntax
&& !(implicit_it_mode & IMPLICIT_IT_MODE_ARM))
- as_tsktsk (_("Warning: conditional outside an IT block"\
- " for Thumb."));
+ as_tsktsk (_("conditional outside an IT block for Thumb"));
}
else
{