]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/mk/acid
realemu: implement IDIV, mark 0xE0000 writeable, fix DIV overfow trap
[plan9front.git] / sys / src / cmd / mk / acid
1 sizeof_1_ = 8;
2 aggr _1_
3 {
4         'D' 0 llength;
5         'D' 4 hlength;
6 };
7
8 defn
9 _1_(addr) {
10         complex _1_ addr;
11         print(" llength ", addr.llength, "\n");
12         print(" hlength ", addr.hlength, "\n");
13 };
14
15 sizeof_2_ = 8;
16 aggr _2_
17 {
18         'V' 0 length;
19         {
20         'D' 0 llength;
21         'D' 4 hlength;
22         };
23 };
24
25 defn
26 _2_(addr) {
27         complex _2_ addr;
28         print(" length  ", addr.length, "\n");
29         print("_1_ {\n");
30                 _1_(addr+0);
31         print("}\n");
32 };
33
34 UTFmax = 3;
35 Runesync = 128;
36 Runeself = 128;
37 Runeerror = 128;
38 sizeofFconv = 24;
39 aggr Fconv
40 {
41         'X' 0 out;
42         'X' 4 eout;
43         'D' 8 f1;
44         'D' 12 f2;
45         'D' 16 f3;
46         'D' 20 chr;
47 };
48
49 defn
50 Fconv(addr) {
51         complex Fconv addr;
52         print(" out     ", addr.out\X, "\n");
53         print(" eout    ", addr.eout\X, "\n");
54         print(" f1      ", addr.f1, "\n");
55         print(" f2      ", addr.f2, "\n");
56         print(" f3      ", addr.f3, "\n");
57         print(" chr     ", addr.chr, "\n");
58 };
59
60 sizeofTm = 40;
61 aggr Tm
62 {
63         'D' 0 sec;
64         'D' 4 min;
65         'D' 8 hour;
66         'D' 12 mday;
67         'D' 16 mon;
68         'D' 20 year;
69         'D' 24 wday;
70         'D' 28 yday;
71         'a' 32 zone;
72         'D' 36 tzoff;
73 };
74
75 defn
76 Tm(addr) {
77         complex Tm addr;
78         print(" sec     ", addr.sec, "\n");
79         print(" min     ", addr.min, "\n");
80         print(" hour    ", addr.hour, "\n");
81         print(" mday    ", addr.mday, "\n");
82         print(" mon     ", addr.mon, "\n");
83         print(" year    ", addr.year, "\n");
84         print(" wday    ", addr.wday, "\n");
85         print(" yday    ", addr.yday, "\n");
86         print(" zone    ", addr.zone, "\n");
87         print(" tzoff   ", addr.tzoff, "\n");
88 };
89
90 PNPROC = 1;
91 PNGROUP = 2;
92 sizeofLock = 4;
93 aggr Lock
94 {
95         'D' 0 val;
96 };
97
98 defn
99 Lock(addr) {
100         complex Lock addr;
101         print(" val     ", addr.val, "\n");
102 };
103
104 sizeofQLp = 12;
105 aggr QLp
106 {
107         'D' 0 inuse;
108         'A' QLp 4 next;
109         'C' 8 state;
110 };
111
112 defn
113 QLp(addr) {
114         complex QLp addr;
115         print(" inuse   ", addr.inuse, "\n");
116         print(" next    ", addr.next\X, "\n");
117         print(" state   ", addr.state, "\n");
118 };
119
120 sizeofQLock = 16;
121 aggr QLock
122 {
123         Lock 0 lock;
124         'D' 4 locked;
125         'A' QLp 8 $head;
126         'A' QLp 12 $tail;
127 };
128
129 defn
130 QLock(addr) {
131         complex QLock addr;
132         print("Lock lock {\n");
133         Lock(addr.lock);
134         print("}\n");
135         print(" locked  ", addr.locked, "\n");
136         print(" $head   ", addr.$head\X, "\n");
137         print(" $tail   ", addr.$tail\X, "\n");
138 };
139
140 sizeofRWLock = 20;
141 aggr RWLock
142 {
143         Lock 0 lock;
144         'D' 4 readers;
145         'D' 8 writer;
146         'A' QLp 12 $head;
147         'A' QLp 16 $tail;
148 };
149
150 defn
151 RWLock(addr) {
152         complex RWLock addr;
153         print("Lock lock {\n");
154         Lock(addr.lock);
155         print("}\n");
156         print(" readers ", addr.readers, "\n");
157         print(" writer  ", addr.writer, "\n");
158         print(" $head   ", addr.$head\X, "\n");
159         print(" $tail   ", addr.$tail\X, "\n");
160 };
161
162 RFNAMEG = 1;
163 RFENVG = 2;
164 RFFDG = 4;
165 RFNOTEG = 8;
166 RFPROC = 16;
167 RFMEM = 32;
168 RFNOWAIT = 64;
169 RFCNAMEG = 1024;
170 RFCENVG = 2048;
171 RFCFDG = 4096;
172 RFREND = 8192;
173 sizeofQid = 8;
174 aggr Qid
175 {
176         'U' 0 path;
177         'U' 4 vers;
178 };
179
180 defn
181 Qid(addr) {
182         complex Qid addr;
183         print(" path    ", addr.path, "\n");
184         print(" vers    ", addr.vers, "\n");
185 };
186
187 sizeofDir = 116;
188 aggr Dir
189 {
190         'a' 0 name;
191         'a' 28 uid;
192         'a' 56 gid;
193         Qid 84 qid;
194         'U' 92 mode;
195         'D' 96 atime;
196         'D' 100 mtime;
197         {
198         'V' 104 length;
199         {
200         'D' 104 llength;
201         'D' 108 hlength;
202         };
203         };
204         'u' 112 type;
205         'u' 114 dev;
206 };
207
208 defn
209 Dir(addr) {
210         complex Dir addr;
211         print(" name    ", addr.name, "\n");
212         print(" uid     ", addr.uid, "\n");
213         print(" gid     ", addr.gid, "\n");
214         print("Qid qid {\n");
215         Qid(addr.qid);
216         print("}\n");
217         print(" mode    ", addr.mode, "\n");
218         print(" atime   ", addr.atime, "\n");
219         print(" mtime   ", addr.mtime, "\n");
220         print("_2_ {\n");
221                 _2_(addr+104);
222         print("}\n");
223         print(" type    ", addr.type, "\n");
224         print(" dev     ", addr.dev, "\n");
225 };
226
227 sizeofWaitmsg = 112;
228 aggr Waitmsg
229 {
230         'a' 0 pid;
231         'a' 12 time;
232         'a' 48 msg;
233 };
234
235 defn
236 Waitmsg(addr) {
237         complex Waitmsg addr;
238         print(" pid     ", addr.pid, "\n");
239         print(" time    ", addr.time, "\n");
240         print(" msg     ", addr.msg, "\n");
241 };
242
243 Bsize = 8192;
244 Bungetsize = 4;
245 Bmagic = 3227993;
246 Beof = -1;
247 Bbad = -2;
248 Binactive = 0;
249 Bractive = 1;
250 Bwactive = 2;
251 Bracteof = 3;
252 sizeofBiobufhdr = 52;
253 aggr Biobufhdr
254 {
255         'D' 0 icount;
256         'D' 4 ocount;
257         'D' 8 rdline;
258         'D' 12 runesize;
259         'D' 16 state;
260         'D' 20 fid;
261         'D' 24 flag;
262         'V' 28 offset;
263         'D' 36 bsize;
264         'X' 40 bbuf;
265         'X' 44 ebuf;
266         'X' 48 gbuf;
267 };
268
269 defn
270 Biobufhdr(addr) {
271         complex Biobufhdr addr;
272         print(" icount  ", addr.icount, "\n");
273         print(" ocount  ", addr.ocount, "\n");
274         print(" rdline  ", addr.rdline, "\n");
275         print(" runesize        ", addr.runesize, "\n");
276         print(" state   ", addr.state, "\n");
277         print(" fid     ", addr.fid, "\n");
278         print(" flag    ", addr.flag, "\n");
279         print(" offset  ", addr.offset, "\n");
280         print(" bsize   ", addr.bsize, "\n");
281         print(" bbuf    ", addr.bbuf\X, "\n");
282         print(" ebuf    ", addr.ebuf\X, "\n");
283         print(" gbuf    ", addr.gbuf\X, "\n");
284 };
285
286 sizeofBiobuf = 8248;
287 aggr Biobuf
288 {
289         {
290         'D' 0 icount;
291         'D' 4 ocount;
292         'D' 8 rdline;
293         'D' 12 runesize;
294         'D' 16 state;
295         'D' 20 fid;
296         'D' 24 flag;
297         'V' 28 offset;
298         'D' 36 bsize;
299         'X' 40 bbuf;
300         'X' 44 ebuf;
301         'X' 48 gbuf;
302         };
303         'a' 52 b;
304 };
305
306 defn
307 Biobuf(addr) {
308         complex Biobuf addr;
309         print("Biobufhdr {\n");
310                 Biobufhdr(addr+0);
311         print("}\n");
312         print(" b       ", addr.b, "\n");
313 };
314
315 sizeof_3_ = 4;
316 aggr _3_
317 {
318         'X' 0 sp;
319         'X' 0 rsp;
320 };
321
322 defn
323 _3_(addr) {
324         complex _3_ addr;
325         print(" sp      ", addr.sp\X, "\n");
326         print(" rsp     ", addr.rsp\X, "\n");
327 };
328
329 sizeof_4_ = 4;
330 aggr _4_
331 {
332         'X' 0 ep;
333         'X' 0 rep;
334 };
335
336 defn
337 _4_(addr) {
338         complex _4_ addr;
339         print(" ep      ", addr.ep\X, "\n");
340         print(" rep     ", addr.rep\X, "\n");
341 };
342
343 sizeofResub = 8;
344 aggr Resub
345 {
346         {
347         'X' 0 sp;
348         'X' 0 rsp;
349         };
350         {
351         'X' 4 ep;
352         'X' 4 rep;
353         };
354 };
355
356 defn
357 Resub(addr) {
358         complex Resub addr;
359         print("_3_ {\n");
360                 _3_(addr+0);
361         print("}\n");
362         print("_4_ {\n");
363                 _4_(addr+4);
364         print("}\n");
365 };
366
367 sizeofReclass = 132;
368 aggr Reclass
369 {
370         'X' 0 end;
371         'a' 4 spans;
372 };
373
374 defn
375 Reclass(addr) {
376         complex Reclass addr;
377         print(" end     ", addr.end\X, "\n");
378         print(" spans   ", addr.spans, "\n");
379 };
380
381 sizeof_5_ = 4;
382 aggr _5_
383 {
384         'A' Reclass 0 cp;
385         'u' 0 r;
386         'D' 0 subid;
387         'X' 0 right;
388 };
389
390 defn
391 _5_(addr) {
392         complex _5_ addr;
393         print(" cp      ", addr.cp\X, "\n");
394         print(" r       ", addr.r, "\n");
395         print(" subid   ", addr.subid, "\n");
396         print(" right   ", addr.right\X, "\n");
397 };
398
399 sizeof_6_ = 4;
400 aggr _6_
401 {
402         'X' 0 left;
403         'X' 0 next;
404 };
405
406 defn
407 _6_(addr) {
408         complex _6_ addr;
409         print(" left    ", addr.left\X, "\n");
410         print(" next    ", addr.next\X, "\n");
411 };
412
413 sizeofReinst = 12;
414 aggr Reinst
415 {
416         'D' 0 type;
417         {
418         'A' Reclass 4 cp;
419         'u' 4 r;
420         'D' 4 subid;
421         'A' Reinst 4 right;
422         };
423         {
424         'A' Reinst 8 left;
425         'A' Reinst 8 next;
426         };
427 };
428
429 defn
430 Reinst(addr) {
431         complex Reinst addr;
432         print(" type    ", addr.type, "\n");
433         print("_5_ {\n");
434                 _5_(addr+4);
435         print("}\n");
436         print("_6_ {\n");
437                 _6_(addr+8);
438         print("}\n");
439 };
440
441 sizeofReprog = 2176;
442 aggr Reprog
443 {
444         'A' Reinst 0 startinst;
445         'a' 4 class;
446         'a' 2116 firstinst;
447 };
448
449 defn
450 Reprog(addr) {
451         complex Reprog addr;
452         print(" startinst       ", addr.startinst\X, "\n");
453         print(" class   ", addr.class, "\n");
454         print(" firstinst       ", addr.firstinst, "\n");
455 };
456
457 complex Biobuf bout;
458 sizeofBufblock = 16;
459 aggr Bufblock
460 {
461         'A' Bufblock 0 next;
462         'X' 4 start;
463         'X' 8 end;
464         'X' 12 current;
465 };
466
467 defn
468 Bufblock(addr) {
469         complex Bufblock addr;
470         print(" next    ", addr.next\X, "\n");
471         print(" start   ", addr.start\X, "\n");
472         print(" end     ", addr.end\X, "\n");
473         print(" current ", addr.current\X, "\n");
474 };
475
476 sizeofWord = 8;
477 aggr Word
478 {
479         'X' 0 s;
480         'A' Word 4 next;
481 };
482
483 defn
484 Word(addr) {
485         complex Word addr;
486         print(" s       ", addr.s\X, "\n");
487         print(" next    ", addr.next\X, "\n");
488 };
489
490 sizeofEnvy = 8;
491 aggr Envy
492 {
493         'X' 0 name;
494         'A' Word 4 values;
495 };
496
497 defn
498 Envy(addr) {
499         complex Envy addr;
500         print(" name    ", addr.name\X, "\n");
501         print(" values  ", addr.values\X, "\n");
502 };
503
504 complex Envy envy;
505 sizeofRule = 44;
506 aggr Rule
507 {
508         'X' 0 target;
509         'A' Word 4 $tail;
510         'X' 8 recipe;
511         'd' 12 attr;
512         'd' 14 line;
513         'X' 16 file;
514         'A' Word 20 alltargets;
515         'D' 24 rule;
516         'A' Reprog 28 pat;
517         'X' 32 prog;
518         'A' Rule 36 chain;
519         'A' Rule 40 next;
520 };
521
522 defn
523 Rule(addr) {
524         complex Rule addr;
525         print(" target  ", addr.target\X, "\n");
526         print(" $tail   ", addr.$tail\X, "\n");
527         print(" recipe  ", addr.recipe\X, "\n");
528         print(" attr    ", addr.attr, "\n");
529         print(" line    ", addr.line, "\n");
530         print(" file    ", addr.file\X, "\n");
531         print(" alltargets      ", addr.alltargets\X, "\n");
532         print(" rule    ", addr.rule, "\n");
533         print(" pat     ", addr.pat\X, "\n");
534         print(" prog    ", addr.prog\X, "\n");
535         print(" chain   ", addr.chain\X, "\n");
536         print(" next    ", addr.next\X, "\n");
537 };
538
539 complex Rule rules;
540 complex Rule metarules;
541 complex Rule patrule;
542 sizeofArc = 64;
543 aggr Arc
544 {
545         'd' 0 flag;
546         'X' 4 n;
547         'A' Rule 8 r;
548         'X' 12 stem;
549         'X' 16 prog;
550         'a' 20 match;
551         'A' Arc 60 next;
552 };
553
554 defn
555 Arc(addr) {
556         complex Arc addr;
557         print(" flag    ", addr.flag, "\n");
558         print(" n       ", addr.n\X, "\n");
559         print(" r       ", addr.r\X, "\n");
560         print(" stem    ", addr.stem\X, "\n");
561         print(" prog    ", addr.prog\X, "\n");
562         print(" match   ", addr.match, "\n");
563         print(" next    ", addr.next\X, "\n");
564 };
565
566 sizeofNode = 20;
567 aggr Node
568 {
569         'X' 0 name;
570         'D' 4 time;
571         'u' 8 flags;
572         'A' Arc 12 prereqs;
573         'A' Node 16 next;
574 };
575
576 defn
577 Node(addr) {
578         complex Node addr;
579         print(" name    ", addr.name\X, "\n");
580         print(" time    ", addr.time, "\n");
581         print(" flags   ", addr.flags, "\n");
582         print(" prereqs ", addr.prereqs\X, "\n");
583         print(" next    ", addr.next\X, "\n");
584 };
585
586 sizeofJob = 40;
587 aggr Job
588 {
589         'A' Rule 0 r;
590         'A' Node 4 n;
591         'X' 8 stem;
592         'X' 12 match;
593         'A' Word 16 p;
594         'A' Word 20 np;
595         'A' Word 24 t;
596         'A' Word 28 at;
597         'D' 32 nproc;
598         'A' Job 36 next;
599 };
600
601 defn
602 Job(addr) {
603         complex Job addr;
604         print(" r       ", addr.r\X, "\n");
605         print(" n       ", addr.n\X, "\n");
606         print(" stem    ", addr.stem\X, "\n");
607         print(" match   ", addr.match\X, "\n");
608         print(" p       ", addr.p\X, "\n");
609         print(" np      ", addr.np\X, "\n");
610         print(" t       ", addr.t\X, "\n");
611         print(" at      ", addr.at\X, "\n");
612         print(" nproc   ", addr.nproc, "\n");
613         print(" next    ", addr.next\X, "\n");
614 };
615
616 complex Job jobs;
617 sizeofSymtab = 16;
618 aggr Symtab
619 {
620         'd' 0 space;
621         'X' 4 name;
622         'X' 8 value;
623         'A' Symtab 12 next;
624 };
625
626 defn
627 Symtab(addr) {
628         complex Symtab addr;
629         print(" space   ", addr.space, "\n");
630         print(" name    ", addr.name\X, "\n");
631         print(" value   ", addr.value\X, "\n");
632         print(" next    ", addr.next\X, "\n");
633 };
634
635 S_VAR = 0;
636 S_TARGET = 1;
637 S_TIME = 2;
638 S_PID = 3;
639 S_NODE = 4;
640 S_AGG = 5;
641 S_BITCH = 6;
642 S_NOEXPORT = 7;
643 S_OVERRIDE = 8;
644 S_OUTOFDATE = 9;
645 S_MAKEFILE = 10;
646 S_MAKEVAR = 11;
647 S_EXPORTED = 12;
648 S_BULKED = 13;
649 S_WESET = 14;
650 S_INTERNAL = 15;
651 complex Word readenv:w;
652 complex Word encodenulls:w;
653 complex Word encodenulls:$head;
654 complex Envy exportenv:e;
655 complex Word exportenv:w;
656 complex Symtab exportenv:sy;
657 complex Dir dirtime:d;
658 complex Waitmsg waitfor:wm;
659 complex Bufblock execsh:buf;
660 complex Envy execsh:e;
661 complex Envy pipecmd:e;
662 complex Dir chgtime:sbuf;
663 complex Resub rcopy:match;
664 complex Dir mkdirstat:buf;