]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/kl/l.h
python: update python build configuration to new ape capabilities like getaddrinfo...
[plan9front.git] / sys / src / cmd / kl / l.h
1 #include        <u.h>
2 #include        <libc.h>
3 #include        <bio.h>
4 #include        "../kc/k.out.h"
5
6 #ifndef EXTERN
7 #define EXTERN  extern
8 #endif
9
10 typedef struct  Adr     Adr;
11 typedef struct  Sym     Sym;
12 typedef struct  Autom   Auto;
13 typedef struct  Prog    Prog;
14 typedef struct  Optab   Optab;
15
16 #define P               ((Prog*)0)
17 #define S               ((Sym*)0)
18 #define TNAME           (curtext&&curtext->from.sym?curtext->from.sym->name:noname)
19
20 struct  Adr
21 {
22         union
23         {
24                 long    u0offset;
25                 char    u0sval[NSNAME];
26                 Ieee    u0ieee;
27         } u0;
28         union
29         {
30                 Auto*   u1autom;
31                 Sym*    u1sym;
32         } u1;
33         char    type;
34         char    reg;
35         char    name;
36         char    class;
37 };
38
39 #define offset  u0.u0offset
40 #define sval    u0.u0sval
41 #define ieee    u0.u0ieee
42
43 #define autom   u1.u1autom
44 #define sym     u1.u1sym
45
46 struct  Prog
47 {
48         Adr     from;
49         Adr     to;
50         Prog    *forwd;
51         Prog    *cond;
52         Prog    *link;
53         long    pc;
54         long    regused;
55         short   line;
56         short   mark;
57         uchar   optab;
58         uchar   as;
59         char    reg;
60 };
61 struct  Sym
62 {
63         char    *name;
64         short   type;
65         short   version;
66         short   become;
67         short   frame;
68         long    value;
69         Sym     *link;
70 };
71 struct  Autom
72 {
73         Sym     *asym;
74         Auto    *link;
75         long    aoffset;
76         short   type;
77 };
78 struct  Optab
79 {
80         uchar   as;
81         char    a1;
82         char    a2;
83         char    a3;
84         char    type;
85         char    size;
86         char    param;
87 };
88 EXTERN  struct
89 {
90         Optab*  start;
91         Optab*  stop;
92 } oprange[AEND];
93
94 enum
95 {
96         AXLD            = AEND+1,
97         AXST,
98         FPCHIP          = 1,
99         BIG             = 4096-8,
100         STRINGSZ        = 200,
101         MAXIO           = 8192,
102         MAXHIST         = 20,                           /* limit of path elements for history symbols */
103         DATBLK          = 1024,
104         NHASH           = 10007,
105         NHUNK           = 100000,
106         MINSIZ          = 64,
107         NENT            = 100,
108         NSCHED          = 20,
109
110 /* mark flags */
111         LABEL           = 1<<0,
112         LEAF            = 1<<1,
113         FLOAT           = 1<<2,
114         BRANCH          = 1<<3,
115         LOAD            = 1<<4,
116         FCMP            = 1<<5,
117         SYNC            = 1<<6,
118         LIST            = 1<<7,
119         FOLL            = 1<<8,
120         NOSCHED         = 1<<9,
121
122         STEXT           = 1,
123         SDATA,
124         SBSS,
125         SDATA1,
126         SXREF,
127         SLEAF,
128         SFILE,
129         SCONST,
130
131         C_NONE          = 0,
132
133         C_REG,
134         C_FREG,
135         C_CREG,
136         C_PREG,
137         C_FSR,
138         C_FQ,
139
140         C_ZCON,         /* 0 */
141         C_SCON,         /* 13 bit signed */
142         C_UCON,         /* low 10 bits 0 */
143         C_LCON,         /* other */
144
145         C_SACON,
146         C_SECON,
147         C_LACON,
148         C_LECON,
149
150         C_SBRA,
151         C_LBRA,
152
153         C_ESAUTO,
154         C_OSAUTO,
155         C_SAUTO,
156         C_OLAUTO,
157         C_ELAUTO,
158         C_LAUTO,
159
160         C_ESEXT,
161         C_OSEXT,
162         C_SEXT,
163         C_ELEXT,
164         C_OLEXT,
165         C_LEXT,
166
167         C_ZOREG,
168         C_SOREG,
169         C_LOREG,
170         C_ASI,
171
172         C_ANY,
173
174         C_GOK,
175
176         C_NCLASS
177 };
178
179 EXTERN union
180 {
181         struct
182         {
183                 uchar   obuf[MAXIO];                    /* output buffer */
184                 uchar   ibuf[MAXIO];                    /* input buffer */
185         } u;
186         char    dbuf[1];
187 } buf;
188
189 #define cbuf    u.obuf
190 #define xbuf    u.ibuf
191
192 EXTERN  long    HEADR;                  /* length of header */
193 EXTERN  int     HEADTYPE;               /* type of header */
194 EXTERN  long    INITDAT;                /* data location */
195 EXTERN  long    INITRND;                /* data round above text location */
196 EXTERN  long    INITTEXT;               /* text location */
197 EXTERN  char*   INITENTRY;              /* entry point */
198 EXTERN  long    autosize;
199 EXTERN  Biobuf  bso;
200 EXTERN  long    bsssize;
201 EXTERN  int     cbc;
202 EXTERN  uchar*  cbp;
203 EXTERN  int     cout;
204 EXTERN  Auto*   curauto;
205 EXTERN  Auto*   curhist;
206 EXTERN  Prog*   curp;
207 EXTERN  Prog*   curtext;
208 EXTERN  Prog*   datap;
209 EXTERN  Prog*   prog_mul;
210 EXTERN  Prog*   prog_div;
211 EXTERN  Prog*   prog_divl;
212 EXTERN  Prog*   prog_mod;
213 EXTERN  Prog*   prog_modl;
214 EXTERN  long    datsize;
215 EXTERN  char    debug[128];
216 EXTERN  Prog*   firstp;
217 EXTERN  char    fnuxi8[8];
218 EXTERN  Sym*    hash[NHASH];
219 EXTERN  Sym*    histfrog[MAXHIST];
220 EXTERN  int     histfrogp;
221 EXTERN  int     histgen;
222 EXTERN  char*   library[50];
223 EXTERN  char*   libraryobj[50];
224 EXTERN  int     libraryp;
225 EXTERN  int     xrefresolv;
226 EXTERN  char*   hunk;
227 EXTERN  char    inuxi1[1];
228 EXTERN  char    inuxi2[2];
229 EXTERN  char    inuxi4[4];
230 EXTERN  Prog*   lastp;
231 EXTERN  long    lcsize;
232 EXTERN  char    literal[32];
233 EXTERN  int     nerrors;
234 EXTERN  long    nhunk;
235 EXTERN  char*   noname;
236 EXTERN  long    instoffset;
237 EXTERN  char*   outfile;
238 EXTERN  long    pc;
239 EXTERN  long    symsize;
240 EXTERN  long    staticgen;
241 EXTERN  Prog*   textp;
242 EXTERN  long    textsize;
243 EXTERN  long    tothunk;
244 EXTERN  char    xcmp[C_NCLASS][C_NCLASS];
245 EXTERN  int     version;
246 EXTERN  Prog    zprg;
247 EXTERN  int     dtype;
248
249 extern  Optab   optab[];
250 extern  char*   anames[];
251
252 #pragma varargck        type    "A"     int
253 #pragma varargck        type    "A"     uint
254 #pragma varargck        type    "D"     Adr*
255 #pragma varargck        type    "N"     Adr*
256 #pragma varargck        type    "P"     Prog*
257 #pragma varargck        type    "S"     char*
258
259 #pragma varargck        argpos  diag 1
260
261 int     Aconv(Fmt*);
262 int     Dconv(Fmt*);
263 int     Nconv(Fmt*);
264 int     Pconv(Fmt*);
265 int     Sconv(Fmt*);
266 int     aclass(Adr*);
267 void    addhist(long, int);
268 void    histtoauto(void);
269 void    addnop(Prog*);
270 void    append(Prog*, Prog*);
271 void    asmb(void);
272 void    asmlc(void);
273 int     asmout(Prog*, Optab*, int);
274 void    asmsym(void);
275 long    atolwhex(char*);
276 Prog*   brloop(Prog*);
277 void    buildop(void);
278 void    cflush(void);
279 int     cmp(int, int);
280 int     compound(Prog*);
281 double  cputime(void);
282 void    datblk(long, long);
283 void    diag(char*, ...);
284 void    dodata(void);
285 void    doprof1(void);
286 void    doprof2(void);
287 long    entryvalue(void);
288 void    errorexit(void);
289 void    exchange(Prog*);
290 int     find1(long, int);
291 void    follow(void);
292 void    gethunk(void);
293 double  ieeedtod(Ieee*);
294 long    ieeedtof(Ieee*);
295 int     isnop(Prog*);
296 void    ldobj(int, long, char*);
297 void    loadlib(void);
298 void    listinit(void);
299 void    initmuldiv(void);
300 Sym*    lookup(char*, int);
301 void    lput(long);
302 void    mkfwd(void);
303 void*   mysbrk(ulong);
304 void    names(void);
305 void    nocache(Prog*);
306 void    noops(void);
307 void    nuxiinit(void);
308 void    objfile(char*);
309 int     ocmp(const void*, const void*);
310 long    opcode(int);
311 Optab*  oplook(Prog*);
312 void    patch(void);
313 void    prasm(Prog*);
314 void    prepend(Prog*, Prog*);
315 Prog*   prg(void);
316 int     pseudo(Prog*);
317 void    putsymb(char*, int, long, int);
318 long    regoff(Adr*);
319 int     relinv(int);
320 long    rnd(long, long);
321 void    sched(Prog*, Prog*);
322 void    span(void);
323 void    undef(void);
324 void    xdefine(char*, int, long);
325 void    xfol(Prog*);