Merge tag 'fs.close_range.v5.15' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / arch / csky / kernel / probes / simulate-insn.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2
3 #ifndef __CSKY_KERNEL_PROBES_SIMULATE_INSN_H
4 #define __CSKY_KERNEL_PROBES_SIMULATE_INSN_H
5
6 #define __CSKY_INSN_FUNCS(name, mask, val)                              \
7 static __always_inline bool csky_insn_is_##name(probe_opcode_t code)    \
8 {                                                                       \
9         BUILD_BUG_ON(~(mask) & (val));                                  \
10         return (code & (mask)) == (val);                                \
11 }                                                                       \
12 void simulate_##name(u32 opcode, long addr, struct pt_regs *regs);
13
14 #define CSKY_INSN_SET_SIMULATE(name, code)                              \
15         do {                                                            \
16                 if (csky_insn_is_##name(code)) {                        \
17                         api->handler = simulate_##name;                 \
18                         return INSN_GOOD_NO_SLOT;                       \
19                 }                                                       \
20         } while (0)
21
22 __CSKY_INSN_FUNCS(br16,         0xfc00, 0x0400)
23 __CSKY_INSN_FUNCS(bt16,         0xfc00, 0x0800)
24 __CSKY_INSN_FUNCS(bf16,         0xfc00, 0x0c00)
25 __CSKY_INSN_FUNCS(jmp16,        0xffc3, 0x7800)
26 __CSKY_INSN_FUNCS(jsr16,        0xffc3, 0x7801)
27 __CSKY_INSN_FUNCS(lrw16,        0xfc00, 0x1000)
28 __CSKY_INSN_FUNCS(pop16,        0xffe0, 0x1480)
29
30 __CSKY_INSN_FUNCS(br32,         0x0000ffff, 0x0000e800)
31 __CSKY_INSN_FUNCS(bt32,         0x0000ffff, 0x0000e860)
32 __CSKY_INSN_FUNCS(bf32,         0x0000ffff, 0x0000e840)
33 __CSKY_INSN_FUNCS(jmp32,        0xffffffe0, 0x0000e8c0)
34 __CSKY_INSN_FUNCS(jsr32,        0xffffffe0, 0x0000e8e0)
35 __CSKY_INSN_FUNCS(lrw32,        0x0000ffe0, 0x0000ea80)
36 __CSKY_INSN_FUNCS(pop32,        0xfe00ffff, 0x0000ebc0)
37
38 __CSKY_INSN_FUNCS(bez32,        0x0000ffe0, 0x0000e900)
39 __CSKY_INSN_FUNCS(bnez32,       0x0000ffe0, 0x0000e920)
40 __CSKY_INSN_FUNCS(bnezad32,     0x0000ffe0, 0x0000e820)
41 __CSKY_INSN_FUNCS(bhsz32,       0x0000ffe0, 0x0000e9a0)
42 __CSKY_INSN_FUNCS(bhz32,        0x0000ffe0, 0x0000e940)
43 __CSKY_INSN_FUNCS(blsz32,       0x0000ffe0, 0x0000e960)
44 __CSKY_INSN_FUNCS(blz32,        0x0000ffe0, 0x0000e980)
45 __CSKY_INSN_FUNCS(bsr32,        0x0000fc00, 0x0000e000)
46 __CSKY_INSN_FUNCS(jmpi32,       0x0000ffff, 0x0000eac0)
47 __CSKY_INSN_FUNCS(jsri32,       0x0000ffff, 0x0000eae0)
48
49 #endif /* __CSKY_KERNEL_PROBES_SIMULATE_INSN_H */