|
|
1.1 root 1: #include "mfile2.h"
2: #include "setjmp.h"
3: extern jmp_buf back;
4: extern char *regnames[], *frameptr, *argptr;
5: #ifdef M32
6: #define REGMASK 0x3
7: #define REGVAR 3
8: #define UP ('A' - 'a')
9: #define VAX 0
10: #else if VAX
11: #define REGMASK 0x3f
12: #define REGVAR 6
13: #define M32 0
14: #endif
15: /* these would be 3 and 3 respectively on the mac32, 3f and 6 on the vax */
16: /* registers 0..REGVAR-1 are scratch */
17: typedef struct {
18: unsigned char ans;
19: unsigned char regmask;
20: unsigned short flag;
21: } ret;
22: #define CC 1
23: #define VALUE 2
24: #define TOSTACK 4
25: #define ASADDR 8
26: #define SCRATCH 16
27: #define ICON0 (VAX? 32: 0)
28: #define ICON1 (VAX? 64: 0)
29: #define ISREG 128
30: #define DESTISLEFT 256
31: #define CANINDIR 512
32: #define FAILX 1024
33: #define INDEX (VAX? 2048: 0)
34: #define FAIL0 4096
35: #define FAIL (FAILX|FAIL0)
36: #define USED (VAX?8192:0)
37: #define NOGOOD (FAIL|USED)
38: #define AUTO (16384) /* ans is auto incr/decr */
39: /* as param; as return
40: * CC just need the condition codes; condition codes are valid
41: * VALUE need the value (for incr/decr. as opposed to just the side effect)
42: * TOSTACK put the result on the stack
43: * ASADDR as an address, for various weird environments (calls, extzv, ...)
44: * SCRATCH ; the result is in a scratch place
45: * ICON0 ; the result is the constant 0
46: * ICON1 ; the result is the constant 1
47: * ISREG ; the result is in a register
48: * DESTISLEFT put the result in the left operand (asg ops)
49: * CANINDIR ; the result can be indirected through
50: * FAIL ; there is no result, for we ran out of registers
51: * INDEX ; some size-dependent addressing mode was used, so watch it
52: * FAIL0 ; we ran out of register 0
53: * USED plan to use result; don't re-use, as in 3+(*p++=*q++), register p, q
54: /* ASADDR is never used with a dest, and is always VALUE|ASADDR */
55: ret doit(), allocreg(), specialreg(), indir(), tostack(), indirit(), simpler(),
56: alloctmp(), checksize();
57:
58: #define LEFT 1
59: #define RIGHT 2
60: char *genjmp();
61:
62: #define BUF 64 /* overflow unchecked */
63: char bufs[256][BUF];
64: char *buf, *bufend;
65: char prbuf[10240];
66: char *prptr;
67: #define done(s, n, rm) s.ans = (buf - bufs[0])/BUF; buf += BUF; s.flag = n; s.regmask = rm; if(buf >= bufend) cerror("buf ov"); return(s)
68: #define str(s) bufs[s.ans]
69:
70: NODE *copytree(), *gimmenode(), *convnodol();
71: extern int ntree, regvar, Pflag, bbcount;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.