Home | History | Annotate | Download | only in asm-arm
      1 /*
      2  *  linux/include/asm-arm/fpstate.h
      3  *
      4  *  Copyright (C) 1995 Russell King
      5  *
      6  * This program is free software; you can redistribute it and/or modify
      7  * it under the terms of the GNU General Public License version 2 as
      8  * published by the Free Software Foundation.
      9  */
     10 
     11 #ifndef __ASM_ARM_FPSTATE_H
     12 #define __ASM_ARM_FPSTATE_H
     13 
     14 
     15 #ifndef __ASSEMBLY__
     16 
     17 /*
     18  * VFP storage area has:
     19  *  - FPEXC, FPSCR, FPINST and FPINST2.
     20  *  - 16 double precision data registers
     21  *  - an implementation-dependant word of state for FLDMX/FSTMX
     22  *
     23  *  FPEXC will always be non-zero once the VFP has been used in this process.
     24  */
     25 
     26 struct vfp_hard_struct {
     27 	__u64 fpregs[16];
     28 #if __LINUX_ARM_ARCH__ < 6
     29 	__u32 fpmx_state;
     30 #endif
     31 	__u32 fpexc;
     32 	__u32 fpscr;
     33 	/*
     34 	 * VFP implementation specific state
     35 	 */
     36 	__u32 fpinst;
     37 	__u32 fpinst2;
     38 };
     39 
     40 union vfp_state {
     41 	struct vfp_hard_struct	hard;
     42 };
     43 
     44 extern void vfp_flush_thread(union vfp_state *);
     45 extern void vfp_release_thread(union vfp_state *);
     46 
     47 #define FP_HARD_SIZE 35
     48 
     49 struct fp_hard_struct {
     50 	unsigned int save[FP_HARD_SIZE];		/* as yet undefined */
     51 };
     52 
     53 #define FP_SOFT_SIZE 35
     54 
     55 struct fp_soft_struct {
     56 	unsigned int save[FP_SOFT_SIZE];		/* undefined information */
     57 };
     58 
     59 #define IWMMXT_SIZE	0x98
     60 
     61 struct iwmmxt_struct {
     62 	unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)];
     63 };
     64 
     65 union fp_state {
     66 	struct fp_hard_struct	hard;
     67 	struct fp_soft_struct	soft;
     68 #ifdef CONFIG_IWMMXT
     69 	struct iwmmxt_struct	iwmmxt;
     70 #endif
     71 };
     72 
     73 #define FP_SIZE (sizeof(union fp_state) / sizeof(int))
     74 
     75 struct crunch_state {
     76 	unsigned int	mvdx[16][2];
     77 	unsigned int	mvax[4][3];
     78 	unsigned int	dspsc[2];
     79 };
     80 
     81 #define CRUNCH_SIZE	sizeof(struct crunch_state)
     82 
     83 #endif
     84 
     85 #endif
     86