Path: blob/master/arch/csky/kernel/probes/simulate-insn.h
26489 views
/* SPDX-License-Identifier: GPL-2.0+ */12#ifndef __CSKY_KERNEL_PROBES_SIMULATE_INSN_H3#define __CSKY_KERNEL_PROBES_SIMULATE_INSN_H45#define __CSKY_INSN_FUNCS(name, mask, val) \6static __always_inline bool csky_insn_is_##name(probe_opcode_t code) \7{ \8BUILD_BUG_ON(~(mask) & (val)); \9return (code & (mask)) == (val); \10} \11void simulate_##name(u32 opcode, long addr, struct pt_regs *regs);1213#define CSKY_INSN_SET_SIMULATE(name, code) \14do { \15if (csky_insn_is_##name(code)) { \16api->handler = simulate_##name; \17return INSN_GOOD_NO_SLOT; \18} \19} while (0)2021__CSKY_INSN_FUNCS(br16, 0xfc00, 0x0400)22__CSKY_INSN_FUNCS(bt16, 0xfc00, 0x0800)23__CSKY_INSN_FUNCS(bf16, 0xfc00, 0x0c00)24__CSKY_INSN_FUNCS(jmp16, 0xffc3, 0x7800)25__CSKY_INSN_FUNCS(jsr16, 0xffc3, 0x7801)26__CSKY_INSN_FUNCS(lrw16, 0xfc00, 0x1000)27__CSKY_INSN_FUNCS(pop16, 0xffe0, 0x1480)2829__CSKY_INSN_FUNCS(br32, 0x0000ffff, 0x0000e800)30__CSKY_INSN_FUNCS(bt32, 0x0000ffff, 0x0000e860)31__CSKY_INSN_FUNCS(bf32, 0x0000ffff, 0x0000e840)32__CSKY_INSN_FUNCS(jmp32, 0xffffffe0, 0x0000e8c0)33__CSKY_INSN_FUNCS(jsr32, 0xffffffe0, 0x0000e8e0)34__CSKY_INSN_FUNCS(lrw32, 0x0000ffe0, 0x0000ea80)35__CSKY_INSN_FUNCS(pop32, 0xfe00ffff, 0x0000ebc0)3637__CSKY_INSN_FUNCS(bez32, 0x0000ffe0, 0x0000e900)38__CSKY_INSN_FUNCS(bnez32, 0x0000ffe0, 0x0000e920)39__CSKY_INSN_FUNCS(bnezad32, 0x0000ffe0, 0x0000e820)40__CSKY_INSN_FUNCS(bhsz32, 0x0000ffe0, 0x0000e9a0)41__CSKY_INSN_FUNCS(bhz32, 0x0000ffe0, 0x0000e940)42__CSKY_INSN_FUNCS(blsz32, 0x0000ffe0, 0x0000e960)43__CSKY_INSN_FUNCS(blz32, 0x0000ffe0, 0x0000e980)44__CSKY_INSN_FUNCS(bsr32, 0x0000fc00, 0x0000e000)45__CSKY_INSN_FUNCS(jmpi32, 0x0000ffff, 0x0000eac0)46__CSKY_INSN_FUNCS(jsri32, 0x0000ffff, 0x0000eae0)4748#endif /* __CSKY_KERNEL_PROBES_SIMULATE_INSN_H */495051