Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:plunky:20140606204028

Diff

Diff from 1.260 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/pcc/pcc/cc/ccom/pass1.h

Annotated File View

plunky
1.260
1 /*      $Id: pass1.h,v 1.260 2014/06/06 20:40:28 plunky Exp $   */
ragge
1.71
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  */
ragge
1.1
35
gmcgarry
1.141
36 #include "config.h"
37
ragge
1.11
38 #include <sys/types.h>
ragge
1.113
39 #include <stdarg.h>
mickey
1.155
40 #include <string.h>
gmcgarry
1.141
41 #ifdef HAVE_STDINT_H
stefan
1.134
42 #include <stdint.h>
gmcgarry
1.141
43 #endif
ragge
1.11
44
mickey
1.155
45 #ifndef MKEXT
46 #include "external.h"
47 #else
48 typedef unsigned int bittype/* XXX - for basicblock */
49 #endif
ragge
1.1
50 #include "manifest.h"
51
ragge
1.71
52 /*
53  * Storage classes
54  */
55 #define SNULL           0
56 #define AUTO            1
57 #define EXTERN          2
58 #define STATIC          3
59 #define REGISTER        4
60 #define EXTDEF          5
61 /* #define LABEL        6*/
62 /* #define ULABEL       7*/
63 #define MOS             8
64 #define PARAM           9
65 #define STNAME          10
66 #define MOU             11
67 #define UNAME           12
68 #define TYPEDEF         13
ragge
1.206
69 /* #define FORTRAN              14 */
ragge
1.71
70 #define ENAME           15
71 #define MOE             16
ragge
1.206
72 /* #define UFORTRAN     17 */
ragge
1.71
73 #define USTATIC         18
74
75         /* field size is ORed in */
ragge
1.210
76 #define FIELD           0200
77 #define FLDSIZ          0177
ragge
1.71
78 extern  char *scnames(int);
79
80 /*
81  * Symbol table flags
82  */
83 #define SNORMAL         0
84 #define STAGNAME        01
85 #define SLBLNAME        02
86 #define SMOSNAME        03
87 #define SSTRING         04
88 #define NSTYPES         05
89 #define SMASK           07
90
ragge
1.229
91 #define STLS            00010   /* Thread Local Support variable */
ragge
1.239
92 #define SINSYS          00020   /* Declared in system header */
ragge
1.148
93 #define SNOCREAT        00040   /* don't create a symbol in lookup() */
94 #define STEMP           00100   /* Allocate symtab from temp or perm mem */
95 #define SDYNARRAY       00200   /* symbol is dynamic array on stack */
96 #define SINLINE         00400   /* function is of type inline */
97 #define STNODE          01000   /* symbol shall be a temporary node */
ragge
1.242
98 #define SBUILTIN        02000   /* this is a builtin function */
ragge
1.148
99 #define SASG            04000   /* symbol is assigned to already */
ragge
1.138
100 #define SLOCAL1         010000
101 #define SLOCAL2         020000
102 #define SLOCAL3         040000
ragge
1.71
103
104         /* alignment of initialized quantities */
105 #ifndef AL_INIT
106 #define AL_INIT ALINT
107 #endif
108
ragge
1.37
109 struct rstack;
110 struct symtab;
ragge
1.45
111 union arglist;
ragge
1.168
112 #ifdef GCC_COMPAT
113 struct gcc_attr_pack;
114 #endif
ragge
1.102
115
ragge
1.37
116 /*
ragge
1.44
117  * Dimension/prototype information.
ragge
1.125
118  *      ddim > 0 holds the dimension of an array.
119  *      ddim < 0 is a dynamic array and refers to a tempnode.
ragge
1.208
120  *      ...unless:
121  *              ddim == NOOFFSET, an array without dimenston, "[]"
122  *              ddim == -1, dynamic array while building before defid.
ragge
1.44
123  */
124 union dimfun {
125         int     ddim;           /* Dimension of an array */
ragge
1.45
126         union arglist *dfun;    /* Prototype index */
ragge
1.44
127 };
128
129 /*
ragge
1.102
130  * Argument list member info when storing prototypes.
131  */
132 union arglist {
133         TWORD type;
134         union dimfun *df;
ragge
1.204
135         struct attr *sap;
ragge
1.102
136 };
ragge
1.128
137 #define TNULL           INCREF(FARG) /* pointer to FARG -- impossible type */
138 #define TELLIPSIS       INCREF(INCREF(FARG))
ragge
1.102
139
140 /*
ragge
1.1
141  * Symbol table definition.
142  */
143 struct  symtab {
ragge
1.164
144         struct  symtab *snext;  /* link to other symbols in the same scope */
145         int     soffset;        /* offset or value */
146         char    sclass;         /* storage class */
147         char    slevel;         /* scope level */
148         short   sflags;         /* flags, see below */
ragge
1.132
149         char    *sname;         /* Symbol name */
150         char    *soname;        /* Written-out name */
ragge
1.1
151         TWORD   stype;          /* type word */
ragge
1.74
152         TWORD   squal;          /* qualifier word */
ragge
1.44
153         union   dimfun *sdf;    /* ptr to the dimension/prototype array */
ragge
1.204
154         struct  attr *sap;      /* the base type attribute list */
155 };
156
157 #define ISSOU(ty)   ((ty) == STRTY || (ty) == UNIONTY)
ragge
1.37
158
ragge
1.1
159 /*
160  * External definitions
161  */
ragge
1.49
162 struct swents {                 /* switch table */
163         struct swents *next;    /* Next struct in linked list */
164         CONSZ   sval;           /* case value */
165         int     slab;           /* associated label */
ragge
1.1
166 };
stefan
1.129
167 int mygenswitch(intTWORDstruct swents **, int);
ragge
1.49
168
ragge
1.1
169 extern  int blevel;
ragge
1.48
170 extern  int oldstyle;
ragge
1.1
171
ragge
1.239
172 extern  int linenonerrorsissyshdr;
ragge
1.1
173
ragge
1.56
174 extern  char *ftitle;
ragge
1.29
175 extern  struct symtab *cftnsp;
plunky
1.253
176 extern  int autooffmaxautooffargoff;
ragge
1.1
177
178 extern  OFFSZ inoff;
179
180 extern  int reached;
ragge
1.18
181 extern  int isinlining;
ragge
1.235
182 extern  int xinlinexgnu89xgnu99;
plunky
1.237
183 extern  int bdebugddebugedebugidebugndebug;
184 extern  int odebugpdebugsdebugtdebugxdebug;
ragge
1.1
185
186 /* various labels */
187 extern  int brklab;
188 extern  int contlab;
189 extern  int flostat;
190 extern  int retlab;
ragge
1.220
191 extern  int doing_initstatinit;
ragge
1.225
192 extern  short sztable[];
193 extern  char *astypnames[];
ragge
1.1
194
ragge
1.132
195 /* pragma globals */
gmcgarry
1.152
196 extern int pragma_allpackedpragma_packedpragma_aligned;
ragge
1.132
197
ragge
1.71
198 /*
199  * Flags used in the (elementary) flow analysis ...
200  */
201 #define FBRK            02
202 #define FCONT           04
203 #define FDEF            010
204 #define FLOOP           020
205
ragge
1.228
206 /*
207  * Location counters
208  */
209 #define NOSEG           -1
210 #define PROG            0               /* (ro) program segment */
211 #define DATA            1               /* (rw) data segment */
212 #define RDATA           2               /* (ro) data segment */
213 #define LDATA           3               /* (rw) local data */
214 #define UDATA           4               /* (rw) uninitialized data */
215 #define STRNG           5               /* (ro) string segment */
216 #define PICDATA         6               /* (rw) relocatable data segment */
217 #define PICRDATA        7               /* (ro) relocatable data segment */
218 #define PICLDATA        8               /* (rw) local relocatable data */
219 #define TLSDATA         9               /* (rw) TLS data segment */
220 #define TLSUDATA        10              /* (rw) TLS uninitialized segment */
221 #define CTORS           11              /* constructor */
222 #define DTORS           12              /* destructor */
223 #define NMSEG           13              /* other (named) segment */
224
plunky
1.254
225 extern int lastloc;
ragge
1.228
226 void locctr(int typestruct symtab *sp);
227 void setseg(int typechar *name);
228 void defalign(int al);
229 void symdirec(struct symtab *sp);
230
ragge
1.71
231 /*      mark an offset which is undefined */
232
233 #define NOOFFSET        (-10201)
234
ragge
1.1
235 /* declarations of various functions */
236 extern  NODE
gmcgarry
1.143
237         *buildtree(intNODE *, NODE *r),
ragge
1.204
238         *mkty(unsignedunion dimfun *, struct attr *),
ragge
1.29
239         *rstruct(char *, int),
ragge
1.169
240         *dclstruct(struct rstack *),
ragge
1.133
241         *strend(int gtypechar *),
gmcgarry
1.143
242         *tymerge(NODE *, NODE *),
ragge
1.2
243         *stref(NODE *),
ragge
1.222
244 #ifdef WORD_ADDRESSED
ragge
1.204
245         *offcon(OFFSZTWORDunion dimfun *, struct attr *),
ragge
1.222
246 #endif
ragge
1.2
247         *bcon(int),
stefan
1.131
248         *xbcon(CONSZstruct symtab *, TWORD),
ragge
1.2
249         *bpsize(NODE *),
250         *convert(NODE *, int),
251         *pconvert(NODE *),
252         *oconvert(NODE *),
253         *ptmatch(NODE *),
ragge
1.204
254         *makety(NODE *, TWORDTWORDunion dimfun *, struct attr *),
255         *block(intNODE *, NODE *, TWORDunion dimfun *, struct attr *),
ragge
1.2
256         *doszof(NODE *),
257         *talloc(void),
258         *optim(NODE *),
ragge
1.47
259         *clocal(NODE *),
ragge
1.77
260         *ccopy(NODE *),
ragge
1.204
261         *tempnode(intTWORDunion dimfun *, struct attr *),
ragge
1.162
262         *eve(NODE *),
ragge
1.156
263         *doacall(struct symtab *, NODE *, NODE *);
stefan
1.129
264 NODE    *intprom(NODE *);
ragge
1.204
265 OFFSZ   tsize(TWORDunion dimfun *, struct attr *),
ragge
1.2
266         psize(NODE *);
ragge
1.12
267 NODE *  typenode(NODE *new);
ragge
1.25
268 void    spalloc(NODE *, NODE *, OFFSZ);
ragge
1.2
269 char    *exname(char *);
ragge
1.153
270 NODE    *floatcon(char *);
271 NODE    *fhexcon(char *);
ragge
1.174
272 NODE    *bdty(int op, ...);
ragge
1.136
273 extern struct rstack *rpole;
ragge
1.15
274
gmcgarry
1.143
275 int oalloc(struct symtab *, int *);
ragge
1.209
276 void deflabel(char *, NODE *);
ragge
1.29
277 void gotolabel(char *);
ragge
1.247
278 void inline_start(struct symtab *, int class);
ragge
1.18
279 void inline_end(void);
ragge
1.58
280 void inline_addarg(struct interpass *);
gmcgarry
1.143
281 void inline_ref(struct symtab *);
ragge
1.18
282 void inline_prtout(void);
ragge
1.156
283 void inline_args(struct symtab **, int);
284 NODE *inlinetree(struct symtab *, NODE *, NODE *);
ragge
1.46
285 void ftnarg(NODE *);
ragge
1.170
286 struct rstack *bstruct(char *, intNODE *);
ragge
1.29
287 void moedef(char *);
ragge
1.117
288 void beginit(struct symtab *);
289 void simpleinit(struct symtab *, NODE *);
gmcgarry
1.143
290 struct symtab *lookup(char *, int);
291 struct symtab *getsymtab(char *, int);
ragge
1.31
292 char *addstring(char *);
293 char *addname(char *);
gmcgarry
1.143
294 void symclear(int);
295 struct symtab *hide(struct symtab *);
ragge
1.135
296 void soumemb(NODE *, char *, int);
ragge
1.204
297 int talign(unsigned intstruct attr *);
ragge
1.38
298 void bfcode(struct symtab **, int);
ragge
1.48
299 int chkftn(union arglist *, union arglist *);
ragge
1.53
300 void branch(int);
gmcgarry
1.143
301 void cbranch(NODE *, NODE *);
ragge
1.105
302 void extdec(struct symtab *);
ragge
1.133
303 void defzero(struct symtab *);
ragge
1.179
304 int falloc(struct symtab *, intNODE *);
ragge
1.88
305 TWORD ctype(TWORD);  
ragge
1.225
306 void inval(CONSZintNODE *);
307 int ninval(CONSZintNODE *);
gmcgarry
1.143
308 void infld(CONSZintCONSZ);
309 void zbits(CONSZint);
310 void instring(struct symtab *);
311 void inwstring(struct symtab *);
312 void plabel(int);
ragge
1.100
313 void bjobcode(void);
314 void ejobcode(int);
ragge
1.105
315 void calldec(NODE *, NODE *);
ragge
1.110
316 int cisreg(TWORD);
ragge
1.121
317 void asginit(NODE *);
318 void desinit(NODE *);
ragge
1.228
319 void endinit(int);
ragge
1.181
320 void endictx(void);
gmcgarry
1.144
321 void sspinit(void);
322 void sspstart(void);
323 void sspend(void);
ragge
1.117
324 void ilbrace(void);
325 void irbrace(void);
ragge
1.181
326 CONSZ scalinit(NODE *);
gmcgarry
1.143
327 void p1print(char *, ...);
ragge
1.69
328 char *copst(int);
329 int cdope(int);
ragge
1.70
330 void myp2tree(NODE *);
ragge
1.125
331 void lcommprint(void);
332 void lcommdel(struct symtab *);
ragge
1.127
333 NODE *funcode(NODE *);
ragge
1.128
334 struct symtab *enumhd(char *);
335 NODE *enumdcl(struct symtab *);
336 NODE *enumref(char *);
ragge
1.130
337 CONSZ icons(NODE *);
ragge
1.200
338 CONSZ valcast(CONSZ vTWORD t);
ragge
1.212
339 int mypragma(char *);
ragge
1.215
340 char *pragtok(char *);
ragge
1.214
341 int eat(int);
ragge
1.132
342 void fixdef(struct symtab *);
gmcgarry
1.143
343 int cqual(TWORDTWORD);
ragge
1.133
344 void defloc(struct symtab *);
gmcgarry
1.143
345 int fldchk(int);
ragge
1.137
346 int nncon(NODE *);
gmcgarry
1.143
347 void cunput(char);
ragge
1.145
348 NODE *nametree(struct symtab *sp);
ragge
1.147
349 void *inlalloc(int size);
ragge
1.204
350 void *blkalloc(int size);
gmcgarry
1.151
351 void pass1_lastchance(struct interpass *);
ragge
1.150
352 void fldty(struct symtab *p);
ragge
1.158
353 int getlab(void);
ragge
1.170
354 struct suedef *sueget(struct suedef *p);
ragge
1.177
355 void complinit(void);
356 NODE *structref(NODE *pint fchar *name);
357 NODE *cxop(int opNODE *lNODE *r);
ragge
1.178
358 NODE *imop(int opNODE *lNODE *r);
359 NODE *cxelem(int opNODE *p);
360 NODE *cxconj(NODE *p);
ragge
1.252
361 NODE *cxcast(NODE *p1NODE *p2);
ragge
1.178
362 NODE *cxret(NODE *pNODE *q);
ragge
1.187
363 NODE *cast(NODE *pTWORD tTWORD q);
ragge
1.204
364 NODE *ccast(NODE *pTWORD tTWORD uunion dimfun *dfstruct attr *sue);
ragge
1.202
365 int andable(NODE *);
366 int conval(NODE *, intNODE *);
367 int ispow2(CONSZ);
368 void defid(NODE *qint class);
ragge
1.241
369 void defid2(NODE *qint classchar *astr);
ragge
1.202
370 void efcode(void);
371 void ecomp(NODE *p);
372 int upoff(int sizeint alignmentint *poff);
373 void nidcl(NODE *pint class);
ragge
1.241
374 void nidcl2(NODE *pint classchar *astr);
ragge
1.202
375 void eprint(NODE *, intint *, int *);
376 int uclass(int class);
377 int notlval(NODE *);
378 void ecode(NODE *p);
379 void ftnend(void);
380 void dclargs(void);
ragge
1.204
381 int suemeq(struct attr *s1struct attr *s2);
382 struct symtab *strmemb(struct attr *ap);
mickey
1.203
383 int yylex(void);
384 void yyerror(char *);
ragge
1.213
385 int pragmas_gcc(char *t);
ragge
1.217
386 NODE *cstknode(TWORD tunion dimfun *dfstruct attr *ap);
ragge
1.221
387 int concast(NODE *pTWORD t);
ragge
1.238
388 #ifdef WORD_ADDRESSED
389 #define rmpconv(p) (p)
390 #else
ragge
1.233
391 NODE *rmpconv(NODE *);
ragge
1.238
392 #endif
393 NODE *optloop(NODE *);
ragge
1.235
394 NODE *nlabel(int label);
395
ragge
1.153
396 #ifdef SOFTFLOAT
397 typedef struct softfloat SF;
398 SF soft_neg(SF);
399 SF soft_cast(CONSZ vTWORD);
400 SF soft_plus(SFSF);
401 SF soft_minus(SFSF);
402 SF soft_mul(SFSF);
403 SF soft_div(SFSF);
gmcgarry
1.175
404 int soft_cmp_eq(SFSF);
405 int soft_cmp_ne(SFSF);
406 int soft_cmp_ge(SFSF);
407 int soft_cmp_gt(SFSF);
408 int soft_cmp_le(SFSF);
409 int soft_cmp_lt(SFSF);
ragge
1.153
410 int soft_isz(SF);
411 CONSZ soft_val(SF);
412 #define FLOAT_NEG(sf)           soft_neg(sf)
413 #define FLOAT_CAST(v,t)         soft_cast(v, t)
414 #define FLOAT_PLUS(x1,x2)       soft_plus(x1, x2)
415 #define FLOAT_MINUS(x1,x2)      soft_minus(x1, x2)
416 #define FLOAT_MUL(x1,x2)        soft_mul(x1, x2)
417 #define FLOAT_DIV(x1,x2)        soft_div(x1, x2)
418 #define FLOAT_ISZERO(sf)        soft_isz(sf)
419 #define FLOAT_VAL(sf)           soft_val(sf)
gmcgarry
1.175
420 #define FLOAT_EQ(x1,x2)         soft_cmp_eq(x1, x2)
421 #define FLOAT_NE(x1,x2)         soft_cmp_ne(x1, x2)
422 #define FLOAT_GE(x1,x2)         soft_cmp_ge(x1, x2)
423 #define FLOAT_GT(x1,x2)         soft_cmp_gt(x1, x2)
424 #define FLOAT_LE(x1,x2)         soft_cmp_le(x1, x2)
425 #define FLOAT_LT(x1,x2)         soft_cmp_lt(x1, x2)
ragge
1.153
426 #else
427 #define FLOAT_NEG(p)            -(p)
428 #define FLOAT_CAST(p,v)         (ISUNSIGNED(v) ? \
429                 (long double)(U_CONSZ)(p) : (long double)(CONSZ)(p))
430 #define FLOAT_PLUS(x1,x2)       (x1) + (x2)
431 #define FLOAT_MINUS(x1,x2)      (x1) - (x2)
432 #define FLOAT_MUL(x1,x2)        (x1) * (x2)
433 #define FLOAT_DIV(x1,x2)        (x1) / (x2)
434 #define FLOAT_ISZERO(p)         (p) == 0.0
435 #define FLOAT_VAL(p)            (CONSZ)(p)
gmcgarry
1.175
436 #define FLOAT_EQ(x1,x2)         (x1) == (x2)
437 #define FLOAT_NE(x1,x2)         (x1) != (x2)
438 #define FLOAT_GE(x1,x2)         (x1) >= (x2)
439 #define FLOAT_GT(x1,x2)         (x1) > (x2)
440 #define FLOAT_LE(x1,x2)         (x1) <= (x2)
441 #define FLOAT_LT(x1,x2)         (x1) < (x2)
ragge
1.153
442 #endif
443
ragge
1.204
444 enum {  ATTR_NONE,
445
446         /* PCC used attributes */
447         ATTR_COMPLEX,   /* Internal definition of complex */
ragge
1.216
448         xxxATTR_BASETYP,        /* Internal; see below */
ragge
1.204
449         ATTR_QUALTYP,   /* Internal; const/volatile, see below */
ragge
1.257
450         ATTR_ALIGNED,   /* Internal; also used as gcc type attribute */
ragge
1.204
451         ATTR_STRUCT,    /* Internal; element list */
452 #define ATTR_MAX ATTR_STRUCT
453
ragge
1.85
454 #ifdef GCC_COMPAT
ragge
1.171
455         /* type attributes */
456         GCC_ATYP_PACKED,
457         GCC_ATYP_SECTION,
458         GCC_ATYP_TRANSP_UNION,
459         GCC_ATYP_UNUSED,
460         GCC_ATYP_DEPRECATED,
461         GCC_ATYP_MAYALIAS,
462
ragge
1.184
463         /* variable attributes */
464         GCC_ATYP_MODE,
465
ragge
1.171
466         /* function attributes */
467         GCC_ATYP_NORETURN,
468         GCC_ATYP_FORMAT,
469         GCC_ATYP_NONNULL,
470         GCC_ATYP_SENTINEL,
ragge
1.172
471         GCC_ATYP_WEAK,
ragge
1.176
472         GCC_ATYP_FORMATARG,
ragge
1.180
473         GCC_ATYP_GNU_INLINE,
ragge
1.182
474         GCC_ATYP_MALLOC,
ragge
1.183
475         GCC_ATYP_NOTHROW,
ragge
1.185
476         GCC_ATYP_CONST,
477         GCC_ATYP_PURE,
ragge
1.188
478         GCC_ATYP_CONSTRUCTOR,
479         GCC_ATYP_DESTRUCTOR,
ragge
1.189
480         GCC_ATYP_VISIBILITY,
ragge
1.192
481         GCC_ATYP_STDCALL,
482         GCC_ATYP_CDECL,
ragge
1.193
483         GCC_ATYP_WARN_UNUSED_RESULT,
ragge
1.194
484         GCC_ATYP_USED,
ragge
1.196
485         GCC_ATYP_NO_INSTR_FUN,
486         GCC_ATYP_NOINLINE,
ragge
1.197
487         GCC_ATYP_ALIAS,
ragge
1.198
488         GCC_ATYP_WEAKREF,
ragge
1.199
489         GCC_ATYP_ALLOCSZ,
ragge
1.201
490         GCC_ATYP_ALW_INL,
ragge
1.211
491         GCC_ATYP_TLSMODEL,
ragge
1.212
492         GCC_ATYP_ALIASWEAK,
plunky
1.236
493         GCC_ATYP_RETURNS_TWICE,
ragge
1.240
494         GCC_ATYP_WARNING,
ragge
1.250
495         GCC_ATYP_NOCLONE,
ragge
1.256
496         GCC_ATYP_REGPARM,
plunky
1.260
497         GCC_ATYP_LEAF,
ragge
1.171
498
499         /* other stuff */
500         GCC_ATYP_BOUNDED,       /* OpenBSD extra boundary checks */
501
502         GCC_ATYP_MAX
ragge
1.204
503 #endif
ragge
1.171
504 };
505
ragge
1.202
506
ragge
1.204
507 /*
ragge
1.216
508 #ifdef notdef
ragge
1.204
509  * ATTR_BASETYP has the following layout:
510  * aa[0].iarg has size
511  * aa[1].iarg has alignment
ragge
1.216
512 #endif
ragge
1.204
513  * ATTR_QUALTYP has the following layout:
514  * aa[0].iarg has CON/VOL + FUN/ARY/PTR
515  * Not defined yet...
516  * aa[3].iarg is dimension for arrays (XXX future)
517  * aa[3].varg is function defs for functions.
518  */
ragge
1.216
519 #ifdef notdef
ragge
1.204
520 #define atypsz  aa[0].iarg
521 #define aalign  aa[1].iarg
ragge
1.216
522 #endif
ragge
1.204
523
524 /*
525  * ATTR_STRUCT member list.
526  */
527 #define amlist  aa[0].varg
ragge
1.216
528 #define amsize  aa[1].iarg
ragge
1.204
529 #define strattr(x)      (attr_find(x, ATTR_STRUCT))
530
531 #define iarg(x) aa[x].iarg
532 #define sarg(x) aa[x].sarg
533 #define varg(x) aa[x].varg
ragge
1.168
534
ragge
1.85
535 void gcc_init(void);
ragge
1.93
536 int gcc_keyword(char *, NODE **);
ragge
1.204
537 struct attr *gcc_attr_parse(NODE *);
538 void gcc_tcattrfix(NODE *);
ragge
1.170
539 struct gcc_attrib *gcc_get_attr(struct suedef *, int);
ragge
1.204
540 void dump_attr(struct attr *gap);
ragge
1.243
541 void gcc_modefix(NODE *);
542 NODE *gcc_eval_timode(int opNODE *, NODE *);
ragge
1.246
543 NODE *gcc_eval_ticast(int opNODE *, NODE *);
ragge
1.244
544 NODE *gcc_eval_tiuni(int opNODE *);
ragge
1.249
545 struct attr *isti(NODE *p);
546
ragge
1.204
547
548 struct attr *attr_add(struct attr *origstruct attr *new);
549 struct attr *attr_new(intint);
550 struct attr *attr_find(struct attr *, int);
551 struct attr *attr_copy(struct attr *srcstruct attr *dstint nelem);
552 struct attr *attr_dup(struct attr *apint n);
ragge
1.85
553
ragge
1.242
554 #ifndef NO_C_BUILTINS
555 struct bitable {
556         char *name;
557         NODE *(*fun)(const struct bitable *, NODE *a);
558         short flags;
559 #define BTNOPROTO       001
560 #define BTNORVAL        002
561 #define BTNOEVE         004
ragge
1.245
562 #define BTGNUONLY       010
ragge
1.242
563         short narg;
564         TWORD *tp;
565         TWORD rt;
566 };
567
568 NODE *builtin_check(struct symtab *, NODE *a);
569 void builtin_init(void);
ragge
1.251
570
571 /* Some builtins targets need to implement */
572 NODE *builtin_frame_address(const struct bitable *btNODE *a);
573 NODE *builtin_return_address(const struct bitable *btNODE *a);
574 NODE *builtin_cfa(const struct bitable *btNODE *a);
ragge
1.242
575 #endif
576
577
ragge
1.94
578 #ifdef STABS
ragge
1.95
579 void stabs_init(void);
580 void stabs_file(char *);
gmcgarry
1.161
581 void stabs_efile(char *);
ragge
1.95
582 void stabs_line(int);
583 void stabs_rbrac(int);
584 void stabs_lbrac(int);
585 void stabs_func(struct symtab *);
586 void stabs_newsym(struct symtab *);
587 void stabs_chgsym(struct symtab *);
ragge
1.204
588 void stabs_struct(struct symtab *, struct attr *);
ragge
1.94
589 #endif
590
ragge
1.1
591 #ifndef CHARCAST
592 /* to make character constants into character connstants */
593 /* this is a macro to defend against cross-compilers, etc. */
594 #define CHARCAST(x) (char)(x)
595 #endif
ragge
1.27
596
ragge
1.195
597 /* sometimes int is smaller than pointers */
598 #if SZPOINT(CHAR) <= SZINT
599 #define INTPTR  INT
600 #elif SZPOINT(CHAR) <= SZLONG
601 #define INTPTR  LONG
602 #elif SZPOINT(CHAR) <= SZLONGLONG
603 #define INTPTR  LONGLONG
604 #else
605 #error int size unknown
606 #endif
607
ragge
1.227
608 /* Generate a bitmask from a given type size */
609 #define SZMASK(y) ((((1LL << ((y)-1))-1) << 1) | 1)
610
ragge
1.27
611 /*
612  * C compiler first pass extra defines.
613  */
614 #define QUALIFIER       (MAXOP+1)
615 #define CLASS           (MAXOP+2)
616 #define RB              (MAXOP+3)
617 #define DOT             (MAXOP+4)
618 #define ELLIPSIS        (MAXOP+5)
ragge
1.69
619 #define TYPE            (MAXOP+6)
620 #define LB              (MAXOP+7)
621 #define COMOP           (MAXOP+8)
622 #define QUEST           (MAXOP+9)
623 #define COLON           (MAXOP+10)
624 #define ANDAND          (MAXOP+11)
625 #define OROR            (MAXOP+12)
626 #define NOT             (MAXOP+13)
ragge
1.80
627 #define CAST            (MAXOP+14)
ragge
1.160
628 #define STRING          (MAXOP+15)
ragge
1.81
629
ragge
1.82
630 /* The following must be in the same order as their NOASG counterparts */
ragge
1.81
631 #define PLUSEQ          (MAXOP+16)
632 #define MINUSEQ         (MAXOP+17)
633 #define DIVEQ           (MAXOP+18)
634 #define MODEQ           (MAXOP+19)
635 #define MULEQ           (MAXOP+20)
636 #define ANDEQ           (MAXOP+21)
637 #define OREQ            (MAXOP+22)
638 #define EREQ            (MAXOP+23)
639 #define LSEQ            (MAXOP+24)
640 #define RSEQ            (MAXOP+25)
ragge
1.82
641
642 #define UNASG           (-(PLUSEQ-PLUS))+
ragge
1.69
643
ragge
1.115
644 #define INCR            (MAXOP+26)
645 #define DECR            (MAXOP+27)
ragge
1.160
646 #define SZOF            (MAXOP+28)
ragge
1.167
647 #define CLOP            (MAXOP+29)
ragge
1.168
648 #define ATTRIB          (MAXOP+30)
ragge
1.178
649 #define XREAL           (MAXOP+31)
650 #define XIMAG           (MAXOP+32)
ragge
1.207
651 #define TYMERGE         (MAXOP+33)
ragge
1.234
652 #define LABEL           (MAXOP+34)
ragge
1.248
653 #define BIQUEST         (MAXOP+35)
ragge
1.259
654 #define UPLUS           (MAXOP+36)
ragge
1.160
655
656
ragge
1.122
657 /*
658  * The following types are only used in pass1.
659  */
660 #define SIGNED          (MAXTYPES+1)
ragge
1.231
661 #define FARG            (MAXTYPES+2)
ragge
1.178
662 #define FIMAG           (MAXTYPES+3)
663 #define IMAG            (MAXTYPES+4)
664 #define LIMAG           (MAXTYPES+5)
665 #define FCOMPLEX        (MAXTYPES+6)
666 #define COMPLEX         (MAXTYPES+7)
667 #define LCOMPLEX        (MAXTYPES+8)
ragge
1.173
668 #define ENUMTY          (MAXTYPES+9)
669
670 #define ISFTY(x)        ((x) >= FLOAT && (x) <= LDOUBLE)
671 #define ISCTY(x)        ((x) >= FCOMPLEX && (x) <= LCOMPLEX)
672 #define ISITY(x)        ((x) >= FIMAG && (x) <= LIMAG)
ragge
1.204
673 #define ANYCX(p) (p->n_type == STRTY && attr_find(p->n_ap, ATTR_COMPLEX))
ragge
1.115
674
ragge
1.69
675 #define coptype(o)      (cdope(o)&TYFLG)
676 #define clogop(o)       (cdope(o)&LOGFLG)
677 #define casgop(o)       (cdope(o)&ASGFLG)
678
FishEye: Open Source License registered to PCC.
Your maintenance has expired. You can renew your license at http://www.atlassian.com/fisheye/renew
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-09-02 21:05 +0200