default:
break;
}
+
+ /* The qualifier can be deduced by libopcodes. */
+ operand->qualifier = AARCH64_OPND_QLF_UNKNOWN;
}
/* Process the relocation type for move wide instructions.
gas_assert (inst.base.opcode->operands[1] == AARCH64_OPND_ADDR_UIMM12);
enum aarch64_opnd_qualifier opd0_qlf = inst.base.operands[0].qualifier;
- enum aarch64_opnd_qualifier opd1_qlf = AARCH64_OPND_QLF_NIL;
+ enum aarch64_opnd_qualifier opd1_qlf = AARCH64_OPND_QLF_UNKNOWN;
const aarch64_opnd_qualifier_seq_t *qseq_list
= inst.base.opcode->qualifiers_list;
for (int i = 0; i < AARCH64_MAX_QLF_SEQ_NUM; ++i)
/* Assign the operand code. */
info->type = operands[i];
+ info->qualifier = AARCH64_OPND_QLF_ERR;
+
if (optional_operand_p (opcode, i))
{
/* Remember where we are in case we need to backtrack. */
|| reg_type == REG_TYPE_PN
|| reg_type == REG_TYPE_Z)
&& vectype.type == NT_invtype)
- /* Unqualified P and Z registers are allowed in certain
- contexts. Rely on F_STRICT qualifier checking to catch
- invalid uses. */
info->qualifier = AARCH64_OPND_QLF_NIL;
else
{
set_fatal_syntax_error (_("invalid register list"));
goto failure;
}
-
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_Zmx2_INDEX_22:
}
info->reglist.has_index = 1;
info->reglist.index = vectype.index;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SVE_ZnxN:
case AARCH64_OPND_IMM_VLSR:
po_imm_or_fail (1, 64);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_CCMP_IMM:
case AARCH64_OPND_CSSC_UIMM8:
po_imm_nc_or_fail ();
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_IMMP1_2:
po_imm_or_fail (1, 64);
info->imm.value = val - 1;
+ info->qualifier = AARCH64_OPND_QLF_imm_0_63;
break;
case AARCH64_OPND_IMMS1_2:
po_imm_or_fail (-1, 62);
info->imm.value = val + 1;
+ info->qualifier = AARCH64_OPND_QLF_imm_0_63;
break;
case AARCH64_OPND_SVE_AIMM:
po_misc_or_fail (parse_shift (&str, info, SHIFTED_LSL));
else
inst.base.operands[i].shifter.kind = AARCH64_MOD_LSL;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SVE_PATTERN:
po_enum_or_fail (aarch64_sve_pattern_array);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SVE_PATTERN_SCALED:
info->shifter.kind = AARCH64_MOD_MUL;
info->shifter.amount = 1;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SVE_PRFOP:
po_enum_or_fail (aarch64_sve_prfop_array);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_UIMM7:
po_imm_or_fail (0, 127);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_IDX:
case AARCH64_OPND_IMMS:
po_imm_or_fail (0, 63);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_IMM0:
goto failure;
}
info->imm.value = 0;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_FPIMM0:
{
info->imm.value = 0;
info->imm.is_fp = 1;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
set_fatal_syntax_error (_("immediate zero expected"));
instruction. */
aarch64_set_gas_internal_fixup (&inst.reloc, info, 1);
info->skip = 1;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
}
break;
gas_assert (info->shifter.kind == AARCH64_MOD_NONE);
info->shifter.kind = AARCH64_MOD_LSL;
}
+ /* Leave qualifier determination and checking for later. */
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_FPIMM:
}
info->imm.value = encode_imm_float_bits (qfloat);
info->imm.is_fp = 1;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
}
break;
}
info->imm.value = qfloat;
info->imm.is_fp = 1;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
}
break;
/* addr_off_p */ 0,
/* need_libopcodes_p */ 1,
/* skip_p */ 1);
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_AIMM:
gas_assert (info->shifter.kind == AARCH64_MOD_NONE);
info->shifter.kind = AARCH64_MOD_LSL;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_HALF:
info->imm.value = 0;
if (! process_movw_reloc_info ())
goto failure;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
}
break;
/* addr_off_p */ 0,
/* need_libopcodes_p */ 0,
/* skip_p */ 1);
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
case AARCH64_OPND_NZCV:
{
+ info->qualifier = AARCH64_OPND_QLF_NIL;
const asm_nzcv *nzcv = str_hash_find_n (aarch64_nzcv_hsh, str, 4);
if (nzcv != NULL)
{
set_default_error ();
goto failure;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
}
break;
po_misc_or_fail (parse_adrp (&str));
/* Clear the value as operand needs to be relocated. */
info->imm.value = 0;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_ADDR_PCREL9:
}
inst.reloc.pc_rel = 1;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_RCPC3_ADDR_PREIND_WB:
case AARCH64_OPND_RCPC3_ADDR_POSTIND:
/* addr_off_p */ 1,
/* need_libopcodes_p */ 1,
/* skip_p */ 0);
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
set_syntax_error (_("invalid addressing mode"));
/* First use the normal address-parsing routines, to get
the usual syntax errors. */
po_misc_or_fail (parse_address (&str, info));
+ info->qualifier = AARCH64_OPND_QLF_NIL;
if ((operands[i] == AARCH64_OPND_RCPC3_ADDR_OPT_PREIND_WB
&& info->addr.writeback && info->addr.preind)
|| (operands[i] == AARCH64_OPND_RCPC3_ADDR_OPT_POSTIND
}
}
po_char_or_fail (']');
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
case AARCH64_OPND_ADDR_REGOFF:
/* [<Xn|SP>, <R><m>{, <extend> {<amount>}}] */
po_misc_or_fail (parse_address (&str, info));
+ /* Qualifier to be deduced by libopcodes. */
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
regoff_addr:
if (info->addr.pcrel || !info->addr.offset.is_reg
|| !info->addr.preind || info->addr.postind
gas_assert (info->shifter.kind == AARCH64_MOD_NONE);
info->shifter.kind = AARCH64_MOD_LSL;
}
- /* Qualifier to be deduced by libopcodes. */
break;
case AARCH64_OPND_ADDR_SIMM7:
/* addr_off_p */ 1,
/* need_libopcodes_p */ 1,
/* skip_p */ 0);
+ /* Qualifier to be deduced by libopcodes. */
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_ADDR_SIMM9:
/* addr_off_p */ 1,
/* need_libopcodes_p */ 1,
/* skip_p */ 0);
+ /* Qualifier to be deduced by libopcodes. */
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_ADDR_SIMM10:
/* addr_off_p */ 1,
/* need_libopcodes_p */ 1,
/* skip_p */ 0);
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_RCPC3_ADDR_OFFSET:
/* addr_off_p */ 1,
/* need_libopcodes_p */ 1,
/* skip_p */ 0);
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_ADDR_UIMM12:
== BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC))
inst.reloc.type = ldst_lo12_determine_real_reloc_type ();
/* Leave qualifier to be determined by libopcodes. */
+ info->qualifier = AARCH64_OPND_QLF_UNKNOWN;
break;
case AARCH64_OPND_SIMD_ADDR_POST:
}
}
/* No qualifier. */
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_SM_ZA:
goto failure;
}
info->reg.regno = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_PnT_Wm_imm:
set_syntax_error (_("invalid addressing mode"));
goto failure;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
sve_regimm:
if (info->addr.pcrel || info->addr.offset.is_reg
|| !info->addr.preind || info->addr.writeback)
set_syntax_error (_("invalid addressing mode"));
goto failure;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
goto regoff_addr;
case AARCH64_OPND_SVE_ADDR_RM:
set_syntax_error (_("invalid addressing mode"));
goto failure;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
goto regoff_addr;
case AARCH64_OPND_SVE_ADDR_RZ:
}
info->sysreg.value = val;
info->sysreg.flags = sysreg_flags;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
}
info->pstatefield = val;
info->sysreg.flags = sysreg_flags;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
set_fatal_syntax_error ( _("unknown or missing operation name"));
goto failure;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_BARRIER:
if (val == PARSE_FAIL)
po_imm_or_fail (0, 15);
info->barrier = aarch64_barrier_options + val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_BARRIER_DSB_NXS:
/* Option index is encoded as 2-bit value in val<3:2>. */
val = (val >> 2) - 4;
info->barrier = aarch64_barrier_dsb_nxs_options + val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_NOT_BALANCED_10:
set_default_error ();
goto failure;
}
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
}
po_imm_or_fail (0, 31);
info->prfop = aarch64_prfops + val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_RPRFMOP:
po_enum_or_fail (aarch64_rprfmop_array);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_BARRIER_PSB:
if (!parse_hint_opt (opcode->name, &str, &(info->hint_option)))
goto failure;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_ZT0:
po_reg_or_fail (REG_TYPE_ZT0);
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_ZT0_INDEX:
goto failure;
}
info->imm.value = vectype.index;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_ZT0_INDEX_MUL_VL:
po_misc_or_fail (parse_shifter_zt0_with_bit_index
(&str, info, SHIFTED_MUL_VL));
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_ZT0_LIST:
goto failure;
}
str++;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_PNn3_INDEX1:
case AARCH64_OPND_BARRIER_GCSB:
if (!parse_hint_opt (opcode->name, &str, &(info->hint_option)))
goto failure;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_BTI_TARGET:
case AARCH64_OPND_SHUH_PHINT:
if (!parse_hint_opt (opcode->name, &str, &(info->hint_option)))
goto failure;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_STSHH_POLICY:
if (!parse_hint_opt (opcode->name, &str, &(info->hint_option)))
goto failure;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_ZAda_1b:
if (val == PARSE_FAIL)
goto failure;
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_SME_ZA_array_off1x4:
case AARCH64_OPND_SME_VLxN_13:
po_strict_enum_or_fail (aarch64_sme_vlxn_array);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_BRBOP:
po_strict_enum_or_fail (aarch64_brbop_array);
info->imm.value = val;
+ info->qualifier = AARCH64_OPND_QLF_NIL;
break;
case AARCH64_OPND_MOPS_ADDR_Rd:
idx = aarch64_operand_index (instr->opcode->operands,
AARCH64_OPND_ADDR_SIMM9);
gas_assert (idx == 1);
- instr->operands[idx].qualifier = AARCH64_OPND_QLF_NIL;
+ instr->operands[idx].qualifier = AARCH64_OPND_QLF_UNKNOWN;
DEBUG_TRACE ("Found LDURB entry to encode programmer-friendly LDRB");