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