* add p cc
[mascara-docs.git] / compilers / pcc / pcc-1.0.0 / mip / node.h
blob2503160ed1035fffeeb5f62d9243b7775467b982
1 /* $Id: node.h,v 1.36 2010/08/11 14:08:44 ragge Exp $ */
2 /*
3 * Copyright (c) 2003 Anders Magnusson (ragge@ludd.luth.se).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef NODE_H
30 #define NODE_H
33 * The attribute struct contains stuff that might be useful in
34 * both passes; but currently it's only legal to use it in pass1.
36 union aarg {
37 int iarg;
38 char *sarg;
39 void *varg;
42 struct attr {
43 struct attr *next;
44 int atype;
45 union aarg aa[];
49 * The node structure is the basic element in the compiler.
50 * Depending on the operator, it may be one of several types.
52 * This is rewritten to be a struct instead of a union as it
53 * was in the old compiler.
55 typedef unsigned int TWORD;
56 #define NIL (NODE *)0
58 struct symtab;
59 struct suedef;
60 struct regw;
62 typedef struct node {
63 struct node *next;
64 int n_op;
65 union {
66 int _reg;
67 struct regw *_regw;
68 } n_3;
69 #define n_reg n_3._reg
70 #define n_regw n_3._regw
71 TWORD n_type;
72 TWORD n_qual;
73 int n_su;
74 union {
75 char * _name;
76 int _stsize;
77 union dimfun *_df;
78 } n_5;
79 union {
80 int _label;
81 int _stalign;
82 int _flags;
83 #if 0
84 /* not anymore */
85 struct suedef *_sue;
86 #else
87 struct attr *_ap;
88 #endif
89 } n_6;
90 union {
91 struct {
92 union {
93 struct node *_left;
94 CONSZ _lval;
95 #ifdef SPECIAL_INTEGERS
96 SPECLVAL _slval;
97 #endif
98 } n_l;
99 union {
100 struct node *_right;
101 int _rval;
102 struct symtab *_sp;
103 } n_r;
104 } n_u;
105 #ifdef SOFTFLOAT
106 #ifdef FDFLOAT
107 /* To store F- or D-floats */
108 struct softfloat {
109 unsigned short fd1, fd2, fd3, fd4;
110 } _dcon;
111 #else
112 #error missing softfloat structure definition
113 #endif
114 #else
115 long double _dcon;
116 #endif
117 } n_f;
118 } NODE;
120 #define n_name n_5._name
121 #define n_stsize n_5._stsize
122 #define n_df n_5._df
124 #define n_label n_6._label
125 #define n_stalign n_6._stalign
126 #define n_flags n_6._flags
127 #define n_ap n_6._ap
129 #define n_left n_f.n_u.n_l._left
130 #define n_lval n_f.n_u.n_l._lval
131 #define n_slval n_f.n_u.n_l._slval
132 #define n_right n_f.n_u.n_r._right
133 #define n_rval n_f.n_u.n_r._rval
134 #define n_sp n_f.n_u.n_r._sp
135 #define n_dcon n_f._dcon
137 #define NLOCAL1 010000
138 #define NLOCAL2 020000
139 #define NLOCAL3 040000
141 * Node types.
143 * MAXOP is the highest number used by the backend.
146 #define FREE 1
148 * Value nodes.
150 #define NAME 2
151 #define ICON 4
152 #define FCON 5
153 #define REG 6
154 #define OREG 7
155 #define TEMP 8
156 #define XARG 9
159 * Arithmetic nodes.
161 #define PLUS 10
162 #define MINUS 11
163 #define DIV 12
164 #define MOD 13
165 #define MUL 14
168 * Bitwise operations.
170 #define AND 15
171 #define OR 16
172 #define ER 17
173 #define LS 18
174 #define RS 19
175 #define COMPL 20
177 #define UMUL 23
178 #define UMINUS 24
181 * Logical compare nodes.
183 #define EQ 25
184 #define NE 26
185 #define LE 27
186 #define LT 28
187 #define GE 29
188 #define GT 30
189 #define ULE 31
190 #define ULT 32
191 #define UGE 33
192 #define UGT 34
195 * Branch nodes.
197 #define CBRANCH 35
200 * Convert types.
202 #define FLD 36
203 #define SCONV 37
204 #define PCONV 38
205 #define PMCONV 39
206 #define PVCONV 40
209 * Function calls.
211 #define CALL 41
212 #define UCALL 42
213 #define FORTCALL 43
214 #define UFORTCALL 44
215 #define STCALL 45
216 #define USTCALL 46
219 * Other used nodes.
221 #define CCODES 47
222 #define CM 48
223 #define ASSIGN 49
224 #define STASG 50
225 #define STARG 51
226 #define FORCE 52
227 #define XASM 53
228 #define GOTO 54
229 #define RETURN 55
230 #define STREF 56
231 #define FUNARG 57
232 #define ADDROF 58
234 #define MAXOP 58
236 #endif