2005-04-17 02:20:36 +04:00
/*
* This program is free software ; you can distribute it and / or modify it
* under the terms of the GNU General Public License ( Version 2 ) as
* published by the Free Software Foundation .
*
* This program is distributed in the hope it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 59 Temple Place - Suite 330 , Boston MA 02111 - 1307 , USA .
*
2006-05-15 20:26:03 +04:00
* Further private data for which no space exists in mips_fpu_struct .
* This should be subsumed into the mips_fpu_struct structure as
2005-04-17 02:20:36 +04:00
* defined in processor . h as soon as the absurd wired absolute assembler
* offsets become dynamic at compile time .
*
* Kevin D . Kissell , kevink @ mips . com and Carsten Langgaard , carstenl @ mips . com
* Copyright ( C ) 2000 MIPS Technologies , Inc . All rights reserved .
*/
# ifndef _ASM_FPU_EMULATOR_H
# define _ASM_FPU_EMULATOR_H
2008-10-28 20:38:42 +03:00
# include <asm/break.h>
# include <asm/inst.h>
2009-11-05 22:34:26 +03:00
# include <asm/local.h>
# ifdef CONFIG_DEBUG_FS
2008-10-28 20:38:42 +03:00
2005-05-11 16:02:48 +04:00
struct mips_fpu_emulator_stats {
2009-11-05 22:34:26 +03:00
local_t emulated ;
local_t loads ;
local_t stores ;
local_t cp1ops ;
local_t cp1xops ;
local_t errors ;
2005-04-17 02:20:36 +04:00
} ;
2009-11-05 22:34:26 +03:00
DECLARE_PER_CPU ( struct mips_fpu_emulator_stats , fpuemustats ) ;
# define MIPS_FPU_EMU_INC_STATS(M) \
2010-03-08 21:38:13 +03:00
do { \
preempt_disable ( ) ; \
__local_inc ( & __get_cpu_var ( fpuemustats ) . M ) ; \
preempt_enable ( ) ; \
} while ( 0 )
2009-11-05 22:34:26 +03:00
# else
# define MIPS_FPU_EMU_INC_STATS(M) do { } while (0)
# endif /* CONFIG_DEBUG_FS */
2005-02-28 20:29:15 +03:00
2008-10-28 20:38:42 +03:00
extern int mips_dsemul ( struct pt_regs * regs , mips_instruction ir ,
unsigned long cpc ) ;
extern int do_dsemulret ( struct pt_regs * xcp ) ;
/*
* Instruction inserted following the badinst to further tag the sequence
*/
# define BD_COOKIE 0x0000bd36 /* tne $0, $0 with baggage */
/*
* Break instruction with special math emu break code set
*/
# define BREAK_MATH (0x0000000d | (BRK_MEMU << 16))
2005-04-17 02:20:36 +04:00
# endif /* _ASM_FPU_EMULATOR_H */