Commit 539bfea3 authored by Athira Rajeev's avatar Athira Rajeev Committed by Arnaldo Carvalho de Melo
Browse files

perf annotate: Add more instructions for instruction tracking



Add few more instructions and use opcode as search key
to find if it is supported by the architecture.

The added ones are: addi, addic, addic., addis, subfic and mulli

Reviewed-by: default avatarKajol Jain <kjain@linux.ibm.com>
Reviewed-by: default avatarNamhyung Kim <namhyung@kernel.org>
Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
Tested-by: default avatarKajol Jain <kjain@linux.ibm.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Akanksha J N <akanksha@linux.ibm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Segher Boessenkool <segher@kernel.crashing.org>
Link: https://lore.kernel.org/lkml/20240718084358.72242-11-atrajeev@linux.vnet.ibm.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent cd0b6f67
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -172,6 +172,14 @@ static struct insn_offset arithmetic_ins_op_31[] = {
	{ .name = "DIV_W_XO_FORM",	.value = 491, },
};

static struct insn_offset arithmetic_two_ops[] = {
	{ .name = "mulli",      .value = 7, },
	{ .name = "subfic",     .value = 8, },
	{ .name = "addic",      .value = 12, },
	{ .name = "addic.",     .value = 13, },
	{ .name = "addi",       .value = 14, },
	{ .name = "addis",      .value = 15, },
};

static int cmp_offset(const void *a, const void *b)
{
@@ -212,6 +220,12 @@ static struct ins_ops *check_ppc_insn(u32 raw_insn)
			if (PPC_21_30(raw_insn) == 444)
				return &arithmetic_ops;
		}
	} else {
		mem_insns_31_opcode.value = opcode;
		ret = bsearch(&mem_insns_31_opcode, arithmetic_two_ops, ARRAY_SIZE(arithmetic_two_ops),
				sizeof(arithmetic_two_ops[0]), cmp_offset);
		if (ret != NULL)
			return &arithmetic_ops;
	}

	return NULL;