1/* $NetBSD: mcontext.h,v 1.6 2011/02/25 14:07:12 joerg Exp $ */ 2 3#ifndef _HPPA_MCONTEXT_H_ 4#define _HPPA_MCONTEXT_H_ 5 6/* 7 * General register state 8 */ 9#define _NGREG 44 10 11#define _REG_PSW 0 12#define _REG_RP 2 13#define _REG_R19 19 14#define _REG_ARG0 26 15#define _REG_DP 27 16#define _REG_RET0 28 17#define _REG_SP 30 18#define _REG_SAR 32 19#define _REG_PCSQH 33 20#define _REG_PCSQT 34 21#define _REG_PCOQH 35 22#define _REG_PCOQT 36 23#define _REG_SR0 37 24#define _REG_SR1 38 25#define _REG_SR2 39 26#define _REG_SR3 40 27#define _REG_SR4 41 28#define _REG_CR26 42 29#define _REG_CR27 43 30 31#ifndef __ASSEMBLER__ 32 33typedef unsigned long __greg_t; 34typedef __greg_t __gregset_t[_NGREG]; 35 36/* 37 * Floating point register state 38 */ 39 40typedef struct { 41 union { 42 unsigned long long __fp_regs[32]; 43 double __fp_dregs[32]; 44 } __fp_fr; 45} __fpregset_t; 46 47typedef struct { 48 __gregset_t __gregs; 49 __fpregset_t __fpregs; 50} mcontext_t; 51 52#define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) 53#define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PCOQH]) 54#define _UC_MACHINE_SET_PC(uc, pc) \ 55do { \ 56 (uc)->uc_mcontext.__gregs[_REG_PCOQH] = (pc); \ 57 (uc)->uc_mcontext.__gregs[_REG_PCOQT] = (pc) + 4; \ 58} while (/*CONSTCOND*/0) 59 60static __inline void * 61__lwp_getprivate_fast(void) 62{ 63 register void *__tmp; 64 65 __asm volatile("mfctl\t27 /* CR_TLS */, %0" : "=r" (__tmp)); 66 67 return __tmp; 68} 69 70#endif /* !__ASSEMBLER__ */ 71 72#define _OFFSETOF_UC_GREGS 40 73 74#define _UC_SETSTACK 0x00010000 75#define _UC_CLRSTACK 0x00020000 76#define _UC_TLSBASE 0x00040000 77 78#endif /* _HPPA_MCONTEXT_H_ */ 79