Annotation of researchv10no/cmd/PDP11/11c/c1.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * C code generator header
                      3:  */
                      4: 
                      5: #include <stdio.h>
                      6: #include <setjmp.h>
                      7: 
                      8: #define        LTYPE   long    /* change to int for no long consts */
                      9: #define        NCPS    8
                     10: #define        NULL    0
                     11: #define        TNULL   (union tree *)NULL
                     12: #define        UNS(x)  ((unsigned short)(x))
                     13: 
                     14: /*
                     15:  *  Tree node for unary and binary
                     16:  */
                     17: struct tnode {
                     18:        int     op;
                     19:        int     type;
                     20:        int     degree;
                     21:        union   tree *tr1;
                     22:        union   tree *tr2;
                     23: };
                     24: 
                     25: /*
                     26:  * tree names for locals
                     27:  */
                     28: struct tname {
                     29:        int     op;
                     30:        int     type;
                     31:        char    class;
                     32:        char    regno;
                     33:        int     offset;
                     34:        int     nloc;
                     35: };
                     36: 
                     37: /*
                     38:  * tree names for externals
                     39:  */
                     40: struct xtname {
                     41:        int     op;
                     42:        int     type;
                     43:        char    class;
                     44:        char    regno;
                     45:        int     offset;
                     46:        char    name[NCPS];
                     47: };
                     48: 
                     49: /*
                     50:  * short constants
                     51:  */
                     52: struct tconst {
                     53:        int     op;
                     54:        int     type;
                     55:        int     value;
                     56: };
                     57: 
                     58: /*
                     59:  * long constants
                     60:  */
                     61: struct lconst {
                     62:        int     op;
                     63:        int     type;
                     64:        LTYPE   lvalue;
                     65: };
                     66: 
                     67: /*
                     68:  * Floating constants
                     69:  */
                     70: struct ftconst {
                     71:        int     op;
                     72:        int     type;
                     73:        int     value;
                     74:        double  fvalue;
                     75: };
                     76: 
                     77: /*
                     78:  * Node used for field assignments
                     79:  */
                     80: struct fasgn {
                     81:        int     op;
                     82:        int     type;
                     83:        int     degree;
                     84:        union   tree *tr1;
                     85:        union   tree *tr2;
                     86:        int     mask;
                     87: };
                     88: 
                     89: union  tree {
                     90:        struct  tnode t;
                     91:        struct tname n;
                     92:        struct  xtname x;
                     93:        struct  tconst c;
                     94:        struct  lconst l;
                     95:        struct  ftconst f;
                     96:        struct  fasgn F;
                     97: };
                     98: 
                     99: struct optab {
                    100:        char    tabdeg1;
                    101:        char    tabtyp1;
                    102:        char    tabdeg2;
                    103:        char    tabtyp2;
                    104:        char    *tabstring;
                    105: };
                    106: 
                    107: struct table {
                    108:        int     tabop;
                    109:        struct  optab *tabp;
                    110: };
                    111: 
                    112: struct instab {
                    113:        int     iop;
                    114:        char    *str1;
                    115:        char    *str2;
                    116: };
                    117: 
                    118: struct swtab {
                    119:        int     swlab;
                    120:        int     swval;
                    121: };
                    122: 
                    123: char   maprel[];
                    124: char   notrel[];
                    125: int    nreg;
                    126: int    isn;
                    127: int    line;
                    128: int    nerror;
                    129: struct table   cctab[];
                    130: struct table   efftab[];
                    131: struct table   regtab[];
                    132: struct table   sptab[];
                    133: struct table   lsptab[1];
                    134: struct instab  instab[];
                    135: struct instab  branchtab[];
                    136: int    opdope[];
                    137: char   *opntab[];
                    138: int    nstack;
                    139: int    nfloat;
                    140: struct tname   sfuncr;
                    141: char   *funcbase;
                    142: char   *curbase;
                    143: char   *coremax;
                    144: struct tconst czero, cone;
                    145: long   totspace;
                    146: int    regpanic;               /* set when SU register alg. fails */
                    147: int    panicposs;              /* set when there might be a need for regpanic */
                    148: jmp_buf        jmpbuf;
                    149: long   ftell();
                    150: char   *sbrk();
                    151: struct optab *match();
                    152: union  tree *optim();
                    153: union  tree *unoptim();
                    154: union  tree *pow2();
                    155: union  tree *tnode();
                    156: union  tree *sdelay();
                    157: union  tree *ncopy();
                    158: union  tree *getblk();
                    159: union  tree *strfunc();
                    160: union  tree *isconstant();
                    161: union  tree *tconst();
                    162: union  tree *hardlongs();
                    163: union  tree *lconst();
                    164: union  tree *acommute();
                    165: union  tree *lvfield();
                    166: union  tree *paint();
                    167: long   ftell();
                    168: 
                    169: /*
                    170:  * Some special stuff for long comparisons
                    171:  */
                    172: int    xlab1, xlab2, xop, xzero;
                    173: 
                    174: /*
                    175:        operators
                    176: */
                    177: #define        EOFC    0
                    178: #define        SEMI    1
                    179: #define        LBRACE  2
                    180: #define        RBRACE  3
                    181: #define        LBRACK  4
                    182: #define        RBRACK  5
                    183: #define        LPARN   6
                    184: #define        RPARN   7
                    185: #define        COLON   8
                    186: #define        COMMA   9
                    187: #define        FSEL    10
                    188: #define        FSELR   11
                    189: #define        FSELT   12
                    190: #define        FSELA   16
                    191: #define        ULSH    17
                    192: #define        ASULSH  18
                    193: 
                    194: #define        KEYW    19
                    195: #define        NAME    20
                    196: #define        CON     21
                    197: #define        STRING  22
                    198: #define        FCON    23
                    199: #define        SFCON   24
                    200: #define        LCON    25
                    201: #define        SLCON   26
                    202: 
                    203: #define        AUTOI   27
                    204: #define        AUTOD   28
                    205: #define        NULLOP  218
                    206: #define        INCBEF  30
                    207: #define        DECBEF  31
                    208: #define        INCAFT  32
                    209: #define        DECAFT  33
                    210: #define        EXCLA   34
                    211: #define        AMPER   35
                    212: #define        STAR    36
                    213: #define        NEG     37
                    214: #define        COMPL   38
                    215: 
                    216: #define        DOT     39
                    217: #define        PLUS    40
                    218: #define        MINUS   41
                    219: #define        TIMES   42
                    220: #define        DIVIDE  43
                    221: #define        MOD     44
                    222: #define        RSHIFT  45
                    223: #define        LSHIFT  46
                    224: #define        AND     47
                    225: #define        ANDN    55
                    226: #define        OR      48
                    227: #define        EXOR    49
                    228: #define        ARROW   50
                    229: #define        ITOF    51
                    230: #define        FTOI    52
                    231: #define        LOGAND  53
                    232: #define        LOGOR   54
                    233: #define        FTOL    56
                    234: #define        LTOF    57
                    235: #define        ITOL    58
                    236: #define        LTOI    59
                    237: #define        ITOP    13
                    238: #define        PTOI    14
                    239: #define        LTOP    15
                    240: 
                    241: #define        EQUAL   60
                    242: #define        NEQUAL  61
                    243: #define        LESSEQ  62
                    244: #define        LESS    63
                    245: #define        GREATEQ 64
                    246: #define        GREAT   65
                    247: #define        LESSEQP 66
                    248: #define        LESSP   67
                    249: #define        GREATQP 68
                    250: #define        GREATP  69
                    251: 
                    252: #define        ASPLUS  70
                    253: #define        ASMINUS 71
                    254: #define        ASTIMES 72
                    255: #define        ASDIV   73
                    256: #define        ASMOD   74
                    257: #define        ASRSH   75
                    258: #define        ASLSH   76
                    259: #define        ASAND   77
                    260: #define        ASOR    78
                    261: #define        ASXOR   79
                    262: #define        ASSIGN  80
                    263: #define        TAND    81
                    264: #define        LTIMES  82
                    265: #define        LDIV    83
                    266: #define        LMOD    84
                    267: #define        ASANDN  85
                    268: #define        LASTIMES 86
                    269: #define        LASDIV  87
                    270: #define        LASMOD  88
                    271: 
                    272: #define        QUEST   90
                    273: #define        MAX     93
                    274: #define        MAXP    94
                    275: #define        MIN     95
                    276: #define        MINP    96
                    277: #define        LLSHIFT 91
                    278: #define        ASLSHL  92
                    279: #define        SEQNC   97
                    280: #define        CALL1   98
                    281: #define        CALL2   99
                    282: #define        CALL    100
                    283: #define        MCALL   101
                    284: #define        JUMP    102
                    285: #define        CBRANCH 103
                    286: #define        INIT    104
                    287: #define        SETREG  105
                    288: #define        LOAD    106
                    289: #define        PTOI1   107
                    290: #define        ITOC    109
                    291: #define        RFORCE  110
                    292: 
                    293: /*
                    294:  * Intermediate code operators
                    295:  */
                    296: #define        BRANCH  111
                    297: #define        LABEL   112
                    298: #define        NLABEL  113
                    299: #define        RLABEL  114
                    300: #define        STRASG  115
                    301: #define        STRSET  116
                    302: #define        UDIV    117
                    303: #define        UMOD    118
                    304: #define        ASUDIV  119
                    305: #define        ASUMOD  120
                    306: 
                    307: #define        BDATA   200
                    308: #define        PROG    202
                    309: #define        DATA    203
                    310: #define        BSS     204
                    311: #define        CSPACE  205
                    312: #define        SSPACE  206
                    313: #define        SYMDEF  207
                    314: #define        SAVE    208
                    315: #define        RETRN   209
                    316: #define        EVEN    210
                    317: #define        PROFIL  212
                    318: #define        SWIT    213
                    319: #define        EXPR    214
                    320: #define        SNAME   215
                    321: #define        RNAME   216
                    322: #define        ANAME   217
                    323: #define        SETSTK  219
                    324: #define        SINIT   220
                    325: #define        GLOBAL  221
                    326: #define        C3BRANCH        222
                    327: 
                    328: /*
                    329:  *     types
                    330:  */
                    331: #define        INT     0
                    332: #define        CHAR    1
                    333: #define        FLOAT   2
                    334: #define        DOUBLE  3
                    335: #define        STRUCT  4
                    336: #define        RSTRUCT 5
                    337: #define        LONG    6
                    338: #define        UNSIGN  7
                    339: #define        UNCHAR  8
                    340: #define        UNLONG  9
                    341: #define        VOID    10
                    342: 
                    343: #define        TYLEN   2
                    344: #define        TYPE    017
                    345: #define        XTYPE   (03<<4)
                    346: #define        PTR     020
                    347: #define        FUNC    040
                    348: #define        ARRAY   060
                    349: 
                    350: /*
                    351:        storage classes
                    352: */
                    353: #define        KEYWC   1
                    354: #define        MOS     10
                    355: #define        AUTO    11
                    356: #define        EXTERN  12
                    357: #define        STATIC  13
                    358: #define        REG     14
                    359: #define        STRTAG  15
                    360: #define        ARG     16
                    361: #define        OFFS    20
                    362: #define        XOFFS   21
                    363: #define        SOFFS   22
                    364: 
                    365: /*
                    366:        Flag    bits
                    367: */
                    368: 
                    369: #define        BINARY  01
                    370: #define        LVALUE  02
                    371: #define        RELAT   04
                    372: #define        ASSGOP  010
                    373: #define        LWORD   020
                    374: #define        RWORD   040
                    375: #define        COMMUTE 0100
                    376: #define        RASSOC  0200
                    377: #define        LEAF    0400
                    378: #define        CNVRT   01000

unix.superglobalmegacorp.com

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