* added compilers lcc and bcc (linux86)
[mascara-docs.git] / compilers / lcc-4.2 / src / config.h
blobb1b6784c84cf101eb0377c1b32f97633d85d44fe
1 /* $Id$ */
2 typedef struct {
3 unsigned char max_unaligned_load;
4 Symbol (*rmap)(int);
6 void (*blkfetch)(int size, int off, int reg, int tmp);
7 void (*blkstore)(int size, int off, int reg, int tmp);
8 void (*blkloop)(int dreg, int doff,
9 int sreg, int soff,
10 int size, int tmps[]);
11 void (*_label)(Node);
12 int (*_rule)(void*, int);
13 short **_nts;
14 void (*_kids)(Node, int, Node*);
15 char **_string;
16 char **_templates;
17 char *_isinstruction;
18 char **_ntname;
19 void (*emit2)(Node);
20 void (*doarg)(Node);
21 void (*target)(Node);
22 void (*clobber)(Node);
23 } Xinterface;
24 extern int askregvar(Symbol, Symbol);
25 extern void blkcopy(int, int, int, int, int, int[]);
26 extern unsigned emitasm(Node, int);
27 extern int getregnum(Node);
28 extern int mayrecalc(Node);
29 extern int mkactual(int, int);
30 extern void mkauto(Symbol);
31 extern Symbol mkreg(char *, int, int, int);
32 extern Symbol mkwildcard(Symbol *);
33 extern int move(Node);
34 extern int notarget(Node);
35 extern void parseflags(int, char **);
36 extern int range(Node, int, int);
37 extern unsigned regloc(Symbol); /* omit */
38 extern void rtarget(Node, int, Symbol);
39 extern void setreg(Node, Symbol);
40 extern void spill(unsigned, int, Node);
41 extern int widens(Node);
43 extern int argoffset, maxargoffset;
44 extern int bflag, dflag;
45 extern int dalign, salign;
46 extern int framesize;
47 extern unsigned freemask[], usedmask[];
48 extern int offset, maxoffset;
49 extern int swap;
50 extern unsigned tmask[], vmask[];
51 typedef struct {
52 unsigned listed:1;
53 unsigned registered:1;
54 unsigned emitted:1;
55 unsigned copy:1;
56 unsigned equatable:1;
57 unsigned spills:1;
58 unsigned mayrecalc:1;
59 void *state;
60 short inst;
61 Node kids[3];
62 Node prev, next;
63 Node prevuse;
64 short argno;
65 } Xnode;
66 typedef struct {
67 Symbol vbl;
68 short set;
69 short number;
70 unsigned mask;
71 } *Regnode;
72 enum { IREG=0, FREG=1 };
73 typedef struct {
74 char *name;
75 unsigned int eaddr; /* omit */
76 int offset;
77 Node lastuse;
78 int usecount;
79 Regnode regnode;
80 Symbol *wildcard;
81 } Xsymbol;
82 enum { RX=2 };
83 typedef struct {
84 int offset;
85 unsigned freemask[2];
86 } Env;
88 #define LBURG_MAX SHRT_MAX
90 enum { VREG=(44<<4) };
92 /* Exported for the front end */
93 extern void blockbeg(Env *);
94 extern void blockend(Env *);
95 extern void emit(Node);
96 extern Node gen(Node);
98 extern unsigned emitbin(Node, int);
100 #ifdef NDEBUG
101 #define debug(x) (void)0
102 #else
103 #define debug(x) (void)(dflag&&((x),0))
104 #endif