aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-aarch64.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-aarch64.c')
-rw-r--r--gas/config/tc-aarch64.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 4380de3..d6dab86 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -3748,6 +3748,41 @@ parse_shifter_operand (char **str, aarch64_opnd_info *operand,
return parse_shifter_operand_imm (str, operand, mode);
}
+static bool
+parse_reg_lsl_shifter_operand (char **str, aarch64_opnd_info *operand)
+{
+ aarch64_opnd_qualifier_t qualifier;
+ const reg_entry *reg = aarch64_reg_parse_32_64 (str, &qualifier);
+
+ if (reg)
+ {
+ if (!aarch64_check_reg_type (reg, REG_TYPE_R_ZR))
+ {
+ set_expected_reg_error (REG_TYPE_R_ZR, reg, 0);
+ return false;
+ }
+
+ operand->reg.regno = reg->number;
+ operand->qualifier = qualifier;
+
+ /* Accept optional LSL shift operation on register. */
+ if (!skip_past_comma (str))
+ return true;
+
+ if (!parse_shift (str, operand, SHIFTED_LSL))
+ return false;
+
+ return true;
+ }
+ else
+ {
+ set_syntax_error
+ (_("integer register expected in the shifted operand "
+ "register"));
+ return false;
+ }
+}
+
/* Return TRUE on success; return FALSE otherwise. */
static bool
@@ -6593,6 +6628,17 @@ parse_operands (char *str, const aarch64_opcode *opcode)
}
break;
+ case AARCH64_OPND_Rm_LSL:
+ po_misc_or_fail (parse_reg_lsl_shifter_operand (&str, info));
+ if (!info->shifter.operator_present)
+ {
+ /* Default to LSL #0 if not present. */
+ gas_assert (info->shifter.kind == AARCH64_MOD_NONE);
+ info->shifter.kind = AARCH64_MOD_LSL;
+ info->shifter.amount = 0;
+ }
+ break;
+
case AARCH64_OPND_Fd:
case AARCH64_OPND_Fn:
case AARCH64_OPND_Fm:
@@ -10429,6 +10475,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
{"sme2p1", AARCH64_FEATURE (SME2p1), AARCH64_FEATURE (SME2)},
{"sve2p1", AARCH64_FEATURE (SVE2p1), AARCH64_FEATURE (SVE2)},
{"rcpc3", AARCH64_FEATURE (RCPC3), AARCH64_FEATURE (RCPC2)},
+ {"cpa", AARCH64_FEATURE (CPA), AARCH64_NO_FEATURES},
{NULL, AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
};