Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/include/asm/fpstate.h
26295 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* arch/arm/include/asm/fpstate.h
4
*
5
* Copyright (C) 1995 Russell King
6
*/
7
8
#ifndef __ASM_ARM_FPSTATE_H
9
#define __ASM_ARM_FPSTATE_H
10
11
12
#ifndef __ASSEMBLY__
13
14
/*
15
* VFP storage area has:
16
* - FPEXC, FPSCR, FPINST and FPINST2.
17
* - 16 or 32 double precision data registers
18
* - an implementation-dependent word of state for FLDMX/FSTMX (pre-ARMv6)
19
*
20
* FPEXC will always be non-zero once the VFP has been used in this process.
21
*/
22
23
struct vfp_hard_struct {
24
#ifdef CONFIG_VFPv3
25
__u64 fpregs[32];
26
#else
27
__u64 fpregs[16];
28
#endif
29
#if __LINUX_ARM_ARCH__ < 6
30
__u32 fpmx_state;
31
#endif
32
__u32 fpexc;
33
__u32 fpscr;
34
/*
35
* VFP implementation specific state
36
*/
37
__u32 fpinst;
38
__u32 fpinst2;
39
40
#ifdef CONFIG_SMP
41
__u32 cpu;
42
#endif
43
};
44
45
union vfp_state {
46
struct vfp_hard_struct hard;
47
};
48
49
#define FP_HARD_SIZE 35
50
51
struct fp_hard_struct {
52
unsigned int save[FP_HARD_SIZE]; /* as yet undefined */
53
};
54
55
#define FP_SOFT_SIZE 35
56
57
struct fp_soft_struct {
58
unsigned int save[FP_SOFT_SIZE]; /* undefined information */
59
};
60
61
#define IWMMXT_SIZE 0x98
62
63
struct iwmmxt_struct {
64
unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)];
65
};
66
67
union fp_state {
68
struct fp_hard_struct hard;
69
struct fp_soft_struct soft;
70
#ifdef CONFIG_IWMMXT
71
struct iwmmxt_struct iwmmxt;
72
#endif
73
};
74
75
#define FP_SIZE (sizeof(union fp_state) / sizeof(int))
76
77
#endif
78
79
#endif
80
81