source: mainline/uspace/app/pcc/f77/fcom/defs.h@ f74ec77

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since f74ec77 was a7de7182, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 14 years ago

Added pcc source tree (contents of pcc-1.0.0.tgz)

  • Property mode set to 100644
File size: 13.1 KB
Line 
1/* $Id: defs.h,v 1.22 2008/12/24 17:40:41 sgk Exp $ */
2/*
3 * Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * Redistributions of source code and documentation must retain the above
10 * copyright notice, this list of conditions and the following disclaimer.
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditionsand the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed or owned by Caldera
17 * International, Inc.
18 * Neither the name of Caldera International, Inc. nor the names of other
19 * contributors may be used to endorse or promote products derived from
20 * this software without specific prior written permission.
21 *
22 * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
23 * INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
24 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 * DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE
27 * FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OFLIABILITY, WHETHER IN CONTRACT,
31 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35#include <stdio.h>
36#include <ctype.h>
37#include <stdlib.h>
38
39#define VL 6
40#define XL 8
41
42#define MAXINCLUDES 10
43#define MAXLITERALS 20
44#define MAXCTL 20
45#define MAXHASH 401
46#define MAXSTNO 1000
47#define MAXEXT 200
48#define MAXEQUIV 150
49#define MAXLABLIST 100
50
51typedef struct bigblock *bigptr;
52typedef union chainedblock *chainp;
53
54extern FILE *infile;
55extern FILE *diagfile;
56extern long int headoffset;
57
58extern char token [ ];
59extern int toklen;
60extern int lineno;
61extern char *infname;
62extern int needkwd;
63extern struct labelblock *thislabel;
64
65extern int mflag, tflag;
66
67extern flag profileflag;
68extern flag optimflag;
69extern flag quietflag;
70extern flag nowarnflag;
71extern flag ftn66flag;
72extern flag shiftcase;
73extern flag undeftype;
74extern flag shortsubs;
75extern flag onetripflag;
76extern flag checksubs;
77extern flag debugflag;
78extern int nerr;
79extern int nwarn;
80extern int ndata;
81
82extern int parstate;
83extern flag headerdone;
84extern int blklevel;
85extern flag saveall;
86extern flag substars;
87extern int impltype[ ];
88extern int implleng[ ];
89extern int implstg[ ];
90
91extern int tyint;
92extern int tylogical;
93extern ftnint typesize[];
94extern int typealign[];
95extern int procno;
96extern int proctype;
97extern char * procname;
98extern int rtvlabel[ ];
99extern int fudgelabel; /* to confuse the pdp11 optimizer */
100extern struct bigblock *typeaddr;
101extern struct bigblock *retslot;
102extern int cxslot;
103extern int chslot;
104extern int chlgslot;
105extern int procclass;
106extern ftnint procleng;
107extern int nentry;
108extern flag multitype;
109extern int blklevel;
110extern int lastlabno;
111extern int lastvarno;
112extern int lastargslot;
113extern int argloc;
114extern ftnint autoleng;
115extern ftnint bssleng;
116extern int retlabel;
117extern int ret0label;
118extern int dorange;
119extern int regnum[ ];
120extern bigptr regnamep[ ];
121extern int maxregvar;
122extern int highregvar;
123
124extern chainp templist;
125extern chainp holdtemps;
126extern chainp entries;
127extern chainp rpllist;
128extern chainp curdtp;
129extern ftnint curdtelt;
130extern flag toomanyinit;
131
132extern flag inioctl;
133extern int iostmt;
134extern struct bigblock *ioblkp;
135extern int nioctl;
136extern int nequiv;
137extern int nintnames;
138extern int nextnames;
139
140
141struct chain
142 {
143 chainp nextp;
144 bigptr datap;
145 };
146
147extern chainp chains;
148
149struct ctlframe
150 {
151 unsigned ctltype:8;
152 unsigned dostepsign:8;
153 int ctlabels[4];
154 int dolabel;
155 struct bigblock *donamep;
156 bigptr domax;
157 bigptr dostep;
158 };
159#define endlabel ctlabels[0]
160#define elselabel ctlabels[1]
161#define dobodylabel ctlabels[1]
162#define doposlabel ctlabels[2]
163#define doneglabel ctlabels[3]
164extern struct ctlframe ctls[ ];
165extern struct ctlframe *ctlstack;
166extern struct ctlframe *lastctl;
167
168struct extsym
169 {
170 char extname[XL];
171 unsigned extstg:4;
172 unsigned extsave:1;
173 unsigned extinit:1;
174 chainp extp;
175 ftnint extleng;
176 ftnint maxleng;
177 };
178
179extern struct extsym extsymtab[ ];
180extern struct extsym *nextext;
181extern struct extsym *lastext;
182
183struct labelblock
184 {
185 int labelno;
186 unsigned blklevel:8;
187 unsigned labused:1;
188 unsigned labinacc:1;
189 unsigned labdefined:1;
190 unsigned labtype:2;
191 ftnint stateno;
192 };
193
194extern struct labelblock labeltab[ ];
195extern struct labelblock *labtabend;
196extern struct labelblock *highlabtab;
197
198struct entrypoint
199 {
200 chainp nextp;
201 struct extsym *entryname;
202 chainp arglist;
203 int entrylabel;
204 int typelabel;
205 ptr enamep;
206 };
207
208struct primblock
209 {
210 struct bigblock *namep;
211 struct bigblock *argsp;
212 bigptr fcharp;
213 bigptr lcharp;
214 };
215
216
217struct hashentry
218 {
219 int hashval;
220 struct bigblock *varp;
221 };
222extern struct hashentry hashtab[ ];
223extern struct hashentry *lasthash;
224
225struct intrpacked /* bits for intrinsic function description */
226 {
227 unsigned f1:3;
228 unsigned f2:4;
229 unsigned f3:7;
230 };
231
232struct nameblock
233 {
234 char varname[VL];
235 unsigned vdovar:1;
236 unsigned vdcldone:1;
237 unsigned vadjdim:1;
238 unsigned vsave:1;
239 unsigned vprocclass:3;
240 unsigned vregno:4;
241 union {
242 int varno;
243 chainp vstfdesc; /* points to (formals, expr) pair */
244 struct intrpacked intrdesc; /* bits for intrinsic function */
245 } vardesc;
246 struct dimblock *vdim;
247 int voffset;
248 };
249
250
251struct paramblock
252 {
253 char varname[VL];
254 bigptr paramval;
255 } ;
256
257
258struct exprblock
259 {
260 unsigned opcode:6;
261 bigptr leftp;
262 bigptr rightp;
263 };
264
265struct dcomplex {
266 double dreal, dimag;
267};
268
269union constant
270 {
271 char *ccp;
272 ftnint ci;
273 double cd[2];
274 struct dcomplex dc;
275 };
276
277struct constblock
278 {
279 union constant fconst;
280 };
281
282
283struct listblock
284 {
285 chainp listp;
286 };
287
288
289
290struct addrblock
291 {
292 int memno;
293 bigptr memoffset;
294 unsigned istemp:1;
295 unsigned ntempelt:10;
296 };
297
298
299
300struct errorblock
301 {
302 int pad;
303 };
304
305
306struct dimblock
307 {
308 int ndim;
309 bigptr nelt;
310 bigptr baseoffset;
311 bigptr basexpr;
312 struct
313 {
314 bigptr dimsize;
315 bigptr dimexpr;
316 } dims[1];
317 };
318
319
320struct impldoblock /* XXXX */
321 {
322#define isactive vtype
323#define isbusy vclass
324 struct bigblock *varnp;
325 struct bigblock *varvp;
326 bigptr implb;
327 bigptr impub;
328 bigptr impstep;
329 ftnint impdiff;
330 ftnint implim;
331 chainp datalist;
332 };
333
334
335struct rplblock /* name replacement block */
336 {
337 chainp nextp;
338 struct bigblock *rplnp;
339 ptr rplvp;
340 struct bigblock *rplxp;
341 int rpltag;
342 };
343
344
345
346struct equivblock
347 {
348 ptr equivs;
349 unsigned eqvinit:1;
350 long int eqvtop;
351 long int eqvbottom;
352 } ;
353#define eqvleng eqvtop
354
355extern struct equivblock eqvclass[ ];
356
357
358struct eqvchain
359 {
360 chainp nextp;
361 ptr eqvitem;
362 long int eqvoffset;
363 } ;
364
365union chainedblock
366 {
367 struct chain chain;
368 struct entrypoint entrypoint;
369 struct rplblock rplblock;
370 struct eqvchain eqvchain;
371 };
372
373
374struct bigblock {
375 unsigned tag:4;
376 unsigned vtype:4;
377 unsigned vclass:4;
378 unsigned vstg:4;
379 bigptr vleng;
380 union {
381 struct exprblock _expr;
382 struct addrblock _addr;
383 struct constblock _const;
384 struct errorblock _error;
385 struct listblock _list;
386 struct primblock _prim;
387 struct nameblock _name;
388 struct paramblock _param;
389 struct impldoblock _impldo;
390 } _u;
391#define b_expr _u._expr
392#define b_addr _u._addr
393#define b_const _u._const
394#define b_error _u._error
395#define b_list _u._list
396#define b_prim _u._prim
397#define b_name _u._name
398#define b_param _u._param
399#define b_impldo _u._impldo
400};
401
402struct literal
403 {
404 short littype;
405 short litnum;
406 union {
407 ftnint litival;
408 double litdval;
409 struct {
410 char litclen; /* small integer */
411 char litcstr[XL];
412 } litcval;
413 } litval;
414 };
415
416extern struct literal litpool[ ];
417extern int nliterals;
418
419
420
421
422
423/* popular functions with non integer return values */
424#define expptr bigptr
425#define tagptr bigptr
426
427ptr cpblock(int ,void *);
428
429ptr ckalloc(int);
430char *varstr(int, char *), *nounder(int, char *), *varunder(int, char *);
431char *copyn(int, char *), *copys(char *);
432chainp hookup(chainp, chainp), mkchain(bigptr, chainp);
433ftnint convci(int, char *), iarrlen(struct bigblock *q);
434ftnint lmin(ftnint, ftnint), lmax(ftnint, ftnint);
435ftnint simoffset(expptr *);
436char *memname(int, int), *convic(ftnint), *setdoto(char *);
437double convcd(int, char *);
438struct extsym *mkext(char *),
439 *newentry(struct bigblock *),
440 *comblock(int, char *s);
441struct bigblock *mkname(int, char *);
442struct labelblock *mklabel(ftnint);
443struct bigblock *addrof(expptr), *call1(int, char *, expptr),
444 *call2(int, char *, expptr, expptr),
445 *call3(int, char *, expptr, expptr, expptr),
446 *call4(int, char *, expptr, expptr, expptr, expptr);
447struct bigblock *call0(int, char *), *mkexpr(int, bigptr, bigptr);
448struct bigblock *callk(int, char *, bigptr);
449
450struct bigblock *builtin(int, char *), *fmktemp(int, bigptr),
451 *mktmpn(int, int, bigptr), *nextdata(ftnint *, ftnint *),
452 *autovar(int, int, bigptr), *mklhs(struct bigblock *),
453 *mkaddr(struct bigblock *), *putconst(struct bigblock *),
454 *memversion(struct bigblock *);
455struct bigblock *mkscalar(struct bigblock *np);
456struct bigblock *realpart(struct bigblock *p);
457struct bigblock *imagpart(struct bigblock *p);
458
459struct bigblock *mkintcon(ftnint), *mkbitcon(int, int, char *),
460 *mklogcon(int), *mkaddcon(int), *mkrealcon(int, double),
461 *mkstrcon(int, char *), *mkcxcon(bigptr,bigptr);
462bigptr mkconst(int t);
463
464bigptr mklist(chainp p);
465bigptr mkiodo(chainp, chainp);
466
467
468bigptr mkconv(int, bigptr),
469 mkfunct(struct bigblock *), fixexpr(struct bigblock *),
470 fixtype(bigptr);
471
472
473bigptr cpexpr(bigptr), mkprim(bigptr, struct bigblock *, bigptr, bigptr);
474struct bigblock *mkarg(int, int);
475struct bigblock *errnode(void);
476void initkey(void), prtail(void), puteof(void), done(int);
477void fileinit(void), procinit(void), endproc(void), doext(void), preven(int);
478int inilex(char *), yyparse(void), newlabel(void), lengtype(int, int);
479void err(char *, ...), warn(char *, ...), fatal(char *, ...), enddcl(void);
480void p2pass(char *s), frexpr(bigptr), execerr(char *, ...);
481void setimpl(int, ftnint, int, int), setlog(void), newproc(void);
482void prdbginfo(void), impldcl(struct bigblock *p);
483void putbracket(void), enddcl(void), doequiv(void);
484void puthead(char *), startproc(struct extsym *, int);
485void dclerr(char *s, struct bigblock *v), putforce(int, bigptr);
486void entrypt(int, int, ftnint, struct extsym *, chainp);
487void settype(struct bigblock *, int, int), putlabel(int);
488void putbranch(struct bigblock *p), goret(int), putrbrack(int);
489void prolog(struct entrypoint *, struct bigblock *), prendproc(void);
490void prlocvar(char *, ftnint), prext(char *, ftnint, int);
491void vardcl(struct bigblock *v), frchain(chainp *p);
492void frtemp(struct bigblock *p), incomm(struct extsym *, struct bigblock *);
493void setintr(struct bigblock * v), setext(struct bigblock * v);
494struct uux { expptr lb, ub; };
495void setbound(struct bigblock *, int, struct uux []);
496void setfmt(struct labelblock *lp), frdata(chainp), frrpl(void),
497 dataval(struct bigblock *, struct bigblock *),
498 consnegop(struct bigblock *p), exdo(int, chainp), exelse(void),
499 exendif(void), exif(bigptr), exelif(bigptr),
500 exequals(struct bigblock *, bigptr),
501 exassign(struct bigblock *, struct labelblock *),
502 exarif(bigptr, struct labelblock *, struct labelblock *,
503 struct labelblock *);
504
505
506
507int intrfunct(char s[VL]), eqn(int, char *, char *);
508int fmtstmt(struct labelblock *lp);
509int cktype(int, int, int);
510int yylex(void), inregister(struct bigblock *);
511int inilex(char *), iocname(void);
512int maxtype(int, int), flog2(ftnint), hextoi(int);
513int cmpstr(char *, char *, ftnint, ftnint);
514int enregister(struct bigblock *np);
515int conssgn(bigptr p);
516int fixargs(int, struct bigblock *);
517int addressable(bigptr p);
518
519void prlabel(int);
520void prconi(FILE *, int, ftnint);
521void prcona(ftnint);
522void prconr(FILE *, int, double);
523void prarif(bigptr, int, int, int);
524void putstr(char *, ftnint);
525NODE *putex1(bigptr p);
526void puteq(bigptr, bigptr);
527void popstack(chainp *p);
528void consconv(int, union constant *, int, union constant *);
529void yyerror(char *s);
530void enddo(int);
531void doinclude(char *);
532void flline(void);
533void startioctl(void);
534void endioctl(void), endio(void), ioclause(int, bigptr), doio(chainp);
535void excall(struct bigblock *, struct bigblock *, int, struct labelblock *[]);
536void exreturn(expptr p);
537void exstop(int, expptr);
538void exgoto(struct labelblock *);
539void exasgoto(bigptr);
540void putcmgo(expptr, int, struct labelblock *[]);
541void putexpr(expptr p);
542void putif(expptr, int);
543void putgoto(int);
544void deregister(struct bigblock *np);
545NODE *putx(expptr p);
546void cpn(int, char *, char *);
547void prcmgoto(expptr, int, int, int);
548char *lexline(ftnint *n);
549bigptr suboffset(struct bigblock *p);
550struct bigblock *intraddr(struct bigblock *np);
551struct bigblock *intrcall(bigptr, bigptr, int);
552void setloc(int);
553void prnloc(char *name);
554void fprint(bigptr p, int indx);
555void ckfree(void *p);
556
557#undef expptr
558#undef tagptr
559
560#define err1 err
561#define err2 err
562#define warn1 warn
563#define fatal1 fatal
Note: See TracBrowser for help on using the repository browser.