Pristine Ack-5.5
[Ack-5.5.git] / h / cgg_cg.h
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  */
5 /* $Id: cgg_cg.h,v 1.11 1994/06/24 10:08:04 ceriel Exp $ */
6
7 /* offsets of interesting fields in EM-pattern */
8
9 #define PO_HASH         0
10 #define PO_NEXT         1
11 #define PO_MATCH        3
12
13 #define ILLHASH 0177777
14
15
16 /* Commands for codegenerator, in low order 5 bits of byte */
17
18 #define DO_NEXTEM       0
19 #define DO_MATCH        1
20 #define DO_XMATCH       2
21 #define DO_XXMATCH      3
22 #define DO_REMOVE       4
23 #define DO_DEALLOCATE   5
24 #define DO_REALLOCATE   6
25 #define DO_ALLOCATE     7
26 #define DO_MOVE         10
27 #define DO_ERASE        11
28 #define DO_TOKREPLACE   12
29 #define DO_EMREPLACE    13
30 #define DO_COST         14
31 #define DO_RETURN       15
32 #define DO_COERC        16
33 #define DO_PRETURN      17
34 #define DO_RREMOVE      18
35 #define DO_INSTR        19
36 #define DO_TEST         20
37 #define DO_DLINE        21
38 #define DO_SETCC        22
39 #define DO_TOSTACK      23
40 #define DO_KILLREG      24
41 #define DO_LABDEF       25
42
43 #ifndef MAXATT
44 #define MAXATT TOKENSIZE
45 #endif
46
47 typedef struct instance {
48         short in_which;
49 #               define IN_COPY          1
50 #               define IN_MEMB          2
51 #               define IN_RIDENT        3
52 #               define IN_ALLOC         4
53 #               define IN_DESCR         5
54 #               define IN_S_DESCR       6
55 #               define IN_D_DESCR       7
56         short in_info[MAXATT+1];
57 } inst_t,*inst_p;
58
59 typedef struct set {
60         short set_size;
61         short set_val[SETSIZE];
62 } set_t,*set_p;
63
64 typedef struct {
65         short m_set1;           /* number of tokenexpr in move: from */
66         short m_expr1;          /* optional expression */
67         short m_set2;           /* number of tokenexpr in move: to */
68         short m_expr2;          /* optional expression */
69         short m_cindex;         /* code index to really do it */
70 } move_t, *move_p;
71
72 typedef struct {
73         short t_set;            /* number of tokenexpr in test */
74         short t_expr;           /* optional expression */
75         short t_cindex;         /* code index to really do it */
76 } test_t, *test_p;
77
78 struct exprnode {
79         short ex_operator;
80         short ex_lnode;
81         short ex_rnode;
82 };
83 typedef struct exprnode node_t;
84 typedef struct exprnode *node_p;
85
86 /*
87  * contents of .ex_operator
88  */
89
90 #define EX_TOKFIELD     0
91 #define EX_ARG          1
92 #define EX_CON          2
93 #define EX_ALLREG       3
94 #define EX_SAMESIGN     4
95 #define EX_SFIT         5
96 #define EX_UFIT         6
97 #define EX_ROM          7
98 #define EX_NCPEQ        8
99 #define EX_SCPEQ        9
100 #define EX_RCPEQ        10
101 #define EX_NCPNE        11
102 #define EX_SCPNE        12
103 #define EX_RCPNE        13
104 #define EX_NCPGT        14
105 #define EX_NCPGE        15
106 #define EX_NCPLT        16
107 #define EX_NCPLE        17
108 #define EX_OR2          18
109 #define EX_AND2         19
110 #define EX_PLUS         20
111 #define EX_CAT          21
112 #define EX_MINUS        22
113 #define EX_TIMES        23
114 #define EX_DIVIDE       24
115 #define EX_MOD          25
116 #define EX_LSHIFT       26
117 #define EX_RSHIFT       27
118 #define EX_NOT          28
119 #define EX_COMP         29
120 #define EX_STRING       31
121 #define EX_DEFINED      32
122 #define EX_SUBREG       33
123 #define EX_TOSTRING     34
124 #define EX_UMINUS       35
125 #define EX_REG          36
126 #define EX_LOWW         37
127 #define EX_HIGHW        38
128 #define EX_INREG        39
129 #define EX_REGVAR       40
130 #define EX_OR           41
131 #define EX_XOR          42
132 #define EX_AND          43
133 #define EX_ISROM        44
134 #define EX_TOPELTSIZE   45
135 #define EX_FALLTHROUGH  46
136
137
138 typedef struct {        /* to stack coercions */
139         short c1_texpno;        /* token expression number */
140         short c1_expr;          /* boolean expression */
141         short c1_prop;          /* property of register needed */
142         short c1_codep;         /* code index */
143 } c1_t,*c1_p;
144
145 #ifdef MAXSPLIT
146 typedef struct {        /* splitting coercions */
147         short c2_texpno;        /* token expression number */
148         short c2_expr;          /* optional boolean expression */
149         short c2_nsplit;        /* split factor */
150         short c2_repl[MAXSPLIT];/* replacement instances */
151         short c2_codep;         /* code index */
152 } c2_t,*c2_p;
153 #endif /* MAXSPLIT */
154
155 typedef struct {        /* one to one coercions */
156         short c3_texpno;        /* token expression number */
157         short c3_expr;          /* boolean expression */
158         short c3_prop;          /* property of register needed */
159         short c3_repl;          /* replacement instance */
160         short c3_codep;         /* code index */
161 } c3_t,*c3_p;
162
163
164 #define getint(a,b) \
165         if ((a=((*(b)++)&BMASK)) >= 128) {\
166                 a = ((a-128)<<BSHIFT) | (*(b)++&BMASK); \
167         }