X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-arm%2Ffpstate.h;h=f31cda5a55eeb04d7031c227ec7b1071c77338fd;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=785749b3c5ab909c76b1a634b79555634c910bda;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/asm-arm/fpstate.h b/include/asm-arm/fpstate.h index 785749b3c..f31cda5a5 100644 --- a/include/asm-arm/fpstate.h +++ b/include/asm-arm/fpstate.h @@ -11,19 +11,78 @@ #ifndef __ASM_ARM_FPSTATE_H #define __ASM_ARM_FPSTATE_H -#define FP_SIZE 35 + +#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]; +#if __LINUX_ARM_ARCH__ < 6 + __u32 fpmx_state; +#endif + __u32 fpexc; + __u32 fpscr; + /* + * VFP implementation specific state + */ + __u32 fpinst; + __u32 fpinst2; +#ifdef CONFIG_SMP + __u32 cpu; +#endif +}; + +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_SIZE]; /* as yet undefined */ + unsigned int save[FP_HARD_SIZE]; /* as yet undefined */ }; +#define FP_SOFT_SIZE 35 + struct fp_soft_struct { - unsigned int save[FP_SIZE]; /* undefined information */ + unsigned int save[FP_SOFT_SIZE]; /* undefined information */ +}; + +#define IWMMXT_SIZE 0x98 + +struct iwmmxt_struct { + unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)]; }; 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)) + +struct crunch_state { + unsigned int mvdx[16][2]; + unsigned int mvax[4][3]; + unsigned int dspsc[2]; +}; + +#define CRUNCH_SIZE sizeof(struct crunch_state) + +#endif + #endif