1 /* 2 * TAHOE process control block 3 */ 4 5 struct pcb 6 { 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; /* f.p. 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 short pcb_ckey; /* cache code key (proc index if NPROC<255) */ 50 short pcb_dkey; /* cache data key */ 51 int pcb_sigc[4]; 52 }; 53 54 extern long *user_psl; 55 56 #define aston() \ 57 { \ 58 u.u_pcb.pcb_psl |= PSL_SFE; \ 59 if ((int)user_psl != 0) *user_psl |= PSL_SFE; \ 60 } 61 62 #define astoff() \ 63 { \ 64 u.u_pcb.pcb_psl &= ~ PSL_SFE; \ 65 if ((int)user_psl != 0) *user_psl &= ~PSL_SFE; \ 66 } 67