X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=opcodes%2Faarch64-opc.h;h=e0d4f5bae259c1495a995c0d62dfaec18f31db8c;hb=29298bf66f62f2f6c1efb0685623fbc29dfade90;hp=068649353bce4a00afa5987f2cba8060cceb7976;hpb=a68f4cd235a36776d3d9fea7291163b8d8e35869;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/aarch64-opc.h b/opcodes/aarch64-opc.h index 068649353b..e0d4f5bae2 100644 --- a/opcodes/aarch64-opc.h +++ b/opcodes/aarch64-opc.h @@ -1,5 +1,5 @@ /* aarch64-opc.h -- Header file for aarch64-opc.c and aarch64-opc-2.c. - Copyright (C) 2012-2018 Free Software Foundation, Inc. + Copyright (C) 2012-2019 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -70,6 +70,7 @@ enum aarch64_field_kind FLD_imm6_2, FLD_imm4, FLD_imm4_2, + FLD_imm4_3, FLD_imm5, FLD_imm7, FLD_imm8, @@ -120,6 +121,9 @@ enum aarch64_field_kind FLD_SVE_Zt, FLD_SVE_i1, FLD_SVE_i3h, + FLD_SVE_i3l, + FLD_SVE_i3h2, + FLD_SVE_i2h, FLD_SVE_imm3, FLD_SVE_imm4, FLD_SVE_imm5, @@ -135,7 +139,10 @@ enum aarch64_field_kind FLD_SVE_prfop, FLD_SVE_rot1, FLD_SVE_rot2, + FLD_SVE_rot3, FLD_SVE_sz, + FLD_SVE_size, + FLD_SVE_sz2, FLD_SVE_tsz, FLD_SVE_tszh, FLD_SVE_tszl_8, @@ -145,7 +152,8 @@ enum aarch64_field_kind FLD_rotate1, FLD_rotate2, FLD_rotate3, - FLD_SM3_imm2 + FLD_SM3_imm2, + FLD_sz }; /* Field description. */ @@ -199,6 +207,10 @@ verify_constraints (const struct aarch64_inst *, const aarch64_insn, bfd_vma, #define OPD_F_OD_MASK 0x000000e0 /* Operand-dependent data. */ #define OPD_F_OD_LSB 5 #define OPD_F_NO_ZR 0x00000100 /* ZR index not allowed. */ +#define OPD_F_SHIFT_BY_4 0x00000200 /* Need to left shift the field + value by 4 to get the value + of an immediate operand. */ + /* Register flags. */ @@ -220,6 +232,14 @@ verify_constraints (const struct aarch64_inst *, const aarch64_insn, bfd_vma, #define F_REG_WRITE (1 << 4) /* Register can only be written to but not read from. */ +/* HINT operand flags. */ +#define HINT_OPD_F_NOPRINT (1 << 0) /* Should not be printed. */ + +/* Encode 7-bit HINT #imm in the lower 8 bits. Use higher bits for flags. */ +#define HINT_ENCODE(flag, val) ((flag << 8) | val) +#define HINT_FLAG(val) (val >> 8) +#define HINT_VAL(val) (val & 0xff) + static inline bfd_boolean operand_has_inserter (const aarch64_operand *operand) { @@ -244,6 +264,12 @@ operand_need_shift_by_two (const aarch64_operand *operand) return (operand->flags & OPD_F_SHIFT_BY_2) ? TRUE : FALSE; } +static inline bfd_boolean +operand_need_shift_by_four (const aarch64_operand *operand) +{ + return (operand->flags & OPD_F_SHIFT_BY_4) ? TRUE : FALSE; +} + static inline bfd_boolean operand_maybe_stack_pointer (const aarch64_operand *operand) { @@ -459,7 +485,7 @@ enum aarch64_modifier_kind aarch64_get_operand_modifier_from_value (aarch64_insn, bfd_boolean); -bfd_boolean aarch64_wide_constant_p (int64_t, int, unsigned int *); +bfd_boolean aarch64_wide_constant_p (uint64_t, int, unsigned int *); bfd_boolean aarch64_logical_immediate_p (uint64_t, int, aarch64_insn *); int aarch64_shrink_expanded_imm8 (uint64_t);