Annotation of researchv10no/cmd/ccom/vax/gencode.h, revision 1.1

1.1     ! root        1: #include "mfile2.h"
        !             2: #include "setjmp.h"
        !             3: extern jmp_buf back;
        !             4: extern char *regnames[], *frameptr, *argptr;
        !             5: #define REGMASK 0x3f
        !             6: #define REGVAR 6
        !             7: /* these would be 3 and 3 respectively on the mac32, 3f and 6 on the vax */
        !             8: /* registers 0..REGVAR-1 are scratch */
        !             9: typedef struct {
        !            10:        unsigned char ans;
        !            11:        unsigned char regmask;
        !            12:        unsigned short flag;
        !            13: } ret;
        !            14: #define CC     1
        !            15: #define VALUE  2
        !            16: #define TOSTACK        4
        !            17: #define ASADDR 8
        !            18: #define SCRATCH        16
        !            19: #define ICON0  32
        !            20: #define ICON1  64
        !            21: #define ISREG  128
        !            22: #define DESTISLEFT     256
        !            23: #define CANINDIR       512
        !            24: #define FAILX  1024
        !            25: #define INDEX  2048
        !            26: #define FAIL0  4096
        !            27: #define FAIL (FAILX|FAIL0)
        !            28: #define USED   8192
        !            29: #define NOGOOD (FAIL|USED)
        !            30: #define AUTO   (16384) /* ans is auto incr/decr */
        !            31: #define FSTASG 0x8000  /* to Stasg, for Stasg */
        !            32: /* as param; as return
        !            33:  * CC just need the condition codes; condition codes are valid
        !            34:  * VALUE need the value (for incr/decr.  as opposed to just the side effect)
        !            35:  * TOSTACK put the result on the stack
        !            36:  * ASADDR as an address, for various weird environments (calls, extzv, ...)
        !            37:  * SCRATCH ; the result is in a scratch place
        !            38:  * ICON0 ; the result is the constant 0
        !            39:  * ICON1 ; the result is the constant 1
        !            40:  * ISREG ; the result is in a register
        !            41:  * DESTISLEFT put the result in the left operand (asg ops)
        !            42:  * CANINDIR ; the result can be indirected through
        !            43:  * FAIL ; there is no result, for we ran out of registers
        !            44:  * INDEX ; some size-dependent addressing mode was used, so watch it
        !            45:  * FAIL0 ; we ran out of register 0
        !            46:  * USED plan to use result; don't re-use, as in 3+(*p++=*q++), register p, q
        !            47: /* ASADDR is never used with a dest, and is always VALUE|ASADDR */
        !            48: ret doit(), allocreg(), specialreg(), indir(), tostack(), indirit(), simpler(),
        !            49:        alloctmp(), checksize(), addrsimp();
        !            50: 
        !            51: #define LEFT 1
        !            52: #define RIGHT 2
        !            53: char *genjmp(), *genjbc();
        !            54: #define BUF 256
        !            55: extern char bufs[][BUF];
        !            56: extern char *buf, *bufend;
        !            57: extern char prbuf[];
        !            58: char *prptr;
        !            59: #define done(s, n, rm) s.ans = (buf - bufs[0])/BUF; buf += BUF; s.flag = n; s.regmask = rm; if(buf >= bufend) overr(); return(s)
        !            60: #define str(s) bufs[s.ans]
        !            61: 
        !            62: enum op { Andeq = 1, And, Cmp, Comop, Decr, Diveq, Div, Xoreq, Xor,
        !            63:        Incr, Lseq, Ls, Minuseq, Minus, Modeq, Mod, Muleq, Mul, Oreq,
        !            64:        Or, Pluseq, Plus, Rseq, Rs, Asg, Cm, Call, Stcall, Stasg, Compl,
        !            65:        Conv, Genbr, Genlab, Genubr, Star, Addr, Ucall, Uminus, Ustcall,
        !            66:        Init, Funarg, Fld, Starg, Auto, Reg, Name, Param, Icon, Snode,
        !            67:        Qnode, Rnode};
        !            68: enum type { Tpoint, Tchar, Tuchar, Tshort, Tushort, Tint, Tuint, Tlong,
        !            69:        Tulong, Tfloat, Tdouble, Tstruct, Tvoid};
        !            70: typedef struct node {
        !            71:        enum op op;
        !            72:        enum type type;
        !            73:        struct node *left, *right;
        !            74:        char *name;
        !            75:        int lval, rval, label, lop;
        !            76:        int stsize, argsize;
        !            77: } mnod;
        !            78: 
        !            79: mnod myt[];
        !            80: mnod *copytree(), *gimmenode();
        !            81: extern int ntree, regvar, Pflag, bbcount;
        !            82: #define debugpr(s) /*printf(s), prtree(svq), putchar('\n')*/

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.