1 /* $NetBSD: mcontext.h,v 1.8 2014/02/19 13:01:51 skrll 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 33 typedef unsigned long __greg_t; 34 typedef __greg_t __gregset_t[_NGREG]; 35 36 /* 37 * Floating point register state 38 */ 39 40 typedef struct { 41 union { 42 unsigned long long __fp_regs[32]; 43 double __fp_dregs[32]; 44 } __fp_fr; 45 } __fpregset_t; 46 47 typedef 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) \ 55 do { \ 56 (uc)->uc_mcontext.__gregs[_REG_PCOQH] = (pc); \ 57 (uc)->uc_mcontext.__gregs[_REG_PCOQT] = (pc) + 4; \ 58 } while (/*CONSTCOND*/0) 59 60 static __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 _UC_SETSTACK 0x00010000 73 #define _UC_CLRSTACK 0x00020000 74 #define _UC_TLSBASE 0x00040000 75 76 #endif /* _HPPA_MCONTEXT_H_ */ 77