83
|
1
|
|
2 /* max stack in an expression (for each int, float ) */
|
119
|
3 #define MAX_MAX 50
|
61
|
4
|
104
|
5 /* flag in regs/fregs */
|
|
6
|
|
7 #define INPUT_REG 2 /* input register ( can be reused ) */
|
|
8 #define USING_REG 1 /* unreusable register usage */
|
|
9
|
61
|
10 extern int creg; /* current register */
|
|
11 extern int reg_sp; /* REGister Stack-Pointer */
|
|
12
|
95
|
13 extern int *regs; /* 使われているレジスタを示すフラグ */
|
|
14 extern int *regv; /* 値が入っているかどうか */
|
83
|
15 extern int reg_stack[MAX_MAX]; /* 実際のレジスタの領域 */
|
|
16
|
|
17 /* floating point registers */
|
61
|
18
|
95
|
19 extern int freg; /* current floating point register */
|
|
20 extern int freg_sp; /* floating point REGister Stack-Pointer */
|
83
|
21
|
95
|
22 extern int *fregs; /* 使われているレジスタを示すフラグ */
|
|
23 extern int *fregv; /* 値が入っているかどうか */
|
83
|
24 extern int freg_stack[MAX_MAX]; /* 実際のレジスタの領域 */
|
|
25
|
95
|
26 extern int use; /* generated value will be used in gexpr */
|
61
|
27
|
104
|
28 /* function provided by mc-code-*.c */
|
|
29
|
105
|
30 extern int get_register_var(NMTBL *);
|
|
31 extern int get_fregister_var(NMTBL *);
|
137
|
32 extern int get_dregister_var(NMTBL *);
|
|
33
|
|
34 extern void arg_register(NMTBL *fnptr);
|
104
|
35
|
61
|
36 /* function provided by mc-codegen.c */
|
|
37
|
102
|
38 extern void codegen_init();
|
|
39
|
61
|
40 extern void def_label(int cslabel, int dlabel);
|
|
41 extern int backdef(void);
|
137
|
42 extern int free_register_count(int);
|
61
|
43 extern int fwdlabel(void);
|
|
44 extern void b_expr(int e1, char cond, int l1,int err);
|
|
45 extern void bexpr(int e1, char cond, int l1);
|
|
46 extern void emit_init(void);
|
|
47 extern void fwddef(int l);
|
|
48
|
98
|
49 extern int is_code(NMTBL *fnptr);
|
|
50 extern int is_function(NMTBL *fnptr);
|
|
51
|
61
|
52 extern int csvalue();
|
|
53 extern void cmpdimm(int e, int csreg);
|
|
54 extern void code_enter(char *name) ;
|
|
55 extern void code_enter1(int args);
|
|
56 extern void code_init(void);
|
|
57 extern void code_leave(char *name) ;
|
|
58 extern void emit_data(int e, int t, NMTBL *n);
|
|
59 extern void emit_data_closing(NMTBL *n);
|
|
60 extern void emit_init(void);
|
|
61 extern void enter(char *name);
|
|
62 extern void enter1();
|
94
|
63 extern int g_expr(int e1);
|
99
|
64 extern int g_expr_u(int e1);
|
61
|
65 extern void gen_comment(char *s);
|
|
66 extern void gen_gdecl(char *n, int gpc);
|
|
67 extern void gen_source(char *s);
|
94
|
68 extern int gexpr(int e1,int use);
|
61
|
69 extern void gexpr_init(void);
|
|
70 extern void jcond(int l, char cond);
|
|
71 extern void jmp(int l);
|
|
72 extern void jmp_eq_label(int l);
|
|
73 extern void jmp_label(int l);
|
|
74 extern void leave(int control, char *name);
|
|
75 extern void opening(char *filename);
|
66
|
76 extern void closing();
|
61
|
77 extern void ret(void);
|
78
|
78 extern void creg_destroy();
|
61
|
79
|
99
|
80 extern int contains(int e,int type);
|
104
|
81 extern int contains_in_list(int e,int type);
|
99
|
82
|
81
|
83 /* floating point */
|
|
84
|
|
85 extern void dassop(int e1);
|
133
|
86 extern void dmachinop(int e1,int d);
|
81
|
87 extern void dassign(int e1);
|
61
|
88
|
|
89 /* end */
|