xref: /csrg-svn/sys/tahoe/include/pcb.h (revision 25678)
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