26 #include "libiberty.h"
96 fprintf (stderr,
_(
"unrecognised disassembler option: %s"),
option);
102 const char *option_end;
118 while (*option_end !=
',' && *option_end !=
'\0')
177 kind =
self->fields[
i];
254 return qualifiers[
i];
279 info->reg.regno = inst->operands[
info->idx - 1].reg.regno + 1;
314 if (inst->opcode->iclass ==
asisdone
315 || inst->opcode->iclass ==
asimdins)
340 while (++
pos <= 3 && (
value & 0x1) == 0)
352 switch (
info->qualifier)
357 info->reglane.regno &= 0x1f;
363 else if (inst->opcode->iclass ==
cryptosm3)
375 switch (
info->qualifier)
383 info->reglane.regno &= 0xf;
407 if (
info->reglane.index & 1)
409 info->reglane.index /= 2;
442 unsigned is_reserved;
444 unsigned num_elements;
466 if (expected_num != data[
value].num_elements || data[
value].is_reserved)
468 info->reglist.num_regs = data[
value].num_regs;
491 assert (
info->reglist.num_regs >= 1 &&
info->reglist.num_regs <= 4);
495 info->reglist.num_regs = 2;
524 info->reglist.index = QSsize;
532 info->reglist.index = QSsize >> 1;
535 if ((QSsize >> 1) & 0x1)
538 if ((QSsize & 0x1) == 0)
542 info->reglist.index = QSsize >> 2;
551 info->reglist.index = QSsize >> 3;
558 info->reglist.has_index = 1;
559 info->reglist.num_regs = 0;
563 assert (
info->reglist.num_regs >= 1 &&
info->reglist.num_regs <= 4);
588 while (--
pos >= 0 && (immh & 0x8) == 0)
647 case 0:
imm = 8;
break;
648 case 1:
imm = 16;
break;
649 case 2:
imm = 32;
break;
650 default:
return FALSE;
722 unsigned abcdefgh =
imm;
723 for (
imm = 0ull,
i = 0;
i < 8;
i++)
724 if (((abcdefgh >>
i) & 0x1) != 0)
725 imm |= 0xffull << (8 *
i);
731 switch (
info->qualifier)
785 info->imm.value = rot * 180 + 90;
798 info->imm.value = rot * 90;
855 mask = 0xffffffffffffffffull;
860 if (
S >= 0x00 &&
S <= 0x1f) { simd_size = 32; }
861 else if (
S >= 0x20 &&
S <= 0x2f) { simd_size = 16;
S &= 0xf; }
862 else if (
S >= 0x30 &&
S <= 0x37) { simd_size = 8;
S &= 0x7; }
863 else if (
S >= 0x38 &&
S <= 0x3b) { simd_size = 4;
S &= 0x3; }
864 else if (
S >= 0x3c &&
S <= 0x3d) { simd_size = 2;
S &= 0x1; }
869 case 0x00 ... 0x1f: simd_size = 32;
break;
870 case 0x20 ... 0x2f: simd_size = 16;
S &= 0xf;
break;
871 case 0x30 ... 0x37: simd_size = 8;
S &= 0x7;
break;
872 case 0x38 ... 0x3b: simd_size = 4;
S &= 0x3;
break;
873 case 0x3c ... 0x3d: simd_size = 2;
S &= 0x1;
break;
874 default:
return FALSE;
877 mask = (1ull << simd_size) - 1;
882 if (simd_size > esize * 8)
886 if (
S == simd_size - 1)
890 imm = (1ull << (
S + 1)) - 1;
908 default:
assert (0);
return 0;
911 *result =
imm & ~((
uint64_t) -1 << (esize * 4) << (esize * 4));
971 default:
return FALSE;
973 info->qualifier = qualifier;
1017 info->addr.writeback = 1;
1018 info->addr.preind = 1;
1039 info->shifter.kind =
1049 info->shifter.amount = 0;
1050 info->shifter.amount_present = 0;
1062 info->shifter.amount_present = 1;
1090 info->addr.writeback = 0;
1094 info->addr.writeback = 1;
1096 info->addr.preind = 1;
1098 info->addr.postind = 1;
1137 info->addr.writeback = 1;
1138 info->addr.preind = 1;
1159 if (
info->addr.offset.regno == 31)
1163 info->addr.offset.imm = (is_ld1r ? 1
1172 info->addr.offset.is_reg = 1;
1173 info->addr.writeback = 1;
1203 info->sysreg.flags = 0;
1263 for (
i = 0; sysins_ops[
i].
name;
i++)
1266 info->sysins_op = sysins_ops +
i;
1267 DEBUG_TRACE (
"%s found value: %x, has_xt: %d, i: %d.",
1268 info->sysins_op->name,
1269 (
unsigned)
info->sysins_op->value,
1316 unsigned hint_number;
1348 info->shifter.kind =
1354 info->shifter.operator_present = 1;
1382 info->shifter.kind =
1393 info->shifter.operator_present = 1;
1414 info->shifter.amount = 1;
1415 info->shifter.operator_present = (
info->addr.offset.imm != 0);
1529 if (index_regno == 31 && (self->flags &
OPD_F_NO_ZR) != 0)
1533 info->addr.offset.regno = index_regno;
1539 info->shifter.operator_present = (
info->shifter.amount != 0);
1540 info->shifter.amount_present = (
info->shifter.amount != 0);
1564 info->shifter.operator_present =
TRUE;
1565 info->shifter.amount_present = (
info->shifter.amount != 0);
1595 info->shifter.kind = kind;
1598 ||
info->shifter.amount != 0);
1599 info->shifter.amount_present = (
info->shifter.amount != 0);
1645 info->shifter.amount = 0;
1646 if (
info->imm.value & 0x100)
1650 info->shifter.amount = 8;
1654 info->shifter.operator_present = (
info->shifter.amount != 0);
1655 info->shifter.amount_present = (
info->shifter.amount != 0);
1691 info->imm.value = 0x3f800000;
1693 info->imm.value = 0x3f000000;
1707 info->imm.value = 0x40000000;
1709 info->imm.value = 0x3f000000;
1723 info->imm.value = 0x3f800000;
1725 info->imm.value = 0x0;
1744 if ((
val & 31) == 0)
1746 while ((
val & 1) == 0)
1748 info->reglane.index =
val / 2;
1808 info->shifter.amount =
val + 1;
1809 info->shifter.operator_present = (
val != 0);
1810 info->shifter.amount_present = (
val != 0);
1831 ||
info->imm.value == 0)
1845 ||
info->imm.value == 0)
1887 return candidates[
i];
1953 #ifdef DEBUG_AARCH64
2199 while ((
val & 0x1) == 0 && ++
num <= 3)
2416 if ((immr == 0 && imms ==
val) || immr == imms + 1)
2656 #ifdef DEBUG_AARCH64
2660 printf (
"#### LIST orderd: ");
2749 while ((
i & 1) == 0)
2758 if ((inst->
value & 0x20600) == 0x600)
2760 else if ((inst->
value & 0x20400) == 0x400)
2762 else if ((inst->
value & 0x20000) == 0)
2964 #ifdef DEBUG_AARCH64
2972 aarch64_verbose (
" %s",
tmp->name);
2983 while (opcode !=
NULL)
3001 int i, pcrel_p, num_printed;
3017 &
info->target, ¬es);
3021 (*
info->fprintf_func) (
info->stream,
"%s",
3022 num_printed++ == 0 ?
" " :
", ");
3032 (*
info->fprintf_func) (
info->stream,
" ; note: %s", notes);
3080 unsigned int i, num_conds;
3085 (*
info->fprintf_func) (
info->stream,
"%s %s.%s",
3086 i == 1 ?
" //" :
",",
3110 static const char *err_msg[6] =
3115 [-
ERR_NYI] =
"not-yet-implemented"
3121 info->insn_info_valid = 1;
3122 info->branch_delay_insns = 0;
3123 info->data_size = 0;
3137 if (((word >> 21) & 0x3ff) == 1)
3152 (*
info->fprintf_func) (
info->stream,
"%s", err_msg[-ret]);
3179 || (
name[1] !=
'x' &&
name[1] !=
'd')
3180 || (
name[2] !=
'\0' &&
name[2] !=
'.'));
3191 switch (
info->bytes_per_chunk)
3194 info->fprintf_func (
info->stream,
".byte 0x%02x", word);
3197 info->fprintf_func (
info->stream,
".short 0x%04x", word);
3200 info->fprintf_func (
info->stream,
".word 0x%08x", word);
3235 && (
name[1] ==
'x' ||
name[1] ==
'd')
3236 && (
name[2] ==
'\0' ||
name[2] ==
'.'))
3256 unsigned int size = 4;
3260 if (
info->disassembler_options)
3275 if (
info->symtab_size != 0
3288 n =
info->symtab_pos + 1;
3293 for (;
n <
info->symtab_size;
n++)
3307 n =
info->symtab_pos;
3333 for (
n = last_sym + 1;
n <
info->symtab_size;
n++)
3355 info->display_endian =
info->endian;
3361 info->display_endian =
info->endian_code;
3375 (*printer) (
pc, data,
info, &errors);
3384 The following AARCH64 specific disassembler options are supported for use\n\
3385 with the -M switch (multiple options should be separated by commas):\n"));
3388 no-aliases Don't print instruction aliases.\n"));
3391 aliases Do print instruction aliases.\n"));
3394 no-notes Don't print instruction notes.\n"));
3397 notes Do print instruction notes.\n"));
3399 #ifdef DEBUG_AARCH64
3401 debug_dump Temp switch for debug trace.\n"));
const aarch64_opcode * aarch64_find_next_alias_opcode(const aarch64_opcode *opcode)
const aarch64_opcode * aarch64_find_next_opcode(const aarch64_opcode *opcode)
const aarch64_opcode * aarch64_find_alias_opcode(const aarch64_opcode *opcode)
bfd_boolean aarch64_extract_operand(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
const aarch64_opcode * aarch64_opcode_lookup(uint32_t word)
bfd_boolean aarch64_ext_sve_addr_ri_s4(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
int print_insn_aarch64(bfd_vma pc, struct disassemble_info *info)
static int convert_bfm_to_sr(aarch64_inst *inst)
bfd_boolean aarch64_ext_ft(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_prfop(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_shll_imm(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_addr_ri_u6(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
int aarch64_decode_insn(aarch64_insn insn, aarch64_inst *inst, bfd_boolean noaliases_p, aarch64_operand_error *errors)
static void parse_aarch64_dis_options(const char *options)
bfd_boolean aarch64_ext_addr_simm(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_imm_rotate2(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static bfd_boolean aarch64_opcode_decode(const aarch64_opcode *, const aarch64_insn, aarch64_inst *, int, aarch64_operand_error *errors)
bfd_boolean aarch64_ext_reg_shifted(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static aarch64_insn extract_all_fields(const aarch64_operand *self, aarch64_insn code)
bfd_boolean aarch64_ext_imm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static bfd_boolean aarch64_decode_variant_using_iclass(aarch64_inst *inst)
static void set_default_aarch64_dis_options(struct disassemble_info *info ATTRIBUTE_UNUSED)
bfd_boolean aarch64_symbol_is_valid(asymbol *sym, struct disassemble_info *info ATTRIBUTE_UNUSED)
static int get_sym_code_type(struct disassemble_info *info, int n, enum map_type *map_type)
bfd_boolean aarch64_ext_sve_limm_mov(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
bfd_boolean aarch64_ext_sve_scale(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
bfd_boolean aarch64_ext_fpimm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_to_alias(aarch64_inst *inst, const aarch64_opcode *alias)
static bfd_boolean aarch64_ext_sve_addr_zz(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, enum aarch64_modifier_kind kind)
bfd_boolean aarch64_ext_sve_shlimm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
static aarch64_opnd_qualifier_t get_expected_qualifier(const aarch64_inst *inst, int i)
bfd_boolean aarch64_ext_sysins_op(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_addr_ri_s9xvl(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_aimm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
bfd_boolean aarch64_ext_imm_half(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors)
bfd_boolean aarch64_ext_addr_regoff(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static void print_insn_data(bfd_vma pc ATTRIBUTE_UNUSED, uint32_t word, struct disassemble_info *info, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_extr_to_ror(aarch64_inst *inst)
bfd_boolean aarch64_ext_regno_pair(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code ATTRIBUTE_UNUSED, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_ubfm_to_lsl(aarch64_inst *inst)
static bfd_boolean aarch64_ext_sve_addr_reg_mul_vl(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, int64_t offset)
static int convert_from_csel(aarch64_inst *inst)
bfd_boolean aarch64_ext_sve_float_zero_one(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_aimm(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_bfm_to_bfc(aarch64_inst *inst)
static void print_mnemonic_name(const aarch64_inst *inst, struct disassemble_info *info)
static int decode_fcvt(aarch64_inst *inst)
bfd_boolean aarch64_ext_addr_offset(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_csinc_to_cset(aarch64_inst *inst)
bfd_boolean aarch64_ext_advsimd_imm_modified(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_addr_simple(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static bfd_boolean aarch64_ext_sve_addr_reg_imm(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, int64_t offset)
bfd_boolean aarch64_ext_advsimd_imm_shift(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_fbits(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_float_half_two(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sysreg(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_addr_zi_u5(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static enum map_type last_type
bfd_boolean aarch64_ext_simd_addr_post(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_asimm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
static int decode_asimd_fcvt(aarch64_inst *inst)
static int decode_asisd_fcvtxn(aarch64_inst *inst)
bfd_boolean aarch64_ext_inv_limm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
static int do_misc_decoding(aarch64_inst *inst)
bfd_boolean aarch64_ext_sve_addr_rz_xtw(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static enum aarch64_opnd_qualifier get_greg_qualifier_from_value(aarch64_insn value)
bfd_boolean aarch64_ext_reg_extended(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
aarch64_insn extract_fields(aarch64_insn code, aarch64_insn mask,...)
void print_aarch64_disassembler_options(FILE *stream)
bfd_boolean aarch64_ext_sve_addr_rr_lsl(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static void get_operand_possible_qualifiers(int idx, const aarch64_opnd_qualifier_seq_t *list, enum aarch64_opnd_qualifier *qualifiers)
static uint64_t get_top_bit(uint64_t value)
static void print_operands(bfd_vma pc, const aarch64_opcode *opcode, const aarch64_opnd_info *opnds, struct disassemble_info *info)
bfd_boolean aarch64_ext_reglane(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_float_half_one(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static void parse_aarch64_dis_option(const char *option, unsigned int len ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_addr_uimm12(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_index(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_regno(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static bfd_boolean decode_limm(uint32_t esize, aarch64_insn value, int64_t *result)
bfd_boolean aarch64_ext_sve_shrimm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors)
static int convert_movewide_to_mov(aarch64_inst *inst)
static bfd_boolean decode_sve_aimm(aarch64_opnd_info *info, int64_t value)
bfd_boolean aarch64_ext_sve_addr_zz_lsl(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int last_mapping_sym
bfd_boolean aarch64_ext_addr_simm10(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_cond(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_addr_zz_sxtw(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_reglist(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_movebitmask_to_mov(aarch64_inst *inst)
static int do_special_decoding(aarch64_inst *inst)
static void print_comment(const aarch64_inst *inst, struct disassemble_info *info)
static enum aarch64_opnd_qualifier get_qualifier_from_partial_encoding(aarch64_insn value, const enum aarch64_opnd_qualifier *candidates, aarch64_insn mask)
static int convert_bfm_to_bfx(aarch64_inst *inst)
static void print_insn_aarch64_word(bfd_vma pc, uint32_t word, struct disassemble_info *info, aarch64_operand_error *errors)
static enum aarch64_opnd_qualifier get_vreg_qualifier_from_value(aarch64_insn value)
bfd_boolean aarch64_ext_pstatefield(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_barrier(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_limm(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_regrt_sysins(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_hint(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int convert_bfm_to_bfi(aarch64_inst *inst)
static void remove_dot_suffix(char *name, const aarch64_inst *inst)
bfd_boolean aarch64_ext_ldst_elemlist(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_ldst_reglist_r(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static enum aarch64_opnd_qualifier get_sreg_qualifier_from_value(aarch64_insn value)
bfd_boolean aarch64_ext_sve_quad_index(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static int32_t sign_extend(aarch64_insn value, unsigned i)
static int convert_shll_to_xtl(aarch64_inst *inst)
bfd_boolean aarch64_ext_sve_addr_zz_uxtw(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
static void print_aarch64_insn(bfd_vma pc, const aarch64_inst *inst, struct disassemble_info *info)
static bfd_vma last_mapping_addr
static void determine_disassembling_preference(struct aarch64_inst *inst, aarch64_operand_error *errors)
static int convert_orr_to_mov(aarch64_inst *inst)
static void user_friendly_fixup(aarch64_inst *inst)
static int decode_sizeq(aarch64_inst *inst)
bfd_boolean aarch64_ext_sve_addr_ri_s4xvl(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_reglist(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_sve_addr_ri_s6xvl(const aarch64_operand *self, aarch64_opnd_info *info, aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_ldst_reglist(const aarch64_operand *self ATTRIBUTE_UNUSED, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
bfd_boolean aarch64_ext_imm_rotate1(const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED)
const struct aarch64_operand aarch64_operands[]
bfd_boolean aarch64_sve_dupm_mov_immediate_p(uint64_t uvalue, int esize)
void aarch64_print_operand(char *buf, size_t size, bfd_vma pc, const aarch64_opcode *opcode, const aarch64_opnd_info *opnds, int idx, int *pcrel_p, bfd_vma *address, char **notes ATTRIBUTE_UNUSED)
const aarch64_field fields[]
const aarch64_opcode * aarch64_replace_opcode(aarch64_inst *inst, const aarch64_opcode *opcode)
const aarch64_sys_ins_reg aarch64_sys_regs_ic[]
unsigned char aarch64_get_qualifier_esize(aarch64_opnd_qualifier_t qualifier)
const aarch64_sys_ins_reg aarch64_sys_regs_at[]
const struct aarch64_name_value_pair aarch64_prfops[32]
enum aarch64_operand_class aarch64_get_operand_class(enum aarch64_opnd type)
aarch64_insn aarch64_get_qualifier_standard_value(aarch64_opnd_qualifier_t qualifier)
int aarch64_num_of_operands(const aarch64_opcode *opcode)
const aarch64_sys_reg aarch64_pstatefields[]
const aarch64_sys_ins_reg aarch64_sys_regs_dc[]
bfd_boolean aarch64_wide_constant_p(int64_t value, int is32, unsigned int *shift_amount)
const aarch64_sys_ins_reg aarch64_sys_regs_tlbi[]
int aarch64_operand_index(const enum aarch64_opnd *operands, enum aarch64_opnd operand)
int aarch64_match_operands_constraint(aarch64_inst *inst, aarch64_operand_error *mismatch_detail)
enum aarch64_modifier_kind aarch64_get_operand_modifier_from_value(aarch64_insn value, bfd_boolean extend_p)
bfd_boolean aarch64_sys_ins_reg_has_xt(const aarch64_sys_ins_reg *sys_ins_reg)
const struct aarch64_name_value_pair aarch64_hint_options[]
const aarch64_cond * get_inverted_cond(const aarch64_cond *cond)
const char * aarch64_get_qualifier_name(aarch64_opnd_qualifier_t qualifier)
int aarch64_find_best_match(const aarch64_inst *inst, const aarch64_opnd_qualifier_seq_t *qualifiers_list, int stop_at, aarch64_opnd_qualifier_t *ret)
const aarch64_cond * get_cond_from_value(aarch64_insn value)
unsigned char aarch64_get_qualifier_nelem(aarch64_opnd_qualifier_t qualifier)
int aarch64_select_operand_for_sizeq_field_coding(const aarch64_opcode *opcode)
const struct aarch64_name_value_pair aarch64_barrier_options[16]
static int select_operand_for_fptype_field_coding(const aarch64_opcode *opcode)
static bfd_boolean operand_has_extractor(const aarch64_operand *operand)
static unsigned int get_logsz(unsigned int size)
static void copy_operand_info(aarch64_inst *inst, int dst, int src)
static aarch64_insn extract_field_2(const aarch64_field *field, aarch64_insn code, aarch64_insn mask)
static unsigned int get_operand_specific_data(const aarch64_operand *operand)
static int gen_sub_field(enum aarch64_field_kind kind, int lsb_rel, int width, aarch64_field *ret)
static int select_operand_for_scalar_size_field_coding(const aarch64_opcode *opcode)
static int select_operand_for_sf_field_coding(const aarch64_opcode *opcode)
static bfd_boolean operand_need_sign_extension(const aarch64_operand *operand)
static unsigned get_operand_fields_width(const aarch64_operand *operand)
static bfd_boolean operand_need_shift_by_two(const aarch64_operand *operand)
static void reset_operand_qualifier(aarch64_inst *inst, int idx)
static aarch64_insn extract_field(enum aarch64_field_kind kind, aarch64_insn code, aarch64_insn mask)
#define DEBUG_TRACE(M,...)
unsigned char aarch64_opnd_qualifier_t
static bfd_boolean pseudo_opcode_p(const aarch64_opcode *opcode)
@ AARCH64_OPND_QLF_imm_0_31
#define AARCH64_MAX_QLF_SEQ_NUM
@ AARCH64_OPND_CLASS_SYSTEM
@ AARCH64_OPND_CLASS_INT_REG
@ AARCH64_OPND_CLASS_SIMD_REG
static unsigned int get_opcode_dependent_value(const aarch64_opcode *opcode)
static bfd_boolean opcode_has_alias(const aarch64_opcode *opcode)
aarch64_opnd_qualifier_t aarch64_opnd_qualifier_seq_t[AARCH64_MAX_OPND_NUM]
#define AARCH64_MAX_OPND_NUM
static bfd_boolean alias_opcode_p(const aarch64_opcode *opcode)
@ AARCH64_OPND_SIMD_FPIMM
@ AARCH64_OPND_SYSREG_TLBI
static bfd_boolean opcode_has_special_coder(const aarch64_opcode *opcode)
static RZ_NULLABLE RzILOpBitVector * shift(RzILOpBitVector *val, RZ_NULLABLE RzILOpBool **carry_out, arm_shifter type, RZ_OWN RzILOpBitVector *dist)
static ut32 reg_bits(arm_reg reg)
RzBinInfo * info(RzBinFile *bf)
_Use_decl_annotations_ int __cdecl printf(const char *const _Format,...)
RZ_API const KEY_TYPE bool * found
return memset(p, 0, total)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
static void list(RzEgg *egg)
static static fork const void static count static fd const char const char static newpath char char char static envp time_t static t const char static mode static whence const char static dir time_t static t unsigned static seconds const char struct utimbuf static buf static inc static sig const char static mode static oldfd struct tms static buf static getgid static geteuid const char static filename static arg static mask struct ustat static ubuf static getppid static setsid static egid sigset_t static set struct timeval struct timezone static tz fd_set fd_set fd_set struct timeval static timeout const char char static bufsiz const char static swapflags void static offset const char static length static mode static who const char struct statfs static buf unsigned unsigned num
static const char struct stat static buf struct stat static buf static vhangup int options
static const char struct stat static buf struct stat static buf static vhangup int status
static void struct sockaddr socklen_t static fromlen static backlog static fork char char char static envp int struct rusage static rusage struct utsname static buf struct sembuf unsigned
assert(limit<=UINT32_MAX/2)
#define bfd_asymbol_name(x)
#define bfd_asymbol_flavour(x)
#define CONST_STRNEQ(STR1, STR2)
BFD_HOST_U_64_BIT bfd_vma
#define bfd_asymbol_value(x)
static bfd_uint64_t bfd_get_bits(const void *p, int bits, bfd_boolean big_p)
aarch64_opnd_info operands[AARCH64_MAX_OPND_NUM]
const aarch64_opcode * opcode
const aarch64_cond * cond
aarch64_opnd_qualifier_seq_t qualifiers_list[AARCH64_MAX_QLF_SEQ_NUM]
bfd_boolean(* verifier)(const struct aarch64_opcode *, const aarch64_insn)
enum aarch64_insn_class iclass
enum aarch64_opnd operands[AARCH64_MAX_OPND_NUM]
const aarch64_cond * cond
aarch64_opnd_qualifier_t qualifier
struct aarch64_opnd_info::@37 shifter
enum aarch64_modifier_kind kind
struct aarch64_opnd_info::@35::@38 reg
struct aarch64_opnd_info::@35::@41 imm
struct aarch64_opnd_info::@35::@40 reglist
Elf_Internal_Sym internal_elf_sym