master
1/* $NetBSD: mcontext.h,v 1.10 2018/02/19 08:31:13 mrg Exp $ */
2
3#ifndef _SPARC64_MCONTEXT_H_
4#define _SPARC64_MCONTEXT_H_
5
6#include <sparc/mcontext.h>
7
8#define _NGREG32 19 /* %psr, pc, npc, %g1-7, %o0-7 */
9typedef int __greg32_t;
10typedef __greg32_t __gregset32_t[_NGREG32];
11
12typedef unsigned int netbsd32___greg32p_t;
13typedef unsigned int netbsd32___fqp_t;
14typedef unsigned int netbsd32___gwindows32p_t;
15
16#define _REG32_PSR 0
17#define _REG32_PC 1
18#define _REG32_nPC 2
19#define _REG32_Y 3
20#define _REG32_G1 4
21#define _REG32_G2 5
22#define _REG32_G3 6
23#define _REG32_G4 7
24#define _REG32_G5 8
25#define _REG32_G6 9
26#define _REG32_G7 10
27#define _REG32_O0 11
28#define _REG32_O1 12
29#define _REG32_O2 13
30#define _REG32_O3 14
31#define _REG32_O4 15
32#define _REG32_O5 16
33#define _REG32_O6 17
34#define _REG32_O7 18
35
36/* Layout of a register window. */
37typedef struct {
38 __greg32_t __rw_local[8]; /* %l0-7 */
39 __greg32_t __rw_in[8]; /* %i0-7 */
40} __rwindow32_t;
41
42/* Description of available register windows. */
43typedef struct {
44 int __wbcnt;
45 netbsd32___greg32p_t __spbuf[_SPARC_MAXREGWINDOW];
46 __rwindow32_t __wbuf[_SPARC_MAXREGWINDOW];
47} __gwindows32_t;
48
49/* FPU state description */
50typedef struct {
51 union {
52 unsigned int __fpu_regs[32];
53 double __fpu_dregs[16];
54 } __fpu_fr; /* FPR contents */
55 netbsd32___fqp_t __fpu_q; /* pointer to FPU insn queue */
56 unsigned int __fpu_fsr; /* %fsr */
57 unsigned char __fpu_qcnt; /* # entries in __fpu_q */
58 unsigned char __fpu_q_entrysize; /* size of a __fpu_q entry */
59 unsigned char __fpu_en; /* this context valid? */
60} __fpregset32_t;
61
62/* `Extra Register State'(?) */
63typedef struct {
64 unsigned int __xrs_id; /* See below */
65 unsigned int __xrs_ptr; /* points into filler area */
66} __xrs32_t;
67
68typedef struct {
69 __gregset32_t __gregs; /* GPR state */
70 netbsd32___gwindows32p_t __gwins;/* may point to register windows */
71 __fpregset32_t __fpregs; /* FPU state, if any */
72 __xrs32_t __xrs; /* may indicate extra reg state */
73} mcontext32_t;
74
75#define _UC_SETSTACK 0x00010000
76#define _UC_CLRSTACK 0x00020000
77#define _UC_TLSBASE 0x00080000
78
79#define _UC_MACHINE32_PAD 43 /* compat_netbsd32 variant */
80#define _UC_MACHINE32_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_O6])
81#define _UC_MACHINE32_FP(uc) (((__greg32_t *)_UC_MACHINE32_SP(uc))[15])
82
83#endif /* _SPARC64_MCONTEXT_H_ */