Olivier Deprez | 157378f | 2022-04-04 15:47:50 +0200 | [diff] [blame^] | 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 */ |