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