Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
1da177e4 LT |
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]; | |
bb54a335 | 28 | #if __LINUX_ARM_ARCH__ < 6 |
1da177e4 | 29 | __u32 fpmx_state; |
bb54a335 | 30 | #endif |
1da177e4 LT |
31 | __u32 fpexc; |
32 | __u32 fpscr; | |
33 | /* | |
34 | * VFP implementation specific state | |
35 | */ | |
36 | __u32 fpinst; | |
37 | __u32 fpinst2; | |
c6428464 CM |
38 | #ifdef CONFIG_SMP |
39 | __u32 cpu; | |
40 | #endif | |
1da177e4 LT |
41 | }; |
42 | ||
43 | union vfp_state { | |
44 | struct vfp_hard_struct hard; | |
45 | }; | |
46 | ||
47 | extern void vfp_flush_thread(union vfp_state *); | |
48 | extern void vfp_release_thread(union vfp_state *); | |
49 | ||
50 | #define FP_HARD_SIZE 35 | |
51 | ||
52 | struct fp_hard_struct { | |
53 | unsigned int save[FP_HARD_SIZE]; /* as yet undefined */ | |
54 | }; | |
55 | ||
56 | #define FP_SOFT_SIZE 35 | |
57 | ||
58 | struct fp_soft_struct { | |
59 | unsigned int save[FP_SOFT_SIZE]; /* undefined information */ | |
60 | }; | |
61 | ||
cdaabbd7 RK |
62 | #define IWMMXT_SIZE 0x98 |
63 | ||
1da177e4 | 64 | struct iwmmxt_struct { |
cdaabbd7 | 65 | unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)]; |
1da177e4 LT |
66 | }; |
67 | ||
68 | union fp_state { | |
69 | struct fp_hard_struct hard; | |
70 | struct fp_soft_struct soft; | |
71 | #ifdef CONFIG_IWMMXT | |
72 | struct iwmmxt_struct iwmmxt; | |
73 | #endif | |
74 | }; | |
75 | ||
76 | #define FP_SIZE (sizeof(union fp_state) / sizeof(int)) | |
77 | ||
c17fad11 LB |
78 | struct crunch_state { |
79 | unsigned int mvdx[16][2]; | |
80 | unsigned int mvax[4][3]; | |
81 | unsigned int dspsc[2]; | |
82 | }; | |
83 | ||
84 | #define CRUNCH_SIZE sizeof(struct crunch_state) | |
85 | ||
1da177e4 LT |
86 | #endif |
87 | ||
88 | #endif |