Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/include/asm/fpstate.h
17326 views
1
/*
2
* arch/arm/include/asm/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 or 32 double precision data registers
21
* - an implementation-dependent word of state for FLDMX/FSTMX (pre-ARMv6)
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
#ifdef CONFIG_VFPv3
28
__u64 fpregs[32];
29
#else
30
__u64 fpregs[16];
31
#endif
32
#if __LINUX_ARM_ARCH__ < 6
33
__u32 fpmx_state;
34
#endif
35
__u32 fpexc;
36
__u32 fpscr;
37
/*
38
* VFP implementation specific state
39
*/
40
__u32 fpinst;
41
__u32 fpinst2;
42
43
#ifdef CONFIG_SMP
44
__u32 cpu;
45
#endif
46
};
47
48
union vfp_state {
49
struct vfp_hard_struct hard;
50
};
51
52
extern void vfp_flush_thread(union vfp_state *);
53
extern void vfp_release_thread(union vfp_state *);
54
55
#define FP_HARD_SIZE 35
56
57
struct fp_hard_struct {
58
unsigned int save[FP_HARD_SIZE]; /* as yet undefined */
59
};
60
61
#define FP_SOFT_SIZE 35
62
63
struct fp_soft_struct {
64
unsigned int save[FP_SOFT_SIZE]; /* undefined information */
65
};
66
67
#define IWMMXT_SIZE 0x98
68
69
struct iwmmxt_struct {
70
unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)];
71
};
72
73
union fp_state {
74
struct fp_hard_struct hard;
75
struct fp_soft_struct soft;
76
#ifdef CONFIG_IWMMXT
77
struct iwmmxt_struct iwmmxt;
78
#endif
79
};
80
81
#define FP_SIZE (sizeof(union fp_state) / sizeof(int))
82
83
struct crunch_state {
84
unsigned int mvdx[16][2];
85
unsigned int mvax[4][3];
86
unsigned int dspsc[2];
87
};
88
89
#define CRUNCH_SIZE sizeof(struct crunch_state)
90
91
#endif
92
93
#endif
94
95