return 0;
}
-const struct ins_ops loongarch_call_ops = {
+static const struct ins_ops loongarch_call_ops = {
.parse = loongarch_call__parse,
.scnprintf = call__scnprintf,
+ .is_call = true,
};
static int loongarch_jump__parse(const struct arch *arch, struct ins_operands *ops,
return 0;
}
-const struct ins_ops loongarch_jump_ops = {
+static const struct ins_ops loongarch_jump_ops = {
.parse = loongarch_jump__parse,
.scnprintf = jump__scnprintf,
+ .is_jump = true,
};
static
return 0;
}
-const struct ins_ops s390_call_ops = {
+static const struct ins_ops s390_call_ops = {
.parse = s390_call__parse,
.scnprintf = call__scnprintf,
+ .is_call = true,
};
static int s390_mov__parse(const struct arch *arch __maybe_unused,
const struct ins_ops call_ops = {
.parse = call__parse,
.scnprintf = call__scnprintf,
+ .is_call = true,
};
bool ins__is_call(const struct ins *ins)
{
- return ins->ops == &call_ops || ins->ops == &s390_call_ops || ins->ops == &loongarch_call_ops;
+ return ins->ops && ins->ops->is_call;
}
/*
.free = jump__delete,
.parse = jump__parse,
.scnprintf = jump__scnprintf,
+ .is_jump = true,
};
bool ins__is_jump(const struct ins *ins)
{
- return ins->ops == &jump_ops || ins->ops == &loongarch_jump_ops;
+ return ins->ops && ins->ops->is_jump;
}
static int comment__symbol(char *raw, char *comment, u64 *addrp, char **namep)
struct disasm_line *dl);
int (*scnprintf)(const struct ins *ins, char *bf, size_t size,
struct ins_operands *ops, int max_ins_name);
+ bool is_jump;
+ bool is_call;
};
struct annotate_args {
bool ins__is_ret(const struct ins *ins);
bool ins__is_lock(const struct ins *ins);
-extern const struct ins_ops s390_call_ops;
-extern const struct ins_ops loongarch_call_ops;
-extern const struct ins_ops loongarch_jump_ops;
const struct ins_ops *check_ppc_insn(struct disasm_line *dl);
struct disasm_line *disasm_line__new(struct annotate_args *args);