xref: /csrg-svn/usr.bin/pascal/src/tmps.h (revision 62219)
148117Sbostic /*-
2*62219Sbostic  * Copyright (c) 1980, 1993
3*62219Sbostic  *	The Regents of the University of California.  All rights reserved.
422252Sdist  *
548117Sbostic  * %sccs.include.redist.c%
648117Sbostic  *
7*62219Sbostic  *	@(#)tmps.h	8.1 (Berkeley) 06/06/93
822252Sdist  */
911339Speter 
1011339Speter /*
1111339Speter  * The following structure is used
1211339Speter  * to keep track of the amount of variable
1311339Speter  * storage required by each block.
1411339Speter  * "Max" is the high water mark, "off"
1511339Speter  * the current need. Temporaries for "for"
1611339Speter  * loops and "with" statements are allocated
1711339Speter  * in the local variable area and these
1811339Speter  * numbers are thereby changed if necessary.
1911339Speter  *
2011339Speter  * for the compiler,
2111339Speter  *	low_water is the lowest number register allocated of its type
2211339Speter  *	next_avail is the next available register of its type
2311339Speter  */
2411339Speter 
2511339Speter #ifdef PC
2611339Speter #ifdef vax
2711339Speter     /*
2811339Speter      *	the number of register types.
2911339Speter      *	the details of how many of each kind of register there is
3011339Speter      *	(and what they are for) is known in tmps.c
3111339Speter      */
3211339Speter #define	NUMREGTYPES	1
3311339Speter #define	REG_GENERAL	0
3411339Speter #endif vax
3511339Speter 
3630029Smckusick #ifdef tahoe
3730029Smckusick     /*
3830029Smckusick      *	the number of register types.
3930029Smckusick      *	the details of how many of each kind of register there is
4030029Smckusick      *	(and what they are for) is known in tmps.c
4130029Smckusick      */
4230029Smckusick #define	NUMREGTYPES	1
4330029Smckusick #define	REG_GENERAL	0
4430029Smckusick #endif tahoe
4530029Smckusick 
4611339Speter #ifdef mc68000
4711339Speter     /*
4811339Speter      *	the number of register types.
4911339Speter      *	the details of how many of each kind of register there is
5011339Speter      *	(and what they are for) is known in tmps.c
5111339Speter      */
5211339Speter #define	NUMREGTYPES	2
5311339Speter #define	REG_DATA	0
5411339Speter #define	REG_ADDR	1
5511339Speter #endif mc68000
5611339Speter #endif PC
5711339Speter 
5811339Speter struct om {
5911339Speter 	long	om_max;
6011339Speter #ifdef PC
6111339Speter 	long	low_water[NUMREGTYPES];
6211339Speter #endif PC
6311339Speter 	struct tmps {
6411339Speter 	    long	om_off;
6511339Speter #ifdef PC
6611339Speter 	    long	next_avail[NUMREGTYPES];
6711339Speter #endif PC
6811339Speter 	}	curtmps;
6911339Speter } sizes[DSPLYSZ];
7011339Speter 
7111339Speter     /*
7211339Speter      *	an enumeration for whether a temporary can be a register.  cf. tmps.c
7311339Speter      */
7411339Speter #define NOREG 0
7511339Speter #define REGOK 1
76