1 /*        $NetBSD: mcontext.h,v 1.11 2024/05/18 00:37:41 thorpej 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 */
9 typedef   int       __greg32_t;
10 typedef   __greg32_t          __gregset32_t[_NGREG32];
11 
12 typedef unsigned int          netbsd32___greg32p_t;
13 typedef unsigned int          netbsd32___fqp_t;
14 typedef 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. */
37 typedef 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. */
43 typedef 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 */
50 typedef 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'(?) */
63 typedef struct {
64           unsigned int        __xrs_id; /* See below */
65           unsigned int        __xrs_ptr;          /* points into filler area */
66 } __xrs32_t;
67 
68 typedef 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        _UC_MD_BIT16
76 #define   _UC_CLRSTACK        _UC_MD_BIT17
77 #define   _UC_TLSBASE         _UC_MD_BIT19
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_ */
84