X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Faarch64-opc.h;h=fe14d87a1ed440b1780aa5dc9be537e2c2b6b921;hb=96fe45624e51f1bb747e36cf8bdaab216f31c5ec;hp=b54f35edbcf20108c06d6b941861f2af5b8eafe8;hpb=245d2e3fe8d9ff35c65ed1329609fb7e59034877;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/aarch64-opc.h b/opcodes/aarch64-opc.h index b54f35edbc..fe14d87a1e 100644 --- a/opcodes/aarch64-opc.h +++ b/opcodes/aarch64-opc.h @@ -80,6 +80,7 @@ enum aarch64_field_kind FLD_immr, FLD_immb, FLD_immh, + FLD_S_imm10, FLD_N, FLD_index, FLD_index2, @@ -91,6 +92,10 @@ enum aarch64_field_kind FLD_b5, FLD_b40, FLD_scale, + FLD_SVE_M_4, + FLD_SVE_M_14, + FLD_SVE_M_16, + FLD_SVE_N, FLD_SVE_Pd, FLD_SVE_Pg3, FLD_SVE_Pg4_5, @@ -99,6 +104,11 @@ enum aarch64_field_kind FLD_SVE_Pm, FLD_SVE_Pn, FLD_SVE_Pt, + FLD_SVE_Rm, + FLD_SVE_Rn, + FLD_SVE_Vd, + FLD_SVE_Vm, + FLD_SVE_Vn, FLD_SVE_Za_5, FLD_SVE_Za_16, FLD_SVE_Zd, @@ -106,9 +116,30 @@ enum aarch64_field_kind FLD_SVE_Zm_16, FLD_SVE_Zn, FLD_SVE_Zt, + FLD_SVE_i1, + FLD_SVE_imm3, + FLD_SVE_imm4, + FLD_SVE_imm5, + FLD_SVE_imm5b, + FLD_SVE_imm6, + FLD_SVE_imm7, + FLD_SVE_imm8, + FLD_SVE_imm9, + FLD_SVE_immr, + FLD_SVE_imms, + FLD_SVE_msz, FLD_SVE_pattern, FLD_SVE_prfop, + FLD_SVE_sz, + FLD_SVE_tsz, FLD_SVE_tszh, + FLD_SVE_tszl_8, + FLD_SVE_tszl_19, + FLD_SVE_xs_14, + FLD_SVE_xs_22, + FLD_rotate1, + FLD_rotate2, + FLD_rotate3, }; /* Field description. */ @@ -155,6 +186,9 @@ extern const aarch64_operand aarch64_operands[]; value by 2 to get the value of an immediate operand. */ #define OPD_F_MAYBE_SP 0x00000010 /* May potentially be SP. */ +#define OPD_F_OD_MASK 0x00000060 /* Operand-dependent data. */ +#define OPD_F_OD_LSB 5 +#define OPD_F_NO_ZR 0x00000080 /* ZR index not allowed. */ static inline bfd_boolean operand_has_inserter (const aarch64_operand *operand) @@ -186,6 +220,13 @@ operand_maybe_stack_pointer (const aarch64_operand *operand) return (operand->flags & OPD_F_MAYBE_SP) ? TRUE : FALSE; } +/* Return the value of the operand-specific data field (OPD_F_OD_MASK). */ +static inline unsigned int +get_operand_specific_data (const aarch64_operand *operand) +{ + return (operand->flags & OPD_F_OD_MASK) >> OPD_F_OD_LSB; +} + /* Return the total width of the operand *OPERAND. */ static inline unsigned get_operand_fields_width (const aarch64_operand *operand) @@ -296,6 +337,9 @@ extract_field (enum aarch64_field_kind kind, aarch64_insn code, { return extract_field_2 (&fields[kind], code, mask); } + +extern aarch64_insn +extract_fields (aarch64_insn code, aarch64_insn mask, ...); /* Inline functions selecting operand to do the encoding/decoding for a certain instruction bit-field. */