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