1 /*- 2 * Copyright (c) 1988 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Computer Consoles Inc. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)pcb.h 7.2 (Berkeley) 05/08/91 11 */ 12 13 /* 14 * TAHOE process control block 15 */ 16 struct pcb { 17 int pcb_ksp; /* kernel stack pointer */ 18 int pcb_usp; /* user stack pointer */ 19 int pcb_r0; 20 int pcb_r1; 21 int pcb_r2; 22 int pcb_r3; 23 int pcb_r4; 24 int pcb_r5; 25 int pcb_r6; 26 int pcb_r7; 27 int pcb_r8; 28 int pcb_r9; 29 int pcb_r10; 30 int pcb_r11; 31 int pcb_r12; 32 int pcb_r13; 33 #define pcb_fp pcb_r13 34 int pcb_pc; /* program counter */ 35 int pcb_psl; /* program status longword */ 36 struct pte *pcb_p0br; /* seg 0 base register */ 37 int pcb_p0lr; /* seg 0 length register and astlevel */ 38 struct pte *pcb_p1br; /* seg 1 base register */ 39 int pcb_p1lr; /* seg 1 length register and pme */ 40 struct pte *pcb_p2br; /* seg 2 base register */ 41 int pcb_p2lr; /* seg 2 length register and pme */ 42 int pcb_ach; /* accumulator - high order longword */ 43 int pcb_acl; /* accumulator - low order longword */ 44 #define ACH pcb_ach 45 #define ACL pcb_acl 46 int pcb_hfs; /* fp status register */ 47 /* 48 * Software pcb (extension) 49 */ 50 union { 51 float *faddr; /* address of single precision accumulator */ 52 double *daddr; /* address of double precision accumulator */ 53 } pcb_savacc; 54 #define FSAVACC pcb_savacc.faddr 55 #define DSAVACC pcb_savacc.daddr 56 int pcb_szpt; /* number of pages of user page table */ 57 int pcb_cmap2; 58 int *pcb_sswap; 59 long pcb_sigc[5]; /* sigcode actually 19 bytes */ 60 }; 61 62 extern long *user_psl; 63 64 #define aston() { \ 65 u.u_pcb.pcb_psl |= PSL_SFE; \ 66 if ((int)user_psl != 0) \ 67 *user_psl |= PSL_SFE; \ 68 } 69 70 #define astoff() { \ 71 u.u_pcb.pcb_psl &= ~ PSL_SFE; \ 72 if ((int)user_psl != 0) \ 73 *user_psl &= ~PSL_SFE; \ 74 } 75