1 /* pcb.h 1.2 86/01/05 */ 2 3 /* 4 * TAHOE process control block 5 */ 6 struct pcb { 7 int pcb_ksp; /* kernel stack pointer */ 8 int pcb_usp; /* user stack pointer */ 9 int pcb_r0; 10 int pcb_r1; 11 int pcb_r2; 12 int pcb_r3; 13 int pcb_r4; 14 int pcb_r5; 15 int pcb_r6; 16 int pcb_r7; 17 int pcb_r8; 18 int pcb_r9; 19 int pcb_r10; 20 int pcb_r11; 21 int pcb_r12; 22 int pcb_r13; 23 #define pcb_fp pcb_r13 24 int pcb_pc; /* program counter */ 25 int pcb_psl; /* program status longword */ 26 struct pte *pcb_p0br; /* seg 0 base register */ 27 int pcb_p0lr; /* seg 0 length register and astlevel */ 28 struct pte *pcb_p1br; /* seg 1 base register */ 29 int pcb_p1lr; /* seg 1 length register and pme */ 30 struct pte *pcb_p2br; /* seg 2 base register */ 31 int pcb_p2lr; /* seg 2 length register and pme */ 32 int pcb_ach; /* accumulator - high order longword */ 33 int pcb_acl; /* accumulator - low order longword */ 34 #define ACH pcb_ach 35 #define ACL pcb_acl 36 int pcb_hfs; /* fp status register */ 37 /* 38 * Software pcb (extension) 39 */ 40 union { 41 float *faddr; /* address of single precision accumulator */ 42 double *daddr; /* address of double precision accumulator */ 43 } pcb_savacc; 44 #define FSAVACC pcb_savacc.faddr 45 #define DSAVACC pcb_savacc.daddr 46 int pcb_szpt; /* number of pages of user page table */ 47 int pcb_cmap2; 48 int *pcb_sswap; 49 long pcb_sigc[5]; /* sigcode actually 19 bytes */ 50 }; 51 52 extern long *user_psl; 53 54 #define aston() { \ 55 u.u_pcb.pcb_psl |= PSL_SFE; \ 56 if ((int)user_psl != 0) \ 57 *user_psl |= PSL_SFE; \ 58 } 59 60 #define astoff() { \ 61 u.u_pcb.pcb_psl &= ~ PSL_SFE; \ 62 if ((int)user_psl != 0) \ 63 *user_psl &= ~PSL_SFE; \ 64 } 65