]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/config/tc-aarch64.c
aarch64: Fix tlbi and tlbip instructions
[thirdparty/binutils-gdb.git] / gas / config / tc-aarch64.c
index b455899ccc11c6b30b8718598d6e8217d612aba9..8141ea4823e26762d500a44d8c617606975083fe 100644 (file)
@@ -4858,7 +4858,7 @@ parse_sys_reg (char **str, htab_t sys_regs,
    for the option, or NULL.  */
 
 static const aarch64_sys_ins_reg *
-parse_sys_ins_reg (char **str, htab_t sys_ins_regs)
+parse_sys_ins_reg (char **str, htab_t sys_ins_regs, bool sysreg128_p)
 {
   char *p, *q;
   char buf[AARCH64_MAX_SYSREG_NAME_LEN];
@@ -4877,7 +4877,7 @@ parse_sys_ins_reg (char **str, htab_t sys_ins_regs)
     return NULL;
 
   o = str_hash_find (sys_ins_regs, buf);
-  if (!o)
+  if (!o || (sysreg128_p && !aarch64_sys_reg_128bit_p (o->flags)))
     return NULL;
 
   if (!aarch64_sys_ins_reg_supported_p (cpu_variant,
@@ -7658,28 +7658,32 @@ parse_operands (char *str, const aarch64_opcode *opcode)
 
        case AARCH64_OPND_SYSREG_IC:
          inst.base.operands[i].sysins_op =
-           parse_sys_ins_reg (&str, aarch64_sys_regs_ic_hsh);
+           parse_sys_ins_reg (&str, aarch64_sys_regs_ic_hsh, false);
          goto sys_reg_ins;
 
        case AARCH64_OPND_SYSREG_DC:
          inst.base.operands[i].sysins_op =
-           parse_sys_ins_reg (&str, aarch64_sys_regs_dc_hsh);
+           parse_sys_ins_reg (&str, aarch64_sys_regs_dc_hsh, false);
          goto sys_reg_ins;
 
        case AARCH64_OPND_SYSREG_AT:
          inst.base.operands[i].sysins_op =
-           parse_sys_ins_reg (&str, aarch64_sys_regs_at_hsh);
+           parse_sys_ins_reg (&str, aarch64_sys_regs_at_hsh, false);
          goto sys_reg_ins;
 
        case AARCH64_OPND_SYSREG_SR:
          inst.base.operands[i].sysins_op =
-           parse_sys_ins_reg (&str, aarch64_sys_regs_sr_hsh);
+           parse_sys_ins_reg (&str, aarch64_sys_regs_sr_hsh, false);
          goto sys_reg_ins;
 
        case AARCH64_OPND_SYSREG_TLBI:
+         inst.base.operands[i].sysins_op =
+           parse_sys_ins_reg (&str, aarch64_sys_regs_tlbi_hsh, false);
+         goto sys_reg_ins;
+
        case AARCH64_OPND_SYSREG_TLBIP:
          inst.base.operands[i].sysins_op =
-           parse_sys_ins_reg (&str, aarch64_sys_regs_tlbi_hsh);
+           parse_sys_ins_reg (&str, aarch64_sys_regs_tlbi_hsh, true);
        sys_reg_ins:
          if (inst.base.operands[i].sysins_op == NULL)
            {