|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)pc.h 5.2 (Berkeley) 11/12/86
7: */
8:
9: #include <setjmp.h>
10:
11: /*
12: * random constants for pc
13: */
14:
15: /*
16: * the name of the display.
17: */
18: #define DISPLAYNAME "__disply"
19:
20: /*
21: * the structure below describes the locals used by the run time system.
22: * at function entry, at least this much space is allocated,
23: * and the following information is filled in:
24: * the address of a routine to close the current frame for unwinding,
25: * a pointer to the display entry for the current static level and
26: * the previous contents of the display for this static level.
27: * the curfile location is used to point to the currently active file,
28: * and is filled in as io is initiated.
29: * one of these structures is allocated on the (negatively growing) stack.
30: * at function entry, fp is set to point to the last field of the struct,
31: * thus the offsets of the fields are as indicated below.
32: */
33: #ifdef vax
34: struct rtlocals {
35: jmp_buf gotoenv;
36: struct iorec *curfile;
37: struct dispsave dsave;
38: } rtlocs;
39: #endif vax
40:
41: #ifdef tahoe
42: struct rtlocals {
43: jmp_buf gotoenv;
44: struct iorec *curfile;
45: struct dispsave dsave;
46: long savedregs[9];
47: } rtlocs;
48: #endif tahoe
49:
50: #ifdef mc68000
51: struct rtlocals {
52: jmp_buf gotoenv;
53: struct iorec *curfile;
54: struct dispsave dsave;
55: } rtlocs;
56: #endif mc68000
57:
58: #define GOTOENVOFFSET ( -sizeof rtlocs )
59: #define CURFILEOFFSET ( GOTOENVOFFSET + sizeof rtlocs.gotoenv )
60: #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile )
61:
62: /*
63: * this is a cookie used to communicate between the
64: * routine entry code and the routine exit code.
65: * mostly it's for labels shared between the two.
66: */
67: #ifdef vax
68: struct entry_exit_cookie {
69: struct nl *nlp;
70: char extname[BUFSIZ];
71: int toplabel;
72: int savlabel;
73: };
74: #define FRAME_SIZE_LABEL "LF"
75: #define SAVE_MASK_LABEL "L"
76: #endif vax
77:
78: #ifdef tahoe
79: struct entry_exit_cookie {
80: struct nl *nlp;
81: char extname[BUFSIZ];
82: int toplabel;
83: int savlabel;
84: };
85: #define FRAME_SIZE_LABEL "LF"
86: #define SAVE_MASK_LABEL "L"
87: #endif tahoe
88:
89: #ifdef mc68000
90: struct entry_exit_cookie {
91: struct nl *nlp;
92: char extname[BUFSIZ];
93: int toplabel;
94: };
95: #define FRAME_SIZE_LABEL "LF"
96: #define PAGE_BREAK_LABEL "LP"
97: #define SAVE_MASK_LABEL "LS"
98: #endif mc68000
99:
100: /*
101: * formats for various names
102: * NAMEFORMAT arbitrary length strings.
103: * EXTFORMAT for externals, a preceding underscore.
104: * LABELFORMAT for label names, a preceding dollar-sign.
105: * PREFIXFORMAT used to print made up names with prefixes.
106: * LABELPREFIX with getlab() makes up label names.
107: * LLABELPREFIX with getlab() makes up sdb labels.
108: * FORMALPREFIX prefix for EXTFORMAT for formal entry points.
109: * a typical use might be to print out a name with a preceeding underscore
110: * with putprintf( EXTFORMAT , 0 , name );
111: */
112: #define NAMEFORMAT "%s"
113: #define EXTFORMAT "_%s"
114: #define LABELFORMAT "$%s"
115: #define PREFIXFORMAT "%s%d"
116: #define LABELPREFIX "L"
117: #define LLABELPREFIX "LL"
118: #define FORMALPREFIX "__"
119:
120: /*
121: * the name of the statement counter
122: */
123: #define STMTCOUNT "__stcnt"
124:
125: /*
126: * the name of the pcp counters
127: */
128: #define PCPCOUNT "__pcpcount"
129:
130: /*
131: * a vector of pointer to enclosing functions for fully qualified names.
132: */
133: char *enclosing[ DSPLYSZ ];
134:
135: #ifdef vax
136: /*
137: * the runtime framepointer and argumentpointer registers
138: */
139: # define P2FP 13
140: # define P2FPNAME "fp"
141: # define P2AP 12
142: # define P2APNAME "ap"
143:
144: /*
145: * the register save mask for saving no registers
146: */
147: # define RSAVEMASK ( 0 )
148:
149: /*
150: * runtime check mask for divide check and integer overflow
151: */
152: # define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) )
153:
154: /*
155: * and of course ...
156: */
157: # define BITSPERBYTE 8
158: #endif vax
159:
160: #ifdef tahoe
161: /*
162: * the runtime framepointer and argumentpointer registers
163: */
164: # define P2FP 13
165: # define P2FPNAME "fp"
166: # define P2AP 13
167: # define P2APNAME "fp"
168:
169: /*
170: * the register save mask for saving no registers
171: */
172: # define RSAVEMASK ( 0 )
173:
174: /*
175: * divide check and integer overflow don't exist in the save mask
176: */
177: # define RUNCHECK ( 0 )
178:
179: /*
180: * and of course ...
181: */
182: # define BITSPERBYTE 8
183: #endif tahoe
184:
185: #ifdef mc68000
186: /*
187: * these magic numbers lifted from pcc/mac2defs
188: * the offsets are for mapping data and address register numbers
189: * to linear register numbers. e.g. d2 ==> r2, and a2 ==> r10.
190: */
191: # define DATA_REG_OFFSET 0
192: # define ADDR_REG_OFFSET 8
193: # define P2FPNAME "a6"
194: # define P2FP (ADDR_REG_OFFSET + 6)
195: # define P2APNAME "a6"
196: # define P2AP (ADDR_REG_OFFSET + 6)
197:
198: /*
199: * and still ...
200: */
201: # define BITSPERBYTE 8
202: #endif mc68000
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.