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