2005-04-17 02:20:36 +04:00
/*
* linux / include / asm - arm / fpstate . h
*
* 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 .
* - 16 double precision data registers
* - an implementation - dependant word of state for FLDMX / FSTMX
*
* FPEXC will always be non - zero once the VFP has been used in this process .
*/
struct vfp_hard_struct {
__u64 fpregs [ 16 ] ;
2006-04-11 00:32:42 +04:00
# if __LINUX_ARM_ARCH__ < 6
2005-04-17 02:20:36 +04:00
__u32 fpmx_state ;
2006-04-11 00:32:42 +04:00
# endif
2005-04-17 02:20:36 +04:00
__u32 fpexc ;
__u32 fpscr ;
/*
* VFP implementation specific state
*/
__u32 fpinst ;
__u32 fpinst2 ;
} ;
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-13 01:36:06 +03:00
# define IWMMXT_SIZE 0x98
2005-04-17 02:20:36 +04:00
struct iwmmxt_struct {
2006-03-13 01:36:06 +03:00
unsigned int save [ IWMMXT_SIZE / sizeof ( unsigned int ) ] ;
2005-04-17 02:20:36 +04: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))
# endif
# endif