Home | History | Annotate | Line # | Download | only in include
      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