123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (c) 2014 Imagination Technologies Ltd.
- * Author: Markos Chandras <markos.chandras@imgtec.com>
- */
- #ifndef __ASM_MIPS_R2_TO_R6_EMUL_H
- #define __ASM_MIPS_R2_TO_R6_EMUL_H
- struct mips_r2_emulator_stats {
- u64 movs;
- u64 hilo;
- u64 muls;
- u64 divs;
- u64 dsps;
- u64 bops;
- u64 traps;
- u64 fpus;
- u64 loads;
- u64 stores;
- u64 llsc;
- u64 dsemul;
- };
- struct mips_r2br_emulator_stats {
- u64 jrs;
- u64 bltzl;
- u64 bgezl;
- u64 bltzll;
- u64 bgezll;
- u64 bltzall;
- u64 bgezall;
- u64 bltzal;
- u64 bgezal;
- u64 beql;
- u64 bnel;
- u64 blezl;
- u64 bgtzl;
- };
- #ifdef CONFIG_DEBUG_FS
- #define MIPS_R2_STATS(M) \
- do { \
- u32 nir; \
- int err; \
- \
- preempt_disable(); \
- __this_cpu_inc(mipsr2emustats.M); \
- err = __get_user(nir, (u32 __user *)regs->cp0_epc); \
- if (!err) { \
- if (nir == BREAK_MATH(0)) \
- __this_cpu_inc(mipsr2bdemustats.M); \
- } \
- preempt_enable(); \
- } while (0)
- #define MIPS_R2BR_STATS(M) \
- do { \
- preempt_disable(); \
- __this_cpu_inc(mipsr2bremustats.M); \
- preempt_enable(); \
- } while (0)
- #else
- #define MIPS_R2_STATS(M) do { } while (0)
- #define MIPS_R2BR_STATS(M) do { } while (0)
- #endif /* CONFIG_DEBUG_FS */
- struct r2_decoder_table {
- u32 mask;
- u32 code;
- int (*func)(struct pt_regs *regs, u32 inst);
- };
- extern void do_trap_or_bp(struct pt_regs *regs, unsigned int code, int si_code,
- const char *str);
- #ifndef CONFIG_MIPSR2_TO_R6_EMULATOR
- static int mipsr2_emulation;
- static inline int mipsr2_decoder(struct pt_regs *regs, u32 inst,
- unsigned long *fcr31)
- {
- return 0;
- };
- #else
- /* MIPS R2 Emulator ON/OFF */
- extern int mipsr2_emulation;
- extern int mipsr2_decoder(struct pt_regs *regs, u32 inst,
- unsigned long *fcr31);
- #endif /* CONFIG_MIPSR2_TO_R6_EMULATOR */
- #define NO_R6EMU (cpu_has_mips_r6 && !mipsr2_emulation)
- #endif /* __ASM_MIPS_R2_TO_R6_EMUL_H */
|