1: /*
2: * C code generator header
3: */
4:
5: #include <stdio.h>
6:
7: #define LTYPE long /* change to int for no long consts */
8: #define NCPS 8
9: #define NULL 0
10:
11: /*
12: * Tree node for unary and binary
13: */
14: struct tnode {
15: int op;
16: int type;
17: int degree;
18: struct tnode *tr1, *tr2;
19: };
20:
21: /*
22: * tree names for locals
23: */
24: struct tname {
25: int op;
26: int type;
27: char class;
28: char regno;
29: int offset;
30: int nloc;
31: };
32:
33: /*
34: * tree names for externals
35: */
36: struct xtname {
37: int op;
38: int type;
39: char class;
40: char regno;
41: int offset;
42: char name[NCPS];
43: };
44:
45: struct tconst {
46: int op;
47: int type;
48: int value;
49: };
50:
51: /*
52: * long constants
53: */
54: struct lconst {
55: int op;
56: int type;
57: LTYPE lvalue;
58: };
59:
60: struct ftconst {
61: int op;
62: int type;
63: int value;
64: double fvalue;
65: };
66:
67: /*
68: * Node used for field assignemnts
69: */
70: struct fasgn {
71: int op;
72: int type;
73: int degree;
74: struct tnode *tr1, *tr2;
75: int mask;
76: };
77:
78: struct optab {
79: char tabdeg1;
80: char tabtyp1;
81: char tabdeg2;
82: char tabtyp2;
83: char *tabstring;
84: };
85:
86: struct table {
87: int tabop;
88: struct optab *tabp;
89: };
90:
91: struct instab {
92: int iop;
93: char *str1;
94: char *str2;
95: };
96:
97: struct swtab {
98: int swlab;
99: int swval;
100: };
101:
102: char maprel[];
103: char notrel[];
104: int nreg;
105: int isn;
106: int namsiz;
107: int line;
108: int nerror;
109: struct table cctab[];
110: struct table efftab[];
111: struct table regtab[];
112: struct table sptab[];
113: struct table lsptab[1];
114: struct instab instab[];
115: struct instab branchtab[];
116: int opdope[];
117: char *opntab[];
118: int nstack;
119: int nfloat;
120: struct tname sfuncr;
121: char *funcbase;
122: char *curbase;
123: char *coremax;
124: struct tconst czero, cone;
125: struct ftconst fczero;
126: long totspace;
127: /*
128: * Some special stuff for long comparisons
129: */
130: int xlab1, xlab2, xop, xzero;
131:
132: /*
133: operators
134: */
135: #define EOFC 0
136: #define SEMI 1
137: #define LBRACE 2
138: #define RBRACE 3
139: #define LBRACK 4
140: #define RBRACK 5
141: #define LPARN 6
142: #define RPARN 7
143: #define COLON 8
144: #define COMMA 9
145: #define FSEL 10
146: #define FSELR 11
147: #define FSELT 12
148: #define FSELA 16
149: #define ULSH 17
150: #define ASULSH 18
151:
152: #define KEYW 19
153: #define NAME 20
154: #define CON 21
155: #define STRING 22
156: #define FCON 23
157: #define SFCON 24
158: #define LCON 25
159: #define SLCON 26
160:
161: #define AUTOI 27
162: #define AUTOD 28
163: #define INCBEF 30
164: #define DECBEF 31
165: #define INCAFT 32
166: #define DECAFT 33
167: #define EXCLA 34
168: #define AMPER 35
169: #define STAR 36
170: #define NEG 37
171: #define COMPL 38
172:
173: #define DOT 39
174: #define PLUS 40
175: #define MINUS 41
176: #define TIMES 42
177: #define DIVIDE 43
178: #define MOD 44
179: #define RSHIFT 45
180: #define LSHIFT 46
181: #define AND 47
182: #define ANDN 55
183: #define OR 48
184: #define EXOR 49
185: #define ARROW 50
186: #define ITOF 51
187: #define FTOI 52
188: #define LOGAND 53
189: #define LOGOR 54
190: #define FTOL 56
191: #define LTOF 57
192: #define ITOL 58
193: #define LTOI 59
194: #define ITOP 13
195: #define PTOI 14
196: #define LTOP 15
197:
198: #define EQUAL 60
199: #define NEQUAL 61
200: #define LESSEQ 62
201: #define LESS 63
202: #define GREATEQ 64
203: #define GREAT 65
204: #define LESSEQP 66
205: #define LESSP 67
206: #define GREATQP 68
207: #define GREATP 69
208:
209: #define ASPLUS 70
210: #define ASMINUS 71
211: #define ASTIMES 72
212: #define ASDIV 73
213: #define ASMOD 74
214: #define ASRSH 75
215: #define ASLSH 76
216: #define ASAND 77
217: #define ASOR 78
218: #define ASXOR 79
219: #define ASSIGN 80
220: #define TAND 81
221: #define LTIMES 82
222: #define LDIV 83
223: #define LMOD 84
224: #define ASANDN 85
225: #define LASTIMES 86
226: #define LASDIV 87
227: #define LASMOD 88
228:
229: #define QUEST 90
230: #define MAX 93
231: #define MAXP 94
232: #define MIN 95
233: #define MINP 96
234: #define LLSHIFT 91
235: #define ASLSHL 92
236: #define SEQNC 97
237: #define CALL1 98
238: #define CALL2 99
239: #define CALL 100
240: #define MCALL 101
241: #define JUMP 102
242: #define CBRANCH 103
243: #define INIT 104
244: #define SETREG 105
245: #define LOAD 106
246: #define ITOC 109
247: #define RFORCE 110
248:
249: /*
250: * Intermediate code operators
251: */
252: #define BRANCH 111
253: #define LABEL 112
254: #define NLABEL 113
255: #define RLABEL 114
256: #define STRASG 115
257: #define STRSET 116
258: #define BDATA 200
259: #define PROG 202
260: #define DATA 203
261: #define BSS 204
262: #define CSPACE 205
263: #define SSPACE 206
264: #define SYMDEF 207
265: #define SAVE 208
266: #define RETRN 209
267: #define EVEN 210
268: #define PROFIL 212
269: #define SWIT 213
270: #define EXPR 214
271: #define SNAME 215
272: #define RNAME 216
273: #define ANAME 217
274: #define NULLOP 218
275: #define SETSTK 219
276: #define SINIT 220
277: #define GLOBAL 221
278: #define C3BRANCH 222
279:
280: /*
281: * types
282: */
283: #define INT 0
284: #define CHAR 1
285: #define FLOAT 2
286: #define DOUBLE 3
287: #define STRUCT 4
288: #define RSTRUCT 5
289: #define LONG 6
290: #define UNSIGN 7
291:
292: #define TYLEN 2
293: #define TYPE 07
294: #define XTYPE (03<<3)
295: #define PTR 010
296: #define FUNC 020
297: #define ARRAY 030
298:
299: /*
300: storage classes
301: */
302: #define KEYWC 1
303: #define MOS 10
304: #define AUTO 11
305: #define EXTERN 12
306: #define STATIC 13
307: #define REG 14
308: #define STRTAG 15
309: #define ARG 16
310: #define OFFS 20
311: #define XOFFS 21
312: #define SOFFS 22
313:
314: /*
315: Flag bits
316: */
317:
318: #define BINARY 01
319: #define LVALUE 02
320: #define RELAT 04
321: #define ASSGOP 010
322: #define LWORD 020
323: #define RWORD 040
324: #define COMMUTE 0100
325: #define RASSOC 0200
326: #define LEAF 0400
327: #define CNVRT 01000
Defined variables
cctab
defined in line
109; used 17 times
- in /usr/src/cmd/c/c10.c line
199,
257,
331,
344,
352,
366,
420,
430,
490,
621,
735,
822,
907
- in /usr/src/cmd/c/c11.c line
607,
643,
666,
924
cone
defined in line
124; used 2 times
efftab
defined in line
110; used 14 times
- in /usr/src/cmd/c/c10.c line
207,
246,
298,
335,
348,
492,
887,
909
- in /usr/src/cmd/c/c11.c line
585,
918-921(2),
1086,
1108,
1123
isn
defined in line
105; used 25 times
- in /usr/src/cmd/c/c10.c line
421-426(3),
432-436(2),
1060-1061(3)
- in /usr/src/cmd/c/c11.c line
374,
384-385(3),
423-430(4),
560,
574,
708,
978,
1077,
1117-1118(3)
- in /usr/src/cmd/c/c12.c line
311
line
defined in line
107; used 3 times
nreg
defined in line
104; used 8 times
opdope
defined in line
116; used 31 times
- in /usr/src/cmd/c/c10.c line
103,
118-125(4),
143,
198,
332,
352,
415,
502,
639,
814-818(2),
846,
939
- in /usr/src/cmd/c/c11.c line
29-32(2),
269,
285,
594,
603,
609,
646,
1026
- in /usr/src/cmd/c/c12.c line
27,
77,
247,
464,
539,
1000
xop
defined in line
130; used 4 times
Defined struct's
fasgn
defined in line
70; used 6 times
instab
defined in line
91; used 12 times
lconst
defined in line
54; used 10 times
optab
defined in line
78; used 4 times
swtab
defined in line
97; used 10 times
table
defined in line
86; used 26 times
tname
defined in line
24; used 10 times
tnode
defined in line
14; used 166 times
- in line 18(2),
74(2)
- in /usr/src/cmd/c/c10.c line
87(2),
93-94(4),
177-182(4),
400-406(6),
806-810(4),
840-843(4),
928-930(4),
955-957(4),
1001-1004(6),
1026(2),
1078-1082(6),
1095-1097(4),
1185(2)
- in /usr/src/cmd/c/c11.c line
16-18(4),
41-44(4),
129-131(4),
141-143(4),
158-160(4),
199-202(4),
244-247(4),
264-266(4),
279(2),
485(2),
497-500(4),
545-549(4),
635-639(4),
771-772(4),
1069(2),
1127(2)
- in /usr/src/cmd/c/c12.c line
10-16(6),
269-272(4),
555-557(4),
601-602(4),
609-610(4),
716-720(8),
780-782(4),
847-849(4),
945-947(4),
991-993(4),
1043-1045(4),
1056-1058(4)
Defined macros
AMPER
defined in line
168; used 13 times
AND
defined in line
181; used 6 times
ANDN
defined in line
182; used 4 times
ARG
defined in line
309;
never used
ASOR
defined in line
217; used 2 times
AUTO
defined in line
304; used 1 times
BSS
defined in line
261;
never used
CALL
defined in line
239; used 2 times
CHAR
defined in line
284; used 18 times
- in /usr/src/cmd/c/c10.c line
469(2),
578,
587(2),
861,
1105
- in /usr/src/cmd/c/c11.c line
33,
148,
208,
220
- in /usr/src/cmd/c/c12.c line
41,
135-138(2),
347,
471,
504,
642
CON
defined in line
154; used 50 times
- in /usr/src/cmd/c/c10.c line
24-25(2),
198,
461,
714,
1121,
1127-1130(2),
1142,
1170
- in /usr/src/cmd/c/c11.c line
22,
189,
257,
488,
613,
660
- in /usr/src/cmd/c/c12.c line
97,
109,
135,
148-153(2),
186,
208,
221,
236(2),
247,
289,
323,
343,
357,
415,
447,
475,
484,
508,
516,
623(2),
648,
655,
727-731(2),
855,
864,
963-964(2),
1012,
1048-1050(2)
DATA
defined in line
260;
never used
DOT
defined in line
173;
never used
EOFC
defined in line
135;
never used
EQUAL
defined in line
198; used 17 times
EVEN
defined in line
267;
never used
EXOR
defined in line
184; used 2 times
EXPR
defined in line
270; used 1 times
FCON
defined in line
156; used 10 times
FSEL
defined in line
145; used 3 times
FTOI
defined in line
187; used 1 times
FTOL
defined in line
190; used 2 times
FUNC
defined in line
296;
never used
GREAT
defined in line
203; used 12 times
INIT
defined in line
243;
never used
INT
defined in line
283; used 27 times
- in /usr/src/cmd/c/c10.c line
24-25(2),
312,
1037,
1049,
1109-1112(2)
- in /usr/src/cmd/c/c11.c line
208-210(2),
962,
986(3),
1094
- in /usr/src/cmd/c/c12.c line
42,
60,
194,
289,
370,
416,
472,
505,
588-589(3),
856,
865
ITOC
defined in line
246;
never used
ITOF
defined in line
186; used 1 times
ITOL
defined in line
192; used 18 times
- in /usr/src/cmd/c/c10.c line
309,
449,
624,
1169
- in /usr/src/cmd/c/c11.c line
26,
595(2),
660,
962
- in /usr/src/cmd/c/c12.c line
96,
109,
319,
483,
498,
516,
855,
864,
1050
ITOP
defined in line
194; used 1 times
JUMP
defined in line
241;
never used
KEYW
defined in line
152;
never used
LCON
defined in line
158; used 16 times
- in /usr/src/cmd/c/c10.c line
1123,
1149,
1173
- in /usr/src/cmd/c/c11.c line
966
- in /usr/src/cmd/c/c12.c line
110,
291,
307,
479,
486,
512,
518,
637,
853,
862,
929-934(2)
LDIV
defined in line
222; used 1 times
LEAF
defined in line
326; used 10 times
LESS
defined in line
201; used 12 times
LMOD
defined in line
223; used 1 times
LOAD
defined in line
245; used 5 times
LONG
defined in line
289; used 38 times
- in /usr/src/cmd/c/c10.c line
308,
358,
449(2),
490,
652,
766,
1041,
1067,
1191
- in /usr/src/cmd/c/c11.c line
190-193(2),
251,
286,
602-603(2),
664,
920,
962-967(2),
1096
- in /usr/src/cmd/c/c12.c line
66,
96,
122,
200,
215,
245,
292,
301,
319,
440,
487,
499,
519,
688,
935,
1037,
1073
LTOF
defined in line
191; used 2 times
LTOI
defined in line
193; used 8 times
LTOP
defined in line
196;
never used
LTYPE
defined in line
7; used 1 times
MAX
defined in line
230;
never used
MAXP
defined in line
231;
never used
MIN
defined in line
232;
never used
MINP
defined in line
233;
never used
MOD
defined in line
178; used 3 times
MOS
defined in line
303;
never used
NAME
defined in line
153; used 25 times
- in /usr/src/cmd/c/c10.c line
27,
276,
292,
344-348(2),
857,
878,
884,
935,
960,
1044
- in /usr/src/cmd/c/c11.c line
102,
189,
220,
945,
1098-1099(2)
- in /usr/src/cmd/c/c12.c line
22,
129(2),
346,
412,
433,
441-446(2)
NCPS
defined in line
8; used 1 times
NEG
defined in line
170; used 2 times
NULL
defined in line
9;
never used
OFFS
defined in line
310; used 5 times
OR
defined in line
183; used 2 times
PLUS
defined in line
174; used 24 times
- in /usr/src/cmd/c/c10.c line
460-463(2),
848-852(2),
889,
964-967(2),
1049
- in /usr/src/cmd/c/c11.c line
255,
1139
- in /usr/src/cmd/c/c12.c line
67,
370,
413,
446,
634,
648,
667,
691,
735,
761,
964,
972-974(2)
- in /usr/src/cmd/c/c13.c line
312
PROG
defined in line
259;
never used
PTOI
defined in line
195; used 3 times
PTR
defined in line
295; used 13 times
REG
defined in line
307; used 11 times
RELAT
defined in line
320; used 14 times
- in /usr/src/cmd/c/c10.c line
198,
352,
420,
449
- in /usr/src/cmd/c/c11.c line
269,
285,
594,
603,
609,
646
- in /usr/src/cmd/c/c12.c line
127,
244-247(2),
464
SAVE
defined in line
265;
never used
SEMI
defined in line
136;
never used
STAR
defined in line
169; used 16 times
- in /usr/src/cmd/c/c10.c line
138,
145,
629,
710,
852,
964,
1007,
1044,
1088
- in /usr/src/cmd/c/c11.c line
250,
1098-1099(2),
1135
- in /usr/src/cmd/c/c12.c line
136,
280,
410
SWIT
defined in line
269;
never used
TAND
defined in line
220; used 3 times
TIMES
defined in line
176; used 12 times
TYPE
defined in line
293; used 8 times
ULSH
defined in line
149; used 3 times
UNSIGN
defined in line
290; used 26 times
- in /usr/src/cmd/c/c10.c line
731,
767
- in /usr/src/cmd/c/c11.c line
27-29(2),
208-210(2),
599(2)
- in /usr/src/cmd/c/c12.c line
66,
98-103(3),
190,
222-227(2),
299-302(2),
318,
401,
488,
494,
520,
566,
590,
661,
692
Usage of this include