Definition at line 53461 of file hexagon_disas.c.
53467 for (; tpl->
id; tpl++) {
53476 hi->instruction = tpl->
id;
53477 hi->opcode = hi_u32;
53484 size_t syntax_cur = 0;
53485 size_t syntax_len = strlen(tpl->
syntax);
53495 if (
op->syntax > syntax_cur &&
op->syntax <= syntax_len) {
53497 syntax_cur =
op->syntax;
53501 hi->ops[
i].attr = 0;
53507 hi->ops[
i].shift =
op->imm_scale;
53508 if (
op->imm_scale) {
53514 if (
hi->ops[
i].op.imm & (1ull <<
shift)) {
53526 if (sign_nums && ((
st32)
hi->ops[
i].op.imm) < 0) {
53527 char tmp[28] = { 0 };
53541 hi->ops[
i].op.imm = -1;
53558 int regidx =
hi->ops[
i].op.reg;
53571 if (syntax_len > syntax_cur) {
53575 snprintf(
hi->mnem,
sizeof(
hi->mnem),
"%s%s%s",
hi->pkt_info.mnem_prefix,
hi->mnem_infix,
hi->pkt_info.mnem_postfix);
53578 hi->ana_op.addr =
hi->addr;
53579 hi->ana_op.id =
hi->instruction;
53580 hi->ana_op.size = 4;
53581 hi->ana_op.cond = tpl->
cond;
53584 if (jmp_target_imm_op_index >= 0) {
53588 hi->ana_op.jump = pkt->
pkt_addr + (
st32)
hi->ops[jmp_target_imm_op_index].op.imm;
53590 hi->ana_op.fail =
hi->ana_op.addr + 4;
53604 hi->ana_op.val =
hi->ana_op.jump;
53605 hi->ana_op.analysis_vals[
i].imm =
hi->ana_op.jump;
53609 hi->ana_op.analysis_vals[0].plugin_specific =
hi->ops[0].op.reg;
53611 hi->ana_op.analysis_vals[
i].imm =
hi->ops[
i].op.imm;
static RZ_NULLABLE RzILOpBitVector * shift(RzILOpBitVector *val, RZ_NULLABLE RzILOpBool **carry_out, arm_shifter type, RZ_OWN RzILOpBitVector *dist)
RZ_API bool rz_config_get_b(RzConfig *cfg, RZ_NONNULL const char *name)
char * hex_get_reg_in_class(HexRegClass cls, int opcode_reg, bool get_alias)
int resolve_n_register(const int reg_num, const ut32 addr, const HexPkt *p)
Resolves the 3 bit value of an Nt.new reg to the general register of the producer.
#define HEX_PARSE_BITS_MASK
RZ_API void hex_extend_op(HexState *state, RZ_INOUT HexOp *op, const bool set_new_extender, const ut32 addr)
Applies the constant extender to the immediate value in op.
static int get_jmp_target_imm_op_index(const HexInsnTemplate *tpl)
static ut32 hex_op_masks_extract(const HexOpMask *masks, ut32 val, RZ_OUT ut32 *bits_total)
@ RZ_ANALYSIS_OP_PREFIX_HWLOOP_END
@ RZ_ANALYSIS_OP_TYPE_CJMP
#define rz_warn_if_reached()
#define rz_warn_if_fail(expr)
RZ_API void rz_hex_ut2st_str(const ut32 in, RZ_INOUT char *out, const int len)
Takes an unsigned 32bit integer with MSB set to 1 and returns the signed integer in hex format as str...
RZ_API char * rz_strbuf_get(RzStrBuf *sb)
RZ_API bool rz_strbuf_append(RzStrBuf *sb, const char *s)
RZ_API bool rz_strbuf_appendf(RzStrBuf *sb, const char *fmt,...) RZ_PRINTF_CHECK(2
RZ_API void rz_strbuf_init(RzStrBuf *sb)
RZ_API bool rz_strbuf_append_n(RzStrBuf *sb, const char *s, size_t l)
struct HexInsnTemplate::@69 encoding
if(dbg->bits==RZ_SYS_BITS_64)
References addr, HexInsnTemplate::cond, HexInsnTemplate::encoding, HexInsnTemplate::flags, get_jmp_target_imm_op_index(), h, hex_extend_op(), hex_get_reg_in_class(), HEX_INS_A4_EXT, HEX_INS_J2_JUMPR, HEX_INSN_TEMPLATE_FLAG_CALL, HEX_INSN_TEMPLATE_FLAG_LOOP_0, HEX_INSN_TEMPLATE_FLAG_LOOP_1, HEX_INSN_TEMPLATE_FLAG_LOOP_BEGIN, HEX_INSN_TEMPLATE_FLAG_PREDICATED, HEX_MAX_OPERANDS, HEX_OP_IMM_SCALED, hex_op_masks_extract(), HEX_OP_REG_OUT, HEX_OP_REG_PAIR, HEX_OP_REG_QUADRUPLE, HEX_OP_TEMPLATE_FLAG_IMM_DOUBLE_HASH, HEX_OP_TEMPLATE_FLAG_IMM_EXTENDABLE, HEX_OP_TEMPLATE_FLAG_IMM_PC_RELATIVE, HEX_OP_TEMPLATE_FLAG_IMM_SIGNED, HEX_OP_TEMPLATE_FLAG_REG_N_REG, HEX_OP_TEMPLATE_FLAG_REG_OUT, HEX_OP_TEMPLATE_FLAG_REG_PAIR, HEX_OP_TEMPLATE_FLAG_REG_QUADRUPLE, HEX_OP_TEMPLATE_TYPE_IMM, HEX_OP_TEMPLATE_TYPE_IMM_CONST, HEX_OP_TEMPLATE_TYPE_MASK, HEX_OP_TEMPLATE_TYPE_NONE, HEX_OP_TEMPLATE_TYPE_REG, HEX_OP_TYPE_IMM, HEX_OP_TYPE_REG, HEX_PARSE_BITS_MASK, hi(), HexPkt::hw_loop0_addr, HexPkt::hw_loop1_addr, i, HexInsnTemplate::id, if(), HexPkt::is_eob, HexInsnTemplate::mask, NULL, HexInsnTemplate::op, HexInsnTemplate::ops, PFMT32x, HexPkt::pkt_addr, HexInsnTemplate::pred, resolve_n_register(), RZ_ANALYSIS_OP_PREFIX_HWLOOP_END, RZ_ANALYSIS_OP_TYPE_CJMP, RZ_ARRAY_SIZE, rz_config_get_b(), rz_hex_ut2st_str(), RZ_MIN, rz_strbuf_append(), rz_strbuf_append_n(), rz_strbuf_appendf(), rz_strbuf_get(), rz_strbuf_init(), rz_warn_if_fail, rz_warn_if_reached, sb, shift(), snprintf, st32, HexInsnTemplate::syntax, autogen_x86imm::tmp, HexInsnTemplate::type, type, and UT64_MAX.
Referenced by hexagon_disasm_instruction().