2005-04-16 15:20:36 -07: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-16 01:26:03 +09: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-16 15:20:36 -07: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 17:38:42 +00:00
# include <asm/break.h>
# include <asm/inst.h>
2009-11-05 11:34:26 -08:00
# include <asm/local.h>
# ifdef CONFIG_DEBUG_FS
2008-10-28 17:38:42 +00:00
2005-05-11 12:02:48 +00:00
struct mips_fpu_emulator_stats {
2009-11-05 11:34:26 -08:00
local_t emulated ;
local_t loads ;
local_t stores ;
local_t cp1ops ;
local_t cp1xops ;
local_t errors ;
2005-04-16 15:20:36 -07:00
} ;
2009-11-05 11:34:26 -08:00
DECLARE_PER_CPU ( struct mips_fpu_emulator_stats , fpuemustats ) ;
# define MIPS_FPU_EMU_INC_STATS(M) \
cpu_local_wrap ( __local_inc ( & __get_cpu_var ( fpuemustats ) . M ) )
# else
# define MIPS_FPU_EMU_INC_STATS(M) do { } while (0)
# endif /* CONFIG_DEBUG_FS */
2005-02-28 17:29:15 +00:00
2008-10-28 17:38:42 +00: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-16 15:20:36 -07:00
# endif /* _ASM_FPU_EMULATOR_H */