Lines Matching refs:ops
45 struct ins_operands *ops, int max_ins_name);
47 struct ins_operands *ops, int max_ins_name);
87 static int arch__associate_ins_ops(struct arch* arch, const char *name, struct ins_ops *ops) in arch__associate_ins_ops() argument
100 ins->ops = ops; in arch__associate_ins_ops()
233 static void ins_ops__delete(struct ins_operands *ops) in ins_ops__delete() argument
235 if (ops == NULL) in ins_ops__delete()
237 zfree(&ops->source.raw); in ins_ops__delete()
238 zfree(&ops->source.name); in ins_ops__delete()
239 zfree(&ops->target.raw); in ins_ops__delete()
240 zfree(&ops->target.name); in ins_ops__delete()
244 struct ins_operands *ops, int max_ins_name) in ins__raw_scnprintf() argument
246 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->raw); in ins__raw_scnprintf()
250 struct ins_operands *ops, int max_ins_name) in ins__scnprintf() argument
252 if (ins->ops->scnprintf) in ins__scnprintf()
253 return ins->ops->scnprintf(ins, bf, size, ops, max_ins_name); in ins__scnprintf()
255 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in ins__scnprintf()
266 static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms, in call__parse() argument
275 ops->target.addr = strtoull(ops->raw, &endptr, 16); in call__parse()
292 ops->target.name = strdup(name); in call__parse()
295 if (ops->target.name == NULL) in call__parse()
298 target.addr = map__objdump_2mem(map, ops->target.addr); in call__parse()
301 map__rip_2objdump(target.ms.map, map__map_ip(target.ms.map, target.addr)) == ops->target.addr) in call__parse()
302 ops->target.sym = target.ms.sym; in call__parse()
314 ops->target.addr = strtoull(endptr, NULL, 16); in call__parse()
320 struct ins_operands *ops, int max_ins_name) in call__scnprintf() argument
322 if (ops->target.sym) in call__scnprintf()
323 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->target.sym->name); in call__scnprintf()
325 if (ops->target.addr == 0) in call__scnprintf()
326 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in call__scnprintf()
328 if (ops->target.name) in call__scnprintf()
329 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->target.name); in call__scnprintf()
331 return scnprintf(bf, size, "%-*s *%" PRIx64, max_ins_name, ins->name, ops->target.addr); in call__scnprintf()
341 return ins->ops == &call_ops || ins->ops == &s390_call_ops || ins->ops == &loongarch_call_ops; in ins__is_call()
351 static inline const char *validate_comma(const char *c, struct ins_operands *ops) in validate_comma() argument
353 if (ops->jump.raw_comment && c > ops->jump.raw_comment) in validate_comma()
356 if (ops->jump.raw_func_start && c > ops->jump.raw_func_start) in validate_comma()
362 static int jump__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms, in jump__parse() argument
370 const char *c = strchr(ops->raw, ','); in jump__parse()
373 ops->jump.raw_comment = strchr(ops->raw, arch->objdump.comment_char); in jump__parse()
374 ops->jump.raw_func_start = strchr(ops->raw, '<'); in jump__parse()
376 c = validate_comma(c, ops); in jump__parse()
394 ops->target.addr = strtoull(c, NULL, 16); in jump__parse()
395 if (!ops->target.addr) { in jump__parse()
397 c = validate_comma(c, ops); in jump__parse()
399 ops->target.addr = strtoull(c, NULL, 16); in jump__parse()
402 ops->target.addr = strtoull(ops->raw, NULL, 16); in jump__parse()
405 target.addr = map__objdump_2mem(map, ops->target.addr); in jump__parse()
409 ops->target.outside = target.addr < start || target.addr > end; in jump__parse()
430 map__rip_2objdump(target.ms.map, map__map_ip(target.ms.map, target.addr)) == ops->target.addr) in jump__parse()
431 ops->target.sym = target.ms.sym; in jump__parse()
433 if (!ops->target.outside) { in jump__parse()
434 ops->target.offset = target.addr - start; in jump__parse()
435 ops->target.offset_avail = true; in jump__parse()
437 ops->target.offset_avail = false; in jump__parse()
444 struct ins_operands *ops, int max_ins_name) in jump__scnprintf() argument
448 if (!ops->target.addr || ops->target.offset < 0) in jump__scnprintf()
449 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in jump__scnprintf()
451 if (ops->target.outside && ops->target.sym != NULL) in jump__scnprintf()
452 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->target.sym->name); in jump__scnprintf()
454 c = strchr(ops->raw, ','); in jump__scnprintf()
455 c = validate_comma(c, ops); in jump__scnprintf()
460 c2 = validate_comma(c2, ops); in jump__scnprintf()
472 ins->name, c ? c - ops->raw : 0, ops->raw, in jump__scnprintf()
473 ops->target.offset); in jump__scnprintf()
476 static void jump__delete(struct ins_operands *ops __maybe_unused) in jump__delete()
492 return ins->ops == &jump_ops || ins->ops == &loongarch_jump_ops; in ins__is_jump()
522 static int lock__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms, in lock__parse() argument
525 ops->locked.ops = zalloc(sizeof(*ops->locked.ops)); in lock__parse()
526 if (ops->locked.ops == NULL) in lock__parse()
529 if (disasm_line__parse(ops->raw, &ops->locked.ins.name, &ops->locked.ops->raw) < 0) in lock__parse()
532 ops->locked.ins.ops = ins__find(arch, ops->locked.ins.name, 0); in lock__parse()
534 if (ops->locked.ins.ops == NULL) in lock__parse()
537 if (ops->locked.ins.ops->parse && in lock__parse()
538 ops->locked.ins.ops->parse(arch, ops->locked.ops, ms, NULL) < 0) in lock__parse()
544 zfree(&ops->locked.ops); in lock__parse()
549 struct ins_operands *ops, int max_ins_name) in lock__scnprintf() argument
553 if (ops->locked.ins.ops == NULL) in lock__scnprintf()
554 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in lock__scnprintf()
557 return printed + ins__scnprintf(&ops->locked.ins, bf + printed, in lock__scnprintf()
558 size - printed, ops->locked.ops, max_ins_name); in lock__scnprintf()
561 static void lock__delete(struct ins_operands *ops) in lock__delete() argument
563 struct ins *ins = &ops->locked.ins; in lock__delete()
565 if (ins->ops && ins->ops->free) in lock__delete()
566 ins->ops->free(ops->locked.ops); in lock__delete()
568 ins_ops__delete(ops->locked.ops); in lock__delete()
570 zfree(&ops->locked.ops); in lock__delete()
571 zfree(&ops->locked.ins.name); in lock__delete()
572 zfree(&ops->target.raw); in lock__delete()
573 zfree(&ops->target.name); in lock__delete()
610 static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms __maybe_un… in mov__parse() argument
613 char *s = strchr(ops->raw, ','), *target, *comment, prev; in mov__parse()
624 if (strchr(ops->raw, '(')) { in mov__parse()
626 s = strchr(ops->raw, ')'); in mov__parse()
632 ops->source.raw = strdup(ops->raw); in mov__parse()
635 if (ops->source.raw == NULL) in mov__parse()
638 ops->source.multi_regs = check_multi_regs(arch, ops->source.raw); in mov__parse()
654 ops->target.raw = strdup(target); in mov__parse()
657 if (ops->target.raw == NULL) in mov__parse()
660 ops->target.multi_regs = check_multi_regs(arch, ops->target.raw); in mov__parse()
666 comment__symbol(ops->source.raw, comment + 1, &ops->source.addr, &ops->source.name); in mov__parse()
667 comment__symbol(ops->target.raw, comment + 1, &ops->target.addr, &ops->target.name); in mov__parse()
672 zfree(&ops->source.raw); in mov__parse()
677 struct ins_operands *ops, int max_ins_name) in mov__scnprintf() argument
680 ops->source.name ?: ops->source.raw, in mov__scnprintf()
681 ops->target.name ?: ops->target.raw); in mov__scnprintf()
696 struct ins_operands *ops, int max_ins_name) in arithmetic__scnprintf() argument
699 ops->raw); in arithmetic__scnprintf()
716 static int arithmetic__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, in arithmetic__parse() argument
721 ops->source.mem_ref = false; in arithmetic__parse()
725 ops->source.multi_regs = true; in arithmetic__parse()
728 ops->target.mem_ref = false; in arithmetic__parse()
729 ops->target.multi_regs = false; in arithmetic__parse()
740 struct ins_operands *ops, int max_ins_name) in load_store__scnprintf() argument
743 ops->raw); in load_store__scnprintf()
753 static int load_store__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, in load_store__parse() argument
756 ops->source.mem_ref = true; in load_store__parse()
757 ops->source.multi_regs = false; in load_store__parse()
760 ops->source.multi_regs = true; in load_store__parse()
762 ops->target.mem_ref = false; in load_store__parse()
763 ops->target.multi_regs = false; in load_store__parse()
773 static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map_symbol… in dec__parse() argument
778 target = s = ops->raw; in dec__parse()
785 ops->target.raw = strdup(target); in dec__parse()
788 if (ops->target.raw == NULL) in dec__parse()
796 comment__symbol(ops->target.raw, comment + 1, &ops->target.addr, &ops->target.name); in dec__parse()
802 struct ins_operands *ops, int max_ins_name) in dec__scnprintf() argument
805 ops->target.name ?: ops->target.raw); in dec__scnprintf()
814 struct ins_operands *ops __maybe_unused, int max_ins_name) in nop__scnprintf()
829 return ins->ops == &nop_ops; in ins__is_nop()
834 return ins->ops == &ret_ops; in ins__is_ret()
839 return ins->ops == &lock_ops; in ins__is_lock()
874 struct ins_ops *ops; in __ins__find() local
876 ops = check_ppc_insn(dl); in __ins__find()
877 if (ops) in __ins__find()
878 return ops; in __ins__find()
888 return ins->ops; in __ins__find()
907 return ins ? ins->ops : NULL; in __ins__find()
912 struct ins_ops *ops = __ins__find(arch, name, dl); in ins__find() local
914 if (!ops && arch->associate_instruction_ops) in ins__find()
915 ops = arch->associate_instruction_ops(arch, name); in ins__find()
917 return ops; in ins__find()
922 dl->ins.ops = ins__find(arch, dl->ins.name, dl); in disasm_line__init_ins()
924 if (!dl->ins.ops) in disasm_line__init_ins()
927 if (dl->ins.ops->parse && dl->ins.ops->parse(arch, &dl->ops, ms, dl) < 0) in disasm_line__init_ins()
928 dl->ins.ops = NULL; in disasm_line__init_ins()
975 char **rawp = &dl->ops.raw; in disasm_line__parse_powerpc()
1060 } else if (disasm_line__parse(dl->al.line, &dl->ins.name, &dl->ops.raw) < 0) in disasm_line__new()
1077 if (dl->ins.ops && dl->ins.ops->free) in disasm_line__free()
1078 dl->ins.ops->free(&dl->ops); in disasm_line__free()
1080 ins_ops__delete(&dl->ops); in disasm_line__free()
1088 if (raw || !dl->ins.ops) in disasm_line__scnprintf()
1089 return scnprintf(bf, size, "%-*s %s", max_ins_name, dl->ins.name, dl->ops.raw); in disasm_line__scnprintf()
1091 return ins__scnprintf(&dl->ins, bf, size, &dl->ops, max_ins_name); in disasm_line__scnprintf()
1159 dl->ops.target.offset = dl->ops.target.addr - in symbol__parse_objdump_line()
1161 dl->ops.target.offset_avail = true; in symbol__parse_objdump_line()
1165 if (dl->ins.ops && ins__is_call(&dl->ins) && !dl->ops.target.sym) { in symbol__parse_objdump_line()
1167 .addr = dl->ops.target.addr, in symbol__parse_objdump_line()
1173 dl->ops.target.sym = target.ms.sym; in symbol__parse_objdump_line()
1189 if (dl->ins.ops) { in delete_last_nop()