61
|
1 /* function required by mc-codegen.c
|
|
2 mc-code-*.c have to provied these
|
|
3 */
|
|
4
|
173
|
5
|
144
|
6 #define MAX_MAX 50
|
|
7 #define INPUT_REG 2 /* input register ( can be reused ) */
|
|
8 #define USING_REG 1 /* unreusable register usage */
|
|
9
|
173
|
10 extern char *l_include_path[];
|
|
11
|
304
|
12 extern char *init_src;
|
83
|
13 extern int size_of_int;
|
165
|
14 extern int size_of_short;
|
83
|
15 extern int size_of_float;
|
|
16 extern int size_of_double;
|
|
17 extern int size_of_longlong;
|
|
18 extern int endian;
|
254
|
19
|
83
|
20 extern int MAX_REGISTER;
|
|
21 extern int MAX_REGISTGER_VAR;
|
|
22 extern int MAX_FREGISTER;
|
103
|
23
|
|
24 extern int MAX_INPUT_REGISTER_VAR;
|
|
25 extern int MAX_CODE_INPUT_REGISTER_VAR;
|
|
26 extern int MAX_INPUT_DREGISTER_VAR;
|
138
|
27 extern int MAX_CODE_INPUT_FREGISTER_VAR;
|
103
|
28 extern int MAX_CODE_INPUT_DREGISTER_VAR;
|
99
|
29
|
94
|
30 #define REG_LVAR_OFFSET 2
|
83
|
31
|
238
|
32 extern int code_lassop_p;
|
|
33
|
102
|
34 extern void code_init();
|
61
|
35 extern void gexpr_code_init(void);
|
105
|
36 extern int get_register_var(NMTBL *n);
|
138
|
37 extern int get_dregister_var(NMTBL *n,int d);
|
195
|
38 extern int get_lregister_var(NMTBL *n);
|
126
|
39 extern int get_input_register_var(int,NMTBL *,int);
|
138
|
40 extern int get_input_dregister_var(int,NMTBL *,int,int);
|
195
|
41 extern int get_input_lregister_var(int,NMTBL *,int);
|
107
|
42 extern void emit_push();
|
61
|
43 extern int emit_pop(int type);
|
|
44 extern void gexpr_code_init();
|
95
|
45 extern int code_csvalue();
|
147
|
46 extern void code_gexpr(int e);
|
287
|
47 extern void code_cmpdimm(int e, int csreg,int label,int cond);
|
107
|
48 extern void code_gvar(int e1,int reg);
|
|
49 extern void code_rgvar(int e1,int reg);
|
165
|
50 extern void code_crgvar(int e1,int reg,int sign,int sz);
|
107
|
51 extern void code_lvar(int e2,int reg);
|
|
52 extern void code_register(int e2,int reg);
|
94
|
53 extern void code_rlvar(int e2,int reg);
|
165
|
54 extern void code_crlvar(int e2,int reg,int sign,int sz);
|
109
|
55 extern void code_fname(NMTBL *n,int reg);
|
107
|
56 extern void code_const(int e2,int reg);
|
|
57 extern void code_neg(int reg);
|
|
58 extern void code_not(int reg);
|
|
59 extern void code_lnot(int reg);
|
168
|
60 extern void code_preinc(int e1,int e2,int dir,int sign,int sz,int reg);
|
|
61 extern void code_postinc(int e1,int e2,int dir,int sign,int sz,int reg);
|
107
|
62 extern void code_return(int reg);
|
|
63 extern void code_environment(int reg);
|
221
|
64 extern void code_bool(int e1,int reg);
|
287
|
65 extern void code_cmp_crgvar(int e1,int reg,int sz,int label,int cond);
|
|
66 extern void code_cmp_crlvar(int e1,int reg,int sz,int label,int cond);
|
|
67 extern void code_cmp_rgvar(int e1,int reg,int label,int cond);
|
|
68 extern void code_cmp_rlvar(int e1,int reg,int label,int cond);
|
|
69 extern void code_cmp_register(int e2,int label,int cond);
|
107
|
70 extern void code_string(int e1,int reg);
|
61
|
71 extern void emit_copy(int from,int to,int length,int offset,int value,int det);
|
94
|
72 extern int function(int e1);
|
61
|
73 extern void code_frame_pointer(int e3);
|
|
74 extern void code_fix_frame_pointer(int disp_offset);
|
|
75 extern void code_jmp(char *s);
|
|
76 extern void code_indirect_jmp(int e2);
|
196
|
77
|
221
|
78 extern int code_rindirect(int e1, int reg,int offset, int us);
|
|
79 extern int code_crindirect(int e1, int reg,int offset, int us);
|
|
80 extern int code_srindirect(int e1, int reg,int offset, int us);
|
196
|
81 #if FLOAT_CODE
|
221
|
82 extern int code_drindirect(int e1, int reg,int offset, int d);
|
196
|
83 #endif
|
|
84 #if LONGLONG_CODE
|
221
|
85 extern int code_lrindirect(int e1, int reg,int offset, int us);
|
196
|
86 #endif
|
|
87
|
103
|
88 extern void code_assign_gvar(int e2,int reg,int byte);
|
|
89 extern void code_assign_lvar(int e2,int reg,int byte);
|
111
|
90 extern void code_assign_register(int e2,int byte,int reg);
|
118
|
91 extern void code_assign(int e2,int byte,int reg);
|
221
|
92 extern void code_register_assop(int e2,int reg,int op,int byte);
|
|
93 extern void code_assop(int op,int reg,int byte,int sign);
|
|
94 extern void tosop(int op,int reg,int oreg);
|
66
|
95 extern void code_opening(char *filename);
|
|
96 extern void code_closing();
|
280
|
97 extern void rexpr(int e1, int l1, int cond,int t);
|
61
|
98 extern void jmp(int l);
|
187
|
99 extern int code_get_fixed_creg(int reg,int type);
|
|
100 extern void code_set_fixed_creg(int reg,int mode,int type);
|
107
|
101 extern void code_set_return_register(int mode);
|
66
|
102 extern void global_table(void);
|
92
|
103 extern void code_label(int labelno);
|
|
104
|
189
|
105 extern int code_const_op_p(int op,int v);
|
221
|
106 extern void oprtc(int op,int reg,int v);
|
189
|
107
|
61
|
108
|
195
|
109 #if FLOAT_CODE
|
81
|
110 /* floating point part */
|
|
111
|
229
|
112 extern void drexpr(int e1, int e2,int l1, int op,int cond);
|
81
|
113 extern int dpop_register();
|
|
114 extern int emit_dpop(int);
|
138
|
115 extern void code_dregister(int e2,int reg,int d);
|
287
|
116 extern void code_cmp_dregister(int,int,int,int);
|
|
117 extern void code_cmp_drgvar(int,int,int,int,int);
|
|
118 extern void code_cmp_drlvar(int,int,int,int,int);
|
103
|
119 extern void code_dassign(int,int,int);
|
|
120 extern void code_dassign_gvar(int,int,int);
|
|
121 extern void code_dassign_lvar(int,int,int);
|
138
|
122 extern void code_dassign_dregister(int e2,int d,int reg);
|
|
123 extern void code_dconst(int,int,int);
|
|
124 extern void code_dneg(int,int);
|
107
|
125 extern void code_drgvar(int,int,int);
|
|
126 extern void code_drlvar(int,int,int);
|
221
|
127 extern void dtosop(int,int,int);
|
138
|
128 extern void emit_dpop_free(int,int);
|
133
|
129 extern void emit_dpush(int);
|
221
|
130 extern void code_i2d();
|
|
131 extern void code_d2i();
|
|
132 extern void code_u2d();
|
|
133 extern void code_d2u();
|
|
134 extern void code_d2f();
|
|
135 extern void code_f2d();
|
|
136 extern void code_f2i();
|
|
137 extern void code_f2u();
|
|
138 extern void code_i2f();
|
|
139 extern void code_u2f();
|
133
|
140
|
81
|
141
|
107
|
142 extern void code_dpreinc(int e1,int e2,int d,int reg);
|
|
143 extern void code_dpostinc(int e1,int e2,int d,int reg);
|
221
|
144 extern void code_dassop(int op,int reg,int d);
|
219
|
145 extern void code_register_dassop(int reg,int op,int d);
|
89
|
146
|
195
|
147 #endif
|
|
148
|
|
149 #if LONGLONG_CODE
|
|
150 /* 64bit int part */
|
|
151
|
229
|
152 extern void lrexpr(int e1, int e2,int l1, int op,int cond);
|
195
|
153 extern int lpop_register();
|
|
154 extern int emit_lpop();
|
|
155 extern void code_lregister(int e2,int reg);
|
287
|
156 extern void code_cmp_lregister(int,int,int);
|
|
157 extern void code_cmp_lrgvar(int,int,int,int);
|
|
158 extern void code_cmp_lrlvar(int,int,int,int);
|
195
|
159 extern void code_lassign(int,int);
|
|
160 extern void code_lassign_gvar(int,int);
|
|
161 extern void code_lassign_lvar(int,int);
|
|
162 extern void code_lassign_lregister(int e2,int reg);
|
|
163 extern void code_lconst(int,int);
|
212
|
164 extern void code_lneg(int);
|
195
|
165 extern void code_lrgvar(int,int);
|
|
166 extern void code_lrlvar(int,int);
|
221
|
167 extern void ltosop(int,int,int);
|
195
|
168 extern void emit_lpop_free(int);
|
|
169 extern void emit_lpush();
|
213
|
170 extern int code_lconst_op_p(int op,int e);
|
221
|
171 extern void loprtc(int op,int reg, int e);
|
239
|
172 extern void code_i2ll(int reg);
|
|
173 extern void code_i2ull(int reg);
|
|
174 extern void code_u2ll(int reg);
|
|
175 extern void code_u2ull(int reg);
|
|
176 extern void code_ll2i(int reg);
|
|
177 extern void code_ll2u(int reg);
|
|
178 extern void code_ull2i(int reg);
|
|
179 extern void code_ull2u(int reg);
|
195
|
180 #if FLOAT_CODE
|
239
|
181 extern void code_d2ll(int reg);
|
|
182 extern void code_d2ull(int reg);
|
|
183 extern void code_f2ll(int reg);
|
|
184 extern void code_f2ull(int reg);
|
|
185 extern void code_ll2d(int reg);
|
|
186 extern void code_ll2f(int reg);
|
|
187 extern void code_ull2d(int reg);
|
|
188 extern void code_ull2f(int reg);
|
195
|
189 #endif
|
|
190
|
|
191
|
|
192
|
|
193
|
|
194 extern void code_lpreinc(int e1,int e2,int reg);
|
|
195 extern void code_lpostinc(int e1,int e2,int reg);
|
221
|
196 extern void code_lassop(int op,int reg);
|
219
|
197 extern void code_register_lassop(int reg,int op);
|
195
|
198
|
|
199 #endif
|
|
200
|
313
|
201 extern void code_alloca(int e,int reg);
|
137
|
202 extern void code_arg_register(NMTBL *fnptr);
|
89
|
203
|
|
204 extern int get_register(void);
|
138
|
205 extern int get_dregister(int);
|
205
|
206 extern int get_lregister(void);
|
89
|
207 extern void free_register(int i) ;
|
|
208 extern int pop_register(void);
|
|
209 extern void emit_pop_free(int xreg);
|
308
|
210 extern void emit_data(int e, int t, NMTBL *n);
|
|
211 extern void emit_data_closing(NMTBL *n);
|
|
212
|
89
|
213
|
221
|
214 // extern int use_int(int);
|
|
215 // extern int use_float(int);
|
|
216 // extern int use_double(int);
|
|
217 // extern int use_longlong(int);
|
138
|
218
|
300
|
219 #if CASE_CODE
|
|
220 extern int code_table_jump_p();
|
302
|
221 extern void code_table_jump(int table,int csvalue,int delta,int max,int min,int dlabel);
|
300
|
222 extern void code_table_open(int table);
|
|
223 extern void code_table_value(int label,int table);
|
|
224 extern void code_table_close();
|
|
225 #endif
|
|
226
|
316
|
227 #if ASM_CODE
|
320
|
228
|
|
229 extern void replace_asm_string(char *asm_str,int repl);
|
|
230 extern int asm_operand(char *p,int e1,int mode,int repl,int n,int repl0);
|
|
231 extern void free_asm_operand(int repl);
|
|
232
|
316
|
233 #endif
|
|
234
|
89
|
235 /* */
|