1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
3
4 #include <linux/compiler.h>
5
csky__associate_ins_ops(struct arch * arch,const char * name)6 static struct ins_ops *csky__associate_ins_ops(struct arch *arch,
7 const char *name)
8 {
9 struct ins_ops *ops = NULL;
10
11 /* catch all kind of jumps */
12 if (!strcmp(name, "bt") ||
13 !strcmp(name, "bf") ||
14 !strcmp(name, "bez") ||
15 !strcmp(name, "bnez") ||
16 !strcmp(name, "bnezad") ||
17 !strcmp(name, "bhsz") ||
18 !strcmp(name, "bhz") ||
19 !strcmp(name, "blsz") ||
20 !strcmp(name, "blz") ||
21 !strcmp(name, "br") ||
22 !strcmp(name, "jmpi") ||
23 !strcmp(name, "jmp"))
24 ops = &jump_ops;
25
26 /* catch function call */
27 if (!strcmp(name, "bsr") ||
28 !strcmp(name, "jsri") ||
29 !strcmp(name, "jsr"))
30 ops = &call_ops;
31
32 /* catch function return */
33 if (!strcmp(name, "rts"))
34 ops = &ret_ops;
35
36 if (ops)
37 arch__associate_ins_ops(arch, name, ops);
38 return ops;
39 }
40
csky__annotate_init(struct arch * arch,char * cpuid __maybe_unused)41 static int csky__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
42 {
43 arch->initialized = true;
44 arch->objdump.comment_char = '/';
45 arch->associate_instruction_ops = csky__associate_ins_ops;
46
47 return 0;
48 }
49