Including sys/ucontext.h should not cause REG_* to be defined
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / x86 / bits / regset.h
1 /* Copyright (C) 2008 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 #ifndef _BITS_REGSET_H
20 #define _BITS_REGSET_H
21
22 #include <features.h>
23
24 typedef struct __fpu
25   {
26         union
27           {
28                 struct __fpchip_state
29                   {
30                         __uint32_t __state[27];
31                         __uint32_t __status;
32                         __uint32_t __mxcsr;
33                         __uint32_t __xstatus;
34                         __uint32_t __pad[2];
35                         __uint32_t __xmm[4][8];
36                   } __fpchip_state;
37                 struct __fp_emul_space
38                   {
39                         __uint8_t __fp_emul[246];
40                         __uint8_t __fp_epad[2];
41                   } __fp_emul_space;
42                 __uint32_t __f_fpregs[95];
43           } __fp_reg_set;
44   } fpregset_t;
45
46 #ifdef __amd64
47 # define _NGREG         28
48 #else
49 # define _NGREG         19
50 #endif
51 #define NGREG           _NGREG
52
53 typedef int greg_t;
54
55 #if defined (_SYSCALL32)
56 typedef int32_t greg32_t;
57 typedef int64_t greg64_t;
58 #endif
59
60 typedef greg_t gregset_t[_NGREG];
61
62 typedef struct
63   {
64     gregset_t gregs;
65     fpregset_t fpregs;
66   } mcontext_t;
67
68 #ifdef __USE_MISC
69
70 struct fxsave_state
71   {
72         __uint16_t fx_fcw;
73         __uint16_t fx_fsw;
74         __uint16_t fx_fctw;
75         __uint16_t fx_fop;
76 #ifdef __amd64__
77         __uint64_t fx_rip;
78         __uint64_t fx_rdp;
79 #else
80         __uint32_t fx_eip;
81         __uint16_t fx_cs;
82         __uint16_t __fx_ign0;
83         __uint32_t fx_dp;
84         __uint16_t fx_ds;
85         __uint16_t __fx_ign1;
86 #endif
87         __uint32_t fx_mxcsr;
88         __uint32_t fx_mxcsr_mask;
89         union
90           {
91                 __uint16_t fpr_16[5];
92                 unsigned long long fpr_mmx;
93         __uint32_t __fpr_pad[4];
94           } fx_st[8];
95 #if defined(__amd64)
96         upad128_t fx_xmm[16]; /* 128-bit registers */
97         upad128_t __fx_ign2[6];
98 #else
99         upad128_t fx_xmm[8];  /* 128-bit registers */
100         upad128_t __fx_ign2[14];
101 #endif
102   };
103
104 struct fnsave_state
105   {
106         __uint16_t f_fcw;
107         __uint16_t __f_ign0;
108         __uint16_t f_fsw;
109         __uint16_t __f_ign1;
110         __uint16_t f_ftw;
111         __uint16_t __f_ign2;
112         __uint32_t f_eip;
113         __uint16_t f_cs;
114         __uint16_t f_fop;
115         __uint32_t f_dp;
116         __uint16_t f_ds;
117         __uint16_t __f_ign3;
118         union
119           {
120                 __uint16_t fpr_16[5];
121           } f_st[8];
122   };
123
124 typedef struct
125   {
126         union _kfpu_u
127           {
128                 struct fxsave_state kfpu_fx;
129 #ifdef __i386__
130                 struct fnsave_state kfpu_fn;
131 #endif
132           } kfpu_u;
133         __uint32_t kfpu_status;
134         __uint32_t kfpu_xstatus;
135   } kfpu_t;
136
137 #endif /* __USE_MISC */
138
139 #endif /* _BITS_REGSET_H */