diff options
Diffstat (limited to 'arch/mips/include/asm/branch.h')
| -rw-r--r-- | arch/mips/include/asm/branch.h | 30 | 
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/mips/include/asm/branch.h b/arch/mips/include/asm/branch.h index e28a3e0eb3c..de781cf54bc 100644 --- a/arch/mips/include/asm/branch.h +++ b/arch/mips/include/asm/branch.h @@ -8,6 +8,8 @@  #ifndef _ASM_BRANCH_H  #define _ASM_BRANCH_H +#include <asm/cpu-features.h> +#include <asm/mipsregs.h>  #include <asm/ptrace.h>  #include <asm/inst.h> @@ -18,12 +20,40 @@ extern int __compute_return_epc_for_insn(struct pt_regs *regs,  extern int __microMIPS_compute_return_epc(struct pt_regs *regs);  extern int __MIPS16e_compute_return_epc(struct pt_regs *regs); +/* + * microMIPS bitfields + */ +#define MM_POOL32A_MINOR_MASK	0x3f +#define MM_POOL32A_MINOR_SHIFT	0x6 +#define MM_MIPS32_COND_FC	0x30 + +extern int __mm_isBranchInstr(struct pt_regs *regs, +	struct mm_decoded_insn dec_insn, unsigned long *contpc); + +static inline int mm_isBranchInstr(struct pt_regs *regs, +	struct mm_decoded_insn dec_insn, unsigned long *contpc) +{ +	if (!cpu_has_mmips) +		return 0; + +	return __mm_isBranchInstr(regs, dec_insn, contpc); +}  static inline int delay_slot(struct pt_regs *regs)  {  	return regs->cp0_cause & CAUSEF_BD;  } +static inline void clear_delay_slot(struct pt_regs *regs) +{ +	regs->cp0_cause &= ~CAUSEF_BD; +} + +static inline void set_delay_slot(struct pt_regs *regs) +{ +	regs->cp0_cause |= CAUSEF_BD; +} +  static inline unsigned long exception_epc(struct pt_regs *regs)  {  	if (likely(!delay_slot(regs)))  | 
