2005-04-16 15:20:36 -07:00
/*
2008-08-02 10:55:55 +01:00
* arch / arm / include / asm / fpstate . h
2005-04-16 15:20:36 -07:00
*
* Copyright ( C ) 1995 Russell King
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef __ASM_ARM_FPSTATE_H
# define __ASM_ARM_FPSTATE_H
# ifndef __ASSEMBLY__
/*
* VFP storage area has :
* - FPEXC , FPSCR , FPINST and FPINST2 .
2007-09-25 15:22:24 +01:00
* - 16 or 32 double precision data registers
2011-03-30 22:57:33 -03:00
* - an implementation - dependent word of state for FLDMX / FSTMX ( pre - ARMv6 )
2005-04-16 15:20:36 -07:00
*
* FPEXC will always be non - zero once the VFP has been used in this process .
*/
struct vfp_hard_struct {
2007-09-25 15:22:24 +01:00
# ifdef CONFIG_VFPv3
__u64 fpregs [ 32 ] ;
# else
2005-04-16 15:20:36 -07:00
__u64 fpregs [ 16 ] ;
2007-09-25 15:22:24 +01:00
# endif
2006-04-10 21:32:42 +01:00
# if __LINUX_ARM_ARCH__ < 6
2005-04-16 15:20:36 -07:00
__u32 fpmx_state ;
2006-04-10 21:32:42 +01:00
# endif
2005-04-16 15:20:36 -07:00
__u32 fpexc ;
__u32 fpscr ;
/*
* VFP implementation specific state
*/
__u32 fpinst ;
__u32 fpinst2 ;
2007-09-25 15:22:24 +01:00
2007-01-24 18:47:08 +01:00
# ifdef CONFIG_SMP
__u32 cpu ;
# endif
2005-04-16 15:20:36 -07:00
} ;
union vfp_state {
struct vfp_hard_struct hard ;
} ;
extern void vfp_flush_thread ( union vfp_state * ) ;
extern void vfp_release_thread ( union vfp_state * ) ;
# define FP_HARD_SIZE 35
struct fp_hard_struct {
unsigned int save [ FP_HARD_SIZE ] ; /* as yet undefined */
} ;
# define FP_SOFT_SIZE 35
struct fp_soft_struct {
unsigned int save [ FP_SOFT_SIZE ] ; /* undefined information */
} ;
2006-03-12 22:36:06 +00:00
# define IWMMXT_SIZE 0x98
2005-04-16 15:20:36 -07:00
struct iwmmxt_struct {
2006-03-12 22:36:06 +00:00
unsigned int save [ IWMMXT_SIZE / sizeof ( unsigned int ) ] ;
2005-04-16 15:20:36 -07:00
} ;
union fp_state {
struct fp_hard_struct hard ;
struct fp_soft_struct soft ;
# ifdef CONFIG_IWMMXT
struct iwmmxt_struct iwmmxt ;
# endif
} ;
# define FP_SIZE (sizeof(union fp_state) / sizeof(int))
2006-06-27 23:03:03 +01:00
struct crunch_state {
unsigned int mvdx [ 16 ] [ 2 ] ;
unsigned int mvax [ 4 ] [ 3 ] ;
unsigned int dspsc [ 2 ] ;
} ;
# define CRUNCH_SIZE sizeof(struct crunch_state)
2005-04-16 15:20:36 -07:00
# endif
# endif