[PATCH 22/23] aarch64: Add new qualifier AARCH64_OPND_QLF_UNUSED
Alice Carlotti
alice.carlotti@arm.com
Thu May 7 16:15:12 GMT 2026
Replace QLF_NIL with QLF_UNUSED for qualifier sequence list padding.
This splits apart distinct qualifier meanings, and simplifies detection
of empty qualifier sequences.
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index f88f1b27c9fb3bb603232702c35191a674b1b280..fb58bcca9b1059e5d4d831a0a8ea9a33d05deaba 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -6003,7 +6003,7 @@ output_operand_error_record (const operand_error_record *record, char *str)
for (i = 0; i < AARCH64_MAX_QLF_SEQ_NUM; ++i, ++qualifiers_list)
{
/* Most opcodes has much fewer patterns in the list.
- First NIL qualifier indicates the end in the list. */
+ First UNUSED qualifier indicates the end in the list. */
if (empty_qualifier_sequence_p (*qualifiers_list))
break;
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 9a1767fa6c0389c2c369bbf0725234396d5a22ba..6d1b414444ae65f76cb4362d1d7e861156fc2759 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -1010,6 +1010,11 @@ enum aarch64_opnd
enum aarch64_opnd_qualifier
{
+ /* Indicating an unused entry in a list of qualifier sequences (assigned via
+ empty initialization of unused array elements), or some other unused
+ value. */
+ AARCH64_OPND_QLF_UNUSED,
+
/* Indicating no further qualification on an operand. */
AARCH64_OPND_QLF_NIL,
@@ -1353,15 +1358,10 @@ typedef enum aarch64_opnd_qualifier aarch64_opnd_qualifier_t;
typedef aarch64_opnd_qualifier_t \
aarch64_opnd_qualifier_seq_t [AARCH64_MAX_OPND_NUM];
-/* FIXME: improve the efficiency. */
static inline bool
empty_qualifier_sequence_p (const aarch64_opnd_qualifier_t *qualifiers)
{
- int i;
- for (i = 0; i < AARCH64_MAX_OPND_NUM; ++i)
- if (qualifiers[i] != AARCH64_OPND_QLF_NIL)
- return false;
- return true;
+ return qualifiers[0] == AARCH64_OPND_QLF_UNUSED;
}
/* Forward declare error reporting type. */
diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c
index 945b541c848e0b6876af89aba1bf625423328ba5..31d444e673760c633105489198bd4b7db600e012 100644
--- a/opcodes/aarch64-dis.c
+++ b/opcodes/aarch64-dis.c
@@ -2503,7 +2503,7 @@ aarch64_ext_plain_shrimm (const aarch64_operand *self, aarch64_opnd_info *info,
N.B. CANDIDATES is a group of possible qualifiers that are valid for
one operand; it has a maximum of AARCH64_MAX_QLF_SEQ_NUM qualifiers and
- may end with AARCH64_OPND_QLF_NIL. */
+ may end with AARCH64_OPND_QLF_UNUSED. */
static enum aarch64_opnd_qualifier
get_qualifier_from_partial_encoding (aarch64_insn value,
@@ -2516,7 +2516,7 @@ get_qualifier_from_partial_encoding (aarch64_insn value,
for (i = 0; i < AARCH64_MAX_QLF_SEQ_NUM; ++i)
{
aarch64_insn standard_value;
- if (candidates[i] == AARCH64_OPND_QLF_NIL)
+ if (candidates[i] == AARCH64_OPND_QLF_UNUSED)
break;
standard_value = aarch64_get_qualifier_standard_value (candidates[i]);
if ((standard_value & mask) == (value & mask))
@@ -2536,7 +2536,7 @@ get_operand_possible_qualifiers (int idx,
{
int i;
for (i = 0; i < AARCH64_MAX_QLF_SEQ_NUM; ++i)
- if ((qualifiers[i] = list[i][idx]) == AARCH64_OPND_QLF_NIL)
+ if ((qualifiers[i] = list[i][idx]) == AARCH64_OPND_QLF_UNUSED)
break;
}
@@ -2591,7 +2591,7 @@ decode_sizeq (aarch64_inst *inst)
if (debug_dump)
{
int i;
- for (i = 0; candidates[i] != AARCH64_OPND_QLF_NIL
+ for (i = 0; candidates[i] != AARCH64_OPND_QLF_UNUSED
&& i < AARCH64_MAX_QLF_SEQ_NUM; ++i)
DEBUG_TRACE ("qualifier %d: %s", i,
aarch64_get_qualifier_name(candidates[i]));
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index b21315333dbf60c89bc63d943edc08c0739a7e41..62bb11868fd956b28db468deba9cf1913f716360 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -195,7 +195,7 @@ get_data_pattern (const aarch64_opnd_qualifier_seq_t qualifiers)
{
/* e.g. SADDLV <V><d>, <Vn>.<T>. */
if (vector_qualifier_p (qualifiers[1])
- && qualifiers[2] == AARCH64_OPND_QLF_NIL)
+ && (qualifiers[2] == AARCH64_OPND_QLF_UNUSED))
return DP_VECTOR_ACROSS_LANES;
}
@@ -737,6 +737,7 @@ struct operand_qualifier_data
/* Indexed by the operand qualifier enumerators. */
static const struct operand_qualifier_data aarch64_opnd_qualifiers[] =
{
+ {0, 0, 0, "UNUSED", OQK_NIL},
{0, 0, 0, "NIL", OQK_NIL},
{0, 0, 0, "UNKNOWN", OQK_NIL},
More information about the Binutils
mailing list