summaryrefslogtreecommitdiff
path: root/tools/perf/arch/loongarch/annotate
diff options
context:
space:
mode:
authorHuacai Chen <chenhuacai@loongson.cn>2023-05-01 12:19:59 +0300
committerHuacai Chen <chenhuacai@loongson.cn>2023-05-01 12:19:59 +0300
commit2fa5ebe3bc4e31e07a99196455498472417842f2 (patch)
tree671c8b1d5b5c3e9f54b61b2bfb62e7f4ed26a7f9 /tools/perf/arch/loongarch/annotate
parent22f367a689ceceb08d9ce6a65c43c9640f5cb935 (diff)
downloadlinux-2fa5ebe3bc4e31e07a99196455498472417842f2.tar.xz
tools/perf: Add basic support for LoongArch
Add basic support for LoongArch, which is very similar to the MIPS version. Signed-off-by: Ming Wang <wangming01@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'tools/perf/arch/loongarch/annotate')
-rw-r--r--tools/perf/arch/loongarch/annotate/instructions.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/tools/perf/arch/loongarch/annotate/instructions.c b/tools/perf/arch/loongarch/annotate/instructions.c
new file mode 100644
index 000000000000..ab21bf122135
--- /dev/null
+++ b/tools/perf/arch/loongarch/annotate/instructions.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Perf annotate functions.
+ *
+ * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
+ */
+
+static
+struct ins_ops *loongarch__associate_ins_ops(struct arch *arch, const char *name)
+{
+ struct ins_ops *ops = NULL;
+
+ if (!strncmp(name, "beqz", 4) ||
+ !strncmp(name, "bnez", 4) ||
+ !strncmp(name, "beq", 3) ||
+ !strncmp(name, "bne", 3) ||
+ !strncmp(name, "blt", 3) ||
+ !strncmp(name, "bge", 3) ||
+ !strncmp(name, "bltu", 4) ||
+ !strncmp(name, "bgeu", 4) ||
+ !strncmp(name, "bl", 2))
+ ops = &call_ops;
+ else if (!strncmp(name, "jirl", 4))
+ ops = &ret_ops;
+ else if (name[0] == 'b')
+ ops = &jump_ops;
+ else
+ return NULL;
+
+ arch__associate_ins_ops(arch, name, ops);
+
+ return ops;
+}
+
+static
+int loongarch__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
+{
+ if (!arch->initialized) {
+ arch->associate_instruction_ops = loongarch__associate_ins_ops;
+ arch->initialized = true;
+ arch->objdump.comment_char = '#';
+ }
+
+ return 0;
+}