diff options
Diffstat (limited to 'usr.bin/pcc/mip/node.h')
-rw-r--r-- | usr.bin/pcc/mip/node.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/usr.bin/pcc/mip/node.h b/usr.bin/pcc/mip/node.h new file mode 100644 index 00000000000..3d42df7500c --- /dev/null +++ b/usr.bin/pcc/mip/node.h @@ -0,0 +1,194 @@ +/* $Id: node.h,v 1.1 2007/09/15 18:12:36 otto Exp $ */ +/* + * Copyright (c) 2003 Anders Magnusson (ragge@ludd.luth.se). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * The node structure is the basic element in the compiler. + * Depending on the operator, it may be one of several types. + * + * This is rewritten to be a struct instead of a union as it + * was in the old compiler. + */ +typedef unsigned int TWORD; +#define NIL (NODE *)0 + +struct symtab; +struct suedef; +struct regw; + +typedef struct node { + struct node *next; + int n_op; + union { + int _reg; + struct regw *_regw; + } n_3; +#define n_reg n_3._reg +#define n_regw n_3._regw + TWORD n_type; + TWORD n_qual; + int n_su; + union { + char * _name; + int _stsize; + union dimfun *_df; + } n_5; + union { + int _label; + int _stalign; + struct suedef *_sue; + } n_6; + union { + struct { + union { + struct node *_left; + CONSZ _lval; +#ifdef SPECIAL_INTEGERS + SPECLVAL _slval; +#endif + } n_l; + union { + struct node *_right; + int _rval; + struct symtab *_sp; + } n_r; + } n_u; + long double _dcon; + } n_f; +} NODE; + +#define n_name n_5._name +#define n_stsize n_5._stsize +#define n_df n_5._df + +#define n_label n_6._label +#define n_stalign n_6._stalign +#define n_sue n_6._sue + +#define n_left n_f.n_u.n_l._left +#define n_lval n_f.n_u.n_l._lval +#define n_slval n_f.n_u.n_l._slval +#define n_right n_f.n_u.n_r._right +#define n_rval n_f.n_u.n_r._rval +#define n_sp n_f.n_u.n_r._sp +#define n_dcon n_f._dcon + +/* + * Node types. + * + * MAXOP is the highest number used by the backend. + */ + +#define FREE 1 +/* + * Value nodes. + */ +#define NAME 2 +#define ICON 4 +#define FCON 5 +#define REG 6 +#define OREG 7 +#define TEMP 8 +#define MOVE 9 /* Special reg-reg move node */ + +/* + * Arithmetic nodes. + */ +#define PLUS 10 +#define MINUS 11 +#define DIV 12 +#define MOD 13 +#define MUL 14 + +/* + * Bitwise operations. + */ +#define AND 15 +#define OR 16 +#define ER 17 +#define LS 18 +#define RS 19 +#define COMPL 20 + +#define UMUL 23 +#define UMINUS 24 + +/* + * Logical compare nodes. + */ +#define EQ 25 +#define NE 26 +#define LE 27 +#define LT 28 +#define GE 29 +#define GT 30 +#define ULE 31 +#define ULT 32 +#define UGE 33 +#define UGT 34 + +/* + * Branch nodes. + */ +#define CBRANCH 35 + +/* + * Convert types. + */ +#define FLD 36 +#define SCONV 37 +#define PCONV 38 +#define PMCONV 39 +#define PVCONV 40 + +/* + * Function calls. + */ +#define CALL 41 +#define UCALL 42 +#define FORTCALL 43 +#define UFORTCALL 44 +#define STCALL 45 +#define USTCALL 46 + +/* + * Other used nodes. + */ +#define CCODES 47 +#define CM 48 +#define ASSIGN 49 +#define STASG 50 +#define STARG 51 +#define FORCE 52 +/* #define INIT 53 */ +#define GOTO 54 +#define RETURN 55 +#define STREF 56 +#define FUNARG 57 +#define ADDROF 58 + +#define MAXOP 58 |