Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:ragge:20030707105501

Diff

Diff from 1.24 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/pcc/pcc/mip/manifest.h

Annotated File View

ragge
1.1
1 /*      manifest.h      4.2     87/12/09        */
2
3 #ifndef _MANIFEST_
4 #define _MANIFEST_
5
6 #include <stdio.h>
7 #include "config.h"
ragge
1.11
8 #include "node.h"
ragge
1.20
9 #include "main.h"
ragge
1.1
10
11 #define DSIZE   (MAXOP+1)       /* DSIZE is the size of the dope array */
12
13 #define NOLAB   (-1)            /* no label with constant */
14
15 /*
16  * Node types
17  */
18 #define LTYPE   02              /* leaf */
19 #define UTYPE   04              /* unary */
20 #define BITYPE  010             /* binary */
21
22 /*
23  * Bogus type values
24  */
25 #define TNULL   INCREF(MOETY)   /* pointer to MOETY -- impossible type */
26 #define TVOID   FTN             /* function returning UNDEF (for void) */
27
28 /*
29  * Type packing constants
30  */
ragge
1.6
31 #define TMASK   0x60            /* mask for 1st component of compound type */
32 #define TMASK1  0x180           /* mask for 2nd component of compound type */
33 #define TMASK2  0x1e0           /* mask for 3rd component of compound type */
34 #define BTMASK  0x1f            /* basic type mask */
35 #define BTSHIFT 5               /* basic type shift */
ragge
1.1
36 #define TSHIFT  2               /* shift count to get next type component */
37
38 /*
39  * Type manipulation macros
40  */
41 #define MODTYPE(x,y)    x = ((x)&(~BTMASK))|(y) /* set basic type of x to y */
42 #define BTYPE(x)        ((x)&BTMASK)            /* basic type of x */
ragge
1.9
43 #define ISLONGLONG(x)   ((x) == LONGLONG || (x) == ULONGLONG)
ragge
1.24
44 #define ISUNSIGNED(x)   (((x) & 1) == (UNSIGNED & 1))
45 #define UNSIGNABLE(x)   (((x)<=ULONGLONG&&(x)>=CHAR) && !ISUNSIGNED(x))
46 #define ENUNSIGN(x)     ((x)+1)
47 #define DEUNSIGN(x)     ((x)-1)
ragge
1.1
48 #define ISPTR(x)        (((x)&TMASK)==PTR)
49 #define ISFTN(x)        (((x)&TMASK)==FTN)      /* is x a function type */
50 #define ISARY(x)        (((x)&TMASK)==ARY)      /* is x an array type */
51 #define INCREF(x)       ((((x)&~BTMASK)<<TSHIFT)|PTR|((x)&BTMASK))
52 #define DECREF(x)       ((((x)>>TSHIFT)&~BTMASK)|( (x)&BTMASK))
53 /* advance x to a multiple of y */
54 #define SETOFF(x,y)     if ((x)%(y) != 0) (x) = (((x)/(y) + 1) * (y))
55 /* can y bits be added to x without overflowing z */
56 #define NOFIT(x,y,z)    (((x)%(z) + (y)) > (z))
57
58 /*
59  * Pack and unpack field descriptors (size and offset)
60  */
61 #define PKFIELD(s,o)    (((o)<<6)| (s))
62 #define UPKFSZ(v)       ((v) &077)
63 #define UPKFOFF(v)      ((v)>>6)
64
65 /*
66  * Operator information
67  */
68 #define TYFLG   016
69 #define ASGFLG  01
70 #define LOGFLG  020
71
72 #define SIMPFLG 040
73 #define COMMFLG 0100
74 #define DIVFLG  0200
75 #define FLOFLG  0400
76 #define LTYFLG  01000
77 #define CALLFLG 02000
78 #define MULFLG  04000
79 #define SHFFLG  010000
80 #define ASGOPFLG 020000
81
82 #define SPFLG   040000
83
84 #define optype(o)       (dope[o]&TYFLG)
85 #define asgop(o)        (dope[o]&ASGFLG)
86 #define logop(o)        (dope[o]&LOGFLG)
87 #define callop(o)       (dope[o]&CALLFLG)
ragge
1.8
88
89 /*
90  * Types, as encoded in intermediate file cookies.
ragge
1.24
91  * The order of the integer types are important.
ragge
1.8
92  */
93 #define UNDEF           0
ragge
1.17
94 #define FARG            1       /* function argument */
ragge
1.8
95 #define CHAR            2
ragge
1.24
96 #define UCHAR           3
97 #define SHORT           4
98 #define USHORT          5
99 #define INT             6
100 #define UNSIGNED        7
101 #define LONG            8
102 #define ULONG           9      
103 #define LONGLONG        10
104 #define ULONGLONG       11
105 #define FLOAT           12
106 #define DOUBLE          13
107 #define LDOUBLE         14
108 #define STRTY           15
109 #define UNIONTY         16
110 #define ENUMTY          17
111 #define MOETY           18      /* member of enum */
ragge
1.23
112 /*
113  * The following are only used in pass1, for simplicity.
114  */
115 #define SIGNED          19
116 #define CONST           20
117 #define VOLATILE        21
ragge
1.15
118 #define VOID            22
ragge
1.8
119
120 /* 
121  * Type modifiers.
122  */
123 #define PTR             0x20
124 #define FTN             0x40
125 #define ARY             0x60
126 #define BASETYPE        0x1f
127 #define TYPESHIFT       2
ragge
1.1
128
129 /*
ragge
1.21
130  * Location counters
131  */
132 #define PROG            0               /* program segment */
133 #define DATA            1               /* data segment */
134 #define ADATA           2               /* array data segment */
135 #define STRNG           3               /* string data segment */
136 #define ISTRNG          4               /* initialized string segment */
137 #define STAB            5               /* symbol table segment */
138
139
140 /*
ragge
1.1
141  * External declarations, typedefs and the like
142  */
ragge
1.2
143 char    *hash(char *s);
144 char    *savestr(char *cp);
145 char    *tstr(char *cp);
ragge
1.1
146
ragge
1.13
147 /* memory management */
148 void *permalloc(int size);
149 void *tmpalloc(int size);
150 void tmpfree(void);
151
ragge
1.19
152 /* pass t communication subroutines */
ragge
1.20
153 void topt_compile(struct interpass *);
ragge
1.19
154
155 /* pass 2 communication subroutines */
ragge
1.20
156 void pass2_compile(struct interpass *);
ragge
1.18
157
ragge
1.22
158 /* node routines */
159 void nfree(NODE *);
160
ragge
1.1
161 extern  int nerrors;            /* number of errors seen so far */
162 extern  int dope[];             /* a vector containing operator information */
163 extern  char *opst[];           /* a vector containing names for ops */
164 #endif
FishEye: Open Source License registered to PCC.
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-12-23 01:54 +0100