source: mainline/uspace/app/pcc/mip/node.h@ a44424f

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since a44424f 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: 4.6 KB
Line 
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.
5 *
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
16 *
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.
27 */
28
29#ifndef NODE_H
30#define NODE_H
31
32/*
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.
35 */
36union aarg {
37 int iarg;
38 char *sarg;
39 void *varg;
40};
41
42struct attr {
43 struct attr *next;
44 int atype;
45 union aarg aa[];
46};
47
48/*
49 * The node structure is the basic element in the compiler.
50 * Depending on the operator, it may be one of several types.
51 *
52 * This is rewritten to be a struct instead of a union as it
53 * was in the old compiler.
54 */
55typedef unsigned int TWORD;
56#define NIL (NODE *)0
57
58struct symtab;
59struct suedef;
60struct regw;
61
62typedef 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;
119
120#define n_name n_5._name
121#define n_stsize n_5._stsize
122#define n_df n_5._df
123
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
128
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
136
137#define NLOCAL1 010000
138#define NLOCAL2 020000
139#define NLOCAL3 040000
140/*
141 * Node types.
142 *
143 * MAXOP is the highest number used by the backend.
144 */
145
146#define FREE 1
147/*
148 * Value nodes.
149 */
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
157
158/*
159 * Arithmetic nodes.
160 */
161#define PLUS 10
162#define MINUS 11
163#define DIV 12
164#define MOD 13
165#define MUL 14
166
167/*
168 * Bitwise operations.
169 */
170#define AND 15
171#define OR 16
172#define ER 17
173#define LS 18
174#define RS 19
175#define COMPL 20
176
177#define UMUL 23
178#define UMINUS 24
179
180/*
181 * Logical compare nodes.
182 */
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
193
194/*
195 * Branch nodes.
196 */
197#define CBRANCH 35
198
199/*
200 * Convert types.
201 */
202#define FLD 36
203#define SCONV 37
204#define PCONV 38
205#define PMCONV 39
206#define PVCONV 40
207
208/*
209 * Function calls.
210 */
211#define CALL 41
212#define UCALL 42
213#define FORTCALL 43
214#define UFORTCALL 44
215#define STCALL 45
216#define USTCALL 46
217
218/*
219 * Other used nodes.
220 */
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
233
234#define MAXOP 58
235
236#endif
Note: See TracBrowser for help on using the repository browser.