]>
Commit | Line | Data |
---|---|---|
2aa62f2b | 1 | /* $NetBSD: _regset.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */\r |
2 | \r | |
3 | /*-\r | |
4 | * Copyright (c) 2002, 2003 Marcel Moolenaar\r | |
5 | * All rights reserved.\r | |
6 | *\r | |
7 | * Redistribution and use in source and binary forms, with or without\r | |
8 | * modification, are permitted provided that the following conditions\r | |
9 | * are met:\r | |
10 | *\r | |
11 | * 1. Redistributions of source code must retain the above copyright\r | |
12 | * notice, this list of conditions and the following disclaimer.\r | |
13 | * 2. Redistributions in binary form must reproduce the above copyright\r | |
14 | * notice, this list of conditions and the following disclaimer in the\r | |
15 | * documentation and/or other materials provided with the distribution.\r | |
16 | *\r | |
17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r | |
18 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r | |
19 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r | |
20 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r | |
21 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r | |
22 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r | |
23 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r | |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r | |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r | |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r | |
27 | *\r | |
28 | * $FreeBSD$\r | |
29 | */\r | |
30 | \r | |
31 | #ifndef _MACHINE_REGSET_H_\r | |
32 | #define _MACHINE_REGSET_H_\r | |
33 | \r | |
34 | /*\r | |
35 | * Create register sets, based on the runtime specification. This allows\r | |
36 | * us to better reuse code and to copy sets around more efficiently.\r | |
37 | * Contexts are defined in terms of these sets. These include trapframe,\r | |
38 | * sigframe, pcb, mcontext, reg and fpreg. Other candidates are unwind\r | |
39 | * and coredump related contexts.\r | |
40 | *\r | |
41 | * Notes:\r | |
42 | * o Constant registers (r0, f0 and f1) are not accounted for,\r | |
43 | * o The stacked registers (r32-r127) are not accounted for,\r | |
44 | * o Predicates are not split across sets.\r | |
45 | */\r | |
46 | \r | |
47 | /* A single FP register. */\r | |
48 | union _ia64_fpreg {\r | |
49 | unsigned char fpr_bits[16];\r | |
50 | long double fpr_flt;\r | |
51 | };\r | |
52 | \r | |
53 | /*\r | |
54 | * Special registers.\r | |
55 | */\r | |
56 | struct _special {\r | |
57 | unsigned long sp;\r | |
58 | unsigned long unat; /* NaT before spilling */\r | |
59 | unsigned long rp;\r | |
60 | unsigned long pr;\r | |
61 | unsigned long pfs;\r | |
62 | unsigned long bspstore;\r | |
63 | unsigned long rnat;\r | |
64 | unsigned long __spare;\r | |
65 | /* Userland context and syscalls */\r | |
66 | unsigned long tp;\r | |
67 | unsigned long rsc;\r | |
68 | unsigned long fpsr;\r | |
69 | unsigned long psr;\r | |
70 | /* ASYNC: Interrupt specific */\r | |
71 | unsigned long gp;\r | |
72 | unsigned long ndirty;\r | |
73 | unsigned long cfm;\r | |
74 | unsigned long iip;\r | |
75 | unsigned long ifa;\r | |
76 | unsigned long isr;\r | |
77 | };\r | |
78 | \r | |
79 | struct _high_fp {\r | |
80 | union _ia64_fpreg fr32;\r | |
81 | union _ia64_fpreg fr33;\r | |
82 | union _ia64_fpreg fr34;\r | |
83 | union _ia64_fpreg fr35;\r | |
84 | union _ia64_fpreg fr36;\r | |
85 | union _ia64_fpreg fr37;\r | |
86 | union _ia64_fpreg fr38;\r | |
87 | union _ia64_fpreg fr39;\r | |
88 | union _ia64_fpreg fr40;\r | |
89 | union _ia64_fpreg fr41;\r | |
90 | union _ia64_fpreg fr42;\r | |
91 | union _ia64_fpreg fr43;\r | |
92 | union _ia64_fpreg fr44;\r | |
93 | union _ia64_fpreg fr45;\r | |
94 | union _ia64_fpreg fr46;\r | |
95 | union _ia64_fpreg fr47;\r | |
96 | union _ia64_fpreg fr48;\r | |
97 | union _ia64_fpreg fr49;\r | |
98 | union _ia64_fpreg fr50;\r | |
99 | union _ia64_fpreg fr51;\r | |
100 | union _ia64_fpreg fr52;\r | |
101 | union _ia64_fpreg fr53;\r | |
102 | union _ia64_fpreg fr54;\r | |
103 | union _ia64_fpreg fr55;\r | |
104 | union _ia64_fpreg fr56;\r | |
105 | union _ia64_fpreg fr57;\r | |
106 | union _ia64_fpreg fr58;\r | |
107 | union _ia64_fpreg fr59;\r | |
108 | union _ia64_fpreg fr60;\r | |
109 | union _ia64_fpreg fr61;\r | |
110 | union _ia64_fpreg fr62;\r | |
111 | union _ia64_fpreg fr63;\r | |
112 | union _ia64_fpreg fr64;\r | |
113 | union _ia64_fpreg fr65;\r | |
114 | union _ia64_fpreg fr66;\r | |
115 | union _ia64_fpreg fr67;\r | |
116 | union _ia64_fpreg fr68;\r | |
117 | union _ia64_fpreg fr69;\r | |
118 | union _ia64_fpreg fr70;\r | |
119 | union _ia64_fpreg fr71;\r | |
120 | union _ia64_fpreg fr72;\r | |
121 | union _ia64_fpreg fr73;\r | |
122 | union _ia64_fpreg fr74;\r | |
123 | union _ia64_fpreg fr75;\r | |
124 | union _ia64_fpreg fr76;\r | |
125 | union _ia64_fpreg fr77;\r | |
126 | union _ia64_fpreg fr78;\r | |
127 | union _ia64_fpreg fr79;\r | |
128 | union _ia64_fpreg fr80;\r | |
129 | union _ia64_fpreg fr81;\r | |
130 | union _ia64_fpreg fr82;\r | |
131 | union _ia64_fpreg fr83;\r | |
132 | union _ia64_fpreg fr84;\r | |
133 | union _ia64_fpreg fr85;\r | |
134 | union _ia64_fpreg fr86;\r | |
135 | union _ia64_fpreg fr87;\r | |
136 | union _ia64_fpreg fr88;\r | |
137 | union _ia64_fpreg fr89;\r | |
138 | union _ia64_fpreg fr90;\r | |
139 | union _ia64_fpreg fr91;\r | |
140 | union _ia64_fpreg fr92;\r | |
141 | union _ia64_fpreg fr93;\r | |
142 | union _ia64_fpreg fr94;\r | |
143 | union _ia64_fpreg fr95;\r | |
144 | union _ia64_fpreg fr96;\r | |
145 | union _ia64_fpreg fr97;\r | |
146 | union _ia64_fpreg fr98;\r | |
147 | union _ia64_fpreg fr99;\r | |
148 | union _ia64_fpreg fr100;\r | |
149 | union _ia64_fpreg fr101;\r | |
150 | union _ia64_fpreg fr102;\r | |
151 | union _ia64_fpreg fr103;\r | |
152 | union _ia64_fpreg fr104;\r | |
153 | union _ia64_fpreg fr105;\r | |
154 | union _ia64_fpreg fr106;\r | |
155 | union _ia64_fpreg fr107;\r | |
156 | union _ia64_fpreg fr108;\r | |
157 | union _ia64_fpreg fr109;\r | |
158 | union _ia64_fpreg fr110;\r | |
159 | union _ia64_fpreg fr111;\r | |
160 | union _ia64_fpreg fr112;\r | |
161 | union _ia64_fpreg fr113;\r | |
162 | union _ia64_fpreg fr114;\r | |
163 | union _ia64_fpreg fr115;\r | |
164 | union _ia64_fpreg fr116;\r | |
165 | union _ia64_fpreg fr117;\r | |
166 | union _ia64_fpreg fr118;\r | |
167 | union _ia64_fpreg fr119;\r | |
168 | union _ia64_fpreg fr120;\r | |
169 | union _ia64_fpreg fr121;\r | |
170 | union _ia64_fpreg fr122;\r | |
171 | union _ia64_fpreg fr123;\r | |
172 | union _ia64_fpreg fr124;\r | |
173 | union _ia64_fpreg fr125;\r | |
174 | union _ia64_fpreg fr126;\r | |
175 | union _ia64_fpreg fr127;\r | |
176 | };\r | |
177 | \r | |
178 | /*\r | |
179 | * Preserved registers.\r | |
180 | */\r | |
181 | struct _callee_saved {\r | |
182 | unsigned long unat; /* NaT after spilling. */\r | |
183 | unsigned long gr4;\r | |
184 | unsigned long gr5;\r | |
185 | unsigned long gr6;\r | |
186 | unsigned long gr7;\r | |
187 | unsigned long br1;\r | |
188 | unsigned long br2;\r | |
189 | unsigned long br3;\r | |
190 | unsigned long br4;\r | |
191 | unsigned long br5;\r | |
192 | unsigned long lc;\r | |
193 | unsigned long __spare;\r | |
194 | };\r | |
195 | \r | |
196 | struct _callee_saved_fp {\r | |
197 | union _ia64_fpreg fr2;\r | |
198 | union _ia64_fpreg fr3;\r | |
199 | union _ia64_fpreg fr4;\r | |
200 | union _ia64_fpreg fr5;\r | |
201 | union _ia64_fpreg fr16;\r | |
202 | union _ia64_fpreg fr17;\r | |
203 | union _ia64_fpreg fr18;\r | |
204 | union _ia64_fpreg fr19;\r | |
205 | union _ia64_fpreg fr20;\r | |
206 | union _ia64_fpreg fr21;\r | |
207 | union _ia64_fpreg fr22;\r | |
208 | union _ia64_fpreg fr23;\r | |
209 | union _ia64_fpreg fr24;\r | |
210 | union _ia64_fpreg fr25;\r | |
211 | union _ia64_fpreg fr26;\r | |
212 | union _ia64_fpreg fr27;\r | |
213 | union _ia64_fpreg fr28;\r | |
214 | union _ia64_fpreg fr29;\r | |
215 | union _ia64_fpreg fr30;\r | |
216 | union _ia64_fpreg fr31;\r | |
217 | };\r | |
218 | \r | |
219 | /*\r | |
220 | * Scratch registers.\r | |
221 | */\r | |
222 | struct _caller_saved {\r | |
223 | unsigned long unat; /* NaT after spilling. */\r | |
224 | unsigned long gr2;\r | |
225 | unsigned long gr3;\r | |
226 | unsigned long gr8;\r | |
227 | unsigned long gr9;\r | |
228 | unsigned long gr10;\r | |
229 | unsigned long gr11;\r | |
230 | unsigned long gr14;\r | |
231 | unsigned long gr15;\r | |
232 | unsigned long gr16;\r | |
233 | unsigned long gr17;\r | |
234 | unsigned long gr18;\r | |
235 | unsigned long gr19;\r | |
236 | unsigned long gr20;\r | |
237 | unsigned long gr21;\r | |
238 | unsigned long gr22;\r | |
239 | unsigned long gr23;\r | |
240 | unsigned long gr24;\r | |
241 | unsigned long gr25;\r | |
242 | unsigned long gr26;\r | |
243 | unsigned long gr27;\r | |
244 | unsigned long gr28;\r | |
245 | unsigned long gr29;\r | |
246 | unsigned long gr30;\r | |
247 | unsigned long gr31;\r | |
248 | unsigned long br6;\r | |
249 | unsigned long br7;\r | |
250 | unsigned long ccv;\r | |
251 | unsigned long csd;\r | |
252 | unsigned long ssd;\r | |
253 | };\r | |
254 | \r | |
255 | struct _caller_saved_fp {\r | |
256 | union _ia64_fpreg fr6;\r | |
257 | union _ia64_fpreg fr7;\r | |
258 | union _ia64_fpreg fr8;\r | |
259 | union _ia64_fpreg fr9;\r | |
260 | union _ia64_fpreg fr10;\r | |
261 | union _ia64_fpreg fr11;\r | |
262 | union _ia64_fpreg fr12;\r | |
263 | union _ia64_fpreg fr13;\r | |
264 | union _ia64_fpreg fr14;\r | |
265 | union _ia64_fpreg fr15;\r | |
266 | };\r | |
267 | \r | |
268 | #ifdef _KERNEL\r | |
269 | void restore_callee_saved(const struct _callee_saved *);\r | |
270 | void restore_callee_saved_fp(const struct _callee_saved_fp *);\r | |
271 | void restore_high_fp(const struct _high_fp *);\r | |
272 | void save_callee_saved(struct _callee_saved *);\r | |
273 | void save_callee_saved_fp(struct _callee_saved_fp *);\r | |
274 | void save_high_fp(struct _high_fp *);\r | |
275 | #endif\r | |
276 | \r | |
277 | #endif /* _MACHINE_REGSET_H_ */\r |