X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=opcodes%2Faarch64-opc.h;h=91c78f433e9a55930fabae4e43289a41294fbb02;hb=e23eba971dd409b999dd83d8df0f842680c1c642;hp=cc3dbefd6315398945f5d28c2d33763ae9b01487;hpb=f11ad6bc0fc44b94c6970115bb6984b497b967e7;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/aarch64-opc.h b/opcodes/aarch64-opc.h index cc3dbefd63..91c78f433e 100644 --- a/opcodes/aarch64-opc.h +++ b/opcodes/aarch64-opc.h @@ -91,6 +91,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 +103,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,7 +115,27 @@ 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, }; /* Field description. */ @@ -153,6 +182,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) @@ -184,6 +216,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) @@ -294,6 +333,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. */