[binutils-gdb] aarch64: Cleanup optional_operand_p

Alice Carlotti via Binutils-cvs <[email protected]>
Newsgroups gmane.comp.gnu.binutils.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=254a4c9a4c64b77cee2613cd056c0237416d735f

commit 254a4c9a4c64b77cee2613cd056c0237416d735f
Author: Alice Carlotti <[email protected]>
Date:   Thu Apr 9 01:45:18 2026 +0100

    aarch64: Cleanup optional_operand_p
    
    Every time I looked at this function I initially misread the
    implementation.  Make it less confusing.

Diff:
---
 include/opcode/aarch64.h | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index e38de9a99dc..79cbed433bb 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -1598,16 +1598,13 @@ aarch64_opcode_subclass_p (const aarch64_opcode *opcode, uint64_t flag)
   return ((opcode->flags & F_SUBCLASS) == flag);
 }
 
-/* Deal with two possible scenarios: If F_OP_PAIR_OPT not set, as is the case
-   by default, F_OPDn_OPT must equal IDX + 1, else F_OPDn_OPT must be in range
-   [IDX, IDX + 1].  */
+/* Return whether OPCODE has an optional operand at position IDX.  */
 static inline bool
 optional_operand_p (const aarch64_opcode *opcode, unsigned int idx)
 {
-  if (opcode->flags & F_OPD_PAIR_OPT)
-    return (((opcode->flags >> 12) & 0x7) == idx
-	    || ((opcode->flags >> 12) & 0x7) == idx + 1);
-  return ((opcode->flags >> 12) & 0x7) == idx + 1;
+  unsigned int optional_idx = ((opcode->flags >> 12) & 0x7) - 1;
+  return (idx == optional_idx
+	  || ((opcode->flags & F_OPD_PAIR_OPT) && idx == optional_idx + 1));
 }
 
 static inline aarch64_insn
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.