|
|
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.